找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2065|回复: 6
收起左侧

不用中断实现51单片机0-99的动态显示?求指导

[复制链接]
ID:1022415 发表于 2022-4-28 15:32 来自触屏版 | 显示全部楼层 |阅读模式
由于本论坛禁止直接求程序,禁止伸手党,所以向大家请教一下大致的实现方法与思路,理清头绪后我自己来写程序去实现,谢谢大家

不用中断实现按键控制0-99的显示,一个加一键,一个减一键,还有一个清零键。想问我怎么用c语言语句实现此功能?
回复

使用道具 举报

ID:624769 发表于 2022-4-28 16:56 来自触屏版 | 显示全部楼层
你至少说一下单片机型号吧?有些单片机带硬件按键处理的,本来就不需要中断
回复

使用道具 举报

ID:390416 发表于 2022-4-28 17:17 | 显示全部楼层
数码管显示任意数字                        https://www.acfun.cn/v/ac15187311_16
独立按键的短按和长按                          https://www.acfun.cn/v/ac15187311_20
回复

使用道具 举报

ID:161164 发表于 2022-4-28 18:51 | 显示全部楼层
不能用什么中断?定时中断可不可以用?
回复

使用道具 举报

ID:213173 发表于 2022-4-28 20:56 | 显示全部楼层
不要把中断看作万能胶,在主函数内很容易实现此功能。 无标题.jpg

  1. #include <REG51.H>

  2. sbit W1=P2^0;//十位
  3. sbit W2=P2^1;//个位
  4. sbit S1=P2^2;//++
  5. sbit S2=P2^3;//--
  6. sbit S3=P2^4;//清0

  7. unsigned char code table[]={//共阴数码管段码"0~f-."
  8.                 0x3f,0x06,0x5b,0x4f,
  9.                 0x66,0x6d,0x7d,0x07,
  10.                 0x7f,0x6f,0x77,0x7c,
  11.                 0x39,0x5e,0x79,0x71,0x40,0x80};

  12. void Delay(unsigned t)
  13. {
  14.         unsigned i,j;
  15.         for(i=t;i>0;i--)
  16.                 for(j=120;j>0;j--);
  17. }

  18. void main()
  19. {
  20.         unsigned char num=0;
  21.         unsigned char count=0;
  22.         bit sign=0;
  23.         bit flag=0;
  24.         while(1)
  25.         {
  26.                 if(!S1||!S2||!S3)
  27.                 {
  28.                         if(++count>=10 && sign==0)
  29.                         {
  30.                                 sign=1;
  31.                                 if(!S1){if(num<99)num++;}
  32.                                 if(!S2){if(num>0)num--;}
  33.                                 if(!S3)num=0;
  34.                         }
  35.                 }
  36.                 else{count=0;sign=0;}

  37.                 if(flag)
  38.                 {
  39.                         W1=1;W2=1;
  40.                         P0=table[num/10];
  41.                         W1=0;W2=1;flag=0;
  42.                 }
  43.                 else
  44.                 {
  45.                         W1=1;W2=1;
  46.                         P0=table[num%10];
  47.                         W1=1;W2=0;flag=1;
  48.                 }
  49.                 Delay(1);
  50.         }
  51. }
复制代码



回复

使用道具 举报

ID:68468 发表于 2022-4-28 21:25 | 显示全部楼层
动态显示跟中断并没有必然的联系,不用中断完全可以实现0-99的动态显示。
回复

使用道具 举报

ID:123289 发表于 2022-4-28 22:21 | 显示全部楼层
0、让MM=0,跳到第5步。
1、查询+1键,有则将MM+1,到100时清0,跳到第5步。
2、查询-1键,有则将MM-1,这负时改成99,跳到第5步。
3、查询清0键,有则将MM=0,跳到第5步。
4、跳到第1步
5、显示变量MM的数字。这里可以加个延时,也可以不加。
6、跳到第1步。

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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