- $INCLUDE(STC89.INC)
-
- ORG 0000H
- LJMP F_MAIN
-
- T_TestString: DB "STC89C52RC",0
-
- F_MAIN:
- MOV SP,#7FH
- LCALL F_LCD1602_Init
-
- MOV R7,#0
- MOV R6,#0
- LCALL F_LCD1602_SetShowAddr
- MOV A,#'A'
- LCALL F_LCD1602_ShowChar
- MOV A,#'B'
- LCALL F_LCD1602_ShowChar
- MOV A,#'C'
- LCALL F_LCD1602_ShowChar
-
- MOV R7,#13
- MOV R6,#0
- LCALL F_LCD1602_SetShowAddr
- MOV A,#'E'
- LCALL F_LCD1602_ShowChar
- MOV A,#'F'
- LCALL F_LCD1602_ShowChar
- MOV A,#'G'
- LCALL F_LCD1602_ShowChar
-
-
- MOV R7,#13
- MOV R6,#1
- LCALL F_LCD1602_SetShowAddr
- MOV A,#'H'
- LCALL F_LCD1602_ShowChar
- MOV A,#'I'
- LCALL F_LCD1602_ShowChar
- MOV A,#'J'
- LCALL F_LCD1602_ShowChar
-
- MOV R7,#0
- MOV R6,#1
- LCALL F_LCD1602_SetShowAddr
- MOV DPTR,#T_TestString
- LCALL F_LCD1602_ShowString
-
- L_LOOP:
-
- SJMP L_LOOP
-
- DELAY100MS: ;@11.0592MHz
- PUSH 30H
- PUSH 31H
- MOV 30H,#180
- MOV 31H,#68
- NEXT:
- DJNZ 31H,NEXT
- DJNZ 30H,NEXT
- POP 31H
- POP 30H
- RET
-
- ;引脚定义
- LCD1602_RS EQU P3.5
- LCD1602_RW EQU P3.6
- LCD1602_EN EQU P3.4
- LCD1602_DATA EQU P0
-
-
- ; 功能描述: LCD1602 读取状态
- ; 入口参数:
- ; 出口参数: A: 状态
- ; 影响资源:
- ; 堆栈需求:
- ; 示 例1:
- F_LCD1602_ReadState:
- MOV LCD1602_DATA,#0FFH ;释放数据总线
- CLR LCD1602_RS
- SETB LCD1602_RW
- ;>30nS
- SETB LCD1602_EN ;TA
- ;>100nS
- MOV A,LCD1602_DATA
- CLR LCD1602_EN ;TB
- ;TA + TB = >400nS
- RET
-
- ; 功能描述: LCD1602 写入命令
- ; 入口参数: A: 命令
- ; 出口参数:
- ; 影响资源:
- ; 堆栈需求:
- ; 示 例1:
- F_LCD1602_WriteCmd:
- PUSH ACC
- L_LCD1602_WriteCmd_CheckBusy:
- LCALL F_LCD1602_ReadState
- ANL A,#80H
- JNZ L_LCD1602_WriteCmd_CheckBusy ;检测 1602 液晶如果忙,等待
- POP ACC
-
- CLR LCD1602_RS
- CLR LCD1602_RW
- MOV LCD1602_DATA,A
- ;>40nS
- SETB LCD1602_EN
- ;>150nS
- CLR LCD1602_EN
- ;1->0->1: >400nS
- RET
-
- ; 功能描述: LCD1602 写入数据
- ; 入口参数: A: 数据
- ; 出口参数:
- ; 影响资源:
- ; 堆栈需求:
- ; 示 例1:
- F_LCD1602_WriteData:
- PUSH ACC
- L_LCD1602_WriteData_CheckBusy:
- LCALL F_LCD1602_ReadState
- ANL A,#80H
- JNZ L_LCD1602_WriteData_CheckBusy ;检测 1602 液晶如果忙,等待
- POP ACC
-
- SETB LCD1602_RS
- CLR LCD1602_RW
- MOV LCD1602_DATA,A
- ;>40nS
- SETB LCD1602_EN
- ;>150nS
- CLR LCD1602_EN
- ;1->0->1: >400nS
- RET
-
- ; 功能描述: LCD1602 初始化
- ; 入口参数:
- ; 出口参数:
- ; 影响资源:
- ; 堆栈需求:
- ; 示 例1:
- F_LCD1602_Init:
-
- CLR LCD1602_EN
- LCALL DELAY100MS
- MOV A,#38H ;设置16*2显示,5*7点阵,8位数据接口
- LCALL F_LCD1602_WriteCmd
- MOV A,#0CH ;开显示
- LCALL F_LCD1602_WriteCmd
- MOV A,#06H ;读写一字节后地址指针加1
- LCALL F_LCD1602_WriteCmd
- MOV A,#01H ;清除显示
- LCALL F_LCD1602_WriteCmd
- RET
-
- ; 功能描述: LCD1602 设置显示地址
- ; 入口参数: R7: X 显示横坐标(向右为正方向) 0...16
- ; R6: Y 显示纵坐标(向下为正方向) 0..1
- ; 出口参数:
- ; 影响资源:
- ; 堆栈需求:
- ; 示 例1:
- F_LCD1602_SetShowAddr:
- PUSH ACC
- MOV A,#80H
- CJNE R6,#1,L_LCD1602_SetShowAddr_Y0
- ADD A,#40H
- L_LCD1602_SetShowAddr_Y0:
- ADD A,R7
- LCALL F_LCD1602_WriteCmd
- POP ACC
- RET
-
- ; 功能描述: LCD1602 显示字符
- ; 入口参数: A: 字符
- ; 出口参数:
- ; 影响资源:
- ; 堆栈需求:
- ; 示 例1:
- F_LCD1602_ShowChar:
- LCALL F_LCD1602_WriteData
- RET
-
- ; 功能描述: LCD1602 显示字符串
- ; 入口参数: DPTR: 字符串地址
- ; 出口参数:
- ; 影响资源:
- ; 堆栈需求:
- ; 示 例1:
- F_LCD1602_ShowString:
- PUSH ACC
- L_LCD1602_ShowString_Check:
- CLR A
- MOVC A,@A+DPTR ;获取当前字符
- JZ L_LCD1602_ShowString_Exit ;检查字符串的末尾
- INC DPTR ;递增字符串指针
- LCALL F_LCD1602_WriteData ;发送当前字符
- SJMP L_LCD1602_ShowString_Check ;检查下一步
- L_LCD1602_ShowString_Exit:
- POP ACC
- RET
-
- END
复制代码
|