
本人菜鳥(niǎo)一枚,學(xué)習(xí)單片機(jī)有2年了,只是停留在玩的階段,前一段時(shí)間做了一個(gè)時(shí)鐘,試著往里加程序,增加了倒計(jì)時(shí)定時(shí)器,PWM調(diào)光,后來(lái)又給定時(shí)器增加了掉電記憶功能,也就是EEPROM應(yīng)用,現(xiàn)在貼出來(lái)和初學(xué)者共同進(jìn)步,并歡迎大神們拍磚!廢話(huà)不說(shuō),傳照片!
主控芯片是STC12C5204AD,4位數(shù)碼管動(dòng)態(tài)掃描顯示,因?yàn)镾TC芯片IO口有推挽輸出,所以數(shù)碼管直接接到了芯片上,省了4只三極管但是也有弊端,就是顯示不均勻
28腳芯片去掉VCC,GND ,晶振(STC芯片內(nèi)置RC振蕩器,本想省去晶振,但考慮定時(shí)器要精準(zhǔn)一點(diǎn),還是接了一只12M晶振)占2個(gè)IO口,4位數(shù)碼管占12個(gè)IO,加上一個(gè)PWM輸出,一個(gè)蜂鳴器(按鍵音和定時(shí)器回零提示),DS1302占3個(gè)IO,算了一下,21個(gè)IO ,還有富余,人機(jī)互動(dòng)是4只按鍵,每只按鍵用了一個(gè)口,共用了25個(gè)IO。
電路簡(jiǎn)單,所以沒(méi)畫(huà)原理圖,直接做了99SE的PCB,沒(méi)在電腦上,明天傳
下面是數(shù)碼管掃描函數(shù)。如果用DS1302提供的秒來(lái)驅(qū)動(dòng)秒點(diǎn)閃的話(huà),秒點(diǎn)就會(huì)亮一秒,暗一秒,有慢半拍的感覺(jué),所以從數(shù)碼管掃描函數(shù)里計(jì)算出半秒時(shí)間來(lái)對(duì)半秒標(biāo)志取反,然后檢測(cè)半秒標(biāo)志控制秒點(diǎn)閃爍,但是又出現(xiàn)了新問(wèn)題,秒點(diǎn)會(huì)一直閃,只好給他設(shè)置了欄桿,只有在時(shí)鐘或定時(shí)運(yùn)行狀態(tài)下它才可以閃,其他狀態(tài)下關(guān)閉,一直閃的問(wèn)題解決了,還有一個(gè)小問(wèn)題就是在定時(shí)狀態(tài)下秒點(diǎn)閃爍和走秒不同步,有時(shí)看著有點(diǎn)別扭,請(qǐng)高手指點(diǎn)一下怎樣解決
謝謝師長(zhǎng)!這一段時(shí)間忙了點(diǎn),沒(méi)有更新,對(duì)不起大家啦。不管帖子沉到哪里,我也要把該做的事做完!下面說(shuō)一下這個(gè)時(shí)鐘的功能
1、實(shí)時(shí)時(shí)鐘,不怕掉電
2、倒計(jì)時(shí)定時(shí)器功能,最長(zhǎng)60分鐘,倒計(jì)時(shí)歸零后報(bào)警提醒。初次上電顯示E5E5,設(shè)定一次后掉電記憶
3、PWM調(diào)光功能,PWM1輸出三極管驅(qū)動(dòng),可直接驅(qū)動(dòng)LED
4、4只按鍵實(shí)現(xiàn)全部功能
4只按鍵功能:
從左到右按鍵1,時(shí)鐘、定時(shí)切換,上電顯示時(shí)鐘,按一下按鍵1切換到定時(shí),再按返回到時(shí)鐘
按鍵2,時(shí)鐘界面時(shí),按一次始終停止,再按小時(shí)加1,到59再?gòu)?加。按按鍵3,分鐘加1加到59再回到1繼續(xù)加1.按按鍵4退出,時(shí)鐘按 調(diào)整后時(shí)間運(yùn)行。
定時(shí)界面時(shí),按按鍵2定時(shí)進(jìn)入調(diào)整界面,按按鍵2分鐘加1,到59后回到1繼續(xù)加1.按按鍵3秒加1,倒59回到1再加1按按鍵4定時(shí)開(kāi)始 計(jì)時(shí),所調(diào)整定時(shí)時(shí)間記憶到單片機(jī)EEPROM中,每次調(diào)整都會(huì)更新到最后一次所調(diào)試間。定時(shí)運(yùn)行時(shí),按按鍵4定時(shí)停止,再按一次 返回到定時(shí)時(shí)間,再按又開(kāi)始倒計(jì)時(shí)
時(shí)鐘界面時(shí),按鍵3調(diào)光亮度加,按鍵4亮度減小。定時(shí)界面時(shí)亮度不可調(diào)
謝謝師長(zhǎng)幫頂,由您等前輩地幫扶,我等小菜鳥(niǎo)才能成長(zhǎng)起來(lái),感激不盡
上面是DS1302初始化函數(shù),因?yàn)橛袀溆秒姵兀詿o(wú)須每次開(kāi)機(jī)都初始化,看到有前輩用往DS1302的RAM中寫(xiě)入數(shù)據(jù),上電時(shí)讀出數(shù)據(jù)與寫(xiě)入數(shù)據(jù)相同,則說(shuō)明DS1302正在運(yùn)行,不初始化。可是我怎樣實(shí)驗(yàn)都沒(méi)成功,只好另尋他法。后又看到別的前輩用檢測(cè)DS1302秒寄存器是否為1來(lái)判斷DS1302是否運(yùn)行,以此決定是否初始化,結(jié)果我用也沒(méi)成功,我開(kāi)始懷疑是否我的人品有問(wèn)題無(wú)奈之下只好加了下面的else,每次上電都將秒寫(xiě)成30,因此時(shí)鐘每次上電都會(huì)出現(xiàn)誤差。請(qǐng)前輩指點(diǎn)一下,小菜感激不盡,定當(dāng)加倍努力
突然想到數(shù)碼管掃描既然能產(chǎn)生半秒定時(shí),能否拿來(lái)做延時(shí)?就是設(shè)置一個(gè)變量,每掃描完數(shù)碼管一次自加一次,自加次數(shù)有延時(shí)時(shí)間決定,不知是否可行?