历史上的今天
今天是:2025年01月22日(星期三)
2018年01月22日 | SMC1602A液晶显示器子程序
2018-01-22 来源:eefocus
; LCD SMC1602A显示模块
; ***************************************************************************
;连线图: *LCM---8031* *LCM---8031* *RS-------- P2.6*
; *DB0----P0.0* *DB4---P0.4* *RW--------P2.5*
; *DB1----P0.1* *DB5---P0.5* *GATE-----P2.7*
; *DB2----P0.2* *DB6---P0.6* *E--------NAND*
; *DB3----P0.3* *DB7---P0.7* *VLCD接200R TO GND*
; **************************************************************************
;说明:
;入口条件:显示内容的首地址放在R1所指的单元中,如R1=40H,则40H-5FH为显示缓存
;影响资源:PSW、A、B、R1、R6、R7 堆栈需求:14字节
RSADDR EQU 4000H
RWADDR EQU 2000H
CSADDR EQU 8000H
RSPIN EQU P2.6 ; SMC1602A的RS
RWPIN EQU P2.5 ; SMC1602A的RW
EPIN EQU P2.7 ; SMC1602A的E
XPOS EQU 30H ;列方向地址指针(用于LCDPOS子程序)
YPOS EQU 31H ;行方向地址指针(用于LCDPOS子程序)
LCD_FILL: ;LCD显示模块的显示
MOV B,A
MOV YPOS,#0
LFL_PB: MOV XPOS,#0 ;整屏显示A中所代表字符
MOV R6,#16D
LFL_PA: MOV A,@R1
INC R1 ;显示的间接地址
CALL LCDWRITE
INC XPOS
MOV A,XPOS
CJNE A,#16D,LFL_PA
INC YPOS
MOV A,YPOS
CJNE A,#02D,LFL_PB
RET
LCDPOS: ;设置第(XPOS,YPOS)个字符DDRAM地址
PUSH ACC
ANL XPOS,#0FH ;X位置范围(0到15)
ANL YPOS,#01H ;Y位置范围(0到1)
MOV A,YPOS ;(XPOS,YPOS)对应DDRAM地址
CJNE A,#00,LPS_LAY ;(第一行)X: 第0----15个字符
MOV A,XPOS ;DDRAM: 0----0FH
JMP LPS_LAX
LPS_LAY: MOV A,XPOS ;(第二行)X:第0----15个字符
ADD A,#40H ; DDRAM: 40----4FH
LPS_LAX: ORL A,#80H ;设置DDRAM地址
CALL LCDWC
POP ACC
RET
LCDWRITE: ;定位写字符子程序
CALL LCDPOS ;定位显示地址
CALL LCDWD ;写字符
RET
LCD_RESET: ;初始化程序--LCD显示模块的初始化
CALL DELAY5MS ;延时15MS
CALL DELAY5MS
CALL DELAY5MS
MOV A,#38H ;显示模式设置(不检测忙信号)
CALL LCDWCN ;共三次
CALL DELAY5MS
MOV A,#38H
CALL LCDWCN
CALL DELAY5MS
MOV A,#38H
CALL LCDWCN
MOV A,#38H ;显示模式设置(以后均检测忙信号)
CALL LCDWC
MOV A,#08H ;显示关闭
CALL LCDWC
MOV A,#01H ;显示清屏
CALL LCDWC
MOV A,#06H ;显示光标移动设置
CALL LCDWC
MOV A,#0CH ;显示开及光标设置
CALL LCDWC
RET
LCDWC: ;送控制字子程序(检测忙信号)
CALL WAITIDLE
LCDWCN: ;送控制字子程序(不检测忙信号)
MOV DPTR,#CSADDR ;CS=1 RS=0 RW=0
MOVX @DPTR,A
RET
LCDWD: ;写字符子程序
CALL WAITIDLE
MOV DPTR,#CSADDR+RSADDR ;CS=1 RS=1 RW=0
MOVX @DPTR,A
RET
WAITIDLE:
PUSH ACC ;正常读写操作之前必须检测LCD控制器状态
MOV DPTR,#CSADDR+RWADDR ;CS=1 RS=0 RW=1
WTD_PA: MOVX A,@DPTR ;DB7: 0 LCD控制器空闲
JB ACC.7,WTD_PA ; DB7:1 LCD控制器忙
POP ACC
RET
DELAY5MS:
MOV R1,#25 ;延时子程序(5MS)
DL5_PA: MOV R2,#100
DJNZ R2,$
DJNZ R1,DL5_PA
RET
上一篇:ADC0832-2应用程序
史海拾趣
|
各位大牛觉得VDSP汇编出来的代码效率怎么样啊? 怎么我觉得C语言汇编出来的代码效率很低,尽管使能了编译器优化,但像并行指令很少体现啊,甚至连循环零开销也做不到(并没有超过两层循环),莫非必须要自己写汇编? 听说CCS的C代码汇编效率能达到90%?… 查看全部问答> |
|
我使用驱动调试助手加载注册表是成功的,单激活驱动时出现ERROR ID:2,不知道是怎么回事,生成的DLL是直接把驱动文件放到DRIVER目录下编译的,没有改DIR,但当我把驱动改成启动时自动加载时用助手又不会出现错误,我想问下用助手调试自动加载驱动 ...… 查看全部问答> |
|
第二章 开发工具.rar (110.62 KB) 一点使用心得,希望对新手入门有所帮助,陆续还有新的章节 下载次数: 100 2009-12-29 20:49 第二章 开发工具.rar (110.62 KB) 下载次数:50 2009-12-29 20:49 ...… 查看全部问答> |
|
Linux内核大讲堂系列 序论 来源:Linux社区 作者:z2007b 其实我也是过来人,深知没有接触过内核开发的同志在无人指导的情况下独自学习Linux设备驱动的感受。都是买书,看BLOG,自已调个小程序,很难有同志能够坚持下去,市 ...… 查看全部问答> |
|
void main(void) { PTS_PTS1=0; PTS_PTS2=0; PTS_PTS3=1; PTS_PTS4=0; DelayXms(3000); FCNFG= 1; PPAGE=0x20; FlashPointer ...… 查看全部问答> |
|
我想采集一个5~10mv的直流电压源信号,我应该用的采样频率多大?还有基准电压是不是只能采用外部基准电压了?(它内部只有1.5v和2.5v的基准电压)求高手解答?… 查看全部问答> |
|
记得去年买的时候七百多,用了不到一年不抽水了,跟普通风扇没什么区别,现在换了地方,保修无门 ,现在跟普通风扇没区别,多了个水泵的价格真是惊人,有上当的感觉,无奈只有网上寻水泵了……… 查看全部问答> |




