3999|8

34

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

学习(单片机C语言程序设计实训100例)遇到问题 未定义的标识符 请教解决办法! [复制链接]

单片机C语言程序设计实训100例——基于8051+Proteus仿真(第2版)

       04 1602LCD显示仿手机键盘按键字符  用Keil C51编译  出现错误 SHOW_MOBILE_KEY 未定义的标识符

           我在书本和网上查找  没有解决   在网上看 程序就是这样的   没有定义 SHOW_MOBILE_KEY

          请求给予指导     非常感谢!!!

//-----------------------------------------------------------------
// 主程序 
//-----------------------------------------------------------------
void main()
{
   INT8U Pre_KeyNo = -1;
   IE = 0x82;                         //使能T0中断
   TMOD = 0x01;                       //T0工作于模式1(16位模式)
   TH0 = - 50000 >> 8;                //定时50ms
   TL0 = - 50000 & 0xFF;
   Initialize_LCD();                  //液晶初始化
   //显示固定信息部分(初始显示ENG>表示输入英文字符序列)
   LCD_ShowString(0, 0, "Mobile KeyPad ");
   LCD_ShowString(1, 0, "ENG>         ");
   while(1)
   {   //有键按下则扫描,否则不进行任何处理
       if(KeyMatrix_Down()) Keys_Scan();  else continue;
       if(KeyNo == 0xFF) continue;
       //功能键处理(9[*]:切换英文/数字,11[#]:清除所有输入)
       if(KeyNo == 9 || KeyNo == 11)
       {  Function_Key_Process(); Beep(); continue;  }
       //如果是输入数字则直接显示
       if(!ENG_TEL) goto SHOW_MOBILE_KEY;
       //如果输入的不是英文字母则继续(英文字符在0~8号键,包括空格)
       if(KeyNo < 0 || KeyNo > 8) continue;
       //否则输入的是英文字符序列,以下代码将根据是否为同位按键进行相应处理
       if(Pre_KeyNo != KeyNo)       //按下新按键-----------------------
       {   Pre_KeyNo = KeyNo;       //保存当前按键
           Inner_Idx = 1;           //输入英文时内部索引起点为1
             }
       else           //否则按下的是相同位置按键-----------------------
       {   //同位按键时间间隔在50msx30=1.5s内则认为是连续按键
           if(tSpan < 31)
           {   //连续按键时在键内循环递增字符索引
               if(++Inner_Idx == strlen(Keypad_Chars[KeyNo]))
                 Inner_Idx = 1;
               //因为是连续短按,故将每次显示后递增的输入缓冲索引后退一格,
               //以便替换此前输入的字符
               --Buffer_Index;
           } else Inner_Idx = 1;    //否则按键内英文字符索引回归起点索引1
             }
       tSpan = 0;  TR0 = 1;         //时间间隔归零,计时开始
       SHOW_MOBILE_KEY;             //显示按键字符
       if(Buffer_Index >= 12) continue; //输入缓冲限制在12个字符以内
       //更新输入缓冲字符串并送LCD显示
       Input_Buffer[Buffer_Index++] = Keypad_Chars[KeyNo][Inner_Idx];
       Input_Buffer[Buffer_Index] = '\0';
       LCD_ShowString(1, 4, Input_Buffer);
       Beep();                      //输出提示音
       while(KeyMatrix_Down());     //等待释放按键
     }
}

此帖出自51单片机论坛

最新回复

自己是解决不了的,一起来学习的,加油!!!   详情 回复 发表于 2024-8-21 05:54
点赞 关注
 

回复
举报

4008

帖子

0

TA的资源

版主

沙发
 

注释掉就行了,你这个程序奇怪,goto 后面应该是行定义,然后后面又一句SHOW_MOBILE_KEY不带goto

,就算想补全也不知道怎么写

此帖出自51单片机论坛
 
 
 

回复

34

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

非常感谢!!!

  上面程序是书本的源程序   网上查到的 也是 彭伟 编写的《单片机C语言程序设计实训100例——基于8051+Proteus仿真》(第2版)  思考很久   不知所以然   整个程序  只在这里出现2处  

     注释掉这2处  程序通过  但是仿真  按键不能输入数字

此帖出自51单片机论坛
 
 
 

回复

4008

帖子

0

TA的资源

版主

4
 

SHOW_MOBILE_KEY:        //显示按键字符

哦,看明白了是:号,不是;号,执行完转回while(1)....

单独写成一个函数比较好理解,这么写有点那个

此帖出自51单片机论坛
 
 
 

回复

34

帖子

0

TA的资源

一粒金砂(中级)

5
 

非常感谢!!!

      可以了   看来还的认真学习  

此帖出自51单片机论坛
 
 
 

回复

1942

帖子

2

TA的资源

版主

6
 

你这是一行一行照着书上的代码敲的吗?

此帖出自51单片机论坛
 
 
 

回复

34

帖子

0

TA的资源

一粒金砂(中级)

7
 

不是 

    是手机 百度输入法里的拍照扫描   上传到qq空间  复制 粘贴 修改 

       多少有点疏忽  就出现问题   好在  编译能检查出问题  如果编译通过   仿真也会再次检查出

此帖出自51单片机论坛

点评

现在OCR都这么强大了?能识别到这种程度,不错了。  详情 回复 发表于 2020-11-29 11:40
 
 
 

回复

7628

帖子

18

TA的资源

五彩晶圆(高级)

8
 
wang5825 发表于 2020-11-28 08:39 不是      是手机 百度输入法里的拍照扫描   上传到qq空间  复制 粘贴 ...

现在OCR都这么强大了?能识别到这种程度,不错了。

此帖出自51单片机论坛
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

419

帖子

0

TA的资源

纯净的硅(中级)

9
 

自己是解决不了的,一起来学习的,加油!!!

此帖出自51单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表