No.70856 作者:哈佛 邮件:jola2002@163.com ID:29699 登陆:81次 QQ:5822022 -- MSN:jola2005912@hotmail.com 文章数:185篇 最后登陆IP:218.17.158.164 最后登陆:2014/12/16 13:54:00 注册:2005/1/6 19:18:03 财富:1280 发帖时间:2005/1/9 12:39:53 发贴者IP:202.105.135.4 标题:哈佛:LCD1502驱动程序 摘要:No.70856LCD1502驱动程序 LCD1502驱动程序 -------------------------------------------------------------------------------- ;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) ;注 全屏清除子程序不需入口直接调用就行 而半屏清除子程序在调用前入口与半屏显示子程序相同 #include "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 ......
>>返回讨论的主题
|