|
本帖最后由 tzfox 于 2021-2-17 13:33 編輯
最近對單片機產生了興趣,感覺好玩就試做了一個鬧鐘。
由于剛接觸單片機(入門小白),制作過程中碰到了不少問題,秉著邊學習邊制做的態度,一邊上網查資料(借鑒某些模塊的讀寫程序),一邊修改。
經過多次改進,成品相對完善滿意。現分享給 51hei論壇的朋友們,忘大家學習交流,指點改進!
功能:
年月日顯示
時間顯示
溫度顯示
鬧鐘*2(可關閉。模擬器中無法中斷鬧鈴2響鈴,實物正常)
短按功能鍵:顯示溫度、星期/亮屏/關閉鬧鈴聲
長按功能鍵:熄屏進入節能模式(模擬器無法喚醒掉電模式,實物正常)
長按設置鍵:打開/關閉按鍵音
耗電:
亮屏:65~75ma
熄屏:3~4ma
正面
51hei圖片_20210210111815.jpg (184.94 KB, 下載次數: 50)
下載附件
正面
2021-2-10 12:03 上傳
背面
51hei圖片_20210210111817.jpg (197.33 KB, 下載次數: 73)
下載附件
背面
2021-2-10 12:03 上傳
溫度、星期
51hei圖片_20210210111825.jpg (190.49 KB, 下載次數: 62)
下載附件
溫度、星期顯示
2021-2-10 12:05 上傳
鬧鐘設置
51hei圖片_20210210111832.jpg (215.48 KB, 下載次數: 88)
下載附件
鬧鐘設置
2021-2-10 12:05 上傳
按鍵音設置
51hei圖片_20210210111828.jpg (186.5 KB, 下載次數: 57)
下載附件
按鍵音設置
2021-2-10 12:05 上傳
MAX7219+TM1637
51hei圖片_20210210111750.jpg (51.71 KB, 下載次數: 60)
下載附件
TM1637+MAX7219
2021-2-10 12:06 上傳
51hei圖片_20210210111821.jpg (200.93 KB, 下載次數: 64)
下載附件
2021-2-10 12:06 上傳
由于買來的模塊上的數碼管有幾個段位是壞的,干脆換個大的!又買了個0.8寸(原0.36寸)的數碼管給焊上,TM1637有2個IO口是閑置的,正好飛線出來做時鐘閃爍點顯示和℃顯示
DS3231
51hei圖片_20210210111810.jpg (51.26 KB, 下載次數: 75)
下載附件
DS3231
2021-2-10 12:07 上傳
這個在這我要吐槽下:
由于想保存下按鍵音狀態,于是想用模塊的24C32芯片儲存。24C32本身的默認地址為0xa0、0xa1(模擬器存取OK),但模塊上就不行了。網上找了一圈都說模塊的默認地址為0x57(和芯片的設備地址規則不一樣), 試了下還是不行 試了各種方法,弄了幾天最終還是放棄了 最后選擇用52單片機自身的EEPROM存放。不過就在昨晚,一時突發靈感,去看了下模塊的原理圖,我*,**************。原來24C32的A0、A1、A2都接了高電平,那正確地址因該是0xAE、0xAF才對。見證奇跡的時刻到了,編譯、刷機~~~OK成了!!困擾幾天的問題終于解決了,今晚可以睡個好覺了 真不知道網上傳的0x57這個地址是哪來的。
單片機源程序如下:(本來想插入的,但是源碼框死活到不了最下面)
Snap2.jpg (168.34 KB, 下載次數: 66)
下載附件
2021-2-10 13:22 上傳
再分享一個本人自己做的數碼管取碼,進制轉換軟件
Snap1.jpg (66.41 KB, 下載次數: 75)
下載附件
2021-2-10 14:35 上傳
Snap2.jpg (24.94 KB, 下載次數: 59)
下載附件
2021-2-10 14:35 上傳
Snap3.jpg (95.01 KB, 下載次數: 67)
下載附件
2021-2-10 14:35 上傳
2021/2/17更新溫度顯示
- //讀取溫度
- void DS3231_ReadTemp(){
- uchar Temp8;
- uint Temp16;
- Temp8=DS3231_Read(DS3231_TEMPERATUREH);
- if((Temp8&0x80)==0) //判斷首字節為1即為 零下溫度
- {
- DS3231_TEMP[0]=0;
- DS3231_TEMP[1]=Temp8;
- Temp8=DS3231_Read(DS3231_TEMPERATUREL); //溫度低字節—小數位
- Temp8=(Temp8>>6)*25; //由于分辨率為0.25 所以擴大25倍便于顯示
- DS3231_TEMP[2]=Temp8;
- }else{ //零下溫度轉換—零下是以2的補碼形式存儲的
- DS3231_TEMP[0]=1;
- Temp16=Temp8; //單字節轉換雙字節
- Temp16=Temp16<<2; //移出兩位放溫度的低位
- Temp8=DS3231_Read(DS3231_TEMPERATUREL); //讀溫度低字節
- Temp8=Temp8>>6; //由于2位放在頭兩位上,移到低位
- Temp16=Temp16+Temp8; //組成10位的2進制的溫度編碼
- Temp16=(~Temp16)+1; //負數是以2的補碼形式存儲的,轉為原碼
- Temp16=Temp16&0x03ff;//10位的2進制的溫度編碼,截去無用位
- Temp8=Temp16&0x0003;//分離低兩位,作為小數位
- Temp8=Temp8*25; //由于分辨率為0.25 所以擴大25倍便于顯示
- DS3231_TEMP[2]=Temp8;
- Temp16=Temp16>>2; //整數位處理
- DS3231_TEMP[1]=Temp16;
- }
- }
復制代碼
|
-
-
電子鐘_DS3231.rar
2021-2-10 13:31 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
222.23 KB, 下載次數: 189, 下載積分: 黑幣 -5
-
-
數碼管、進制轉換.rar
2021-2-10 14:41 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
34.54 KB, 下載次數: 106, 下載積分: 黑幣 -5
評分
-
查看全部評分
|