找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机如何用双位数码管显示计数?目前程序总是一闪而过

[复制链接]
跳转到指定楼层
楼主
如题 ,求大神帮忙修改,原想法是从1到60计数,现在个位数能正常,但十位数就是一闪而过,从闪过的数字看是想要的,但是现在怎么修改一下,不要闪,能停留到下个数更新


单片机源程序如下:
  1. #include "stc15.h"
  2. #define  uchar unsigned char
  3. #define  uint unsigned int
  4. #define  SECOND 100
  5. uchar  tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};   //定义共阳极字段码表(1-9-0)
  6. uint count=0;
  7. uint jishu=0;
  8. uint shiwei;
  9. uint gewei;
  10. sbit L1=P3^5;
  11. sbit L2=P3^6;
  12. sbit L3=P3^7;
  13. sbit miao1=P4^0;
  14. sbit miao2=P4^1;
  15. sbit fen1=P4^2;
  16. sbit fen2=P4^3;
  17. sbit shi1=P4^4;
  18. sbit shi2=P4^5;
  19. struct time{
  20.   uchar hour;
  21.         uchar min;
  22.         uchar sec;

  23. };
  24. struct time clocktime _at_ 0x30;
  25. /***********************************延时函数*********************************************/
  26. void delay(uchar s){
  27. uchar k,z;
  28.         for(k=0;k<s;k++)
  29.         for(z=110;z>0;z--);
  30. }
  31. /************************************T0中断函数*****************************************/
  32. timer0() interrupt 1 using 2{
  33. TH0=0xd8;
  34.         TL0=0xf0;
  35.         if(++count == SECOND){
  36.         shiwei=jishu/10;
  37.                 gewei=jishu%10;
  38.                 if(shiwei>=1){
  39.                   miao1=1;
  40.                         miao2=0;
  41.                         P2=tab[shiwei];
  42.                         delay(1000);
  43.                         miao2=1;
  44.                         miao1=0;
  45.                         P2=tab[gewei];
  46.                         delay(1000);
  47.                 }
  48.                 else{
  49.                 miao1=0;
  50.                         P2=tab[gewei];
  51. //                        delay(10);
  52.                 }

  53.                 jishu=jishu+1;
  54.                
  55.                 count=0;
  56.                 L1=~L1;

  57.                

  58.                 if(++clocktime.sec == 60){
  59.                 clocktime.sec=0;L2=~L2;
  60.                         if(++clocktime.min==60){
  61.                         clocktime.min=0;L3=~L3;
  62.                                 if(++clocktime.hour==24){
  63.                                 clocktime.hour=0;P3=0x00;
  64.                                 }
  65.                         }
  66.                 }
  67.         }
  68. }
  69. /************************************主函数*********************************************/
  70. void main(){
  71.   TMOD=0x01;
  72.         TH0=0xd8;TL0=0xf0;
  73.         IE=0x82;TR0=1;

  74.         while(1)
  75.         {

  76.         }
  77.       

  78. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:277550 发表于 2019-10-15 20:20 | 只看该作者
十位显示后,延时一下。。。。。。。。。另外,不应该在中断中写较多的逻辑代码


~~~~~~~~~~~~~~~~~~~~~~~
回复

使用道具 举报

板凳
ID:88481 发表于 2019-10-15 22:36 | 只看该作者
delay()延时不应放在中断内,显示会受中断打断
回复

使用道具 举报

地板
ID:624801 发表于 2019-10-16 00:12 | 只看该作者
调试的时候按Ctrl+f5
回复

使用道具 举报

5#
ID:623789 发表于 2019-10-16 00:29 | 只看该作者
P2=tab[shiwei];
delay(1000);
miao2=1;
miao1=0;
P2=tab[gewei];
你这里P2先赋值十位,延时一阵子就赋值个位,个位把十位覆盖了
回复

使用道具 举报

6#
ID:123289 发表于 2019-10-16 23:15 | 只看该作者
能画出流程图吗?估计你画不出来。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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