|
|
這是我練習(xí)的多功能電子時鐘,我們要實(shí)現(xiàn)的功能有:走時、 校時、鬧鐘、溫度、遙控這么幾個。要想實(shí)現(xiàn)這幾個功能,其中走時所需要的就是時鐘芯片, 即 DS1302;時間需要顯示給人看,就需要顯示器件,我們用到了點(diǎn)陣、數(shù)碼管、獨(dú)立 LED、 液晶;再來看校時,校時需要輸入器件,本例中我們可以用板載按鍵和遙控器,它們各自的 驅(qū)動代碼不同,但是實(shí)現(xiàn)的功能是一樣的,都是校時;還有鬧鐘設(shè)置,在校時的輸入器件的 支持下,鬧鐘也就不需要額外的硬件輸入了,只需要用程序代碼讓蜂鳴器響就行了。- ET1 = 0; //禁止 T1 中斷 IT1 = 1; //設(shè)置 INT1 為負(fù)邊沿觸發(fā) EX1 = 1; //使能 INT1 中斷 } /* 獲取當(dāng)前高電平的持續(xù)時間 */ uint16 GetHighTime() { TH1 = 0; //清零 T1 計(jì)數(shù)初值 TL1 = 0; TR1 = 1; //啟動 T1 計(jì)數(shù) while (IR_INPUT) //紅外輸入引腳為 1 時循環(huán)檢測等待,變?yōu)?0 時則結(jié)束本循環(huán) { if (TH1 >= 0x40) { //當(dāng) T1 計(jì)數(shù)值大于 0x4000,即高電平持續(xù)時間超過約 18ms 時, break; //強(qiáng)制退出循環(huán),是為了避免信號異常時,程序假死在這里。 } } TR1 = 0; //停止 T1 計(jì)數(shù)
-
- return (TH1*256 + TL1); //T1 計(jì)數(shù)值合成為 16bit 整型數(shù),并返回該數(shù) } /* 獲取當(dāng)前低電平的持續(xù)時間 */ uint16 GetLowTime() { TH1 = 0; //清零 T1 計(jì)數(shù)初值 TL1 = 0; TR1 = 1; //啟動 T1 計(jì)數(shù) while (!IR_INPUT) //紅外輸入引腳為 0 時循環(huán)檢測等待,變?yōu)?1 時則結(jié)束本循環(huán) { if (TH1 >= 0x40) { //當(dāng) T1 計(jì)數(shù)值大于 0x4000,即低電平持續(xù)時間超過約 18ms 時, break; //強(qiáng)制退出循環(huán),是為了避免信號異常時,程序假死在這里。 } } TR1 = 0; //停止 T1 計(jì)數(shù)
-
- return (TH1*256 + TL1); //T1 計(jì)數(shù)值合成為 16bit 整型數(shù),并返回該數(shù) } /* INT1 中斷服務(wù)函數(shù),執(zhí)行紅外接收及解碼 */ void EXINT1_ISR() interrupt 2 { uint8 i, j; uint8 byt; uint16 time;
復(fù)制代碼
|
-
5.png
(111.36 KB, 下載次數(shù): 45)
下載附件
2018-7-6 17:35 上傳
頭文件
-
-
source.rar
2018-7-6 17:39 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
20.85 KB, 下載次數(shù): 5, 下載積分: 黑幣 -5
|