基于AT89C52的多功能科學(xué)計(jì)算器
本系統(tǒng)以AT89C52為控制核心,加上4×4矩陣鍵盤(pán)和4個(gè)功能按鍵作為輸入,采用了帶背光的1602液晶進(jìn)行數(shù)據(jù)的顯示。通過(guò)程序的處理,用簡(jiǎn)單的電路實(shí)現(xiàn)了豐富的功能。
1作品功能
作品采用浮點(diǎn)算法,實(shí)現(xiàn)了7位數(shù)范圍內(nèi)的數(shù)學(xué)運(yùn)算,整數(shù)、小數(shù)和負(fù)數(shù)皆可,并可以對(duì)正余弦函數(shù),正切函數(shù),開(kāi)平方,反正余弦函數(shù),反正切函數(shù),對(duì)數(shù)函數(shù),指數(shù)函數(shù),平方和立方進(jìn)行運(yùn)算,如果有小數(shù)的話結(jié)果顯示到四位小數(shù),真正實(shí)現(xiàn)了一個(gè)科學(xué)計(jì)算器應(yīng)該具備的功能。依托于1602液晶,實(shí)現(xiàn)了時(shí)間和日期的顯示。時(shí)間用單片機(jī)的定時(shí)器編寫(xiě),每天的誤差為12S,時(shí)間和日期可以根據(jù)需要進(jìn)行任意修改。當(dāng)日期變化之后,星期會(huì)跟著自動(dòng)轉(zhuǎn)換,星期的顯示正確。對(duì)時(shí)間和日期進(jìn)行修改的時(shí)候設(shè)置不符合實(shí)際的數(shù)字不能被寫(xiě)入到要修改的變量當(dāng)中,光標(biāo)會(huì)停在原地等待重新輸入。另外還擴(kuò)展了鬧鈴功能,和時(shí)間顯示在同一排,用一對(duì)[ ]括住,里面顯示的是鬧鈴的小時(shí)和分鐘,通過(guò)按鍵任意設(shè)定。密碼功能也是建立在液晶的基礎(chǔ)之上寫(xiě)出來(lái)的功能。如果操作者把作品切換到了密碼狀態(tài),當(dāng)輸入正確的密碼才可以執(zhí)行計(jì)算功能。密碼可以修改,修改后的密碼存放在程序存儲(chǔ)器當(dāng)中,掉電以后會(huì)消失,變?yōu)槌跏济艽a。密碼修改以后下次提示輸入密碼,正確的密碼是修改后的。
2硬件設(shè)計(jì)
2.1顯示模塊
液晶的R/W端直接接地,不去檢測(cè)忙信號(hào)。在程序中進(jìn)行延時(shí),等待顯示處理完畢。硬件接好以后可能會(huì)存在液晶屏幕太亮,沒(méi)有數(shù)據(jù)顯示的現(xiàn)象。這時(shí)只要對(duì)R3這個(gè)滑動(dòng)變阻器進(jìn)行調(diào)節(jié)即可解決故障。
2.2輸入模塊
對(duì)按鍵的掃描盡可能不放在主循環(huán)里一直檢測(cè),放在定時(shí)器里面,經(jīng)過(guò)一定的時(shí)間掃描一次或者把四個(gè)輸入口線接一個(gè)四輸入與門(mén)接入外部中斷,有按鍵按下才開(kāi)始進(jìn)行鍵值的掃描。
2.3蜂鳴器模塊
當(dāng)端口送出低電平,PNP三極管導(dǎo)通,蜂鳴器發(fā)聲。
2.4電源模塊
3軟件設(shè)計(jì)
本作品的硬件電路很簡(jiǎn)單,實(shí)現(xiàn)的功能全部是由程序編寫(xiě)實(shí)現(xiàn)。通過(guò)程序的編寫(xiě)使簡(jiǎn)單的器件實(shí)現(xiàn)豐富的功能。
3.1主功能計(jì)算器部分
使用雙精度類型來(lái)存放計(jì)算器的兩個(gè)輸入數(shù)值和最后的計(jì)算結(jié)果,最大接受的輸入位數(shù)為7位,超出7位顯示報(bào)錯(cuò),并且需要清屏,然后重新輸入。如果計(jì)算得到的數(shù)值超過(guò)8位,顯示也會(huì)報(bào)錯(cuò)。剛開(kāi)始采用定點(diǎn)算法,只做到了正負(fù)整數(shù)范圍內(nèi)的四則運(yùn)算。后面改用浮點(diǎn)的方案,可以計(jì)算小數(shù),小數(shù)暫取4位進(jìn)行顯示,顯示更多位也可以,并且實(shí)現(xiàn)了科學(xué)計(jì)算器應(yīng)有的功能。
3.2時(shí)間和日期顯示部分
出于學(xué)習(xí)的目的,時(shí)間采用定時(shí)器來(lái)累加,沒(méi)用使用時(shí)鐘芯片的方案。這樣子做出來(lái)的時(shí)鐘誤差會(huì)比用芯片的大,不過(guò)經(jīng)過(guò)處理之后,現(xiàn)在的誤差為一天12S,基本達(dá)到要求。但是可以肯定的是用時(shí)鐘芯片的方案是更好的,時(shí)間的誤差不大,而且掉電也會(huì)走時(shí)?,F(xiàn)在的方案掉電之后就需要對(duì)時(shí)間進(jìn)行重新設(shè)置,
設(shè)置時(shí)間、日期和鬧鈴時(shí)間采用三個(gè)單獨(dú)的按鍵,可以輸入相應(yīng)的按鍵對(duì)應(yīng)的鍵值對(duì)其進(jìn)行修改。程序編寫(xiě)對(duì)不合實(shí)際的數(shù)字不進(jìn)行接收,如小時(shí)第一位數(shù)字不能是比2更大的數(shù)字,小時(shí)是不能比23更大的數(shù)。如果輸入了不合適的數(shù)值,光標(biāo)會(huì)停在原地等待重新輸入。
當(dāng)日期改變了之后,星期會(huì)跟著自動(dòng)轉(zhuǎn)換。星期的算法思路如下:以公元元年的1月1日為參考點(diǎn),如果每一年都是平年,即365天,除7余1,也就是說(shuō)如果不遇上潤(rùn)年,每往下一年就會(huì)使星期數(shù)增一。同樣的道理,如果遇上潤(rùn)年,則多增一,第0年也是閏年。
鬧鈴的時(shí)間和現(xiàn)在走時(shí)的時(shí)間相等的時(shí)候,蜂鳴器就會(huì)響。關(guān)掉鬧鈴的話按鬧鈴關(guān)閉鍵。
3.3密碼輸入功能
密碼功能包括密碼輸入按鍵,檢查輸入是否正確的按鍵。修改密碼的按鍵,修改密碼要求輸入一次原始密碼。在輸入正確的情況下,提示輸入新密碼,新密碼設(shè)定之后要重新輸入一次進(jìn)行確定。第二次輸入的密碼和第一次相同就設(shè)置成功,下次進(jìn)入密碼模式的正確的密碼就是修改以后的密碼。如果不一樣,修改密碼失敗,密碼為初始密碼222222.密碼輸入成功以后會(huì)顯示到時(shí)間顯示模式。
3.4功能按鍵
同時(shí)按下時(shí)間功能鍵和任意按鍵進(jìn)入時(shí)間顯示模式,這時(shí)的矩陣鍵盤(pán)執(zhí)行時(shí)間模式下的功能。按計(jì)算功能鍵和任意按鍵切換到計(jì)算功能,在計(jì)算模式下Shift功能鍵對(duì)按鍵進(jìn)行復(fù)用。按密碼功能鍵和輸入密碼或者修改密碼按鍵進(jìn)入密碼模式。Shift功能處理科學(xué)計(jì)算器的函數(shù)的運(yùn)算和清屏以及負(fù)號(hào)的輸入,操作方法是同時(shí)按下Shift和對(duì)應(yīng)的函數(shù)鍵,松手以后顯示要計(jì)算的函數(shù)名稱,按等號(hào)執(zhí)行函數(shù)計(jì)算。
4軟件流程圖
5作品改進(jìn)設(shè)想
作品對(duì)計(jì)算器的主體功能實(shí)現(xiàn)的很好,只需要再對(duì)可能出現(xiàn)的Bug寫(xiě)出解決方案,在使用者出現(xiàn)誤操作的時(shí)候會(huì)出現(xiàn)應(yīng)有的提示,并且程序不會(huì)死機(jī)。我自己對(duì)所有功能進(jìn)行了調(diào)試,未發(fā)現(xiàn)上述情況的存在。另外,加入DS18b20進(jìn)行測(cè)溫顯示可以體現(xiàn)作品更多的人性化考慮,日歷功能可以進(jìn)一步豐富到萬(wàn)年歷,加入農(nóng)歷和節(jié)氣的顯示,這個(gè)時(shí)候就要改換12864進(jìn)行顯示。
附:
實(shí)物圖
正面效果圖
反面布線圖