--------------------------------------------------------------------------------
;LCD部分用到的RAM 0200H~~~~021FH 用到的Rn有R15/R14
;LCD复位子程序(LCD_REST)不须要设事先置直接调用即可
;半屏显示子程序(LCD)在调用前必须送入页地址 例如:MOV.B #0B8H,LCD_PAGE_BRAM
; CALL #LCD 显示上屏
; :MOV.B #0BAH,LCD_PAGE_BRAM
; CALL #LCD 显示下屏
;LCDUP_WORD0_BRAM~~~LCDUP_WORD6_RAM 是上屏显示字的代码寄存器一屏显示7个字
;LCDDOWN_WORD0_BRAM~~~LCDDOWN_WORD6_RAM 是下屏显示字的代码寄存器一屏显示7个字
;每屏显示是以中间为基准向两边平均显示 在调用半屏显示子程序时已经自动计算LCD的列地址
;清屏指令可分全屏清除(LCD_CLEAR_ALL)和半屏清除(LCD_CLEAR)
;注 全屏清除子程序不需入口直接调用就行 而半屏清除子程序在调用前入口与半屏显示子程序相同
#i nclude "MSP430x14x.h"
NAME LCD
MODULE LCD
PUBLIC LCD
RSEG PROM
;=========LCD==================================
;A0=1为数据 A0=0为命令
#define A0 04H
#define E1 02H
#define E2 01H
#define BIT_OUT P4OUT
#define DATA_BUS P2OUT
;=============LCD____8RAM的位定义===============
#define LCD_COM_BRAM 0200H
#define LCD_DATA_BRAM 0201H
#define LCD_LIE_BRAM 0202H
#define LCD_PAGE_BRAM 0203H
;=============LCD_UP_RAM============================
#define LCDUP_WORD0_BRAM 0204H
#define LCDUP_WORD1_BRAM 0205H
#define LCDUP_WORD2_BRAM 0206H
#define LCDUP_WORD3_BRAM 0207H
#define LCDUP_WORD4_BRAM 0208H
#define LCDUP_WORD5_BRAM 0209H
#define LCDUP_WORD6_BRAM 020AH
;==========下面的RAM只是在测试状态下才会用到=====
#define LCDUP_WORD7_BRAM 020BH
;=============LCD_DOWN_RAM=====================
#define LCDDOWN_WORD0_BRAM 020CH
#define LCDDOWN_WORD1_BRAM 020DH
#define LCDDOWN_WORD2_BRAM 020EH
#define LCDDOWN_WORD3_BRAM 020FH
#define LCDDOWN_WORD4_BRAM 0210H
#define LCDDOWN_WORD5_BRAM 0211H
#define LCDDOWN_WORD6_BRAM 0212H
;==========下面的RAM只是在测试状态下才会用到=====
#define LCDDOWN_WORD7_BRAM 0213H
;=============LCD_数据寄存器_RAM=================
#define LCD_R0_BRAM 0214H
#define LCD_R1_BRAM 0215H
;=============LCD____16RAM的位定义===============
#define LCD_COUNT_WRAM 021CH
#define LCD_WORD_WRAM 021EH
;=============LCD____BIT的位定义===============
#define LCD_BIT_RAM 0220H
#define LCD_E1_E2 0000H
;是LCD左右屏选择为BIT=1选通左边 BIT=0选通右边
#define LCD_INV 02H
;高电平时显示反白
;---------------------------------------------------
;===========================================================
LCD_E1_COM
BIC.B #A0,&BIT_OUT ;A0置低 设为命令通道
MOV.B LCD_COM_BRAM,&LCD_BUS ;输出命令
BIS.B #E1,&BIT_OUT ;开E1
BIC.B #E1,&BIT_OUT ;关E1
RET ;反回
LCD_E2_COM
BIC.B #A0,&BIT_OUT ;A0置低 设为命令通道
MOV.B LCD_COM_BRAM,&LCD_BUS ;输出命令
BIS.B #E2,&BIT_OUT ;开E2
BIC.B #E2,&BIT_OUT ;关E2
RET ;反回
LCD_E1_DATA
BIS.B #A0,&BIT_OUT ;A0置高 设为命令通道
MOV.B LCD_DATA_BRAM,&LCD_BUS ;输出命令
BIS.B #E1,&BIT_OUT ;开E1
BIC.B #E1,&BIT_OUT ;关E1
RET ;反回
LCD_E2_DATA
BIS.B #A0,&BIT_OUT ;A0置高 设为数据通道
MOV.B LCD_DATA_BRAM,&LCD_BUS ;输出命令
BIS.B #E2,&BIT_OUT ;开E2
BIC.B #E2,&BIT_OUT ;关E2
RET ;反回
;================CLEAR_LCD_DISPALY==============
;每次直接调用程序就可以清全屏显示 不须入口
LCD_CLEAR_ALL
CLR R15
CLR R14
LCD_CLEAR_ALL_1
BIS.B #0B8H,R15
MOV.B R15,LCD_COM_BRAM
CALL #LCD_E1_COM
CALL #LCD_E2_COM
MOV.B #00H,LCD_COM_BRAM
CALL #LCD_E1_COM
CALL #LCD_E2_COM
MOV.B #61D,R14
LCD_CLEAR_ALL_2
MOV.B #000H,LCD_DATA_BRAM
CALL #LCD_E1_DATA
CALL #LCD_E2_DATA
CLRZ
DEC.B R14
JNZ LCD_CLEAR_ALL_2
INC.B R15
CLRZ
CMP.B #0BCH,R15
JNE LCD_CLEAR_ALL_1
RET
;================CLEAR_LCD_DISPALY=============
;每次直接调用程序就可以清半屏显示
;调用前必须送入页地址到LCD_PAGE_RAM(页地址寄存器)
;例如:MOV.B #0B8H,LCD_PAGE_BRAM
; :CALL #LCD_CLEAR 就是清上半屏显示
; :MOV.B #0BAH,LCD_PAGE_BRAM
; :CALL #LCD_CLEAR 就是清下半屏显示
LCD_CLEAR
CLR R15
MOV.B LCD_PAGE_BRAM,LCD_LIE_BRAM
ADD.B #2D,LCD_LIE_BRAM
LCD_CLEAR_1
BIS.B LCD_PAGE_BRAM,R15
MOV.B R15,LCD_COM_BRAM
CALL #LCD_E1_COM
CALL #LCD_E2_COM
MOV.B #00H,LCD_COM_BRAM
CALL #LCD_E1_COM
CALL #LCD_E2_COM
MOV #61D,R14
LCD_CLEAR_2
MOV.B #00H,LCD_DATA_BRAM
CALL #LCD_E1_DATA
CALL #LCD_E2_DATA
CLRZ
DEC.B R14
JNZ LCD_CLEAR_2
INC.B R15
CLRZ
CMP.B LCD_LIE_BRAM,R15
JNZ LCD_CLEAR_1
RET
;===============RESETTING_LCD_MODE=============
;调用此程序是使LCD复位并进入工作状态
LCD_REST
MOV.B #0E2H,LCD_COM_BRAM ;复位
CALL #LCD_E1_COM
CALL #LCD_E2_COM
MOV.B #0A4H,LCD_COM_BRAM ;关闭休闲状态
CALL #LCD_E1_COM
CALL #LCD_E2_COM
MOV.B #0A9H,LCD_COM_BRAM ;设置1/32占空比
CALL #LCD_E1_COM
CALL #LCD_E2_COM
MOV.B #0A0H,LCD_COM_BRAM ;正向排序设置
CALL #LCD_E1_COM
CALL #LCD_E2_COM
MOV.B #0C0H,LCD_COM_BRAM ;设置显示起始行为第一行
CALL #LCD_E1_COM
CALL #LCD_E2_COM
MOV.B #0AFH,LCD_COM_BRAM ;开显示设置
CALL #LCD_E1_COM
CALL #LCD_E2_COM
RET
;查LCD PAGE #0B8H.#0B9H/#0BAH.#0BBH上屏须要显示的个数
;这段程序已测试过 03-3-12 9:55
;R15/R14/R13
LCD_CHK
CLR LCD_COUNT_RAM
[1] [2] 下一页
本文关键字:程序 51单片机,单片机-工控设备 - 51单片机