数码管动态显示时有多余的另外一个数码管也亮
程序如下,共阳极的数码管,没有用锁存器,P2接位选,P0接段选
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar num,num1;
uchar code table[]={
0xc0,0xf9,0xa4,0xb0, //数码管编码
0x99,0x92,0x82,0xf8,
0x80,0x90};
uchar shi,ge;
void delayms(uint xms);
void display(uchar,uchar);
void display(uchar shi,uchar ge)
{
P0=table[shi];
P2=0xfd;
delayms(5);
P2=0xff;
delayms(5);
P2=0xfe;
P0=table[ge];
delayms(5);
P2=0xff;
delayms(5);
}
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void main()
{
TMOD=0x10;
TH0=(65536-45872)/256; //装初值
TL0=(65536-45872)%256;
EA=1;
ET1=1;
TR1=1;
while(1)
{
display(shi,ge);
}
}
void T1_time() interrupt 3
{
TH0=(65536-45872)/256; //装初值
TL0=(65536-45872)%256;
num1++;
if(num1==20)
{
num1=0;
num++;
if(num==60)
{
num=0;
}
shi=num/10;
ge=num%10;}
}
void T1_time() interrupt 3
{
TH0=(65536-45872)/256; //装初值
TL0=(65536-45872)%256;、。
。
TMOD=0x10;
TH0=(65536-45872)/256; //装初值
TL0=(65536-45872)%256;
EA=1;
ET1=1;
TR1=1;
。你到底是用定时器0还是定时器1 啊
居然有这么低级的问题,不过我改了之后也没有变好,不知道还有什么问题?
我又不知道你改成什么样了 怎么知道你哪里还有错呢?
void display(uchar shi,uchar ge)都定义全局变量了这里面的参数就不用了吧。还有这函数里面怎么不直接用一个for循环不是更简单么P2=0XFF的那个应该可以取消掉吧?
改成这样之后,那个多余的数码管基本上没有亮度了,但仔细看还是看得出来有在闪,不知道是硬件问题还是程序的原因。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar num,num1;
uchar code table[]={
0xc0,0xf9,0xa4,0xb0, //数码管编码
0x99,0x92,0x82,0xf8,
0x80,0x90};
uchar shi,ge;
void delayms(uint xms);
void display(uchar,uchar);
void display(uchar shi,uchar ge)
{
P0=table[shi];
P2=0xfd;
delayms(5);
P2=0xff;
P2=0xfe;
P0=table[ge];
delayms(5);
P2=0xff;
}
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void main()
{
TMOD=0x10;
TH1=(65536-45872)/256; //装初值
TL1=(65536-45872)%256;
EA=1;
ET1=1;
TR1=1;
while(1)
{
display(shi,ge);
}
}
void T1_time() interrupt 3
{
TH1=(65536-45872)/256; //装初值
TL1=(65536-45872)%256;
num1++;
if(num1==20)
{
num1=0;
num++;
if(num==60)
{
num=0;
}
shi=num/10;
ge=num%10;}
}
程序没发现问题啊 给我看看你的原理图吧。或者你换个单片机试试?