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