#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar DSY_play[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; //从1到九对应的十六进制代码
uchar DSY_buffer[]={0,0,0xbf,0,0,0xbf,0,0}; //显示缓冲区
uchar DSY_IDX; //索引
uchar key_state; //按键状态
uchar DSY_wei; //位码,用于数码管动态扫描
uchar miao;
uchar fen;
uchar hour;
void fens();
void hours();
void shumaguan() interrupt 0 // 数码管动态扫描
{ TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
P2=DSY_wei; //位选
P0=DSY_buffer[DSY_IDX]; //段选
DSY_wei=_crol_(DSY_wei,1);
DSY_IDX=(DSY_IDX+1)%8;
}
void display() interrupt 1
{ uchar count=1;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
if(count<20)
{
count++;
return;
}
miao++;
DSY_buffer[7]=DSY_play[miao%10];
DSY_buffer[6]=DSY_play[miao/10];
if(miao==60)
miao=0;
fens();
}
void fens()
{
if(fen<60)
{
fen++;
DSY_buffer[4]=DSY_play[fen%10];
DSY_buffer[3]=DSY_play[fen/10];
}while(fen!=60);
fen=0;
hours();
}
void hours()
{
if(hour<24)
{
hour++;
DSY_buffer[1]=DSY_play[hour/10];
DSY_buffer[0]=DSY_play[hour%10];
} while(hour!=24);
hour=0;
}
void main()
{ uchar x,y;
TMOD=0X11;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TCON=0x01;
EA=1;
DSY_wei=0xfe;
DSY_IDX=0;
miao=10;
fen=20;
hour=20;
DSY_buffer[7]=DSY_play[miao%10];
DSY_buffer[6]=DSY_play[miao/10]; //初始化时间为 20-20-10
可是为什么数码管不显示,甚至P0口都没有电平
DSY_buffer[4]=DSY_play[fen%10];
DSY_buffer[3]=DSY_play[fen/10];
DSY_buffer[1]=DSY_play[hour%10];
DSY_buffer[0]=DSY_play[hour/10];
TR0=1;
TR1=1;
key_state=0xff;
if(P1&0xff!=0xff)
{
for(x=110;x>0;x--)
for(y=110;y>0;y--);
}
if(P1&0xff!=0xff)
{
key_state=P1;
EA=0;
if(key_state&0xfe==0xfe)
{
fen++;
DSY_buffer[4]=DSY_play[fen%10];
DSY_buffer[3]=DSY_play[fen/10];
}
else if(P1&0xfd)
{
hours();
}
}
}
|