我想用定时器做数码管刷新,这个程序不知道哪里错了,用protues仿真不出来。
#include"reg52.h"
#define uchar unsigned char
#define uint unsigned int
code uchar led_7d_seg[]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90,
0x88,0x83,0xc6,0xa1,0x86,0x8e};
code uchar led_7d_dig[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar disp_buff[8]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
void disp_led(void);
uchar num=0;
void main()
{ uchar cnt=0;
uint sec=0;
TMOD=0x01;//设置T0为方式一
TH0=0xFC;//给T0赋初值,定时1ms
TL0=0x67;
TR0=1;
while(1)
{disp_led();
if(TF0==1)
{TF0=0; //T0溢出后,清零标志位重新赋初值
TH0=0xFC;
TL0=0x67;
cnt++; //T0溢出次数
}
if (cnt>=1000)//定时1s
{cnt=0;
sec++;//1s后数码管计数加一
disp_buff[0]=led_7d_seg[sec%10];
disp_buff[1]=led_7d_seg[sec/10%10];
disp_buff[2]=led_7d_seg[sec/100%10];
disp_buff[3]=led_7d_seg[sec/1000%10];
disp_buff[4]=led_7d_seg[sec/10000%10];
disp_buff[5]=led_7d_seg[sec/100000%10];
disp_buff[6]=led_7d_seg[sec/1000000%10];
disp_buff[7]=led_7d_seg[sec/10000000%10];
}
}
}
void disp_led(void)
{P2=0;
P0=disp_buff[num];
P2=led_7d_dig[num];
num++;
num=num%8;
}
|