51单片机程序9
LCD_RS BIT P2.0 ;定义LCD_RS数据/命令选择信号
LCD_RW BIT P2.1 ;定义LCD_RW读写信号
LCD_E BIT P2.2 ;定义LCD_E使能信号
DB0_DB7 EQU P0 ;定义DB0_DB7数据信号
ORG 0000H ;程序从0000H开始
LJMP MAIN ;调主程序
ORG 030H ;主程序从030H开始
;以下是主程序
MAIN: MOV SP,#70H ;初始化堆栈指针
ACALL HOT_START ;热启动?
START: ACALL CLR_LCD ;清LCD
ACALL MOVE_STR ;调字符串移动子程序,字符串开始移动显示
ACALL DELAY_05s ;延时0.5s
ACALL DELAY_05s ;延时0.5s
ACALL DELAY_05s ;延时0.5s,共延时1.5s
ACALL FLASH ;延闪烁子程序,开始闪烁
AJMP START
;以下是字符串移动子程序
MOVE_STR : MOV A,#10010000B ;在第1行第16列显示
ACALL WRITE_IR ;调写指令子程序
MOV DPTR,#LINE1 ;第1行字符串的起始地址送入DPTR
ACALL DISP_STR ;调字符串显示子程序
MOV A,#11010000B ;在第2行第16列显示
ACALL WRITE_IR ;调写指令子程序
MOV DPTR,#LINE2 ;第2行字符串的起始地址送入DPTR
ACALL DISP_STR ;调字符串显示子程序
MOV R3,#16 ;向左移动16格
MOV_NEXT: MOV A,#00011000B ;光标和字符同时左移1格
ACALL WRITE_IR ;调写指令子程序
ACALL DELAY_05s ;延时0.5s
DJNZ R3, MOV_NEXT ;R3不为16,跳转到NEXT继续循环
RET
; 以下是字符串显示子程序
DISP_STR: PUSH ACC ;ACC入栈
DISP_LOOP: CLR A ;清A
MOVC A,@A+DPTR ;查
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
JZ END_STR ;若A的值为0,则退出
LCALL WRITE_DR ;调写数据寄存器DR子程序
INC DPTR ;DPTR加1
SJMP DISP_LOOP ;跳转到DISP_LOOP继续循环
END_STR: POP ACC ;ACC出栈
RET
;以下是LCD第1、2行显示字符串
LINE1: DB " Ding-Ding",00H
LINE2: DB "Welcome to you!",00H
;以下是闪烁子程序
FLASH: MOV R4,#3 ;设置闪烁次数
FL_NEXT: MOV A,#00001000B ;关闭显示
ACALL WRITE_IR ;调写指令子程序
ACALL DELAY_05s ;延时0.5s
MOV A,#00001100B ;开显示,关闭光标
ACALL WRITE_IR ;调写指令子程序
ACALL DELAY_05s ;延时0.5s
DJNZ R4, FL_NEXT ; R4不为3,继续闪烁
RET
;以下是0.5s延时子程序
DELAY_05s: MOV R7,#250
LOOP2: MOV R6,#250
LOOP1: NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R6,LOOP1
DJNZ R7,LOOP2
RET
; 以下是LCD忙碌检查子程序
CHECK_BUSY: PUSH ACC
MOV P0,#0FFH
CLR LCD_RS
SETB LCD_RW
SETB LCD_E BUSY_LOOP: NOP
JB DB0_DB7.7,BUSY_LOOP ;若第7位为1,说明忙,则等待
CLR LCD_E
POP ACC
RET
;以下是LCD清屏子程序 CLR_LCD: MOV A,#01H ;清除屏幕
ACALL WRITE_IR ;调写指令寄存器IR子程序
RET
;以下是写指令寄存器IR子程序
WRITE_IR: CALL CHECK_BUSY WRITE_IR_NB: CLR LCD_RS
CLR LCD_RW
MOV DB0_DB7,A
SETB LCD_E
NOP
NOP
NOP
NOP
CLR LCD_E
RET
;以下是写数据寄存器DR子程序
WRITE_DR: ACALL CHECK_BUSY
SETB LCD_RS
CLR LCD_RW
MOV DB0_DB7,A
SETB LCD_E
NOP
NOP
NOP
NOP
CLR LCD_E
RET
;以下是LCD热启动子程序
HOT_START: ACALL DELAY_5ms ;延时5ms
ACALL DELAY_5ms ;延时5ms
ACALL DELAY_5ms ;延时5ms,共延时15ms,等待LCD
电源稳定
MOV A ,#00111000B ;功能设置指令,数据总线为8位,双
行显示,5×7点阵字体
ACALL WRITE_IR_NB ;写指令,不进行LCD忙检测
ACALL DELAY_5ms ;延时5ms
MOV A ,#00111000B ;功能设置指令,数据总线为8位,双行显
示,5×7点阵字体
ACALL WRITE_IR_NB ;写指令,不进行LCD忙检测
ACALL DELAY_5ms ;延时5ms
MOV A ,#00111000B ;功能设置指令,数据总线为8位,双
行显示,5×7点阵字体
ACALL WRITE_IR_NB ;写指令,不进行LCD忙检
ACALL DELAY_5ms ;延时5ms
MOV A,#00001000B ;关显示
ACALL WRITE_IR ;写指令,进行LCD忙检测
ACALL CLR_LCD ;清屏
MOV A,#00001100B ;开显示,关光标
ACALL WRITE_IR ;写指令,进行LCD忙检测
RET
;以下是5ms延时子程序
DELAY_5ms: SETB RS0 ;切换工作寄存器组
SETB RS1 ;切换工作寄存器组
MOV R6,#10
LCD_D1: MOV R7,#250
LCD_D2: DJNZ R7,LCD_D2
DJNZ R6,LCD_D1
RET
END