找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1087|回复: 4
打印 上一主题 下一主题
收起左侧

单片机双按键控制数码管,仿真出错,求大佬指点迷津,有文件上传

[复制链接]
跳转到指定楼层
楼主
双按键控制数码管,仿真出错,求大佬指点迷津,有文件上传
  1. #include <reg51.h>
  2. sbit SW1=P1^0;
  3. sbit SW2=P1^1;
  4. sfr LED=0xA0;
  5. unsigned char ID;
  6. void delay(int time);
  7. void Disp(unsigned char i);
  8. unsigned char SW_check(void);
  9. //unsigned char code LED_SUM[10]={0xfc,0x61,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};
  10. //主函数通过调用按键检测函数,显示函数完成数码管对按键有效击键次数的显示
  11. void mian(void){
  12.         ID=0;
  13.         while(1){
  14.                
  15.                 SW_check();
  16.                 Disp(ID);
  17.         }
  18.         
  19.         
  20. }
  21. void Disp(unsigned char i){
  22.         unsigned char x,y;
  23.         x=i%10;
  24.         y=i/10;
  25.         y<<4;
  26.         LED=y|x;
  27. }

  28. unsigned char SW_check(void){
  29.         if(!SW1){//sw1是否按下
  30.                 delay(10);
  31.                 if(!SW1){
  32.                         if((ID++)>=99)ID=0;
  33.                         while(!SW1);
  34.                 }
  35.                
  36.         }
  37.         else if(!SW2){
  38.                 delay(10);
  39.                 if(!SW2){
  40.                         if((ID--)<=0){
  41.                                 ID=99;
  42.                         }
  43.                         while (!SW2);
  44.                 }
  45.                
  46.         }

  47.         
  48.         return ID;
  49.         

  50. }

  51. void delay(int time){
  52.         unsigned char j;
  53.         for(time;time>=0;time--)
  54.                 for(j=125;j>0;j--)
  55.                         {;}
  56. }
复制代码
双按键组合加减.rar (43.02 KB, 下载次数: 6)
求大佬指点迷津。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:974245 发表于 2021-11-2 10:35 | 只看该作者
就是仿真的时候按按键没反应
回复

使用道具 举报

板凳
ID:313048 发表于 2021-11-2 11:48 | 只看该作者
确定仿真频率是否正确,有时候仿真它跑得很慢  你按键时间短了,压根就没检查到,你就松开了.
1、修改按键扫描时的消抖延时,减小延时时间看看。或者按键按的时候时间持续长一点点。看仿真软件下方的仿真时间而定。
2、程序去除掉数码管的显示。保留按键扫描,通过LED来确定按键扫描程序是否正常运行,如果正常运行再开启数码管显示程序。
回复

使用道具 举报

地板
ID:213173 发表于 2021-11-2 15:54 | 只看该作者
给你改好了,但不直接告诉你问题在哪,你自己逐字对照找错误,以后就不会再犯了,终身享用。


  1. #include <reg51.h>
  2. sbit SW1=P1^0;
  3. sbit SW2=P1^1;
  4. sfr LED=0xA0;
  5. unsigned char ID;
  6. void delay(int time);
  7. void Disp(unsigned char i);
  8. unsigned char SW_check(void);
  9. //unsigned char code LED_SUM[10]={0xfc,0x61,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};
  10. //主函数通过调用按键检测函数,显示函数完成数码管对按键有效击键次数的显示
  11. void main(void){
  12.         ID=0;
  13.         while(1){
  14.                
  15.                 SW_check();
  16.                 Disp(ID);
  17.         }
  18.         
  19.         
  20. }
  21. void Disp(unsigned char i){
  22.         unsigned char x,y;
  23.         x=i%10;
  24.         y=i/10;
  25.         y<<=4;
  26.         LED=y|x;
  27. }

  28. unsigned char SW_check(void){
  29.         if(!SW1){//sw1是否按下
  30.                 delay(10);
  31.                 if(!SW1){
  32.                         if((ID++)>=99)ID=0;
  33.                         while(!SW1);
  34.                 }
  35.                
  36.         }
  37.         else if(!SW2){
  38.                 delay(10);
  39.                 if(!SW2){
  40.                         if((ID--)<=0){
  41.                                 ID=99;
  42.                         }
  43.                         while (!SW2);
  44.                 }
  45.                
  46.         }

  47.         
  48.         return ID;
  49.         

  50. }

  51. void delay(int time){
  52.         unsigned char j;
  53.         for(time;time>=0;time--)
  54.                 for(j=125;j>0;j--)
  55.                         {;}
  56. }
复制代码




回复

使用道具 举报

5#
ID:974245 发表于 2021-11-2 17:00 | 只看该作者
wulin 发表于 2021-11-2 15:54
给你改好了,但不直接告诉你问题在哪,你自己逐字对照找错误,以后就不会再犯了,终身享用。

谢谢你了,超级感谢。我是个大傻子!!终于好了
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表