液晶显示 164 接口实验

25
1 液液液液 164 液液液液 实实实实 实实实实 实实实实 实实实实 实实实实 实实实实 <<<

Upload: cayla

Post on 17-Mar-2016

97 views

Category:

Documents


3 download

DESCRIPTION

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

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