//跟設(shè)定的功能差不多,可是發(fā)現(xiàn)按鍵有點(diǎn)問題,但是還是能很好的工作,程序?qū)懙挠悬c(diǎn)亂
#include<reg51.h> #define uint unsigned int #define uchar unsigned char
uchar temp1,temp2,temp3,tt,flag;//miao fen shi /* 用定時器實(shí)現(xiàn)定時功能 用中斷實(shí)現(xiàn)調(diào)時間(中斷進(jìn)入,用4個獨(dú)立按鍵控制調(diào)時間) 用定時器0 方式1實(shí)行 LED顯示 顯示時間 初始化 開機(jī)顯示00:00:00
功能:操作步驟 時鐘運(yùn)行過程中,按下key4關(guān)定時器時鐘顯示,但是不運(yùn)行,即為暫停狀態(tài) 再按下key1,選擇調(diào)時間的位,是分還是時,key2加時間+1,key3減時間-1 key2加分鐘時間到60自動轉(zhuǎn)設(shè)為30,加小時到24自動轉(zhuǎn)設(shè)定為12、、這樣加快了設(shè)定的便捷性 時間設(shè)定完成后,按一下key4,啟動TR0 再按下key1,開始正常工作。 */
//uchar code tablewe[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; uchar code tabledu[]={ 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0xbf};
sbit p37=P3^7; sbit p36=P3^6; sbit p35=P3^5; sbit p34=P3^4; sbit p33=P3^3; sbit p32=P3^2; sbit p31=P3^1; sbit p30=P3^0; sbit key1=P1^0; sbit key2=P1^1; sbit key3=P1^2; sbit key4=P1^3; //zhu: yong SW22jin ru wai bu zhong duan //key1 tiaozheng wei zhuyao wei xiangshang yi dong ji:mei an yi ci zhixiang shi fen miao //key2 an yici jia yi //key3 an yici jian yi
void init() { P1=0xff; tt=0; flag=0; temp1=0; temp2=0; temp3=0; TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1;
IT0=0;//電平觸發(fā) IE0=1; // EX0=1;//開外部中斷0 IP=0x20; }
void delay(uchar z) { uchar x,y; for(x=60;x>0;x--) for(y=z;y>0;y--); }
void display() { p37=0; P0=tabledu[temp1%10]; delay(1); p37=1; p36=0; P0=tabledu[temp1/10]; delay(1); p36=1; p35=0; P0=tabledu[10]; delay(1); p35=1; p34=0; P0=tabledu[temp2%10]; delay(1); p34=1; p33=0; P0=tabledu[temp2/10]; delay(1); p33=1; p32=0; P0=tabledu[10]; delay(1); p32=1; p31=0; P0=tabledu[temp3%10]; delay(1); p31=1; p30=0; P0=tabledu[temp3/10]; delay(1); p30=1; }
void tiaoshi() { uchar i=0; while(key1) display(); /* if(key4==0)//有鍵按下 { delay(5); if(key4==0)//若為真,說明確實(shí)有鍵按下 while(key4==0); flag=0; TR0=1; } */ while((key2)&&(key3)&&flag) { while(!key2); while(!key3); if(key1==0&&flag)//有鍵按下 { delay(5); if(key1==0)//若為真,說明確實(shí)有鍵按下 while(key1==0); i++; // gomain(); if(i==1) { while(key1) { p34=0; P0=tabledu[temp2%10]; delay(1); p34=1; p33=0; P0=tabledu[temp2/10]; delay(1); p33=1; if(key2==0)//有鍵按下 { delay(5); if(key2==0)//若為真,說明確實(shí)有鍵按下 while(key2==0); temp2++; if(temp2==60) temp2=30; } if(key3==0)//有鍵按下 { delay(5); if(key3==0)//若為真,說明確實(shí)有鍵按下 while(key3==0); temp2--; // if(temp2==0) // temp2=30; }
if(key4==0)//有鍵按下 { delay(5); if(key4==0)//若為真,說明確實(shí)有鍵按下 while(key4==0); flag=0; TR0=1; } } } if(i==2) { while(key1) { p31=0; P0=tabledu[temp3%10]; delay(1); p31=1; p30=0; P0=tabledu[temp3/10]; delay(1); p30=1; if(key2==0)//有鍵按下 { delay(5); if(key2==0)//若為真,說明確實(shí)有鍵按下 while(key2==0); temp3++; if(temp3==24) temp3=12; } if(key3==0)//有鍵按下 { delay(5); if(key3==0)//若為真,說明確實(shí)有鍵按下 while(key3==0); temp3--; // if(temp3==0) // temp3=30; }
if(key4==0)//有鍵按下 { delay(5); if(key4==0)//若為真,說明確實(shí)有鍵按下 while(key4==0); flag=0; TR0=1; } } } if(i==2) i=0; }
/* if(key4==0)//有鍵按下 { delay(5); if(key4==0)//若為真,說明確實(shí)有鍵按下 while(key4==0); flag=0; TR0=1; } */ } }
void main() { init(); while(1) { if(!key4) { flag=1; } display();
while(flag) { TR0=0; display(); if(!key1) tiaoshi(); } } }
void timer0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; tt++; if(tt==20) { tt=0; temp1++; if(temp1==60) { temp1=0; temp2++; if(temp2==60) { temp2=0; temp3++; if(temp3==24) {temp1=0;temp2=0;temp3=0;} } } } }
|