Top Banner
1 液液液液 164 液液液液 实实实实 实实实实 实实实实 实实实实 实实实实 实实实实 <<<
25

液晶显示 164 接口实验

Mar 17, 2016

Download

Documents

液晶显示 164 接口实验. 实验目的 实验器材 硬件接线 软件功能 程序清单 备注说明.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 液晶显示 164 接口实验

1

液晶显示 164 接口实验实验目的实验器材硬件接线软件功能程序清单备注说明 <<<

Page 2: 液晶显示 164 接口实验

2

实验目的 :

掌握点阵字符型液晶显示 (LCD) 编程方法

Page 3: 液晶显示 164 接口实验

3

实验器材 :

1. 单片机2.LCD( 液晶显示屏 ) 3.74HC164(8 位移位寄存器 )

Page 4: 液晶显示 164 接口实验

4

硬件接线 :

VCC

16151413121110090807060504030201

LCD(H

D4478

0)

Q7Q6Q5Q4Q3Q2Q1Q0

B

A

CP

CR

VCC

74HC16

4

MOS1

SPSCK

PTC3

PTC2PTC1PTC0

SSVCC

MC68H

C908GP3

2

Page 5: 液晶显示 164 接口实验

5

软件功能 :开始运行时 ,LCD 显示“ Wait Receiving..”等待接收字符,当收到 16个字符时,显示之,重复此功能

Page 6: 液晶显示 164 接口实验

6

程序清单: 程序说明 口地址定义 SPI地址定义 SCI串行通信口定义 变量定义 系统初始化

主程序 LCD初始化子程序 LCD命令执行子程序 74HC164初始化 LCD显示子程序 中断矢量

Page 7: 液晶显示 164 接口实验

7

*-------------- 程序说明 --------------------------** 文件名 LCD.ASM* 硬件连接: 74HC164 的 Q0-Q7 分别接 LCD 的 DB0-DB7 ;* 74HC164 的 MR , CLK 接分别 MCU 的 PTC3 , SCK ;* 74HC164 的 B 接 MCU 的 VCC(+5V) ;* 74HC164 的 A 接 MCU 的 MOSI ;* LCD 的 E , R/W , RS 分别接的 PTC2 , PTC1 , PTC0 。* 程序描述: 1. 开始运行时 ,LCD 显示“ Wait Receiving..”* 2. 等待接收字符,当收到 16 个字符时显示之,* 重复此功能。* 目的:掌握点阵字符型液晶显示 (LCD) 编程方法* 备注说明:从 PC 机输入被显示的 16 个字符,以串行通信方* 式发送到单片机,在液晶屏上显出这些字符。*-------------------------------------------------*

Page 8: 液晶显示 164 接口实验

8

*----- 口地址定义 -------------------------------PTC EQU $0002 ;C 口数据寄存器LCD-RS EQU 0 ;LCD 寄存器选择信号接 PTC0LCD-RW EQU 1 ; 读写信号接 PTC1LCD-E EQU 2 ;LCD 使能信号接 PTC2HC164-CR EQU 3 ;74HC164 (移位寄存器) ; 清除端接 PTC3DDRC EQU $0006 ;C 口数据方向寄存器*----SPI( 串行外设接口 ) 地址定义 -------------------SPCR EQU $0010 ;SPI 控制寄存器SPSCR EQU $0011 ;SPI 状态和控制寄存器BIT-SPTE EQU 3 ;SPI 发送器空标志位SPDR EQU $0012 ;SPI 数据寄存器

Page 9: 液晶显示 164 接口实验

9

*----SCI 串行通信口地址 ------------------------SCS1 EQU $0016 ; 串行通信接口状态寄存器地址SCDR EQU $0018 ; 串行通信接口数据寄存器地址*---- 变量定义 ---------------------------------ORG $0090BYTEDISPLY RMB 1 ; 临时存放一个字符LCD-BUFFER RMB 16 ; 存放 16 字节FlashStartAddr equ $8000 ; 程序开始地址(因芯片不同可以更改)**********************************************

Page 10: 液晶显示 164 接口实验

10

*--------- 主程序 ----------------------------- ORG ORG FlashStartAddrMainInit: ; 复位后程序从此开始执行 ; 系统初始化 SEI ; 禁止所有中断 LDHX #$023F ; 堆栈初始化,放入 GP32 的 RAM 最高端 TXS JSR Init0 ; 调系统初始化子程序 Init0 ,初始学习时跳过此处 ;I/O 初始化 NOP ; 初始化 LDA #%00111010 ;SPI 初始化设置 : 禁止中断 , ; 主机方式 , 时钟低电平有 SPSCK 启动移位、 ; 脉冲 , 普通推拉模式 , 允许 SPI STA SPCR LDA #%00000000 ; 禁止中断 , 禁止错误检测 , ; 时钟分频系数为 2 STA SPSCR

Page 11: 液晶显示 164 接口实验

11

LDA DDRC ; 初始化 E , RW , RS 控制信号 ORA #%00001111 ;PTC3-0 为输出 STA DDRC LDHX #$00DISPLAY1: ; 把要显示的 16 个初始字符 ; 放入 LCD-BUFFER 中 LDA DISPLAYBYTES,X STA LCD-BUFFER,X AIX #1 CPHX #$10 BNE DISPLAY1 ; 循环 16 次 BRA START

Page 12: 液晶显示 164 接口实验

12

DISPLAYBYTES FCB "WAIT RECEIVING.."START: JSR INIT-74HC164 ; 初始化 74HC164 ;( 移位寄存器 ) JSR INIT-LCD ;LCD 初始化 JSR SHOW-LCD-BUFFER ; 把 LCD-BUFFER 中的 ;16 个字符送 LCD 显示

Page 13: 液晶显示 164 接口实验

13

LDHX #$00 DISPLAY2: ; 从 PC 机接收 16 个字符放入 LCD- ;BUFFER 开始的内存中 BRCLR 5,SCS1,* ; 与 PC 机串行通信 , 判断接收器 ; 是否满 LDA SCDR ; 读 SCI 数据寄存器 STA LCD-BUFFER,X AIX #1 CPHX #$10 BNE DISPLAY2 JMP START***************************************************

Page 14: 液晶显示 164 接口实验

14

*---INIT-LCD(LCD 初始化子程序 )------------------* 入口 : 无* 功能 : 初始化 LCD(HD44780)* 调用子程序 :LCDCOMMAND(LCD 命令执行子程序 )* 占用 CPU 内部寄存器 :A,X*----------------------------------------------INIT-LCD: BCLR LCD-RS,PTC ; 令 LCD 的 RS=0,R/W=0, ;进行 LCD 初始化 BCLR LCD-RW,PTC LDA #%00111000 ; 功能设置 :8 位数据接口 , ;2 行显示 ,5*10 点阵模式 JSR LCDCOMMAND

Page 15: 液晶显示 164 接口实验

15

LDA #%00001000 ; 显示开关控制 : 开显示, ;关光标显示 , 不闪烁 JSR LCDCOMMAND JSR INIT-74HC164 ;74HC164( 移位寄存器 ) ; 初始化 BCLR LCD-RS,PTC ;RS,RW 清零开始清屏 BCLR LCD-RW,PTC BRCLR BIT-SPTE,SPSCR,* ; 判断发送数据寄存器 ; 是否为空 LDA #%00000001 ; 清屏指令 JSR LCDCOMMAND LDHX #$2DF ; 等待清屏完毕 , 时间 >1.6ms

Page 16: 液晶显示 164 接口实验

16

CLR-LCD-2-MS: ;延时 AIX #-1 CPHX #0 BNE CLR-LCD-2-MS LDA #%00000110 ; 输入方式设置 : 数据读写 ;操作后 ,AC自动增 1 显示不动 , ;光标左移 JSR LCDCOMMAND LDA #%00010100 ;光标移位设置 :光标右 ; 移一个字符位 ,AC自动加 1 JSR LCDCOMMAND LDA #%00001100 ; 显示开关设置 : 开显示 , ;关光标显示 , 不闪烁 JSR LCDCOMMAND RTS

Page 17: 液晶显示 164 接口实验

17

*----LCDCOMMAND(LCD 命令执行子程序 )----------* 入口 :A* 功能 :对 A 中指令送 LCD(HD44780),进行命令执行或* 字符显示* 占用 CPU 内部寄存器 :A*-------------------------------------------LCDCOMMAND: PSHH ;保护现场 PSHX PSHA ;保护入口指令码 BRCLR BIT-SPTE,SPSCR,* ; 测试状态 , 发送数据

; 寄存器是否为空

Page 18: 液晶显示 164 接口实验

18

JSR INIT-74HC164 ; 初始化 74HC164 芯片 PULA ;弹出入口指令码 STA SPDR ; 把指令码发送出去 BRCLR BIT-SPTE,SPSCR,* ; 测试发送完毕NOP NOP BSET LCD-E,PTC ;LCD 开始接受数据 , ; 置使能位为 1

Page 19: 液晶显示 164 接口实验

19

NOP NOP BCLR LCD-E,PTC ;LCD结束接受数据 , 置 ; 使能位为 0 LDHX #$0020 ; 等待 40us DBNZX * PULX ;恢复现场 PULH RTS********************************************

Page 20: 液晶显示 164 接口实验

20

*---INIT-74HC164(74HC164 初始化 )--------------* 入口 : 无* 功能 : 清空 74HC164* 占用 CPU 内部寄存器 :HX*-------------------------------------------INIT-74HC164: BCLR HC164-CR,PTC ;CR 为 0 清除 74HC164 中的数据 BSET HC164-CR,DDRC LDHX #$0020 ; 等待 40us DBNZX * BSET HC164-CR,PTC ; 清除完毕 ,74HC64 的 CR ;转为高电平 RTS

Page 21: 液晶显示 164 接口实验

21

*----SHOW-LCD-BUFFEER(LCD 显示子程序 )-------** 入口 : 内存 LCD-BUFFER 开始的 16 个地址中存放要显* 示的字符编码* 功能 : 显示内存 LCD-BUFFER 开始的 16 字节数据* 调用 :LCDCOMMAND 子程序* 占用 CPU 内部寄存器 :A,HX*------------------------------------------*SHOW-LCD-BUFFER: ;进行显示数据寄存器 ;(DD RAM) 地址设置 BCLR LCD-RS,PTC BCLR LCD-RW,PTC ; 设置前 8 个字符 ;首 DDRAM 地址

Page 22: 液晶显示 164 接口实验

22

LDA #%10000000 JSR LCDCOMMAND LDHX #$0 ; 显示前 8 个字符SHOW-FIRST-8BYTE: BSET LCD-RS,PTC ; 令 LCDRS=1,R/W=0, ; 写入数据到 DD RAM 中 BCLR LCD-RW,PTC LDA LCD-BUFFER,X ;将 {LCD-BUFFER+X} ; 的数据放入 A作为入口 JSR LCDCOMMAND

Page 23: 液晶显示 164 接口实验

23

AIX #1 CPHX #$8 BNE SHOW-FIRST-8BYTE LDA #%11000000 ; 设置后 8 个字符首 DD RAM 地址 BCLR LCD-RS,PTC BCLR LCD-RW,PTC JSR LCDCOMMAND LDHX #$08 ; 显示后 8 个字符SHOW-NEXT-8BYTE: BSET LCD-RS,PTC ; 令 LCD 的 RS=1,R/W=0, 写入 ; 数据到 DD RAM 中

Page 24: 液晶显示 164 接口实验

24

BCLR LCD-RW,PTC LDA LCD-BUFFER,X ;将 {LCD-BUFFER+X}的数据 ; 放入 A作为入口 JSR LCDCOMMAND AIX #1 CPHX #$10 BNE SHOW-NEXT-8BYTE RTS********************************************-- 中断矢量 --------------------------------* ORG $FFFE ; 复位向量 DW MAININIT

Page 25: 液晶显示 164 接口实验

25

系统初始化 Init0: ;系统初始化 Init0子程序 LDA #%00000001 ;初始化 CONFIG2 STA $001E LDA #%00111101 ;初始化 CONFIG1 STA $001F CLR $0036 ;初始化 PTCL MOV #$01,$0036 MOV #$01,$0038 MOV #$2C,$0039 MOV #$80,$003A BSET 5,$0036 BSET 7,$0037 BSET 4,$0036 RTS