《SET1602显示驱动汇编程序样例.doc》由会员分享,可在线阅读,更多相关《SET1602显示驱动汇编程序样例.doc(7页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、SET1602显示驱动汇编程序样例;-;SET1602测试程序,参照KS0074控制器,针对AT89S52、32MHZ晶振而编程;SET1602引脚为:1VCC,2VCC,3GND,4BLA,5DB7,6DB6,7DB5,8DB4,9E,10RW,11RS,12V0,13GND,14GND,15VCC.实际上,可任用其中一个VCC引脚和一个GND引脚。;KS0074有8线并行、4线并行和2线串行输入方式,但set1602默认的输入方式为4数据总线并行输入方式;V0引脚应通过串接800欧左右电阻后接VCC(5V)。或者,在VCC和GND之间串接一个510可调电位器,滑动端接V0,利用调节滑动端控
2、制LCD显示对比度。;BLA输入电压应为3.3V,可通过串接合适电阻后接VCC(5V),避免高温烧坏LCD。;-;以下为硬件连接要求 DB4 equ p2.4 DB5 equ p2.5 DB6 equ p2.6 DB7 equ p2.7 RS EQU P2.0 RW EQU P2.1 E EQU P2.2 RCOMDATE equ 20H;作为读取的BF相关指令信息的暂存单元 WCOMdate equ 21H;作为拟写入指令代码的暂存单元 RLCDDATE Equ 22H;作为读取LCD相关显示代码或信息的暂存单元 WLCDDATe Equ 23H;作为拟写入LCD显示信息的暂存单元;-ORG
3、 00HSJMP MAINORG 50HMAIN: MOV SP,#30H;-;首先,开机或复位后,应进行4数据总线和LCD初始化,将默认的8位数据接口改为4位。;- LCALL Delay1MS;开机或复位后,至少应等待20MS以上 LCALL Delay1MS LCALL Delay1MS LCALL Delay1MS LCALL Delay1MS LCALL Delay1MS LCALL Delay1MS LCALL Delay1MS LCALL Delay1MS LCALL Delay1MS LCALL Delay1MS LCALL Delay1MS LCALL Delay1MS LC
4、ALL Delay1MS LCALL Delay1MS LCALL Delay1MS LCALL Delay1MS LCALL Delay1MS LCALL Delay1MS LCALL Delay1MS;第一步功能设置,设为4位数据总线方式输入(DL=0) MOV WCOMDATE,#20H LCALL INPUTCOMMAND;输入指令0010XXXX(低四位忽略);第二步功能设置,在保持4位数据总线输入方式下设为两行模式(输入指令00101XXX) MOV WCOMDATE,#28H;设成2行显示 LCALL INPUTCOMMAND;输入指令00101XXX;第三步显示开关设置 MOV
5、 WCOMDATE,#0CH;设成显示开,而光标开和光标闪烁关 LCALL INPUTCOMMAND;输入指令00001111;第四步清屏 MOV WCOMDATE,#01H; LCALL INPUTCOMMAND;输入指令00000001 LCALL DELAY1MS;输入功能设置指令需延迟1.53MS以上(除归位指令和本指令执行时间为1.53MS,其余指令执行时间均不足0.1MS);第五步输入模式设置 MOV WCOMDATE,#06H; LCALL INPUTCOMMAND;输入指令00000110;- -;然后,将逆序显示变更为正常显示(即使用KS0074的镜向功能);-;第一步,功能
6、设置指令,使RE=1 MOV WCOMDATE,#2CH; LCALL INPUTCOMMAND;输入指令00101100;第二步,输入模式设置指令,使BID=1(逆序显示)? MOV WCOMDATE,#07H; LCALL INPUTCOMMAND;输入指令00000111;第三步,功能设置指令,使RE=0,以便后续应用时可使用正常指令 MOV WCOMDATE,#28H; LCALL INPUTCOMMAND;输入指令00101000;- ;最后,可实际应用,以下为测试段,未作精简;-;第一步,显示第一行的固定字符(40H4EH,起始位址40H),测试要求全部显示出来 MOV WCOMD
7、ATE,#2CH;功能设置指令,使RE=1,以执行扩充命令 LCALL INPUTCOMMAND;输入指令00101100 MOV WCOMDATE,#40H;设SEGRAM地址(格式为01XXABCD,起始地址为40H) LCALL INPUTCOMMAND;输入指令40H ;(1)显示第一个段码字符即信号强度标志,默认为不显示 MOV WLCDDATe,#0ffH;40H控制第一个字符的大部分段码位 LCALL INPUTDATACODE MOV WLCDDATe,#0ffH;41H控制第一个字符中除40H控制段码外的其它位 LCALL INPUTDATACODE MOV WLCDDATe
8、,#0FFH;42H无用 LCALL INPUTDATACODE MOV WLCDDATe,#0FFH;43H无用 LCALL INPUTDATACODE ;(2)显示第二个段码字符即电量显示符号,默认显示满电量 MOV WLCDDATe,#0FFH;44H控制全部电量显示段码位,对应关系应进一步测试 LCALL INPUTDATACODE ;(3)显示第三个段码字符主菜单标志符,默认显示主菜单符号 MOV WLCDDATe,#0FFH;45H控制全部主菜单显示段码位 LCALL INPUTDATACODE MOV WLCDDATe,#00H;46H无用 LCALL INPUTDATACODE
9、 MOV WLCDDATe,#00H;47H无用 LCALL INPUTDATACODE MOV WLCDDATe,#00H;48H无用 LCALL INPUTDATACODE ;(4)显示第四个段码字符即闹铃符号,默认不显示 MOV WLCDDATe,#0ffH;49H控制闹铃所有段码位 LCALL INPUTDATACODE MOV WLCDDATe,#00H;4A无用 LCALL INPUTDATACODE ;(5)显示第五个段码字符打开修笺(书本)符号,默认不显示 MOV WLCDDATe,#0ffH;4BH控制该符号全部段码 LCALL INPUTDATACODE MOV WLCDD
10、ATe,#00H;4CH无用 LCALL INPUTDATACODE ;(6)显示第六个段码字符,默认显示 MOV WLCDDATe,#0ffH;4DH控制该符号全部段码 LCALL INPUTDATACODE MOV WLCDDATe,#00H;4EH无用 LCALL INPUTDATACODE ;(7)显示第七个段码字符即接听电话符号,默认显示 MOV WLCDDATe,#0FFH;55H控制该符号全部段码 LCALL INPUTDATACODE MOV WCOMDATE,#28H;功能设置指令,使RE=0,恢复正常命令状态 LCALL INPUTCOMMAND;输入指令00101000;
11、第二步,在第二行(起始位址为80H)显示“2013-05-15” MOV WCOMDATE,#83H;设置DDRAM地址,该行起始80H LCALL INPUTCOMMAND MOV WLCDDATe,#2 LCALL INPUTDATACODE MOV WLCDDATe,#0 LCALL INPUTDATACODE MOV WLCDDATe,#1 LCALL INPUTDATACODE MOV WLCDDATe,#3 LCALL INPUTDATACODE MOV WLCDDATe,#- LCALL INPUTDATACODE MOV WLCDDATe,#0 LCALL INPUTDATAC
12、ODE MOV WLCDDATe,#5 LCALL INPUTDATACODE MOV WLCDDATe,#- LCALL INPUTDATACODE MOV WLCDDATe,#1 LCALL INPUTDATACODE MOV WLCDDATe,#6 LCALL INPUTDATACODE;第三步,在第三行(起始位址为90H)显示“21:49:38” MOV WCOMDATE,#94H;设置DDRAM地址 LCALL INPUTCOMMAND MOV WLCDDATe,#2 LCALL INPUTDATACODE MOV WLCDDATe,#1 LCALL INPUTDATACODE MO
13、V WLCDDATe,#: LCALL INPUTDATACODE MOV WLCDDATe,#4 LCALL INPUTDATACODE MOV WLCDDATe,#9 LCALL INPUTDATACODE MOV WLCDDATe,#: LCALL INPUTDATACODE MOV WLCDDATe,#3 LCALL INPUTDATACODE MOV WLCDDATe,#8 LCALL INPUTDATACODE SJMP $;-;读BF并判断状态子程序;直到LCD空闲时退出本程序;-READBFAC: PUSH ACCBFWAIT: SETB DB4;将4位数据线设置到读有效状态
14、SETB DB5 SETB DB6 SETB DB7 CLR RS;设置成读BF及AC值操作状态 SETB RW SETB E;第一次读,使LCD将BF及AC值的高4位信息释放到数据总线上。 MOV C,DB7 MOV ACC.7,C CLR E;高半字节读取完成 CLR RW SETB DB4;将4位数据线设置到读有效状态 SETB DB5 SETB DB6 SETB DB7 SETB RW SETB E;第二次读,使LCD将BF及AC值的低4位信息释放到数据总线上。 CLR E;第二次读取完成 JB ACC.7,BFWAIT;LCD忙碌时继续等待并监控,空闲时执行下面指令 POP ACC
15、RET;-;输入指令子程序INPUTCOMMAND;拟写指令代码存放在WCOMDATE中;-INPUTCOMMAND: PUSH ACC ;首先,判断LCD是否空闲并视具体情况处理 LCALL READBFAC ;然后,为写指令代码作好准备 MOV A,WCOMDATE;将拟写指令代码取到A中 ;再后,将拟写指令代码的高4位写入LCD CLR RS;设置成写指令状态 CLR RW SETB E MOV C,ACC.7;将高4位送出 MOV DB7,C MOV C,ACC.6 MOV DB6,C MOV C,ACC.5 MOV DB5,C MOV C,ACC.4 MOV DB4,C CLR E
16、SETB RW CLR RW ;最后,将拟写指令代码的低4位写入LCD SETB E MOV C,ACC.3;将低4位送出 MOV DB7,C MOV C,ACC.2 MOV DB6,C MOV C,ACC.1 MOV DB5,C MOV C,ACC.0 MOV DB4,C CLR E;E的下降沿执行上述指令,将低4位写入LCD LCALL DELAY1ms POP ACC RET;-;写显示数据子程序INPUTDATACODE;拟写数据代码存放在WLCDDATA中;-INPUTDATACODE: PUSH ACC ;首先,判断LCD是否空闲并视具体情况处理 LCALL READBFAC ;然
17、后,为写显示数据作好准备 MOV A,WLCDDATE;将拟写显示数据取到A中 ;第三,将拟写数据代码的高4位写入LCD的DDRAM SETB RS;设置成写显示数据状态 clr rw setb E MOV C,ACC.7;将高4位送出 MOV DB7,C MOV C,ACC.6 MOV DB6,C MOV C,ACC.5 MOV DB5,C MOV C,ACC.4 MOV DB4,C clr E setb RW CLR RW ;最后,将拟写数据代码的低4位写入LCD的DDRAM SETB E MOV C,ACC.3;将低4位送出 MOV DB7,C MOV C,ACC.2 MOV DB6,C MOV C,ACC.1 MOV DB5,C MOV C,ACC.0 MOV DB4,C CLR E LCALL DELAY1ms POP ACC RET;-;延时子程序DELAY1MS:针对32MHZ晶振编程,延时不少1MSDELAY1MS: MOV r6,#22HDELAY1ms1:MOV R7,#064HDELAY1ms2: NOP DJNZ R7,DELAY1ms2 DJNZ R6,DELAY1ms1 NOP RET;-END测试效果图
限制150内