基于無字庫12864液晶模塊的日歷鐘設(shè)計(jì)制作詳細(xì)介紹
本文我們要利用無字庫12864液晶模塊來自制一個小小日歷鐘,最圖終效果圖見圖1。
這個小小日歷鐘有什么特點(diǎn)呢?
1、電路簡單,使用元件少,容易制作,核心就是單片機(jī)ATMega8L和日歷鐘忡1302。
2、全部使用低壓元件,3V電壓就可以工作。
3,使用自編的小字模和圖形界面使得顯示具有特色:在文字界面可以清晰地讀出當(dāng)前的日期和時間,而且加入一個小動畫使顯示更加生動,在圖形界面使用模擬刻度和指針動態(tài)指示當(dāng)前時間,兩個界面柙按鍵切換。
圖2電路原理
4、電源制作在獨(dú)立的小電路板上,調(diào)試程序時插入使用USB供電的3.3V穩(wěn)壓電源,完畢后可以取下,插上開關(guān),使用電池供電。
5、不用背光時耗電很小(全機(jī)約3mA),可以使用圓片鋰電池CR2O32供電。
日歷鐘安裝在一塊50mm x50mm小萬用板上。外形見圖1。
電路原理
電原理圖見圖2,液晶型號如前述,單片機(jī)就是AVR的ATMega8L-8PU(以下簡稱M8),可以在低電壓下工作,M8 的PD口控制液晶,主要就是控制串行寫入顯示數(shù)據(jù)。DS13O2(以下簡稱1302)是常用的日歷時鐘芯片,32768Hz晶體B是它的振蕩源。在它內(nèi)部有10個命令寄存器用來存儲日期、時間的數(shù)值并控制芯片工作,M8通過PB0PB1、 PB2控制1302的RST、SCLK、I/O:RST為高時才能讀寫1302,讀寫都是讓數(shù)據(jù)在I/O串行傳送,當(dāng)SCLK上升沿時寫入1位地址或數(shù)據(jù),寫入1位地址或數(shù)據(jù)。寫入地址后每當(dāng)SCLK下降沿時則讀出數(shù)據(jù)。讀寫都是從最低位開始,受SCLK時鐘同步。接通電源后它必須通過單片機(jī)程序啟動計(jì)時,只要有電源或者各用電源存在,它就能一直工作下去,和單片機(jī)是否工作無關(guān)。連接在M8的PC口的4個輕觸按鍵,S1,S2,S3用于調(diào)校時問:分別為確認(rèn)修改、移動光標(biāo),修改數(shù)值;S4用于界面切換。電源包插兩部分 :圓片電池CR2O32通過二極管VD1連接到1302的VCC1作為后各電源、以便在關(guān)機(jī)時也能使1302繼續(xù)工作,另一路可通過開關(guān)S5給液晶、MB、1302的VCC2供電,在調(diào)試時為了避免消耗電池,接入了另—個5∨轉(zhuǎn)3.3V的小穩(wěn)壓板,用微型∪SB接口從外部取得5V電源。調(diào)試好后,取下穩(wěn)壓板,在插孔上插上小撥動開關(guān)S5,就可以使用鋰電池了。注意二極管VD1不可省略,因?yàn)榘凑?302的說明書,VCC2高于VCC1時由VCC2電,VCC2低于VCC1時由VCC1供電,在用電池時,由于有二吸管,VCC2比VCC1高,電池正常供電,關(guān)斷電池時,VCC2為0,電池通過二極管作為后各電源,符合要求 ,保證電路正常工作。[!--empirenews.page--]
硬件制作
這個日歷鐘電路簡單所需元器件很少。集成電路使用雙列直插插座,液晶焊上90度插針排和焊在萬用板上的90°排針插座插接。6線編程口,電源部分插座使用了圓孔2.54mm間距插座條。電池使用圓鋰電池CR2O32。采用一塊5cm見方的萬用板安裝全部元件,首先截取—段90°排針座,焊在電路板背面上方中央,作為液晶插座,M8的IC插座也要裝在電路板背面,為此把它的引腳往外彎折,按照液晶插座引腳對應(yīng)的位置定位IC插座, 先焊上RC復(fù)位元件以及—些相關(guān)連線,然后把MB插座定位,接焊在電路板焊盤上。1302插座依據(jù)M8插座定位,和32768HZ晶體一起也是焊在電路板反面。這種非常規(guī)安裝雖然不盡合理,但有效利用了萬用板的安裝面積(否則液晶占用的—塊不便利用),而且可使液晶和MB和1302之間的連線變得非常簡單,直接用焊錫連通即可。在電路板正面,還要安裝輕觸按鍵、電池窠、編程插孔排、電源塊插孔。兩面元器件布置見圖3和圖4。另用—小塊萬用板焊上微型USB插座、濾波電容、低壓穩(wěn)壓器LM1117-3.3以及和時鐘板電源插孔對應(yīng)的IC插針。
焊接液晶90°插針排時,可把它先插八已經(jīng)焊在電路板上的排針座,再焊接液晶上的鍍金焊盤,注意保持液晶和電路板的平行,所以插針不能在液晶上插到底。
因?yàn)長CD背光對于區(qū)區(qū)2OOmAh容量的小鋰電池來說,50mA電流顯得耗電太大,所以就沒有安裝背光電源接線,如果需要安裝最好接到外部電源上而不要使用小電池。
編程
電路雖然簡單,但是要讓不帶字庫的LCD、1302在M8的統(tǒng)一領(lǐng)導(dǎo)下有條不紊地工作,所以具體編程必須解決以下問題。
圖7程序流程[!--empirenews.page--]
1、讓時鐘走動起來,而且可以通過按鍵設(shè)定或修改當(dāng)前數(shù)據(jù)。
2、讓液晶顯示時鐘芯片當(dāng)前提供的信息:年月日時分秒,兩個顯示界面的按時刷新。
3、制作字模和圖形界面編程。
以上第1點(diǎn),就是用M8控制1302。我們可以按照它的時序要求編列一些函數(shù),另外在程序中建立—個數(shù)組DateTme[7]用來存放從1302讀出的年月日時分秒,作為數(shù)據(jù)刷新依據(jù);第2點(diǎn),主要是在LED上顯示這個數(shù)組當(dāng)前的數(shù)據(jù)(要注意1302存放日期時間的格式是BCD碼,所以存取之前必須先進(jìn)行數(shù)制轉(zhuǎn)換)。數(shù)據(jù)刷新實(shí)際上就是查詢1302當(dāng)前“秒”是否等于上次查詢結(jié)果,如不等于則已經(jīng)過去1秒,在數(shù)組記下新秒,刷新顯示“秒”-當(dāng)然是1秒刷新一次;而且當(dāng)秒更新為O日寸要更新“分”……·以此類推。第3點(diǎn)上次已有敘述使用,畔畔字模的方法,其中編制了8 x 8小數(shù)字、1 2×16數(shù)字、16×1 6漢字幾種字模用于不同的顯示位置,另外有個小雞啄米的動畫,可以在16點(diǎn)陣字模工具中用鼠標(biāo)點(diǎn)擊,分別畫出小雞低頭和小雞抬頭兩個圖案,在秒刷新時交替顯示即可。用字模軟件制作好所需的字模后,把所有常量字模數(shù)組定義放在頭文件miniClock中,這些數(shù)組全部放在FLASH區(qū)。
圖形界面的模擬指示針、刻度的制作也不困難,只要事先規(guī)劃出水平刻度長度,起點(diǎn)和終點(diǎn)坐標(biāo)畫出水平線,垂直刻度則按照刻度位置畫出短垂直線,指示地則是在刻度上方或下方垂直直線,它的位置要計(jì)算好,根據(jù)時間數(shù)據(jù)刷新而改變。
標(biāo)題“小小日歷鐘”是個漢字串,用一個漢字串顯示函數(shù)Vold show-string1616(ucharx,uchary,uchar * string,uchar string_length);參數(shù)是顯示起始列、頁、字串指針、字串長度,同時要事先定義—個以上指針?biāo)傅淖执當(dāng)?shù)組,此數(shù)組的元素是待顯示的字模在字模數(shù)組的位置。
整個程序流程見圖7,左遠(yuǎn)是主流程,右邊是年日月時分秒更新流程。
調(diào)試
硬件焊好后,反復(fù)檢查無誤 不插M8、1302和LCD鋰電池,插上穩(wěn)壓小板,接通USB電源,測試M8插座,1302插座,編程口和LCD的VCC電源應(yīng)為正常3.3V,拆下穩(wěn)壓斷電,插上鋰電池,1302插座8腳應(yīng)為2.4V,插上S5并接通,VCC應(yīng)為3∨,至此電池沒有問題了。拔掉S5,插上M8、液晶和1302,插上穩(wěn)壓板和USB電源,如果你從末使用過這種LCD,不妨自己先編制一些小程序(例如啟動、初始化M8和液晶后,用不同的參數(shù)運(yùn)行清屏函數(shù))觀察液晶顯示是否如同預(yù)期,如果沒有反應(yīng)要再次檢查程序中對M8引腳定義是否和你的實(shí)際硬件接線一致,這個小液晶和別的一些液晶不同,不需要硬件調(diào)整對比度夏,不會因此對比度調(diào)節(jié)不當(dāng)而不顯示(除非你修改了默認(rèn)值)。這—關(guān)先過了再往下走。往M8下載程序,如果一切正常,畫面會立即出來。不過現(xiàn)在的口期、時間不對、按動S2最下面一行日期時間的分隔符上會呈現(xiàn)豎線光標(biāo),連續(xù)按S2光標(biāo)會循環(huán)右移,在光標(biāo)停下的位置按動S1,在上面就會出現(xiàn)設(shè)定值,反復(fù)按動會循環(huán)遞增,就這樣逐—調(diào)節(jié)日期和時間,如圖5所示。最后按下S3,新的時間就存入1302了,并能按秒刷新。現(xiàn)在插上電池,一切就好了。如圖 6所示,可見時、分已經(jīng)改為新的設(shè)定值??梢匀サ舴€(wěn)壓板,雖然液晶熄滅,可是1302還在悶聲不響地運(yùn)行,如果你插上開關(guān)S5再接通,液晶又亮了。為了節(jié)省電池消耗,不要老是開著它。如同老式懷表,看表前再按開蓋子。