找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

用单片机定时中断实现数码管数字逐渐增加,用外部中断实现清零 程序问题

查看数: 2850 | 评论数: 7 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2020-5-24 21:48

正文摘要:

个位和百位正常,十位显示异常(不停的变换),看了很久不知道是什么问题,能有人帮我解答下吗?甚是感谢,编程如下。 #include<reg51.h> #include<stdio.h> unsigned int tim; unsigned int num=0; unsigne ...

回复

ID:760188 发表于 2020-5-25 11:44
man1234567 发表于 2020-5-25 08:36
个位和百位疑似错乱

谢谢您的回复
ID:760188 发表于 2020-5-25 11:43
carpcarey 发表于 2020-5-25 09:19
硬件部分:
1:P0口应该上拉;
2:三极管应该用PNP管,改为低电平驱动;

谢谢您的回复
ID:760188 发表于 2020-5-25 11:43

谢谢您的回复
ID:744327 发表于 2020-5-25 10:59
中断没有重新赋值
ID:267719 发表于 2020-5-25 09:19
硬件部分:
1:P0口应该上拉;
2:三极管应该用PNP管,改为低电平驱动;
3:建议按键两端加个电容硬件去抖。
软件部分:
1:gewei()函数其实你显示的是十位;
2:shiwei()函数其实显示的是个位;
3:百位始终为0.因为num达到99就为0了。
ID:584814 发表于 2020-5-25 08:36
个位和百位疑似错乱
ID:213173 发表于 2020-5-25 08:30

  1. #include<reg51.h>
  2. #include<stdio.h>
  3. unsigned int tim;
  4. unsigned int num=0,num0=0;
  5. unsigned int b,s,g;
  6. unsigned char code a[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  7. /*延时函数*/
  8. void delayms(unsigned int x)
  9. {unsigned char y;
  10.    for(;x>0;x--)
  11.    {for(y=0;y<128;y++)
  12.       {;}
  13.    }
  14. }
  15. /*子函数*/
  16. void gewei()
  17. {
  18.         g=num%10;
  19.         P0=0x04;
  20.         P2=a[g];
  21. }
  22. void shiwei()
  23. {
  24.         s=num/10%10;
  25.         P0=0x02;
  26.         P2=a[s];
  27. }
  28. void baiwei()
  29. {
  30.         b=num/100%10;
  31.         P0=0x01;
  32.         P2=a[b];
  33. }
  34. /*主函数*/
  35. void main(void)
  36. {
  37.         tim=65536-50000;
  38.         EA=1;  
  39.         ET0=1;  
  40.         TMOD=0x01;  
  41.         TH0=tim/256;  
  42.         TL0=tim%256;  
  43.         TR0=1;
  44.         IT0=1;
  45.         IT1=1;
  46.         EX0=1;
  47.         EX1=1;
  48.         while(1)
  49.         {
  50.                 gewei();
  51.                 delayms(10);
  52.                 shiwei();
  53.                 delayms(10);
  54.                 baiwei();
  55.                 delayms(10);
  56.         }  
  57. }
  58. /*定时中断*/
  59. void time() interrupt 1
  60. {
  61.         TH0=tim/256;  
  62.         TL0=tim%256;
  63.         if(++num0>=20)
  64.         {
  65.                 num0=0;
  66.                 num++;
  67.                 if(num>999)
  68.                         num=0;       
  69.         }
  70. }

  71. /*清零*/
  72. void int0() interrupt 0
  73. {
  74.         num0=0;
  75.         num=0;       
  76. }
复制代码



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

Powered by 单片机教程网

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