一、实验目的
1. 掌握8088与液晶显示器之间接口设计与编程; 2. 初步了解汇编语言的格式及子程序的概念。 二、实验内容
1. 编制程序,使用内部字库,在液晶显示器上显示: 内蒙古大学 电子信息工程学院 自动化系 2008.8.8
三、实验电路
四、实验连线
1. 连接译码电路,将138译码单元的A、B、C、G分别与地址总线A2、A3、A4、A15相连;
2. LCD实验板的E信号与02门电路的第1脚相连; 3. 将138译码单元的Y0与02门电路的第3脚相连; 4. 将08门电路的第3脚与02门电路的第2脚相连;
5. 将08门电路的第2脚、第1脚分别与系统控制信号IOR、IOW相连。 五、程序清单 ;硬件地址定义 LCD EQU 7FE0H WRICODE EQU LCD+0 ;写命令 WRDATA EQU LCD+1 ;写数据 RDSTAT EQU LCD+2 ;读状态 RDDATA EQU LCD+3 ;读数据 ;代码区
code segment assume cs:code ;定义内存变量 lin db 0 col db 0
db 0 db 0 db 0 db 0 db 0 1000h call init_lcd mov al,3 call delay2 mov count,0
mov bx,offset tab1 mov lin,0 mov col,1 mov num,5 call
dis_china
mov bx,offset tab2 mov lin,1 mov col,0 mov num,8 call
dis_china
mov bx,offset tab3 mov lin,2 mov col,1 mov num,4 call
dis_china
mov bx,offset tab4 mov lin,3 mov col,1 mov num,4 call dis_china mov al,10 call
delay2 mov al,10 call
delay2 call
close_lcd
mov bx,offset tab5 mov
lin,0
显示“内蒙古大学” 显示“电子信息工程学院”显示“自动化系” 显示“2008.8.8” 显示“温度:” num dis_num temp0 temp1 count org start:
;; ;;;
mov mov call col,0 num,3 dis_china
lgs1: mov lin,0 ;显示数字
mov col,4 mov al,count mov dis_num,al call dis_number mov al,count add al,1 mov count,al mov al,10 call delay2 jmp lgs1
;在指定的行、列显示一个字节数字(0-255)
;参数:行lin(0-3);列col(0-7) dis_num中放要显示的数字 ; col 0 1 2 3 4 5 6 7 ;lin0:80h,81h,82h,83h,84h,85h,86h,87h ;lin1:90h,91h,92h,93h,94h,95h,96h,97h ;lin2:88h,89h,8ah,8bh,8ch,8dh,8eh,8fh ;lin3:98h,99h,9ah,9bh,9ch,9dh,9eh,9fh dis_number proc
push ax mov al,lin ;根据行、列值定位显示数字起始坐标 cmp al,0 jnz nu0 mov al,80h jmp nu3
nu0: cmp al,1
jnz nu1 mov al,90h jmp nu3
nu1: cmp al,2 jnz nu2 mov al,88h jmp nu3 nu2: cmp al,3 jnz nuret mov al,98h nu3: add al,col call send_com ;定位显示数字坐标
nu4: mov ah,0;以下10条为把3位十进制数个位、十位、百位分离
mov al,dis_num mov bl,10 div bl
mov temp0,ah mov ah,0 mov bl,10 div bl
mov temp1,ah
add al,30h ;转为ASC码 call send_data ;百位送LCD显示 mov al,temp1
add al,30h ;转为ASC码 call send_data ;十位送LCD显示 mov al,temp0
add al,30h ;转为ASC码 call send_data ;个位送LCD显示 pop ax nuret: ret dis_number endp
;在指定的行、列显示汉字。每行可显示8个汉字或16个字符,共4行 ;参数:行lin(0-3);列col(0-7) 汉字个数num(0-7); 表地址bx dis_china proc
push ax
mov al,lin ;根据行、列值定位显示汉字起始坐标 cmp al,0 jnz ch0 mov al,80h jmp ch3 ch0: cmp al,1 jnz ch1 mov al,90h jmp ch3 ch1: cmp al,2 jnz ch2 mov al,88h jmp ch3 ch2: cmp al,3 jnz chret mov al,98h ch3: add al,col call send_com mov ah,num
add ah,num ;汉字个数乘2,1个汉字占2位
ch4: mov al,00h ;以下循环2*汉字个数,将汉字显示 xlat
call send_data inc bx dec ah jnz ch4 pop ax chret: ret dis_china endp
;清LCD屏 close_lcd proc
push ax
mov al,01h call send_com call delay1 pop ax ret close_lcd endp
;初始化LCD init_lcd proc
push ax
mov al,30h call send_com
mov al,01h call send_com call delay1
mov al,06h ; call send_com
mov al,0ch call send_com pop ax ret init_lcd endp
;向LCD发送数据 send_data proc
call delay1 push dx
mov dx,WRDATA out dx,al pop dx ret
;清除命令 ;30H--基本指令操作 ;清除显示 指定在资料写入或读取时,光标的移动方向 ;开显示,关光标,不闪烁 send_data endp
;向LCD发送命令 send_com proc
call delay1 push dx
mov dx,WRICODE out dx,al pop dx ret send_com endp
;延时子程序 delay1 proc
push cx
mov cx,0080h loop $ pop cx ret delay1 endp
;延时子程序 ;AL是延时参数 delay2 proc
push ax push cx mov ah,0 mov cx,ax dloop: push cx
mov cx,65535 loop $ pop cx loop dloop pop cx pop ax ret delay2 endp TAB1 DB TAB2 DB TAB3 DB TAB4 DB TAB5 DB code ends end start
“内蒙古大学” “电子信息工程学院”“自动化系” “2008.8.8” “温度:”
因篇幅问题不能全部显示,请点此查看更多更全内容