标题:
单片机0-999999计数器抖动求助
[打印本页]
作者:
梦想电子2009
时间:
2018-3-29 14:44
标题:
单片机0-999999计数器抖动求助
本人菜鸟一只,模仿了个0-999999计数器,在加一的时候,其它数码管有抖动,不知要怎么消除,请高手赐教指点下,谢谢
单片机源程序如下:
#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(ulong,ulong,ulong,ulong,ulong,ulong);
uchar num1,num,sw,w,k,b,s,g;
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(sw,w,k,b,s,g);
}
}
void smg(ulong sw,ulong w,ulong k,ulong b,ulong s,ulong g)
{
dula=1;
P0=table[g];
dula=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
delayms(1);
dula=1;
P0=table[s];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delayms(1);
dula=1;
P0=table[b];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delayms(1);
dula=1;
P0=table[k];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delayms(1);
dula=1;
P0=table[w];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delayms(1);
dula=1;
P0=table[sw];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
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;
num1++;
if(num1==20)
{
num1=0;
num++;
if(num==999999)
num=0;
sw=num/100000;
w=num%100000/10000;
k=num%10000/1000;
b=num%1000/100;
s=num%100/10;
g=num%10;
}
}
复制代码
作者:
wulin
时间:
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;
}
}
}
}
}
}
}
作者:
梦想电子2009
时间:
2018-3-30 08:30
wulin 发表于 2018-3-29 21:03
改了一下就可以了
#include
#define uchar unsigned char
谢谢!学习了
作者:
金溪小书童
时间:
2018-6-15 15:00
请问大神们,怎么从这程序里看出电路图呢?
作者:
wl020807
时间:
2019-9-6 18:33
wulin 发表于 2018-3-29 21:03
改了一下就可以了
#include
#define uchar unsigned char
楼主你好有仿真图吗?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1