1、实验八 单片机液晶显示实验 ———————————————————————————————— 作者: ———————————————————————————————— 日期: 11 个人收集整理 勿做商业用途 实验八 单片机液晶显示实验
2、 一、 实验目的 1、了解液晶显示屏的控制原理及方法. 2、了解点阵汉字的显示原理。 二、 实验说明 1、 利用实验上的液晶显示屏电路,编写程序控制显示,输出汉字。 2、本实验仪采用的液晶显示屏内置控制器为SED1520,点阵为122x32,需要两片SED1520组成,由E1、E2分别选通,以控制显示屏的左右两半屏。图形液晶显示模块有两种连接方式。一种为直接访问方式,一种为间接控制方式。本实验仪采用直接控制方式. 三、 实验仪器 计算机 伟福实验箱( lab2000P ) 四、 实验内容 1、利用实验上的液晶显示屏电路,编写程序控制显示,输出汉字。
3、 2、本实验仪采用的液晶显示屏内置控制器为SED1520,点阵为122x32,需要两片SED1520组成,由E1、E2分别选通,以控制显示屏的左右两半屏。图形液晶显示模块有两种连接方式。一种为直接访问方式,一种为间接控制方式。本实验仪采用直接控制方式。 3、直接控制方式就是将液晶显示模块的接口作为存储器或I/O设备直接挂在计算机总线上.计算机通过地址译码控制 E1和 E2的选通;读/写操作信号 R/W由地址线 A1控制;命令/数据寄存器选择信号 AO由地址线 A0控制。实际电路如上图所示.地址映射如下(地址中的X由LCD CS决定,可参见地址译码部分说明) 五、 思考题 1、显
4、示自己的班级和姓名; 2、可以动态显示,上下或者左右移动; 六、 源程序修改原理及其仿真结果 CWADD1 EQU 08000H ;写指令代码地址(E1) DWADD1 EQU 08001H ;写显示数据地址(E1) CRADD1 EQU 08002H ;读状态字地址(E1) DRADD1 EQU 08003H ;读显示数据地址(E1) CWADD2 EQU 08004H ;写指令代码地址(E2) DWADD2 EQU 08005H ;写显示数进
5、地址(E2) CRADD2 EQU 08006H ;读状态字地址(E2) DRADD2 EQU 08007H ;读显示数据地址(E2) PD1 EQU 3DH ;122/2 分成左右两半屏 122x32 COLUMN EQU 30H PAGE_ EQU 31H ;页地址寄存器 D1,DO:页地址 CODE_ EQU 32H ;字符代码寄存器 COUNT EQU 33H ;计数器 DIR equ 34h dtp1
6、 equ 35h dtp2 equ 36h dtp3 equ 37h CTEMP EQU 38H COM EQU 20H ;指令寄存器 DAT EQU 21H ;数据寄存器 ORG 0 jmp main mov dptr, #0f002h mov a,#56h movx @dptr,a mov a,#0 movx a,@
7、dptr JMP MAIN ;—--———-—--——--—----—-—-—--——-——-—--———— ; 初始化程序 INIT: MOV COM, #0E2H ;复位 LCALL PRO LCALL PR3 MOV COM, #0A4H ;关闭休闭状态 LCALL PRO LCALL PR3 MOV COM, #0A9H ;设置 1/32占空比 LCALL PRO
8、 LCALL PR3 MOV COM, #0A0H ;正向排序设置 LCALL PRO LCALL PR3 MOV COM, #0C0H ;设置显示起始行为第一行 LCALL PRO LCALL PR3 MOV COM, #0AFH ;开显示设置 LCALL PRO LCALL PR3 RET ;----—--——---——----————-
9、———-———-—-——---—--———---- ; 清屏 CLEAR: MOV R4,#00H ;页面地址暂存器设置 CLEAR1: MOV A,R4 ;取页地址值 ORL A,#0B8H ;”或”页面地址设置代码 MOV COM,A ;页面地址设置 LCALL PRO LCALL PR3 MOV COM,#00H ;列地址设置为"0” LCALL PRO
10、 LCALL PR3 MOV R3,#50H ;一页清 80个字节 CLEAR2: MOV DAT,#00H ;显示数据为”0" LCALL PR1 LCALL PR4 DJNZ R3,CLEAR2 ;页内字节清零循环 INC R4 ;页地址暂存器加一 CJNE R4,#04H,CLEAR1 ;RAM区清零循环 RET ;-—-—-------————-
11、—------———-——-—--- ;1.写指令代码子程序(E1) PRO: PUSH DPL PUSH DPH MOV DPTR,#CRADD1 ;设置读状态字地址 PR01: MOVX A,@DPTR ;读状态字 JB ACC.7,PR01 ;判”忙”标志为句"0”,否再读 MOV DPTR,#CWADD1 ;设置写指令代码地址 MOV A,COM ;取指令代码 MOVX
12、@DPTR,A ;写指令代码 POP DPH POP DPL RET ;---—-——---—-—--—-———--————---—-————— ;2.写显示数据子程序(E1) PR1: PUSH DPL PUSH DPH MOV DPTR,#CRADD1 ;设置读状态字地址 PR11: MOVX A,@DPTR ;读状态宇 JB ACC.7,PR11 ;判"忙”标志为”0",否再读
13、 MOV DPTR,#DWADD1 ;设置写显示数据地址 MOV A,DAT ;取数据 MOVX @DPTR,A ;写数据 POP DPH POP DPL RET ;——--————--———----———---——-—-—-———-——— ;3.读显示数据子程序(E1) PR2: PUSH DPL PUSH DPH MOV DPTR,#CRADD1 ;设置读状态字地址 PR
14、21: MOVX A,@DPTR ;读状态字 JB ACC。7,PR21 ;判”忙"标志为"0”否,否再读 MOV DPTR,#DRADD1 ;设置读显示数据地址 MOVX A,@DPTR ;读数据 MOV DAT,A ;存数据 POP DPH POP DPL RET ;——-——————-—-----—--—---—--—-—-——----— ;4.写指令代码子程序(
15、E2) PR3: PUSH DPL PUSH DPH MOV DPTR,#CRADD2 ;设置读状态字地址 PR31: MOVX A,@DPTR ;读状态字 JB ACC。7,PR31 ;判"忙”陈志为"0"否,否再读 MOV DPTR,#CWADD2 ;设置写指令代码地址 MOV A,COM ;取指令代码 MOVX @DPTR,A ;写指令代码 P
16、OP DPH POP DPL RET ;———-—--—---——-———--—————--—-——-—---—— ; 5。写显示数据子程序(E2) PR4: PUSH DPL PUSH DPH MOV DPTR,#CRADD2 ;设置读状态字地址 PR41: MOVX A,@DPTR ;读状态字 JB ACC。7,PR41 ;判"忙”标志为”0"否,否再读 MOV DPTR, #DWADD
17、2 ;设置写显示数据地址 MOV A,DAT ;取数据 MOVX @DPTR,A ;写数据 POP DPH POP DPL RET ;--—-——--—-—----——-—---—-——--—--—-———-—- ; 6。读显示数据子程序(E2) PR5: PUSH DPL PUSH DPH MOV DPTR,#CRADD2 ;设置读状态字地址 PR51: MOVX
18、A,@DPTR ;读状态字 JB ACC.7,PR51 ;判”忙”标志为”0”,否再读 MOV DPTR,#DRADD2 ;设置写显示数据地址 MOVX A,@DPTR ;读数据 MOV DAT,A ;存数据 POP DPH POP DPL RET ; 中文显示子程序 CCW_PR: MOV DPTR,#CCTAB ;确定字符字模块首地址
19、MOV A,CODE_ ;取代码 MOV B,#20H ;字模块宽度为 32个字节 MUL AB ;代码×32 ADD A,DPL ;字符字模块首地址 MOV DPL,A ;字模库首地址+代码×32 MOV A,B ADDC A,DPH MOV DPH,A PUSH COLUMN
20、 ;列地址入栈 PUSH COLUMN ;列地址入栈 MOV CODE_,#00H ;代码寄存器借用为间址寄存器 CCW_1: MOV COUNT,#10H ;计数器设置为 16 MOV A,PAGE_ ;读页地址寄存器 ANL A,#03H ;取页地址有效值 ORL A,#0B8H ;”或"页地址设置代码 MOV COM,A
21、设置页地址 LCALL PRo LCALL PR3 POP COLUMN ;取列地址值 MOV A,COLUMN ;读列地址寄存器 CLR C SUBB A,#PD1 ;列地址—模块参数 JC CCW_2 ;<0为左半屏显示区域(E1) MOV COLUMN,A ;≥0为右半屏显示区域(E2) MOV
22、 A,PAGE_ SETB ACC。3 ;设置区域标志位。 MOV PAGE_,A ;”0”为E1,”1”为E2 CCW_2: MOV COM,COLUMN ;设置列地址值 MOV A,PAGE_ ;判区域标志以确定设置哪个控制器 JNB ACC。3,CCW_3 LCALL PR3 ;区域E2 LJMP CCW_4 CCW_3: LCALL PRO
23、 ;区域E1 CCW_4: MOV A,CODE_ ;取间址寄存器值 MOVC A,@A+DPTR ;取汉字字模数据 MOV DAT,A ;写数据 MOV A,PAGE_ JNB ACC.3,CCW_5 LCALL PR4 ;区域E2 LJMP CCW_6 CCW_5: LCALL PR1 ;区域E1 CCW_6: I
24、NC CODE_ ;间址寄存器加一 INC COLUMN ;列地址寄存器加一 MOV A,COLUMN ;判列地址是否超出区域范围、 CJNE A,#PD1,CCW_7 CCW_7: JC CCW_8 ;未超出则继续 MOV A,PAGE_ ;超出则判是否在区域E2 JB ACC.3,CCW_8 ;在区域E2则退出 SETB ACC.
25、3 ;在区域E1则修改成区域E2 MOV PAGE_,A MOV COM,#00H ;设置区域E2列地址为”0" LCALL PR3 CCW_8: DJNZ COUNT,CCW_4 ;当页循环 MOV A,PAGE_ ;读页地址寄存器 JB ACC.7,CCW_9 ;判完成标志D7位,"1”则完成退出 INC A ;否则页地址加一
26、 SETB ACC。7 ;置完成位为”1" CLR ACC。3 MOV PAGE_,A MOV CODE_,#10H ;间址寄存器设置为 16 LJMP CCW_1 ;大循环 CCW_9: RET ;-——--———————-------——-———-—--——--———-— ;中文字符库 CCTAB: DB 0,0,31,17,145,209,191,145,145,159,145,145,145,3
27、1,0,0, “罗” DB 0,32,33,33,32,17,18,20,8,8,4,2,1,0,0,0 DB 0C0H 70H 0FCH 0FFH 03H 60H 6CH 6CH DB 0,32,170,170,255,170,170,128,170,170,255,170,170,34,0,0, “慧” DB 0,32,24,10,26,42,42,58,42,42,58,10,31,32,0,0 DB 0,0,255,137,137,137,137,137,249,137,137,137,143,1
28、28,0,0, “民” DB 0,0,63,16,8,0,0,0,0,3,4,8,16,60,0,0 DB 0,224,16,8,8,16,224,0,0,112,136,136,136,136,112,0, “08” DB 0,7,8,16,16,8,7,0,0,14,17,16,16,17,14,0 DB 0,48,8,8,8,136,112,0,0,48,8,8,8,136,112,0, “22” DB 0,24,20,18,17,16,24,0,0,24,20,18,17,16,24,0 DB 0,1
29、6,16,248,0,0,0,0,0,16,16,248,0,0,0,0, “11” DB 0,16,16,31,16,16,0,0,0,16,16,31,16,16,0,0 ;-—--——————--—--———--—--—-----—-————-。 ; 中文演示显示程序段 MAIN: LCALL INIT LCALL CLEAR MOV CTEMP,#0 MOV DIR,#0 AAA: MOV PAGE_,#02H
30、 MOV COLUMN,CTEMP MOV CODE_,#00H LCALL CCW_PR MOV PAGE_,#02H MOV A,CTEMP ADD A,#10H MOV COLUMN,A MOV CODE_,#01H LCALL CCW_PR MOV PAGE_,#02H MOV A,CTEMP AD
31、D A,#20H MOV COLUMN,A MOV CODE_,#02H LCALL CCW_PR MOV PAGE_,#02H MOV A,CTEMP ADD A,#30H ;顺次向后显示,30H表示显示在第 四个位置 MOV COLUMN,A MOV CODE_,#03H ;取对应的字模03H代表中文字库
32、 表中的第四组数据在此对应"8” LCALL CCW_PR MOV PAGE_,#02H MOV A,CTEMP ADD A,#40H MOV COLUMN,A MOV CODE_,#04H LCALL CCW_PR MOV PAGE_,#02H MOV A,CTEMP ADD A,#50H
33、 MOV COLUMN,A MOV CODE_,#04H LCALL CCW_PR LJMP S_DOWN ;选用此句可实现文字循环向下滚动显示 ;LJMP S_UP ;选用此句可实现文字循环向上滚动显示 ;LJMP LEFT ;选用此句可实现文字循环向左滚动显示 ;SJMP $ ;选用此句文字呈现静态显示 LCALL DELAY ;若删去上述跳转直接执行
34、以下程序可实现 文字循环向右滚动显示 LCALL DELAY LCALL DELAY MOV A, DIR CJNE A,#0, LEFT INC CTEMP MOV A,CTEMP CJNE A,#58, AAA MOV DIR,#1 LJMP AAA LEFT: DEC CTEMP MOV
35、A,CTEMP CJNE A,#0, AAA MOV DIR,#0 LJMP AAA ;LCALL S_LEFT ;LCALL S_UP SJMP $ ; 示例五 滚动演示程序段 ; 定时间隔地有规律地修改显示起始行地址,将产生显示画面平滑向上或向下滚动的效 ; 果。示例程序如下: S_UP: MOV R7,#00H ;向上改动程序 S_UPI: MOV A
36、#0C0H ;显示起始行设置代码 ORL A,R7 MOV COM,A LCALL PRO LCALL PR3 LCALL DELAY ;调延时子程序 INC R7 CJNE R7,#20H,S_UPI LJMP S_UP ;—--——----—----———-—-————-——-——---—-——
37、 S_DOWN: MOV R7,#1FH ;向下滚动程序 MOV COM,#0C0H ;显示起始行设置代码 LCALL PRo LCALL PR3 LCALL DELAY ;调延时子程序 S_DOWN1: MOV A,#0C0H ;显示起始行设置代码 ORL A,R7 MOV COM,A
38、 LCALL PRO LCALL PR3 LCALL DELAY DJNZ R7,S_DOWN1 LJMP S_DOWN ;————————-—-—----——----—--—-—-—---— DELAY: MOV R6,#060H ;延时子程序 MOV R5,#00H DELAY1: NOP DJNZ R5,DELAY1 DJNZ R6,DELAY1 RET 仿真结果说明: 程序执行后液晶屏幕第一行显示“罗慧民082211”字样,依照程序选择的显示方式的不同,液晶屏幕上会出现不同的效果,如上所述,若选用LJMP S_DOWN则屏幕上出现向下滚动出现的“罗慧民082211”字样,选择其他则相应出现不一样的显示效果。本程序基本实现了思考题1和2的要求。






