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