www.pudn.com > MIANshizhong.rar > MIAN.C
/*--------------------------------------- ; Clock ; ; Auther : 王轩骞 ; File Name : main.c ; Target MCU : STC 89C58RD ; Frequency : 11.0592Mhz ; Revision : 1.0 ; ;--------------------------------------*/ #include#include /**************声明变量****************/ sbit BUTTOM_SET = P1^0; sbit BUTTOM_SEL = P1^1; sbit BUTTOM_ADJ = P1^2; sbit SPEAKER = P3^4; char code SEG[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00}; unsigned char s1,s2,h1,h2,tmp; unsigned char ts1,ts2,th1,th2; unsigned char timer_count; unsigned char beep; bit sel; bit sts; bit ck; unsigned char *p; /**************声明函数****************/ void main(void); void sys_init(void);/*初始化函数*/ void display(void);/*显示函数*/ void delay(unsigned char j);/*延时函数*/ void second(void); void flash(void); void keyboard(void); void keyboard2(void); void adj_mode(void); buttom(unsigned char i); /**************主函数*****************/ void main(void) { sys_init(); display(); while(1); } /**************初始化******************/ void sys_init(void) { SCON = 0x00; TCON = 0x03; TMOD = 0x11; EA = 1; EX0 = 0; EX1 = 0; ET0 = 1; ET1 = 0; ES = 0; TL0 = 0xB0; TH0 = 0x3C; TR0 = 1; timer_count = 18; s1 = 0; s2 = 0; h1 = 0; h2 = 0; ts1 = 0; ts2 = 1; th1 = 0; th2 = 0; sel = 1; sts = 0; ck = 0; beep = 0; p = &s1; } /**************入口程序*****************/ void display(void) { for(;;) { if(sts == 0) { keyboard(); } else if(sts == 1) { keyboard2(); } if(ck == 0) { P0 = SEG[s1]; P2 = 0x7F; delay(20); P0 = SEG[10]; P0 = SEG[s2]; P2 = 0xBF; delay(20); P0 = SEG[10]; P0 = SEG[h1]; P2 = 0xDF; delay(20); P0 = SEG[10]; P0 = SEG[h2]; P2 = 0xEF; delay(20); P0 = SEG[10]; } else if(ck == 1) { P0 = SEG[ts1]; P2 = 0x7F; delay(20); P0 = SEG[10]; P0 = SEG[ts2]; P2 = 0xBF; delay(20); P0 = SEG[10]; P0 = SEG[th1]; P2 = 0xDF; delay(20); P0 = SEG[10]; P0 = SEG[th2]; P2 = 0xEF; delay(20); P0 = SEG[10]; } } } /**************延时程序****************/ void delay(unsigned char j) { do { } while(j--); return; } /***************扫键1程序**************/ void keyboard(void) { if(BUTTOM_SET == 0) { if(buttom(0) == 1) { adj_mode(); sts = 1; } } else {} return; } /**************进入调整模式***************/ void adj_mode(void) { ET0 = 0; TR0 = 0; p = &s1; timer_count = 5; TL1 = 0xB0; TH1 = 0x3C; ET1 = 1; TR1 = 1; return; } /**************菜单调整***************/ void keyboard2(void) { if( ck == 0) { if(BUTTOM_SET == 0) { if(buttom(0) == 1) { TR0 = 0; TR1 = 0; if(sel == 0) { *p = tmp; sel = 1; } p = &ts1; ck = 1; TR0 = 1; TR1 = 1; } return; } else if(BUTTOM_SEL == 0) { if(buttom(1) == 1) { if(sel == 0) { *p = tmp; sel = 1; } if(p == &s1) { p = &s2; } else if(p == &s2) { p = &h1; } else if(p == &h1) { p = &h2; } else if(p == &h2) { p = &s1; } } return; } else if(BUTTOM_ADJ == 0) { if(buttom(2) == 1) { if(sel == 0) { *p = tmp; sel = 1; } if(p == &s2) { if( *p == 5) { *p = 0; } else { (*p)++; } } else { if( *p == 9) { *p = 0; } else { (*p)++; } } } return; } } else if( ck == 1) { if(BUTTOM_SET == 0) { if(buttom(0) == 1) { ET1 = 0; TR1 = 0; if(sel == 0) { *p = tmp; sel = 1; } p = &s1; ck = 0; sts = 0; TL0 = 0xB0; TH0 = 0x3C; ET0 = 1; TR0 = 1; } return; } else if(BUTTOM_SEL == 0) { if(buttom(1) == 1) { if(sel == 0) { *p = tmp; sel = 1; } if(p == &ts1) { p = &ts2; } else if(p == &ts2) { p = &th1; } else if(p == &th1) { p = &th2; } else if(p == &th2) { p = &ts1; } } return; } else if(BUTTOM_ADJ == 0) { if(buttom(2) == 1) { if(sel == 0) { *p = tmp; sel = 1; } if(p == &ts2) { if( *p == 5) { *p = 0; } else { (*p)++; } } else { if( *p == 9) { *p = 0; } else { (*p)++; } } } return; } } } /***************去抖动*****************/ buttom(unsigned char i) { delay(5); if(i == 0) { if(BUTTOM_SET == 0) { do{ SPEAKER = 0; } while(BUTTOM_SET == 0); SPEAKER = 1; delay(5); if(BUTTOM_SET == 0) { return(0); } } else { return(0); } } else if(i == 1) { if(BUTTOM_SEL == 0) { do{ SPEAKER = 0; } while(BUTTOM_SEL == 0); SPEAKER = 1; delay(5); if(BUTTOM_SEL == 0) { return(0); } } else { return(0); } } else if(i == 2) { if(BUTTOM_ADJ == 0) { do{ SPEAKER = 0; } while(BUTTOM_ADJ == 0); SPEAKER = 1; delay(5); if(BUTTOM_ADJ == 0) { return(0); } } else { return(0); } } delay(10); return(1); } /***************读秒程序***************/ void second(void) interrupt 1 { EA = 0; ET0 = 0; TR0 = 0; if(timer_count == 0) { timer_count = 18; if(s1 == 9 && s2 == 5 && h1 == 9 && h2 == 9) { h2=0;h1=0;s2=0;s1=0; } else if(s1 == 9 && s2 == 5 && h1 ==9) { h2++;h1=0;s2=0;s1=0; } else if(s1 == 9 && s2 == 5) { h1++;s2=0;s1=0; } else if(s1 == 9) { s2++;s1=0; } else { s1++; } if(beep==0) { SPEAKER=1; } else { beep--; } if(s1==ts1) { if(s2==ts2) { if(h1==th1) { if(h2==th2) { SPEAKER=0; beep=5; } } } } } else { timer_count--; } TL0 = 0xB0; TH0 = 0x3C; TR0 = 1; ET0 = 1; EA = 1; } /**************闪烁*******************/ void flash(void) interrupt 3 { EA = 0; ET1 = 0; TR1 = 0; if(timer_count == 0) { if( sel == 1) { tmp = *p; *p = 10; sel = 0; } else if(sel == 0) { *p = tmp; sel = 1; } timer_count = 5; } else { timer_count--; } TL1 = 0xB0; TH1 = 0x3C; TR1 = 1; ET1 = 1; EA = 1; }