****************************************************************/ #include<reg52.h> #define uint unsigned int #define uchar unsigned char uint temp,tt,qian,bai,shi,ge; sbit smg_q=P3^4; sbit smg_b=P3^5; sbit smg_s=P3^6; sbit smg_g=P3^7; sbit key1 = P3^2; sbit key2 = P3^3; sbit key3 = P2^3; uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90}; uchar code table1[]={0x40,0x79,0x24,0x30,0x19, 0x12,0x02,0x78,0x00,0x10}; //带小数点 void keyscan(); void display(uint shi,uint ge); void delay(uint z); void init(); /************************************************************** 主函数 ******************************************************************/ void main() { init();//初始化子程序 while(1) { if(tt==1) { tt=0; temp++; if(temp==10000) { temp=0; } qian=temp/1000; bai=temp%1000/100; shi=temp%100/10; ge=temp%10; } keyscan(); display(shi,ge); } } /********************************************************************* 延时 ***********************************************************************/ void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } /********************************************************************* 按键控制 ***********************************************************************/ void keyscan() { if(key1==0) //清零并重新开始计时 { temp=0; TR0=1; } if(key2==0) //暂停计时 { TR0=0; } if(key3==0) //继续计时 { TR0=1; } } /********************************************************************* 显示 ***********************************************************************/ void display(uint shi,uint ge) { smg_q=0; P0=table[qian]; delay(1); smg_q=1; P0=0xff; smg_b=0; P0=table1[bai]; delay(1); smg_b=1; P0=0xff; smg_s=0; P0=table[shi]; delay(1); smg_s=1; P0=0xff; smg_g=0; P0=table[ge]; delay(1); smg_g=1; P0=0xff; } /********************************************************************* 初始化 ***********************************************************************/ void init() { smg_q=1; smg_b=1; smg_s=1; smg_g=1; temp=0; TMOD=0x01; TH0=(65536-10000)/256; TL0=(65536-10000)%256; EA=1; ET0=1; TR0=1; } /********************************************************************* 中断 ***********************************************************************/ void t0() interrupt 1 { TH0=(65536-10000)/256; TL0=(65536-10000)%256; tt++; }
|