先下來看看,怎么沒人下,順便把樓主的源碼貼出來 給大家省51黑電子論壇的黑幣啊
- //提示:k1k2k3k4分別是:小時。分鐘。秒鐘的調(diào)節(jié)功能。定時時間的顯示功能。k5k6分別是設定第二時間定為0:01:00,啟用或者關閉鬧鐘,
- #include"AT89X52.H"
- #define uchar unsigned char
- uchar code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf}; //斷碼
- uchar code pos[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //微碼
- sbit k1=P1^0;
- sbit k2=P1^1;
- sbit k3=P1^2;
- sbit k4=P1^3;
- sbit k5=P1^4;
- sbit jidianqi1=P1^5;
- sbit k6=P1^6;
- sbit led=P1^7;
- uchar k[8]={0,0,16,0,0,16,0,0}; //01234567
- uchar code seg00[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf}; //斷碼
- uchar code pos00[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //微碼
- uchar k00[8]={0,0,16,0,0,16,0,0}; //01234567
- uchar second;
- uchar minite;
- uchar hour;
- uchar num;
- uchar naozhongqiyongFlag;
-
- uchar second00;
- uchar minite00;
- uchar hour00;
- uchar num00;
- ////////////////////////////////////////////////////////////////////////////////////
- void TimeCompate(void)
- {
- if(naozhongqiyongFlag)
- {
- if((second00==0)&&(minite00==1)&&(hour00==0)) ///&&(minite00<=2),,,(naozhongqiyongFlag==1)&&,, led=1
- {
- jidianqi1=0;
- }
- else if((second00==5)&&(minite00==42)&&(hour00==0))
- {
- jidianqi1=1; naozhongqiyongFlag=~naozhongqiyongFlag; led=~led;
- }
- }
- /* if(hour00!=0)
- { jidianqi1=1; naozhongqiyongFlag=0;
- }
- if(hour00==0)
- {
- if(minite00<1)
- { jidianqi1=1; naozhongqiyongFlag=0;
- }
- else if(minite00>2)
- { jidianqi1=1; naozhongqiyongFlag=0;
- }
- else
- {
- jidianqi1=0;
- }
- }
-
- /*/
- //////////////////////////////////////////
-
- }
- //////////////// //延時程序///////////////////////////////
- void delay_5ms(void)
- {
- uchar i,j;
- for(i=10;i>0;i--)
- for(j=248;j>0;j--)
- ;
- }
- ////////////顯示程序,這個寫法不錯啊。//////////////////////////
- void disp(uchar m,uchar n)
- {
- P2=pos[n]; //查表法 把對應的段碼送P2?
- P0=seg[m]; //查表法 把對應的未碼送P0口
- delay_5ms();
- P2=0x00;
- }
- ////////////顯示程序,這個寫法不錯啊。//////222222222222222/////
- void disp00(uchar x,uchar y)
- {
- P2=pos00[y]; //查表法 把對應的段碼送P2?
- P0=seg00[x]; //查表法 把對應的未碼送P0口
- delay_5ms();
- P2=0x00;
- }
- ////////////////////主程序//////////////////////////////
- void main(void)
- {
- uchar j;
- uchar p;
- TMOD=0x01;
- // TH0=-50000/256;
- // TL0=-50000%256;
- TR0=1;
- ET0=1;
- EA=1;
- second=0;
- minite=0;
- hour=0;
- second00=7;
- minite00=8;
- hour00=9;
- jidianqi1=1;
- naozhongqiyongFlag=0;
- led=1;
- while(1)
- {
- TimeCompate();
- if(k1==0)
- {
- delay_5ms();
- if(k1==0) //判斷按鍵是否按下
- {
- second=0;
- while(k1==0);
- }
- }
- if(k2==0) //判斷按鍵是否按下
- {
- delay_5ms();
- if(k2==0)
- {
- minite++;
- if(minite==60) minite=0;
- while(k2==0);
- }
- }
- if(k3==0) //判斷按鍵是否按下
- {
- delay_5ms();
- if(k3==0)
- {
- hour++;
- if(hour==24) hour=0;
- while(k3==0)
- {for(j=0;j<8;j++) //掃描顯示程序,循環(huán)有8次,01234567.
- disp(k[j],j); //掃描顯示程序
- }
- }
- }
- //////////////////////////////////////////////////////////////////////
-
- if(k4==0) //判斷按鍵是否按下
- {
- delay_5ms();
- if(k4==0)
- {
- while(k4==0)
- {
- for(p=0;p<8;p++)
- disp00(k00[p],p);
- TimeCompate();
- ;
- }
- }
- }
- ///////////////////////////////////////////////////////////////////////////////
- if(k5==0) //判斷按鍵是否按下
- {
- delay_5ms();
- if(k5==0)
- {
- second00=57;
- minite00=0;
- hour00=0;
- while(k5==0)
- {
- for(p=0;p<8;p++)
- disp00(k00[p],p);
- ;
- }
- }
- }
- //////////////////////////////////////////////////////////////////////////////////////
- if(k6==0) //判斷按鍵是否按下
- {
- delay_5ms();
- if(k6==0)
- {
- naozhongqiyongFlag=~naozhongqiyongFlag;
- led=~led;
-
- while(k6==0)
- {
- ;
- }
- }
- }
- ////////////////////////////////////////////////////////////////////////////////////
- for(j=0;j<8;j++) //掃描顯示程序,循環(huán)有8次,01234567.
- disp(k[j],j); //掃描顯示程序
- ////////////////////////////////////////////////////////////////////////////////////
- TimeCompate();
- ////////////////////////////////////////////////////////////////////////////////////
-
- }
- }
- ////////////////*定時器工作方式*/ /////////////////////////////////
- void t0(void) interrupt 1 /*定時器工作方式*/ using 0 //工作寄存器
- {
- num++;
-
- if(num==20)
- {
- num=0;
- second++;
- if(second==60)
- {
- second=0;
- minite++;
- if(minite==60)
- {
- minite=0;
- hour++;
- if(hour==24)
- {
- hour=0;
- }
- }
- }
- k[0]=second%10; //各位
- k[1]=second/10; //各十位
- k[3]=minite%10; //各位
- k[4]=minite/10; //各十位
- k[6]=hour%10; //各位
- k[7]=hour/10; //各十位
- }
- num00++;
- if(num00==20)
- {
- num00=0;
- second00++;
- if(second00==60)
- {
- second00=0;
- minite00++;
- if(minite00==60)
- {
- minite00=0;
- hour00++;
- if(hour00==99)
- {
- hour00=0;
- }
- }
- }
- k00[0]=second00%10; //各位
- k00[1]=second00/10; //各十位
- k00[3]=minite00%10; //各位
- k00[4]=minite00/10; //各十位
- k00[6]=hour00%10; //各位
- k00[7]=hour00/10; //各十位
- }
-
-
- TH0=-50000/256;
- TL0=-50000%256;
-
- }
復制代碼
|