您的位置:網站首頁 > 電器維修資料網 > 正文 >
液晶顯示器的測試程序
來源: 日期:2013-12-17 21:35:44 人氣:標簽:
編譯通過后,將lcd1文件夾中的hex文件通過top851編程器燒錄到89c51芯片中,將芯片插入到s2型數碼管試驗板上,試驗板上標示lcd1的排針通過14芯排線與液晶顯示模組(lcm)正確連接,將top851編程器的9v直流電源插到s2型試驗板上通電運行。可看到液晶顯示屏的綠色背光柔和點亮,同時顯示英文字符“a”。
我們對程序進行解釋。
序號1(程序解釋,以下同):程序分隔及說明。
序號2:定義lcm的rs引腳由89c51的p3.3腳控制。
序號3:定義lcm的r_w引腳由89c51的p3.4腳控制。
序號4:定義lcm的e引腳由89c51的p3.5腳控制。
序號5:定義lcm的數據口dbo_db7由89c51的p1口控制。
序號6:程序分隔及說明。
序號7:程序從地址ooooh開始。
序號8:跳轉到main主程序處。
序號9:程序分隔及說明。
序號10:主程序main從地址0030h開始。
序號11:主程序開始,堆棧指針指向70h。
序號12:程序分隔及說明。
序號13:向累加器送立即數o0111000b.確定8位數據傳送,雙行顯示,5x7點陣字形。
序號14:程序分隔及說明。
序號15:將累加器內容壓棧保護。
序號16:置允許端e低電平。
序號17:置讀寫端r_w高電平,選擇讀方式。
序號18:置寄存器選擇端rs低電平,選擇指令寄存器。
序號19:置允許端e高電平。
序號20:將lcm的dbo_db7數據讀至累加器中。
序號21:置允許端e低電平。
序號22:若累加器的第7位(即為lcm的忙碌標志信號bf)為高電平,說明lcm正忙,跳轉回busy_loop處繼續查詢。否則順序執行。
序號23:彈出壓棧內容至累加器中。
序號24:調用延肘子程序。
序號25:程序分隔及說明。
序號26:置允許端e低電平。
序號27:置讀寫端r_w低電平,選擇寫方式。
序號28:置寄存器選擇端rs低電平,選擇指令寄存器。
序號29:置允許端e高電平。
序號30:將累加器內容傳送至lcm。
序號31:置允許端e低電平。
序號32:程序分隔及說明。
序號33:向累加器送立即數ooo01110b,顯示屏開啟,顯示光標,光標不閃爍。
序號34:程序分隔及說明。
序號35:將累加器內容壓棧保護。
序號36:置允許端e低電平。
序號37:置讀寫端r_w高電平,選擇讀方式。
序號38:置寄存器選擇端rs低電平,選擇指令寄存器。
序號39:置允許端e高電平。
序號40:將lcm的dbo_db7數據讀至累加器中。
序號41:置允許端e低電平。
序號42:若累加器的第7位(即為lcm的忙碌標志信號bf)為高電平,說明lcm正忙,跳轉回busy_loop1處繼續查詢。否則順序執行。
序號43:彈出壓棧內容至累加器中。
序號44:調用延時子程序。
序號45:程序分隔及說明。
序號46:置允許端e低電平。
序號47:置讀寫端r_w低電平,選擇寫方式。
序號48:置寄存器選擇端rs低電平,選擇指令寄存器。
序號49:置允許端e高電平。
序號50:將累加器內容傳送至lcm。
序號51:置允許端e低電平。
序號52:程序分隔及說明。
序號53:向累加器送立即數oooo0110b.光標右移一格,ac值加一,字符全部不動。
序號54:程序分隔及說明。
序號55:將累加器內容壓棧保護。
序號56:置允許端e低電平。
序號57:置讀寫端r_w高電平,選擇讀方式。
序號58:置寄存器選擇端rs低電平,選擇指令寄存器。
序號59:置允許端e高電平。
序號60:將lcm的dbo_db7數據讀至累加器中。
序號61:置允許端e低電平。
序號62:若累加器的第7位(即為lcm的忙碌標志信號bf)為高電平,說明lcm正忙,跳轉回busy_loop2處繼續查詢。否則順序執行。
序號63:彈出壓棧內容至累加器中。
序號64:調用延時子程序。
序號65:程序分隔及說明。
序號66:置允許端e低電平。
序號67:置讀寫端r_w低電平,選擇寫方式。
序號68:置寄存器選擇端rs低電平,選擇指令寄存器。
序號69:置允許端e高電平。
序號70:將累加器內容傳送至lcm。
序號71:置允許端e低電平。
序號72:程序分隔及說明。
序號73:程序分隔及說明。
序號74:向累加器送立即數10000000b,設定要讀寫數據的ddram地址。
序號75:程序分隔及說明。
序號76:將累加器內容壓棧保護。
序號77:置允許端e低電平。
序號78:置讀寫端r_w高電平,選擇讀方式。
序號79:置寄存器選擇端rs低電平,選擇指令寄存器。
序號80:置允許端e高電平。
序號81:將lcm的dbo_db7數據讀至累加器中。
序號82:置允許端e低電平。
序號83:若累加器的第7位(即為lcm的忙碌標志信號bf)為高電平,說明lcm正忙,跳轉回busy_loop3處繼續查詢。否則順序執行。
序號84:彈出壓棧內容至累加器中。
序號85:調用延時子程序。
序號86:程序分隔及說明。
序號87:置允許端e低電平。
序號88:置讀寫端r_w低電平,選擇寫方式。
序號89:置寄存器選擇端rs低電平,選擇指令寄存器。
序號90:置允許端e高電平。
序號91:將累加器內容傳送至lcm。
序號92:置允許瑞e低電平。
序號93:程序分隔及說明。
序號94:向累加器送立即數41h(英文字母“a”的ascii碼)。
序號95:程序分隔及說明。
序號96:將累加器內容壓棧保護。
序號97:置允許端e低電平。
序號98:置讀寫端r_w高電平,選擇讀方式。
序號99:置寄存器選擇端rs低電平,選擇指令寄存器。
序號100:置允許端e高電平。
序號101:將lcm的dbo_db7數據讀至累加器中。
序號102:置允許端e低電平。
序號103:若累加器的第7位(即為lcm的忙碌標志信號bf)為高電平,說明lcm正忙,跳轉回busy_loop4處繼續查詢。否則順序執行。
序號104:彈出壓棧內容至累加器中。
序號105:調用延時子程序。
序號106:程序分隔及說明。
序號107:置允許端e低電平。
序號108:置讀寫端r_w低電平,選擇寫方式。
序號109:置寄存器選擇端rs高電平,選擇數據寄存器。
序號110:置允許端e高電平。
序號111:將累加器內容傳送至lcm。
序號112:置允許端e低電平。
序號113:程序分隔及說明。
序號114:程序動態停機。
序號115:程序分隔及說明。
序號116:程序分隔及說明。
序號117~121:2.7ms延時子程序。
序號122:程序分隔及說明。
序號123:程序結束。
序號124:程序分隔及說明。
說明:對lcm引腳rs、r_w、e的操作要嚴格按照讀寫時序進行,否則可能造成讀寫失敗。
通過實驗我們看到液晶顯示屏聽從我們的指揮顯示出了所需的“a”字。但程序較長,不夠精簡。那好,下面我們按照模塊設計方式,先建立起相關的子程序,再來實踐更復雜、更實用的液晶顯示編程技術。
查詢忙碌標志信號子程序對單片機(mcu)而言lcm是一個慢速的裝置,mcu每下達一個指令到lcm,lcm至少要40us才能完成。在lcm執行一個指令的過程中不能接收其它的指令(忙碌標志信號讀取指令除外),所以當mcu要對lcm發指令之前,必須先檢查lcm的忙碌標志信號bf。bf=o表示lcm空閑,可以接收指令;bf=1則表示lcm正在執行指令中,很忙。mcu必須確定lcm有空閑的時候才能發指令給lcm。
mcu要讀取lcm忙碌標志信號的值時,是使用第9組指令:忙碌標志bf讀取。
序號1(程序解釋,以下同):標號check_busy作為檢查忙碌標志信號子程序的名稱,將累加器的內容入棧保護。
序號2:置e=o,禁止讀寫lcm。
序號3:置r_w=1,選擇讀模式。
序號4:置rs=o,選擇指令寄存器。
序號5:置e=1,允許讀寫lcm。
序號6:將lcm的dbo_db7數據讀至累加器中。
序號7:置e=o,禁止讀寫lcm。
序號8:判斷由lcm讀人數據的第7位(即bf)是否為17若等于i表示lcm忙碌中,程序跳轉到busy_loop處繼續查詢:否則順序執行。
序號9:將存入堆棧區中的內容彈出給累加器。
序號10:調用延時子程序,延時約2.7ms。
序號11:子程序返回。
- 1
- 2
- 下一頁
【看看這篇文章在百度的收錄情況】
相關文章
- 上一篇: 液晶顯示模塊與單片機的連接方式
- 下一篇: 衛星接收機高頻頭原理