国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于ETM8812K4的段碼液晶屏萬年歷的設(shè)計(jì)

2021-06-17 06:53:28劉波
電子制作 2021年1期
關(guān)鍵詞:液晶屏數(shù)碼管時(shí)鐘

劉波

(山東省威海市文登技師學(xué)院信息工程系,山東文登,264400)

段碼液晶屏幾乎可以說隨處可見,電子愛好者如果不能開發(fā)利用,實(shí)在是可惜。筆者手頭就有一塊液晶屏ETM8812K4-01,從郵購至今也未使用,現(xiàn)在網(wǎng)上可以搜索到該液晶屏的資料,決定試著開發(fā)使用。

圖1 點(diǎn)亮全部段碼的ETM8812K4液晶屏

1 ETM8812K4-01液晶屏簡介

把液晶屏ETM8812K4-01的顯示面向著自己,引腳在右側(cè),共16個(gè)引腳,右上角為第1腳,右下角為第16腳,對(duì)應(yīng)的引腳及功能如下:

1腳:CS片選;2腳:WR讀寫;3腳:AO數(shù)據(jù),此部分為上半屏的段劃屏,采用串行傳輸方式,可顯示一些“8”字和特殊的字符。

4腳: +5V;5腳:GND。

6腳:RS;7腳:R/W;8腳:EN;9-16腳:數(shù)據(jù)口(相當(dāng)于LCD1602的D0-D7);6-16腳為LCD1602部分。

兩個(gè)顯示部分由各自的驅(qū)動(dòng)電路驅(qū)動(dòng),可以單獨(dú)使用,也可以一起使用,上半屏由合泰HT1621或其兼容芯片驅(qū)動(dòng),下半屏由HD44780及兼容芯片驅(qū)動(dòng)。LCD1602部分可以顯示16個(gè)5×7點(diǎn)陣字符,這里重點(diǎn)介紹上半部分。網(wǎng)絡(luò)上有合泰HT1621的PDF文檔,包括時(shí)序圖、操作方式等,讀者可以自行查閱。

要想使用段碼屏,必須知道各段的地址和數(shù)據(jù),筆者對(duì)照該段碼屏的全部顯示內(nèi)容,并參考互聯(lián)網(wǎng)資料,把顯示的“8”字與市售數(shù)碼管的段位定義相同,把該段碼屏各地址對(duì)應(yīng)的數(shù)據(jù)和顯示內(nèi)容歸納了一個(gè)表格,見表1。

表1

地址和顯示圖形 0x1a 0x19|| 第2個(gè)“8”地址和顯示圖形 0x18 0x17<< 第3個(gè)“8”地址和顯示圖形 0x16 0x15>> 第4個(gè)“8”地址和顯示圖形0x13 0x12第5個(gè)“8” 一共127個(gè)段,0x13地址數(shù)據(jù)為0x08的段未設(shè)置地址和顯示圖形 0x11 0x10 TOTAL 第6個(gè)“8”地址和顯示圖形 0x0e 0x0d%上部 第7個(gè)“8”地址和顯示圖形 0x0b 0x0a S 第8個(gè)“8” “S”位于該字后邊地址和顯示圖形 0x08 0x07:第9個(gè)“8” “:”位于該字前邊地址和顯示圖形 0x06 0x05 F 第10個(gè)“8”地址和顯示圖形 0x01 1上部第11個(gè)“8” “1”位于該字的左邊地址和顯示圖形 0x03 0x04.第12個(gè)“8” “.”位于該字的左邊

注意:第11、12個(gè)數(shù)字“8”高四位和低四位的地址與前10個(gè)的排序是不同的。

其它字符的地址和對(duì)應(yīng)的數(shù)據(jù):

USB :0x1b ,0x08 CARD :0x1b ,0x04

從左到右的10個(gè)方格:

0x14 ,0x08--0x14 ,0x02--0x14 ,0x04-0x0f ,0x08-0x0f ,0x04-0x0c ,0x04---0x0c ,0x02-0x0c ,0x08-0x09 ,0x08-0x09 ,0x04

:0x1b ,0x02 ELAPSED :0x14 ,0x01 REMAIN:0x0c,0x01 AUTO :0x09 ,0x02 CUE: 0x09 ,0x01

第6個(gè)“8”子后的冒號(hào) 0x0f ,0x02 M: 0x0f ,0x01

SINGLE :0x1e,0x08 CONTINUE: 0x1e,0x04 ROBO:0x1e,0x02 PITCH :0x1e,0x01

PROGRAM :0x1f,0x01 LOOP :0x1f,0x02 REPEAT:0x1f,0x04 1 :0x1f,0x08 ALL:0x13,0x08

“+”自上而下的地址和數(shù)據(jù) 0x00, 0x08 0x00,0x04 0x00, 0x02

“1” 自上而下的地址和數(shù)據(jù) 0x01,0x08 0x00, 0x01

2 測試ETM8812K4液晶屏

本以為段碼屏的驅(qū)動(dòng)很難,其實(shí)并不難,互聯(lián)網(wǎng)上有HT1621的底層驅(qū)動(dòng)程序,調(diào)用“HT1621.h”就可以點(diǎn)亮自己的段碼屏了。

// ==Ht1621驅(qū)動(dòng)的液晶屏ETM8812K4-01測試程序main.c====

//本測試程序能夠測試HT1621的每一個(gè)字段,依次點(diǎn)亮每一個(gè)字段

#include “main.h”

//包含51單片機(jī)頭文件及數(shù)據(jù)類型聲明

#include“HT1621.h”// HT1621的底層驅(qū)動(dòng)程序

void main()

{

unsigned char i,j,t;

Ht1621_Init();// - - 上電初始化LCD

Ht1621_delayms(5000);//- -延時(shí)一段時(shí)間

while(1){

Ht1621_delayms(2000);//- -延時(shí)一段時(shí)間

Ht1621WrAllData(0,Ht1621Tab,16);

//- -清除1621寄存器數(shù)據(jù),即清屏

for (i=0;i<32;i++)//- -循環(huán)點(diǎn)亮LED,共32個(gè)地址

{

t=0x01;

for (j=0;j<4;j++)//每個(gè)地址有4個(gè)段,數(shù)據(jù)依次為1、2、4、8

{

Ht1621WrOneData(i,t);

t<<=1;//數(shù)據(jù)左移 1 位

Ht1621_delayms(500);//延時(shí)長點(diǎn),便于準(zhǔn)確標(biāo)記每個(gè)段的地址和數(shù)據(jù)

}

}

}

}

段碼屏的每一個(gè)地址都有4個(gè)段,段值依次為1、2、4、8,向每一個(gè)地址依次寫段值就可以逐段點(diǎn)亮,有了底層驅(qū)動(dòng)程序,編寫逐段點(diǎn)亮的顯示程序main.c,編譯生成16進(jìn)制文件下載到單片機(jī)中,仔細(xì)觀察段碼屏的每一個(gè)段的顯示次序,就可以知道該段的地址和數(shù)據(jù)了。知道這些數(shù)據(jù),采用底層驅(qū)動(dòng)程序,向?qū)?yīng)的段寫數(shù)據(jù),可以按要求顯示數(shù)字或個(gè)別特殊字符。

筆者使用Keil uVision4軟件編譯main.c沒有錯(cuò)誤后,下載到單片機(jī)里,連接好電路實(shí)驗(yàn),結(jié)果段碼屏顯示不正常,見圖2。屏上有一部分沒有點(diǎn)亮,程序是沒有問題的,想到以前碰到液晶屏的導(dǎo)電橡膠接觸不良,難道這個(gè)也是?于是小心的把金屬外框拆下,把電路板和導(dǎo)電橡膠的接觸面都擦了一遍,結(jié)果還是那樣,懷疑玻璃與導(dǎo)電橡膠接觸有問題,拆下一看,不得了,液晶玻璃邊緣大約1cm長×2mm寬的地方碎了,碎的地方剛好有導(dǎo)電條和導(dǎo)電橡膠接觸,玻璃屑還未掉出來,看來是由于外力的撞擊,金屬框沒有緩沖(這也是這種封裝的液晶屏的缺點(diǎn)吧),直接導(dǎo)致玻璃碎了,好在只是邊沿的導(dǎo)電部分碎了,如果顯示面碎了,該液晶屏也只得報(bào)廢了。

圖2 顯示不完整的ETM8812K4液晶屏

那能不能用僅有的7個(gè)數(shù)碼管做個(gè)時(shí)鐘呢?答案是肯定的。為了程序的通用性,同時(shí)結(jié)合附表數(shù)據(jù)的使用,筆者編寫了1位數(shù)碼管顯示數(shù)字的各個(gè)段碼和轉(zhuǎn)為16進(jìn)制數(shù)的函數(shù)—INT8U dat_buf(INT8U dat),該函數(shù)對(duì)ETM8812K4-01液晶屏中第1至第10個(gè)數(shù)碼管是適用的,當(dāng)要第11和12個(gè)數(shù)碼管顯示數(shù)字時(shí),要把顯示數(shù)據(jù)的高四位和低四位顛倒一下。當(dāng)你把某一個(gè)“8”字的各段的地址和該段的數(shù)據(jù)按數(shù)碼管畫出來的話,該函數(shù)是不難理解的。如果想顯示其它基于“8”字下的字符,還可以在該函數(shù)中繼續(xù)添加相關(guān)代碼,這是不難的。

既然該液晶屏還有LCD1602的功能,為何不用它來顯示日期呢?經(jīng)測試該屏雖然結(jié)構(gòu)上可以顯示1行共16個(gè)自定義字符,但在驅(qū)動(dòng)時(shí)要分兩行寫入,每行可以顯示8個(gè)自定義字符,第一行的起始地址是0x80,第2行的起始地址是0xc0。

3 DS1302的測試

筆者手頭有多塊DS1302時(shí)鐘芯片,決定好好利用一下,在調(diào)試過程中,不知都怎么折騰的,有的工作時(shí)發(fā)燙,只得斷電,不但顯示不正常,還不走時(shí)。其中的3塊,有的項(xiàng)為0,有的項(xiàng)不為0,但明顯的特征是秒為80,可讀寫,但不走時(shí),還有一塊,全部的顯示內(nèi)容都為0,不可以寫,也不走時(shí),這幾塊似乎都?jí)牧?,見圖3、圖4。查網(wǎng)上資料,說這種芯片有國產(chǎn)的,質(zhì)量比較差,很多人借此機(jī)會(huì)狠狠地黑了一把國產(chǎn)芯片,還有個(gè)問題是該芯片雙電源工作時(shí),未切斷主電源而拆裝紐扣電池,這時(shí)極易導(dǎo)致DS1302發(fā)燙,甚至損壞。我在調(diào)試DS1302時(shí),時(shí)鐘工作不正常,就曾拆過紐扣電池,應(yīng)該是這個(gè)原因所致。找來舊設(shè)備拆下一塊好的DS1302,連好電路,經(jīng)過調(diào)試,時(shí)鐘工作正常。

圖3 顯示不正常的DS1302時(shí)鐘

圖4 顯示不正常的DS1302時(shí)鐘

網(wǎng)上說DS1302芯片顯示小時(shí)超過23,分或秒超過59的等等都是壞的。全部顯示項(xiàng)為0的那塊肯定是報(bào)廢了,其余3塊覺得似乎不大可能報(bào)廢,能不能改改軟件試試。筆者的程序中沒有調(diào)整秒的這一項(xiàng),能不能在調(diào)整分的時(shí)候把秒清零(這樣調(diào)整時(shí)間可以更精準(zhǔn)些),或者在此時(shí)先判斷秒是否超過59,超過則把秒清零。按此想法把程序改了一下,結(jié)果那3塊DS1302竟然起死回生了,每塊實(shí)驗(yàn)一個(gè)周都沒問題。當(dāng)然若其他項(xiàng)超過正常值,是不是也可以這樣做?應(yīng)該可以,有類似問題的讀者朋友不妨可以試一試,說不定你的DS1302也能起死回生了。

4 DS1302萬年歷可調(diào)時(shí)鐘電路及軟件

圖5為筆者設(shè)計(jì)的DS1302萬年歷可調(diào)時(shí)鐘電路,由于是Proteus仿真電路,只有LCD1602顯示部分,而沒有HT1621的段碼顯示部分,整個(gè)電路采用單面萬能板制作,見圖6~圖8,還未來得及為這個(gè)時(shí)鐘做一個(gè)漂亮的外殼。P0口的低3位作LCD1602的控制端,高4位作LCD1602的數(shù)據(jù)口。P2口的高3位作HT1621顯示的接口,低3位作DS1302時(shí)鐘芯片的控制。為了減小DS1302的功耗,其主電源VCC2端串有390Ω電阻,這里沒有采用集成的4輸入端的入門電路,而采用4只二極管構(gòu)成的4輸入端的入門電路,任何一個(gè)按鍵按下都能觸發(fā)外部中斷0,各按鍵下端都接地,上端分別接P3口的高四位。LCD1602顯示年月天星期和調(diào)整項(xiàng),正常工作時(shí)調(diào)整項(xiàng)Adjust_Index為-1,實(shí)際顯示“/”,調(diào)整年顯示6,調(diào)整月顯示4,調(diào)整天顯示3,調(diào)整小時(shí)顯示2,調(diào)整分鐘顯示1。由于LCD1602能直接顯示ASCII碼,所以不用編寫復(fù)雜的數(shù)據(jù)表。HT1621驅(qū)動(dòng)的段碼液晶屏使用前6個(gè)8字顯示時(shí)分秒,時(shí)分是大字,秒是小字,這樣看起來效果也是不錯(cuò)的。

圖5 DS1302萬年歷可調(diào)時(shí)鐘電路

圖6 覆銅板的銅箔面

軟件包含7部分:HT1621.h、DS1302.h、DS1302.c、LCD1602_4bit.h、LCD1602_4bit.c、main.h、 main.c,詳細(xì)源代碼見壓縮包,圖9為main.c文件流程圖。

主程序的無限循環(huán)部分,不斷讀取DS1302的數(shù)據(jù),如果達(dá)到鬧鈴時(shí)間則鬧鈴響。定時(shí)器0中斷一次需50ms,每隔200ms LCD1602和段碼屏作輪流顯示。外部中斷0作按鍵的處理工作。程序中注釋詳細(xì),這里不再贅述。

筆者用keil uvision4編譯時(shí)會(huì)出現(xiàn) 警 告:“WARNING L15: MULTIPLE CALL TO SEGMENT(意思是發(fā)生了重入)”。原來是液晶屏的兩個(gè)顯示函數(shù)同時(shí)被中斷函數(shù)和主函數(shù)調(diào)用,這樣有可能引起程序沖突,而出現(xiàn)重復(fù)調(diào)用的警告,筆者開始忽略了這個(gè)問題,定時(shí)器初始化后立即開啟中斷,然后主程序調(diào)用LCD1602和HT1621的顯示函數(shù),中斷函數(shù)仍然調(diào)用這兩個(gè)顯示函數(shù),這樣主程序調(diào)用的顯示函數(shù)未執(zhí)行完,定時(shí)器中斷調(diào)用的顯示函數(shù)也發(fā)生了,從而使子函數(shù)調(diào)用發(fā)生沖突,所以導(dǎo)致調(diào)試不正常,因此就亂懷疑,導(dǎo)致DS1302損壞。最后,筆者把代碼改了,主程序的初始化部分在開啟中斷前調(diào)用顯示函數(shù),LCD1602顯示“年、月、W、:”,而段碼屏則完成清屏動(dòng)作,并且要延時(shí)2秒,確保液晶屏的顯示完成,再開啟中斷,讓LCD1602和HT1621分時(shí)顯示,這樣盡管出現(xiàn)了L15的警告代碼,但實(shí)際上是不會(huì)出現(xiàn)沖突的,可以忽略這個(gè)警告,調(diào)試成功。

圖7 覆銅板的元件面

圖8 正常工作中的DS1302時(shí)鐘

圖9 main.c流程圖

5 總結(jié)

(1)線路板的設(shè)計(jì)規(guī)劃、甚至焊接技術(shù)都有待提高。(2)軟件設(shè)計(jì)還可以優(yōu)化,鬧鈴時(shí)間的設(shè)置能夠調(diào)節(jié)就好了。當(dāng)然,還可以設(shè)置多個(gè)鬧鈴。(3)DS1302運(yùn)行還是有誤差的,如果能在軟件上自動(dòng)修正就好了。(4)調(diào)整項(xiàng)在調(diào)整時(shí)能閃爍就好了。(5)如果能給時(shí)鐘做個(gè)外殼就好了。

猜你喜歡
液晶屏數(shù)碼管時(shí)鐘
別樣的“時(shí)鐘”
古代的時(shí)鐘
基于STM32F4的多通道串口驅(qū)動(dòng)TFT液晶屏顯示系統(tǒng)設(shè)計(jì)
液晶與顯示(2020年5期)2020-05-06 13:46:58
Arduino編程
電腦報(bào)(2019年2期)2019-09-10 07:22:44
MC9S08FL16單片機(jī)數(shù)碼管靜態(tài)顯示分析
單片機(jī)控制的四位數(shù)碼管動(dòng)態(tài)顯示編程
基于Qt的數(shù)碼管數(shù)字編碼系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
FPGA的TFT-LCD真彩液晶屏顯示控制
有趣的時(shí)鐘
基于機(jī)器視覺的液晶屏字符缺陷檢測系統(tǒng)設(shè)計(jì)
峨边| 密山市| 云梦县| 获嘉县| 神木县| 汕尾市| 沈丘县| 呼伦贝尔市| 克拉玛依市| 共和县| 云霄县| 富川| 湄潭县| 潢川县| 宾阳县| 汉源县| 陇西县| 英超| 依兰县| 如皋市| 奉贤区| 庆元县| 辽阳县| 长兴县| 太仆寺旗| 章丘市| 鄱阳县| 奉化市| 昌平区| 灵川县| 丰县| 融水| 汝南县| 肃南| 亳州市| 兴义市| 安图县| 德保县| 佛坪县| 南郑县| 韩城市|