以下是我写的程序,我想用定时器和数码管显示 时 分 秒,00-00-00,但是它就是跑动不了,还有我这样写显示子函数有没有问题?
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
sbit wela=P2^7;
sbit dula=P2^6;
uchar a,t0,shi,sec,fen,wei=0xfe;
void display(uchar sec,uchar fen,uchar shi);
void delay(uint x) //延时子函数
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void init()
{
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
EA=1;
ET0=1;
TR0=1;
}
void main() //主函数
{
while(1)
{
init();
display(sec,fen,shi);
}
}
void display(uchar sec,uchar fen,uchar shi) //显视子函数
{
uchar buf[8]; //定义缓冲数组
buf[0]=table[sec%10];
buf[1]=table[sec/10%10];
buf[2]=0x40;
buf[3]=table[fen%10];
buf[4]=table[fen/10%10];
buf[5]=0x40;
buf[6]=table[shi%10];
buf[7]=table[shi/10%10];
while(1)
{
uchar a;
for(a=0;a<8;a++)
{
wela=1;
P0=wei;
wela=0;
wei=_crol_(wei,1); //循环选择位选,数码管是共阴的,
P0=wei;
dula=1;
P0=buf[a];
dula=0;
delay(2);
}
}
}
void time0() interrupt 1 //定时器T0
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
t0++;
if(t0==10)
{
sec++;
t0=0;;
if(sec==60)
{
sec=0;
fen++;
if(fen==60)
{
shi++;
fen=0;
if(shi==24)
shi=0;
}
}
}
} |