楼主真高手也,这么多语句,没一句有注释,时间长了你自己都看不懂吧? |
好,,,主意 |
#include <reg52.h> #define uchar unsigned char #define uint unsigned int sbit key_set=P3^4; sbit key_up=P3^5; sbit key_down=P3^6; sbit key_enter=P3^7; sbit dula=P2^6; sbit wela=P2^7; uchar code table[]={ 0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79, 0x71,0x00}; uchar count,num,num1,hour,hour1,hour2,min,min1,min2,sec,sec1,sec2,shan; void delayms(uint xms) { uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); } void display(uchar hour,uchar min,uchar sec) { hour1=hour/10; hour2=hour%10; min1=min/10; min2=min%10; sec1=sec/10; sec2=sec%10; if(shan==1) { if(count==1) { //TR0=0; hour1=16; hour2=16; } if(count==2) { //TR0=0; min1=16; min2=16; } if(count==3) { //TR0=0; sec1=16; sec2=16; } if(key_enter==0) { count=0; shan=0; TR0=1; } } dula=1; P0=table[hour1]; dula=0; P0=0xff; wela=1; P0=0xfe; wela=0; delayms(1); dula=1; P0=table[hour2]|0x80; dula=0; P0=0xff; wela=1; P0=0xfd; wela=0; delayms(1); dula=1; P0=table[min1]; dula=0; P0=0xff; wela=1; P0=0xfb; wela=0; delayms(1); dula=1; P0=table[min2]|0x80; dula=0; P0=0xff; wela=1; P0=0xf7; wela=0; delayms(1); dula=1; P0=table[sec1]; dula=0; P0=0xff; wela=1; P0=0xef; wela=0; delayms(1); dula=1; P0=table[sec2]; dula=0; P0=0xff; wela=1; P0=0xdf; wela=0; delayms(1); } void keyscan() { if(key_set==0) //key_set键的程序 { delayms(5); if(key_set==0) { count++; TR0=0; if(count==4) count=1; if(count<4) { TR1=1; shan=1; } while(!key_set) display(hour,min,sec); } } if(key_up==0) { delayms(5); if(key_up==0) { while(!key_up) display(hour,min,sec); if(count==1) { hour++; if(hour==24) hour=0; } if(count==2) { min++; if(min==60) min=0; } if(count==3) { sec++; if(sec==60) sec=0; } } } if(key_down==0) { delayms(5); if(key_down==0) { while(!key_down) display(hour,min,sec); if(count==1) { hour--; if(hour==255) hour=23; } if(count==2) { min--; if(min==255) min=59; } if(count==3) { sec--; if(sec==255) sec=59; } } } if(key_enter==0) { delayms(5); if(key_enter==0) { while(!key_enter) display(hour,min,sec); count=0; shan=0; TR0=1; /* TR1=0; TH0=(65536-46080)/256; TL0=(65536-46080)%256;*/ } } } void init() { TMOD=0x11; TH0=(65536-46080)/256; TL0=(65536-46080)%256; TH1=(65536-46080)/256; TL1=(65536-46080)%256; EA=1; ET0=1; ET1=1; TR0=1; TR1=0; } void main() { init(); while(1) { keyscan(); display(hour,min,sec); } } void T0_time() interrupt 1 { TH0=(65536-46080)/256; TL0=(65536-46080)%256; num++; if(num==20) { num=0; sec++; if(sec==60) { sec=0; min++; if(min==60) { min=0; hour++; if(hour==24) hour=0; } } } } void T1_time() interrupt 3 { TH1=(65536-46080)/256; TL1=(65536-46080)%256; num1++; if(num1==10) { num1=0; shan=~shan; } } |