本帖最后由 zhaocanzhaoxu 于 2014-3-12 21:47 编辑
用定时器0实现6个数码管动态显示654321。
出现错误:6个数码管第一轮显示完654321后,开始变成432165,,216543。
程序如下:
#include<reg52.h>
#include<intrins.h>
char code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71}; //0到F的数码管显示
char temp,num,a;
sbit dula=P2^6; //段选
sbit wela=P2^7; //位选
void init();
void main()
{
init();
TR0=1;
while(1);
}
void init()
{
EA=1,ET0=1;
TMOD=0X01;
TH0=15536/256,TL0=15536%256; //50MS
num=6;
temp=0xfe;
}
void time0() interrupt 1
{
TH0=15536/256,TL0=15536%256; //50MS
a++;
if(a==10)
{
wela=1;
P0=temp;
wela=0;
P0=0;
temp=_crol_(temp,1);
if(temp==0xbf)
temp=0xfe;
dula=1;
P0=table[num];
dula=0;
P0=0;
num--;
if(num==0)
num=6;
a=0;
}
} |