自己弄了個四位共陰數(shù)碼管顯示電子時鐘帶按鍵帶鬧鈴 現(xiàn)在想另加個1302芯片讓掉電后時鐘繼續(xù)走 望高人幫幫我怎么在程序里面實現(xiàn) 謝謝 我把我的源程序貼上望高人指點 在此謝過
//鬧鈴功能說明:
//按下KEY之后 進入設置鬧鈴模式 小數(shù)點不閃爍
//設置完鬧鈴時間后 再按一下KEY 繼續(xù)顯示時鐘
//時鐘到達設置時間后 P1^0變?yōu)楦唠娖?持續(xù)一秒鐘
#include <at89x51.h> //頭文件包含 #define uchar unsigned char //宏定義 #define uint unsigned int #define ON 0 //定義0為打開 #define OFF 1 //定義1為關閉 #define LEDBus P2 //定義p2口為數(shù)碼管段碼口 sbit MIAO =P1^7; //秒點 ,數(shù)碼管第二位小數(shù)點,可以自己隨意定義. sbit HOU_S=P3^3; //時十位位選 sbit HOU_G=P3^2; //時個位位選 sbit MIN_S=P3^1; //分十位位選 sbit MIN_G=P3^0; //分個位位選 sbit ALA=P1^0; //鬧鈴蜂鳴 sbit KEY =P0^0; //鬧鈴設置按鍵 sbit H_KEY=P0^5; //時調整鍵 sbit M_KEY=P0^4; //分調整鍵 bit SHAN; //閃爍標志位 uchar second,minute,hour,m,h,flag; //定義秒、分、時寄存器 uchar code LEDTab[]={0x3f,0x06,0x5b, //共陰數(shù)碼管段碼表0--9碼 0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void delay(uchar t); //延時函數(shù) void init(); //初始化函數(shù) void display(uchar,uchar); //顯示函數(shù) void min_tiao(); //分調整函數(shù) void hou_tiao(); //時調整函數(shù) void alarm_tiao(); /*************************************** 函 數(shù) 名:main 功 能:主函數(shù) 說 明: 入口參數(shù):無 返 回 值:無 ****************************************/ void main() { init(); //調用初始化函數(shù) while(1) //主程序循環(huán) { if(!H_KEY) hou_tiao(); //如果時調整鍵按下(為0),調用時調整函數(shù) if(!M_KEY) min_tiao(); //如果分調整鍵按下(為0),調用分調整函數(shù) if(!KEY) { while(!KEY); alarm_tiao(); } if((m==minute)&&(h==hour)==1) ALA=1; else ALA=0; display(minute,hour); //調用顯示函數(shù) } } /*************************************** 函 數(shù) 名:init 功 能:初始化函數(shù) 說 明:初始化定時器及中斷 入口參數(shù):無 返 回 值:無 ***************************************/ void init() { TMOD=1;TH0=0X3C;TL0=0XB0; //定時器0模式1,50毫秒 ET0=1;TR0=1;EA=1; //開定時器0中斷、啟動定時器0、開總中斷 m=0;h=0;flag=0; } /*************************************** 函 數(shù) 名:display 功 能:顯示函數(shù) 說 明: 入口參數(shù):無 返 回 值:無 ***************************************/ void display(uchar minute,uchar hour) { LEDBus=LEDTab[minute%10]; //分個位送數(shù)碼管顯示 MIN_G=ON; //打開分個位位選 delay(1); //顯示1毫秒 MIN_G=OFF; //關閉分個位位選 LEDBus=LEDTab[minute/10]; //分十位送數(shù)碼管顯示 MIN_S=ON; //打開分十位位選 delay(1); //顯示1毫秒 MIN_S=OFF; //關閉分十位位選 LEDBus=LEDTab[hour%10]; //時個位送數(shù)碼管顯示 MIAO=SHAN; //秒點閃爍 HOU_G=ON; //打開時個位位選 delay(1); //顯示1毫秒 HOU_G=OFF; //關閉時個位位選 if(hour/10) //如果時十位為0,不顯示十位數(shù)字 { LEDBus=LEDTab[hour/10]; //時十位送數(shù)碼管顯示 HOU_S=ON; //打開時十位位選 delay(1); //顯示1毫秒 HOU_S=OFF; //關閉時十位位選 } } /*************************************** 函 數(shù) 名:min_tiao 功 能:分調整 說 明: 入口參數(shù):無 返 回 值:無 ***************************************/ void min_tiao() { while(!M_KEY) display(minute,hour); //等待分調整鍵松開 second=0;minute++; //秒清零、分加1 if(minute==60) minute=0; //如果分等于60,分變0 } /*************************************** 函 數(shù) 名:hou_tiao 功 能:時調整 說 明: 入口參數(shù):無 返 回 值:無 ***************************************/ void hou_tiao() { while(!H_KEY) display(minute,hour) ; //等待時調整鍵松開 second=0;hour++; //秒清零,時加1 if(hour==24) hour=0; //如果時等于24,時變0 } /*************************************** 函 數(shù) 名:delay 功 能:延時函數(shù) 說 明: 入口參數(shù):t:延時時間長短 返 回 值:無 ***************************************/ void alarm_tiao() { flag=1; while(flag) { if(!H_KEY) { while(!H_KEY) display(m,h) ; h++; if(h==24) h=0; } if(!M_KEY) { while(!M_KEY) display(m,h); m++; if(m==60) m=0; } if(!KEY) flag=0; display(m,h); } while(!KEY); } void delay(uchar t) { uchar i; //定義變量 for(;t>0;t--) //如果t大于0,t減1(外層循環(huán)) for(i=124;i>0;i--); //i等于124,如果i大于0,i減1 } /*************************************** 函 數(shù) 名:timer0 功 能:定時器0中斷函數(shù) 說 明: 入口參數(shù):無 返 回 值:無 ***************************************/ void timer0() interrupt 1 //定時器0(中斷1) { uchar tim1,tim2; //定義臨時變量 TL0=TL0+0XB0;TH0=0X3C; //重裝定時器初值 tim1++; //每中斷一次tim1加1 if(tim1==10) //中斷10(0.5秒) { if(!flag) { SHAN=!SHAN; //閃爍標志取反 } tim1=0;tim2++; //tim1清零,tim2加1 if(tim2==2) //到了1秒 { tim2=0;second++; //tim2清零,秒加1 if(second==60) //如果秒到60 { second=0;minute++; //秒變0,分加1 if(minute==60) //如果分到60 { minute=0;hour++; //分變0,時加1 if(hour==24) hour=0; //如果時到24,時變0 } } } } } /*************************************** program end 程序結束 ***************************************/
做一個1302的讀寫函數(shù),上電 后就從1302里讀出時間來,放到LED上顯示,有按鍵調準時間的時候就對1302寫一次新的時間進去
嘿嘿 我不會寫不知道怎么弄 謝謝
歡迎光臨 (http://www.torrancerestoration.com/bbs/) | Powered by Discuz! X3.1 |