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