#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit gewe=P1^3; //個位選通
sbit shwe=P1^2;
sbit bawe=P1^1;
sbit qiwe=P1^0;
sbit led1=P2^0; //二極管
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90};
void delayms(uint);
void display1(uchar,uchar,uchar,uchar);
//void dispiay2(uchar,uchar);
uchar num1,num2,qian,bai,shi,ge;
uint num;
void display1(uchar qian,uchar bai,uchar shi,uchar ge)
{
qiwe=0; //千位選通打開
P0=table[qian]; //千位段選
delayms(2); //延時
qiwe=1; //千位選通關閉
bawe=0;
P0=table[bai];
delayms(2);
bawe=1;
shwe=0;
P0=table[shi];
delayms(2);
shwe=1;
gewe=0;
P0=table[ge];
delayms(2);
gewe=1;
}
void main()
{
TMOD=0x01; //設置定時器0和1為工作方式1
TH0=(65536-45872)/256;//裝初值
TL0=(65536-45872)%256;
// TH1=(65536-45872)/256;
// TL1=(65536-45872)%256;
EA=1; //開總中斷
ET0=1 ; //開定時器0中斷
TR0=1; // 啟動定時器0
// ET1=1;
// TR1=1;
while(1)
{
qian=table[num/1000];
bai=table[num%1000/100]; //把一個四位數送數碼管
shi=table[num%1000%100/10];
ge=table[num%1000%100%10];
// display2(shi,ge);
display1(qian,bai,shi,ge);
}
}
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--) //延時函數約延時xms
for(j=110;j>0;j--);
}
void TO_time() interrupt 1
{
TH0=(65536-45872)/256; //重裝初值
TL0=(65536-45872)%256;
num1++;
num2++;
if(num1>=4) //到了4次=200ms
{
num1=0; //把num1清零再計20次
led1=~led1;
}
if(num2>=20) //如果到了20次約為1秒
{
num2=0; //把num2清零再計20次
num++;
if(num>=3600) //數碼管計到3600后歸零
num=0;
}
}
/*
void T1_time() interrupt 3
{
TH1=(65536-45872)/256;
TL1=(65536-45872)%256;
num2++;
if(num2=20) //如果到了20次約為1秒
{
num2=0; //把num2清零再計20次
num++;
if(num==3600) //數碼管計到3600后歸零
num=0;
qian=num/1000;
bai=num%1000/100 ; //把一個四位數送數碼管
shi=num%1000%100/10;
ge=num%1000%100%10;
}
}*/ |