用at89c2051,要怎改,程序如下:
#include <reg52.h>
sbit wei0=P3^0; //千位
sbit wei1=P3^1; //百位
sbit wei2=P3^2; //十位
sbit wei3=P3^4; //个位
sbit key_add=P3^3;
unsigned char code LedChar[] = { 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E };
void delay(unsigned int time);
unsigned char i=0; //动态扫描的索引
unsigned int cnt=0; //记录 T0 中断次数
void main()
{
unsigned long num=0; //记录经过的秒数
EA=1; //开总中断
TMOD=0x01; //设置 T0 为模式 1
TH0=0xB8; //为 T0 赋初值 0xFC67定时 1ms
TL0=0x00;
ET0=1; //使能 T0 中断
TR0=1; //启动 T0
while (1)
{
if(key_add==0)
{
while(key_add==0);
if(num<10000)
num++;
if(num==10000)
num=0;
}
wei3=0;
P0=LedChar[num/10%10];
wei3=1;
delay(5);
wei2=0;
P0=LedChar[num/100%10];
wei2=1;
delay(5);
wei1=0;
P0=LedChar[num/1000%10];
wei1=1;
delay(5);
wei0=0;
P0=LedChar[num%10];
wei0=1;
delay(5);
}
}
void delay(unsigned int time)
{
while(time--);//1us
}
/* 定时器 0 中断服务函数 */
void InterruptTimer0() interrupt 1
{
TH0 = 0xFC; //重新加载初值
TL0 = 0x67;
cnt++; //中断次数计数值加 1
} |