#include<reg52.h> #define uchar unsigned char #define uint unsigned int void display(uchar ,uchar ); void key(); sbit dx=P2^6;//段選 sbit jp=P3^4;//位選 sbit jp1=P3^5;//清零 sbit jp2=P3^6;//暫停 sbit wx=P2^7;//位選 sbit led=P1^0; uchar code table[]={0x3f,0x06,0x5b, 0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79,0x71};//段碼從0~f
uint num,num1,shi,ge,num2; void delayms(unsigned int xms)//延時(shí)函數(shù) { unsigned i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); }
void init() { TMOD=0X01; TH0=0X4C;//計(jì)時(shí)50ms TL0=0X00; EA=1;//打開(kāi)總中斷 ET0=1;//定時(shí)器0的中斷允許開(kāi)關(guān) TR0=1;//打開(kāi)計(jì)時(shí)器 } void chushi() //初始的時(shí)候顯示00 { dx=1; P0=0X3F; dx=0; P0=0xff; wx=1; P0=0Xfe; wx=0; delayms(5);
dx=1; P0=0X3F; dx=0 P0=0xff; wx=1; P0=0Xfd; wx=0; delayms(5);
}
void main() { init();
while(1) { chushi(); TR0=0;//顯示0的時(shí)候停止計(jì)時(shí) while(1) { key();//不斷地掃描key()函數(shù) display(shi,ge); } } } void display(uchar shi,uchar ge) {
shi=num1/10; ge=num1%10; dx=1; P0=table[shi]; dx=0; P0=0xff; wx=1; P0=0Xfe; wx=0; delayms(5);
dx=1; P0=table[ge]; dx=0; P0=0xff; wx=1; P0=0Xfd; wx=0; delayms(5);
} void key() { if(jp==0) { led=0;//led=0 while(!jp);//等待鍵盤(pán)松開(kāi) TR0=~TR0;//按第一下的時(shí)候開(kāi)始計(jì)時(shí) 再按一下停止計(jì)數(shù) 以此類推 } if(jp1==0) { num1=0;//清零函數(shù) TR0=0;//并且停止計(jì)數(shù) while(!jp1);//等待鍵盤(pán)松開(kāi) }
} void Timer() interrupt 1 {
TH0=0X4C; TL0=0X00; num++; if(num==20)//定時(shí)器計(jì)時(shí)50ms,但是經(jīng)過(guò)num1經(jīng)過(guò)20次之后,正好計(jì)時(shí)1s { num=0; led=~led;l//led燈閃爍
num1++; if(num1==60)//從0顯示到60 { num1=0;//數(shù)碼管顯示59后 直接顯示0 }
} }
|