找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机0-999999计数器抖动求助

[复制链接]
跳转到指定楼层
楼主
ID:39731 发表于 2018-3-29 14:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人菜鸟一只,模仿了个0-999999计数器,在加一的时候,其它数码管有抖动,不知要怎么消除,请高手赐教指点下,谢谢

单片机源程序如下:
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define ulong unsigned long
  5. sbit dula=P2^6;
  6. sbit wela=P2^7;
  7. void delayms(uint);
  8. void smg(ulong,ulong,ulong,ulong,ulong,ulong);
  9. uchar num1,num,sw,w,k,b,s,g;
  10. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  11. 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  12.                
  13. void main()
  14. {
  15.   TMOD=0X01;
  16.   TH0=(65536-45872)/256;
  17.   TL0=(65536-45872)%256;
  18.   EA=1;
  19.   TR0=1;
  20.   ET0=1 ;
  21. while(1)
  22. {
  23.   smg(sw,w,k,b,s,g);
  24. }
  25. }
  26. void smg(ulong sw,ulong w,ulong k,ulong b,ulong s,ulong g)
  27. {  
  28.   
  29.   dula=1;
  30.   P0=table[g];
  31.   dula=0;
  32.   P0=0xff;
  33.   wela=1;
  34.   P0=0xdf;
  35.   wela=0;
  36.   delayms(1);
  37.   
  38.   dula=1;
  39.   P0=table[s];
  40.   dula=0;
  41.   P0=0xff;
  42.   wela=1;
  43.   P0=0xef;
  44.   wela=0;
  45.   delayms(1);
  46.    
  47.   dula=1;
  48.   P0=table[b];
  49.   dula=0;
  50.   P0=0xff;
  51.   wela=1;
  52.   P0=0xf7;
  53.   wela=0;
  54.   delayms(1);
  55.   
  56.   dula=1;
  57.   P0=table[k];
  58.   dula=0;
  59.   P0=0xff;
  60.   wela=1;
  61.   P0=0xfb;
  62.   wela=0;
  63.   delayms(1);
  64.   
  65.   dula=1;
  66.   P0=table[w];
  67.   dula=0;
  68.   P0=0xff;
  69.   wela=1;
  70.   P0=0xfe;
  71.   wela=0;
  72.   delayms(1);
  73.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
  74.   dula=1;                                                                                                                                                                                                                                                                                                                                                                                       
  75.   P0=table[sw];
  76.   dula=0;
  77.   P0=0xff;
  78.   wela=1;
  79.   P0=0xfd;
  80.   wela=0;
  81.   delayms(1);
  82. }
  83. void delayms(uint xms)
  84. {
  85.   uint i,j;
  86.   for(i=xms;i>0;i--)
  87.      for(j=10;j>0;j--);
  88. }
  89.   
  90. void T0_time()interrupt 1

  91. {
  92.   TH0=(65536-45872)/256;
  93.   TL0=(65536-45872)%256;
  94.   num1++;
  95.   if(num1==20)
  96.   {
  97.    num1=0;
  98.    num++;
  99.    if(num==999999)
  100.     num=0;
  101. sw=num/100000;
  102. w=num%100000/10000;
  103. k=num%10000/1000;
  104. b=num%1000/100;
  105. s=num%100/10;
  106. g=num%10;
  107.   }
  108. }
复制代码

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

使用道具 举报

沙发
ID:213173 发表于 2018-3-29 21:03 | 只看该作者
改了一下就可以了
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
sbit dula=P2^6;
sbit wela=P2^7;
void delayms(uint);
void smg();
uchar sw,w,k,b,s,g;
uchar num;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
               
void main()
{
        TMOD=0X01;
        TH0=(65536-45872)/256;
        TL0=(65536-45872)%256;
        EA=1;
        TR0=1;
        ET0=1;
        while(1)
        {
                smg();
        }
}
void smg()
{  
        P0=0x00;//消影
        dula=1;
        dula=0;
        P0=0xdf;//送位码
        wela=1;
        wela=0;
        P0=table[g];//送段码
        dula=1;
        dula=0;
        delayms(1);

        P0=0x00;
        dula=1;
        dula=0;
        P0=0xef;
        wela=1;
        wela=0;
        P0=table[s];       
        dula=1;
        dula=0;
        delayms(1);
       
        P0=0x00;
        dula=1;
        dula=0;
        P0=0xf7;
        wela=1;
        wela=0;
        P0=table[b];
        dula=1;
        dula=0;
        delayms(1);
       
        P0=0x00;
        dula=1;
        dula=0;
        P0=0xfb;
        wela=1;
        wela=0;
        P0=table[k];
        dula=1;
        dula=0;
        P0=0xff;
        delayms(1);
       
        P0=0x00;
        dula=1;
        dula=0;
        P0=0xfe;
        wela=1;
        wela=0;
        P0=table[w];
        dula=1;
        dula=0;
        delayms(1);

        P0=0x00;
        dula=1;
        dula=0;
        P0=table[sw];
        dula=1;
        dula=0;
        P0=0xfd;
        wela=1;
        wela=0;
        delayms(1);
}

void delayms(uint xms)
{
  uint i,j;
  for(i=xms;i>0;i--)
     for(j=10;j>0;j--);
}
  
void T0_time()interrupt 1
{
        TH0=(65536-45872)/256;
        TL0=(65536-45872)%256;
        num++;
        if(num==20)
        {
                num=0;
                g++;
                if(g>9)
                {
                        g=0;
                        s++;
                        if(s>9)
                        {
                                s=0;
                                b++;
                                if(b>9)
                                {
                                        b=0;
                                        k++;
                                        if(k>9)
                                        {
                                                k=0;
                                                w++;
                                                if(w>9)
                                                {
                                                        sw++;       
                                                        if(sw>9)
                                                                sw=0;               
                                                }
                                        }
                                }
                        }
                }
        }
}
回复

使用道具 举报

板凳
ID:39731 发表于 2018-3-30 08:30 | 只看该作者
wulin 发表于 2018-3-29 21:03
改了一下就可以了
#include
#define uchar unsigned char

谢谢!学习了
回复

使用道具 举报

地板
ID:301791 发表于 2018-6-15 15:00 | 只看该作者
请问大神们,怎么从这程序里看出电路图呢?
回复

使用道具 举报

5#
ID:353831 发表于 2019-9-6 18:33 来自手机 | 只看该作者
wulin 发表于 2018-3-29 21:03
改了一下就可以了
#include
#define uchar unsigned char

楼主你好有仿真图吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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