• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于ETM8812K4的段碼液晶屏萬年歷的設計

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

      劉波

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

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

      圖1 點亮全部段碼的ETM8812K4液晶屏

      1 ETM8812K4-01液晶屏簡介

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

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

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

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

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

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

      表1

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

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

      其它字符的地址和對應的數(shù)據(jù):

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

      從左到右的10個方格:

      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個“8”子后的冒號 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ū)動很難,其實并不難,互聯(lián)網(wǎng)上有HT1621的底層驅(qū)動程序,調(diào)用“HT1621.h”就可以點亮自己的段碼屏了。

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

      //本測試程序能夠測試HT1621的每一個字段,依次點亮每一個字段

      #include “main.h”

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

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

      void main()

      {

      unsigned char i,j,t;

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

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

      while(1){

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

      Ht1621WrAllData(0,Ht1621Tab,16);

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

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

      {

      t=0x01;

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

      {

      Ht1621WrOneData(i,t);

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

      Ht1621_delayms(500);//延時長點,便于準確標記每個段的地址和數(shù)據(jù)

      }

      }

      }

      }

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

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

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

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

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

      3 DS1302的測試

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

      圖3 顯示不正常的DS1302時鐘

      圖4 顯示不正常的DS1302時鐘

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

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

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

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

      圖6 覆銅板的銅箔面

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

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

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

      圖7 覆銅板的元件面

      圖8 正常工作中的DS1302時鐘

      圖9 main.c流程圖

      5 總結(jié)

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

      猜你喜歡
      液晶屏數(shù)碼管時鐘
      別樣的“時鐘”
      古代的時鐘
      基于STM32F4的多通道串口驅(qū)動TFT液晶屏顯示系統(tǒng)設計
      液晶與顯示(2020年5期)2020-05-06 13:46:58
      Arduino編程
      電腦報(2019年2期)2019-09-10 07:22:44
      MC9S08FL16單片機數(shù)碼管靜態(tài)顯示分析
      科技風(2019年13期)2019-06-11 13:38:30
      單片機控制的四位數(shù)碼管動態(tài)顯示編程
      基于Qt的數(shù)碼管數(shù)字編碼系統(tǒng)的設計與實現(xiàn)
      FPGA的TFT-LCD真彩液晶屏顯示控制
      有趣的時鐘
      基于機器視覺的液晶屏字符缺陷檢測系統(tǒng)設計
      吐鲁番市| 贵德县| 海盐县| 扶沟县| 长丰县| 马边| 鲁山县| 资阳市| 白水县| 佛学| 福贡县| 杭锦旗| 祁阳县| 惠来县| 惠水县| 翼城县| 开平市| 西林县| 金川县| 台东市| 鄂尔多斯市| 广南县| 东乡| 调兵山市| 洛宁县| 松江区| 松溪县| 弋阳县| 吉安市| 丹江口市| 德化县| 池州市| 铜陵市| 上杭县| 金山区| 西华县| 兴义市| 丹棱县| 枝江市| 沧源| 汶川县|