久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2074|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)控制1602液晶的程序,想問下錯(cuò)哪了

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
編譯沒通過,求大神幫忙看下
  1. #include<reg51.h>
  2. #include<intrins.h>

  3. unsigned char code a[]={0xfe,0xfd,0xfb,0xf7};
  4. sbit ALAM=P2^5;
  5. sbit open_led=P2^3;
  6. unsigned char countt0,second;
  7. unsigned char code name[]= {"===Coded Locked==="};
  8. unsigned char code start_line[]= {"password:"};
  9. unsigned char code Error[]={"error"};
  10. unsigned char code codepass[]={"pass"};
  11. unsigned char code LockOpen[]={"open"};
  12. char InputData[6];
  13. unsigned char CurrentPassword[6]={6,5,4,3,2,1};
  14. unsigned char N=0;
  15. unsigned char ErrorCont;

  16. sbit  LcdRS=P2^0;
  17. sbit  LcdRW=P2^1;
  18. sbit  LcdEn=P2^2;
  19. sfr   LcdIO=0x80;

  20. #define LCD_COMMAND 0;
  21. #define LCD_DATA 1;
  22. #define LCD_CLEAR_SCREEN 0x01;
  23. #define LCD_HOME 0x02;






  24. void Delay_short(unsigned int n)
  25. {
  26.   unsigned int i;
  27.   for(i=0;i<n;i++);
  28. }

  29. void Delay_long(unsigned char N)

  30. {
  31.   unsigned char i;
  32.   unsigned int j;
  33.   for(i=0;i<N;i++)
  34.     for(j=0;j<315;j++);
  35. }

  36. void Delay5Ms(void)
  37. {
  38.   unsigned int TempCyc=5552;
  39.   while(TempCyc--);
  40. }

  41. void Delay400Ms(void)
  42. {
  43.   unsigned char TempCycA=5;
  44.   unsigned int TempCycB;
  45.   while(TempCycA--)
  46.    {
  47.      TempCycB=7269;
  48.      while(TempCycB--);
  49.    }
  50. }








  51. void LCD_Write(bit style,unsigned char input)
  52. {
  53.    LcdRS=style;
  54.    LcdRW=0;
  55.    LcdIO=input;
  56.    Delay_short(10);
  57.    LcdEn=1;
  58.    Delay_short(10);
  59.    LcdEn=0;
  60. }


  61. void LCD_Initial()
  62. {
  63.   Delay_long(6);
  64.   LCD_Write(LCD_COMMAND,0x38);
  65.   LCD_Write(LCD_COMMAND,0x38);
  66.   LCD_Write(LCD_COMMAND,0x38);
  67.   Delay_short(2);
  68.   LCD_Write(LCD_COMMAND,0x0c);
  69.   Delay_short(2);
  70.   LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);
  71.   Delay_short(100);
  72.   LCD_Write(LCD_COMMAND,0x06);
  73. }


  74. //液晶字符輸入定位
  75. void GotoXY(unsigned char x,unsigned char y)
  76. {
  77.   unsigned char address;
  78.   if(y==1)
  79.     address=0x80+x;
  80.   else
  81.     address=0xc0+x;
  82.   LCD_Write(LCD_COMMAND,address);
  83. }


  84. //字符串輸出液晶顯示
  85. void Print(unsigned char *str)
  86. {
  87.   while(*str!='\0')
  88.   {
  89.   LCD_Write(LCD_DATA,*str);
  90.   str++;
  91.   }
  92. }

  93. //按鍵值編碼為數(shù)值的程序
  94. unsigned char coding(unsigned char m)
  95. {
  96. unsigned char k;
  97. switch(m)
  98. {
  99.   case (0x18):k='*';break;
  100.   case (0x28):k=0;break;
  101.   case (0x48):k='#';break;
  102.   case (0x88):k='D';break;
  103.   case (0x14):k=3;break;
  104.   case (0x24):k=6;break;
  105.   case (0x44):k=9;break;
  106.   case (0x84):k='C';break;
  107.   case (0x12):k=2;break;
  108.   case (0x22):k=5;break;
  109.   case (0x42):k=8;break;
  110.   case (0x82):k='B';break;
  111.   case (0x11):k=1;break;
  112.   case (0x21):k=4;break;
  113.   case (0x41):k=7;break;
  114.   case (0x81):k='A';break;
  115. }
  116.   return(k);
  117. }

  118. //按鍵檢測(cè)并返回健值
  119. unsigned char keynum(void)
  120. {
  121. unsigned char row,col,i;
  122. P3=0xf0;
  123. if((P3&0xf0)!=0xf0)
  124.   {
  125.     Delay5Ms();
  126.     Delay5Ms();
  127.     if((P3&0xf0)!=0xf0)
  128.      {
  129.       row=P3^0xf0;
  130.       i=0;
  131.       P3=a[i];
  132.       while(i<4)
  133.         {
  134.           if((P3&0xf0)!=0xf0)
  135.            {
  136.              col=~(P3&0xff);
  137.              break;
  138.            }
  139.           else
  140.            {
  141.             i++;
  142.             P3=a[i];
  143.            }
  144.         }
  145.      }
  146.   else
  147.      return 0xff;

  148.     while((P3&0xf0)!=0xf0);
  149.     return (row|col);  
  150.   }
  151. else return 0xff;
  152. }

  153. //一聲提示音表示有效輸入
  154. void OneAlam(void)
  155. {
  156.   ALAM=0;
  157.   Delay5Ms();
  158.   ALAM=1;
  159. }
  160. //二聲提示音表示操作成功
  161. void TwoAlam(void)
  162. {
  163.    ALAM=0;
  164.   Delay5Ms();
  165.   ALAM=1;
  166.   Delay5Ms();
  167.    ALAM=0;
  168.   Delay5Ms();
  169.   ALAM=1;
  170. }
  171. //三聲提示音表示錯(cuò)誤
  172. void ThreeAlam(void)
  173. {
  174.   ALAM=0;
  175.   Delay5Ms();
  176.   ALAM=1;
  177.   Delay5Ms();
  178.   ALAM=0;
  179.   Delay5Ms();
  180.   ALAM=1;
  181.   Delay5Ms();
  182.   ALAM=0;
  183.   Delay5Ms();
  184.   ALAM=1;
  185. }
  186. //輸入密碼超過三遍報(bào)警
  187. void Alam_KeyUnable(void)
  188. {
  189.   P3=0x00;
  190.   {
  191.     ALAM=~ALAM;
  192.     Delay5Ms();
  193.   }
  194. }


  195. //取消所有操作ESC
  196. void Cancel(void)
  197. {
  198.   unsigned char i;
  199.   GotoXY(0,2);
  200.   Print(start_line);
  201.   TwoAlam();
  202.   for(i=0;i<6;i++)
  203.      InputData[i]=0;
  204.   ALAM=1;
  205.   ErrorCont=0;
  206.   open_led=1;
  207.   N=0;
  208. }

  209. //確認(rèn)鍵ok
  210. void Ensure(void)
  211. {
  212.   unsigned char i,j;
  213.   for(i=0;i<6;)
  214.   {
  215.      if(CurrentPassword[i]==InputData[i])
  216.         i++;
  217.      else
  218.       {
  219.         ErrorCont++;
  220.         if(ErrorCont==3)
  221.          {
  222.            GotoXY(0,2);
  223.            Print("KeypadLocked!");
  224.            TR0=1;
  225.            do
  226.               Alam_KeyUnable();
  227.            while(TR0);
  228.            return;
  229.          }
  230.         break;
  231.       }
  232.   }
  233.   if(i==6)
  234.   {
  235.     GotoXY(0,2);
  236.     Print(codepass);
  237.     Delay400Ms();
  238.     Delay400Ms();
  239.     GotoXY(0,2);
  240.     Print(LockOpen);
  241.     TwoAlam();
  242.     open_led=0;
  243.     for(j=0;j<6;j++)
  244.         InputData[i]=0;
  245.     while(1);
  246.    }
  247.    else
  248.    {
  249.      GotoXY(0,2);
  250.      Print(Error);
  251.      ThreeAlam();
  252.      Delay400Ms();
  253.      GotoXY(0,2);
  254.      Print(start_line);
  255.      for(j=0;j<6;j++)
  256.        InputData[i]=0;
  257.    }
  258.   N=0;
  259. }

  260. //主函數(shù)
  261. void main()
  262. {
  263.   unsigned char KEY_SCAN,NUM;
  264.   unsigned char j;
  265.   P3=0xff;
  266.   TMOD=0x11;
  267.   TL0=0xB0;
  268.   TH0=0x3C;
  269.   EA=1;
  270.   ET0=1;
  271.   TR0=0;
  272.   Delay400Ms();
  273.   LCD_Initial();
  274.   GotoXY(0,1);
  275.   Print(name);
  276.   GotoXY(0,2);
  277.   Print(start_line);
  278.   GotoXY(9,2);
  279.   LCD_Write(LCD_COMMAND,0x0f);
  280.   Delay5Ms();
  281.   N=0;
  282.   while(1)
  283.    {
  284.       if(!TR0)
  285.        KEY_SCAN=keynum();
  286.       else
  287.        KEY_SCAN=0xff;
  288.       if(KEY_SCAN!=0xff)
  289.       {
  290.          NUM=coding(KEY_SCAN);
  291.          switch(NUM)
  292.          {
  293.            case 'A':    ;  break;
  294.            case 'B':    ;  break;
  295.            case 'C':    ;  break;
  296.            case 'D':    ;  break;
  297.            case '*':Cancel();  break;
  298.            case '#':Ensure();  break;
  299.            default:
  300.              {
  301.                if(N<6)
  302.                 {
  303.                   OneAlam();
  304.                   for(j=0;j<=N;j++)
  305.                    {
  306.                      GotoXY(9+j,2);
  307.                      LCD_Write(LCD_DATA,'*');
  308.                    }
  309.                   InputData[N]=NUM;
  310.                    N++;
  311.                 }
  312.                 else
  313.                   N=6;
  314.                 break;
  315.              }
  316.          }
  317.       }
  318.    }
  319. }


  320. //定時(shí)器0中斷
  321. void time0_int(void) interrupt 1
  322. {
  323.   TL0=0xB0;
  324.   TH0=0x3C;
  325.   countt0++;
  326.   if(countt0==20)
  327.    {
  328.      countt0=0;
  329.      second++;
  330.      if(second==10)
  331.      {
  332.        P3=0xf0;
  333.        TL0=0xB0;
  334.        TH0=0x3C;
  335.        second=0;
  336.        ErrorCont=0;
  337.        GotoXY(0,2);
  338.        Print(start_line);
  339.        TR0=0;
  340.      }

  341.    }
  342. }
復(fù)制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:155507 發(fā)表于 2020-1-16 19:26 | 只看該作者
給你改了一下試試。
  1. sbit  LcdRS=P2^0;
  2. sbit  LcdRW=P2^1;
  3. sbit  LcdEn=P2^2;
  4. sfr   LcdIO=0x80;  // P0

  5. #define LCD_COMMAND 0          // --->不用加分號(hào)
  6. #define LCD_DATA    1          // --->不用加分號(hào)
  7. #define LCD_CLEAR_SCREEN 0x01  // --->不用加分號(hào)
  8. #define LCD_HOME 0x02          // --->不用加分號(hào)
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

板凳
ID:584814 發(fā)表于 2020-1-16 21:19 | 只看該作者
#define LCD_COMMAND 0;
#define LCD_DATA 1;
#define LCD_CLEAR_SCREEN 0x01;
#define LCD_HOME 0x02;
改成這樣試試:
bit LCD_COMMAND=0;
bit LCD_DATA=1;
unsigned char LCD_CLEAR_SCREEN=0x01;
unsigned char LCD_HOME=0x02;
回復(fù)

使用道具 舉報(bào)

地板
ID:282850 發(fā)表于 2020-1-17 09:14 | 只看該作者
正確答案:
#define LCD_COMMAND 0;
#define LCD_DATA 1;
#define LCD_CLEAR_SCREEN 0x01;
#define LCD_HOME 0x02;
這些凡是#define的,后邊的";"全刪除。因?yàn)?br /> LCD_Write(LCD_COMMAND,0x0f);
這句編譯時(shí)被替換成 LCD_Write(0;,0x0f); 0后邊有個(gè)“;”明顯錯(cuò)誤。編譯錯(cuò)誤也指的是這個(gè)“;”


回復(fù)

使用道具 舉報(bào)

5#
ID:282850 發(fā)表于 2020-1-17 09:27 | 只看該作者
再啰嗦一下,舉個(gè)例子:
#define DQ1   P1DIR |=BIT5; P1OUT=BIT5
注意中間有個(gè)“;” 程序中拉高DQ寫成
....
DQ1;
...

如果寫成
#define DQ1   P1DIR |=BIT5; P1OUT=BIT5;
程序中拉高DQ寫成
....
DQ1
...
這兩種都沒問題,但是第一種在程序里DQ1;看上去很順眼。所以養(yǎng)成好習(xí)慣是#define后邊不帶“;”
#define DQ1 P1DIR |=BIT5; P1OUT=BIT5
程序中拉高DQ寫
....
DQ1;
...

回復(fù)

使用道具 舉報(bào)

6#
ID:324844 發(fā)表于 2020-1-17 10:28 | 只看該作者
angmall 發(fā)表于 2020-1-16 19:26
給你改了一下試試。

感謝大佬,才看到
回復(fù)

使用道具 舉報(bào)

7#
ID:324844 發(fā)表于 2020-1-17 10:29 | 只看該作者
man1234567 發(fā)表于 2020-1-16 21:19
#define LCD_COMMAND 0;
#define LCD_DATA 1;
#define LCD_CLEAR_SCREEN 0x01;

老鐵,我知道錯(cuò)哪了,你這樣也可以666
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 一级黄色毛片 | 日韩在线一区二区 | 久久精品亚洲欧美日韩精品中文字幕 | 免费毛片www com cn | 国产免费va | 久久国产综合 | 日韩不卡一区二区 | 欧洲亚洲一区二区三区 | 午夜免费观看体验区 | 精品国产伦一区二区三区观看方式 | 免费在线观看h片 | 欧美在线一区二区视频 | 国产精品久久久久久久久久久久久 | 青青草这里只有精品 | 国产美女在线观看 | 国产免费一级片 | 亚洲电影一区二区三区 | 欧美中文字幕一区二区三区亚洲 | 成人国产精品久久 | 日韩成人免费视频 | 国产精品国产精品 | 日韩和的一区二在线 | 色吊丝在线 | 日韩视频在线观看一区二区 | 在线伊人网 | 91人人澡人人爽 | 欧洲成人免费视频 | 精品国产黄a∨片高清在线 成人区精品一区二区婷婷 日本一区二区视频 | 亚洲天堂久久新 | 伊人免费在线观看高清 | 国产精品亚洲成在人线 | 久久精品一区二区三区四区 | 成人av大全| 四虎影院在线观看免费视频 | 国产精品久久久久aaaa | 日韩精品一区二区三区在线观看 | 美女天天干 | 精品国产91| 天天看天天干 | 国产欧美在线观看 | 99精品国产一区二区三区 |