标题: 单片机源程序一直有两个错误,求大家帮忙改正 [打印本页]

作者: shenlanzhou    时间: 2021-6-16 11:43
标题: 单片机源程序一直有两个错误,求大家帮忙改正
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define delayNOPX(){_nop_();_nop_();_nop_();_nop_();}
  6. sbit BEEP =P1^0;
  7. sbit LCD_RS =P2^0;
  8. sbit LCD_RW =P2^1;
  9. sbit LCD_EN =P2^2;
  10. void DelayMS(uint ms);
  11. bit LCD_Busy();
  12. void LCD_Pos(uchar);
  13. void LCD_Wcmd(uchar);
  14. void lcd_Wdat(uchar);
  15.   //标题字符串
  16.   char code Title_Text[]={"-phone code-"}
  17.   //键盘序号与键盘符号映射表
  18.   uchar code Key_Table[]={'1','2','3','4','5','6','7','8','9','0','#'};
  19.     //键盘拨号数字缓冲
  20.         uchar Dial_Code_Str[]={""};uchar KeyNo=0Xff;int tCount =0;
  21.         //延时
  22.         void DelayMS(uint x)
  23.         {
  24.         uchar i;
  25.         while(x--)
  26.         for(i=0;i<120;i++);
  27.         }
  28.         //在LCD指定的行上显示字符串
  29.         Void display_string(uchar*str,uchar klineNo)
  30.         {
  31.         uchar k;
  32.         LCD_pos(lineNo);
  33.         for (k=0;k<16;k++)
  34.         LCD_wdat(str[k]);
  35.         }
  36.         //1602LCD显示控制函数bit
  37. LCD_busy()void LCD_wcmd(uchar cmd)void
  38. LCD_wdat(uchar str)void LCD_init()void
  39. LCD_pos(uchar pos)
  40.     //T0控制按键声音
  41.         Void T0_INT() interrupt 1
  42.         {
  43.         TH0 = -600/256;
  44.         TL0        = -600%256;
  45.         BEEP =~BEEP;
  46.         If (++tcount == 200)
  47.         {
  48.         Tcount 0;tr0 =0;
  49.         }
  50.         }
  51.         //键盘扫描
  52.         Uchar getkey()
  53.         {
  54.         Uchar i,j,k = 0;
  55.         Uchar keyscancode[]={0xef,0xdf,0xbf,0x7f};//键盘扫描码
  56.         Uchar keyscancode[]={0xee,0xed,0xeb,0xde,0xdd,0xdb,0xbe,0xbd,0xbb,0x7e,0x7d,0x7b};//键盘特征码
  57.         P3= 0x0f;
  58.         //扫描键盘获取按键序号
  59.         If(p3!=0x0f)
  60.         {
  61.         For (i=0;i<4;i++)
  62.         {
  63.         p3 =keyscancode[i];
  64.         For (j=0;j<3;j++)
  65.         {
  66.         k =i*3+j;
  67.         If (p3==keycodetable[k])
  68.         return k;
  69.         }
  70.         }
  71.         }
  72.         else return oxff;
  73.         }
  74.         //主程序
  75.         Void main()
  76.         {
  77.         Uchar i =0,j;
  78.         p0 = p2 = p1 =0xff;
  79.         IE =0x82;TOMD =0x01;
  80.         LCD_init();//初始化LCD
  81.         Display_string(title_text,0x00);//在第一行显示标题
  82.         While(1)
  83.         {
  84.         KeyNo =getkey();//获取按键
  85.         If(keyNo ==0xff) cont inue;//无按键时继续扫描
  86.         If(++i ==11)//超过11位时清空
  87.         {
  88.         for(j=0;j<16;j++) dial_code_str[j]=' ';i=0;
  89.         }
  90.         Dial_code_str[i]=key_table[keyNo];//讲待显示字符放入待显示的拨号串中
  91.         Display_string(dial_code_str,0x40);//在第二行显示号码
  92.         Tr0 =1;//T0中断控制按键声音
  93.         While(getkey()!=0xff);//等待释放
  94.         }
  95.         }
复制代码

作者: glinfei    时间: 2021-6-16 14:38
我理解是你在让我练习肉眼编译的能力。另外,你先把那个标题字符串赋值后边加上分号。
作者: shumivan    时间: 2021-6-16 14:55
起码吧提示的错误信息也发上来吧
作者: Kxuan163    时间: 2021-6-16 14:58
shumivan 发表于 2021-6-16 14:55
起码吧提示的错误信息也发上来吧

应该如此。
以便于别人帮你找出错误原因。
作者: kx180    时间: 2021-6-16 15:20
那个标题字符串赋值后边加上分号
作者: shenlanzhou    时间: 2021-6-16 15:35
Kxuan163 发表于 2021-6-16 14:58
应该如此。
以便于别人帮你找出错误原因。

这是编译显示

IMG20210616152537.jpg (1.55 MB, 下载次数: 41)

IMG20210616152537.jpg

作者: shenlanzhou    时间: 2021-6-16 15:35
这个是我的编译显示

IMG20210616152537.jpg (1.55 MB, 下载次数: 29)

IMG20210616152537.jpg

作者: 黄youhui    时间: 2021-6-16 18:13
你这if关键字有点意思  
      
If(keyNo ==0xff) cont inue;//无按键时继续扫描
If(++i ==11)//超过11位时清空
作者: 开心就好hhhh    时间: 2021-6-17 10:19
你的25行和16 行都少加了分号,编译那里已经提醒的很明显了
作者: dzc3458    时间: 2021-10-17 21:02
一个地方少了个分号,一个地方定义出问题了,具体什么问题要发图




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1