用定时计数器0和定时计数器1 程序如下,仿真已经通过了,但是硬件就是不成,你帮我看看呗 程序如下:
#include
#define uchar unsigned char
#define uint unsigned int
sbit led1=P1^7;
sbit led2=P1^6;
sbit led3=P1^5;
sbit led4=P1^4;
uint mm;
uchar code table[]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
void delay(uint m)
{ uint i,j;
for(i=m;i>0;i--)
for(j=60;j>0;j--);
}
void xian_shi()
{
uchar qian,bei,shi,ge;
uint jj;
jj=mm;
jj*=20;//定时0.05s,jj/0.05=jj*20 (jj是转数)
qian=jj/1000;
bei=jj%1000/100;
shi=jj%100/10;
ge=jj%10;
led1=1;
P0=table[qian];
delay(1);
led1=0;
led2=1;
P0=table[bei];
delay(1);
led2=0;
led3=1;
P0=table[shi];
delay(1);
led3=0;
led4=1;
P0=table[ge];
delay(1);
led4=0;
}
void timer_init() //定时器计数器初始化函数
{
EA=1;
ET0=1;
ET1=1;
TMOD=0X51;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
TH1=0;
TL1=0;
TR0=1;
TR1=1;
}
void main()
{
timer_init();
P0=0; //开始数码管不显示
while(1)
{
xian_shi();
delay(2); //数码管刷新时间单位毫秒
}
}
void timer0() interrupt 1
{
TR0=0;
TR1=0;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
mm=0;
mm|=TH1;
mm=(mm<<8)|TL1;
TH1=0;
TL1=0;
TR0=1;
TR1=1;
}
void timer1() interrupt 3 //显示0000 说明出错
{
TR1=0;
TR0=0;
mm=0;
TH1=0;
TL1=0;
TR1=1;
}
|