您的位置:网站首页 > 电器维修资料网 > 正文 >
液晶显示器的测试程序
来源: 日期: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
- 下一页
【看看这篇文章在百度的收录情况】
相关文章
- 上一篇: 液晶显示模块与单片机的连接方式
- 下一篇: 卫星接收机高频头原理