可视化编程串行控制中文字库液晶显示模块VLCM320240
●串行口模式应设为模式1(1个起始位,8个数据位,1个停止位);
●波特率设应当为19200(TH1=TL1=0FDH,SMOD=1);
●在发送命令之前应检测模块为闲态(BUSY=1)否则所发的命令可能失效;
●串口发送的必须是完整命令的ASCII码(汉字为其机内码,ASCII字符为其ASCII码),如命令“BMP0B000C0D”,实际由串口发送的内容是“424D503042303030433044”,顺序为:
“B→M→P→0→B→0→0→0→C→0→D”;
●在每条命令的首末还要加上命令结束码“回车键"的ASCII码“0DH”,以表明该命令的结束。
●若单片机AT89C52的串口已被占为它用,那么用一根口线来摸拟生成一个通讯协议为(19200,N,8,1)的软串口发送命令即可。
下面给出与上述电路配套的显示控制子程序:
; 位定义
BUSY BIT P3 ; 定义忙信号线
; 数据字节定义
X V EQU 30H; 定义参数x
XH V EQU 31H; 定义参数xH
Y V EQU 32H; 定义参数y
NUBER EQU 33H; 定义参数n
WIDTH EQU 34H; 定义参数w
HIGHT EQU 35H; 定义参数h
ASC XH EQU 36H; 定义参数x高四位
ASC XL EQU 37H; 定义参数x低四位
ASC XHH EQU 38H; 定义参数xH高四位
ASC XHL EQU 39H; 定义参数xH低四位
ASC YH EQU 3AH; 定义参数y高四位
ASC YL EQU 3BH; 定义参数y低四位
ASC NH EQU 3CH; 定义参数n高四位
ASC NL EQU 3DH; 定义参数n低四位
ASC WH EQU 3EH; 定义参数w高四位
ASC WL EQU 3FH; 定义参数w低四位
ASC HH EQU 40H; 定义参数h高四位
ASC HL EQU 41H; 定义参数h低四位
;初始化子程序
INIT SIO:MOV SCON,#50H;串行口方式1
MOV TMOD,#21H
MOV TH1,#0FDH;波特率=19200
MOV TL1#0FDH
ORL PCON#80H;SMOD=1
SETB TR1 ; 启动T1
RET
;设置汉字或ASCII字符显示首地址命令
ORDER HZA:MOV A X V
MOV R0 #REG ASC XH
LCALL H ASC ;将参数x转换为
两个字节的ASCII码
MOV AXH V
MOV R0 #REG ASC XHH
LCALL H ASC ; 将参数xH转换为
两个字节的ASCII码
MOV AY V
MOV R0 #REG ASC YH
LCALL H ASC ;将参数y转换为
两个字节的ASCII码
LCALL BUSY CK
MOV A #“H” ;发送命令码HZA
的ASCII码
LCALL SEND BYTE
MOV A#“Z”
LCALL SEND BYTE
MOV A #“A”
LCALL SEND BYTE
MOV R0 #REG ASC XHH
LCALL SEND CS;发参数H的ASCII码
MOV R0 #REG ASC XH
LCALL SEND CS;发参数x的ASCII码
MOV R0 #REG ASC YH
LCALL SEND CS;发参数y的ASCII码
LJMP ORDER END
;显示汉字串子程序
ORDER HZ LCALL BUSY CK;检测模块闲状态
MOV A #“H”
LCALL SEND BYTE
MOV A#“Z”
LCALL SEND BYTE
MOV A #“D”
LCALL SEND BYTE
NEXT HZ: CLR A; 取汉字的高八位内码
MOVC A,@A+DPTR
INC DPTR;调整内码指针
LCALL SEND BYTE
CLR A; 取汉字的低八位内码
MOVC A,@A+DPTR
INC DPTR;调整内码指针
LCALL SEND BYTE
DJNZ R7,NEXT HZ
MOV A,#0DH;命令结束
LCALL SEND BYTE
RET
;显示ASCII字符串子程序
ORDER ASCII:
LCALL BUSY CK
MOV A,#“H”;
LCALL SEND BYTE
MOV A,#“Z”
LCALL SEND BYTE
MOV A#“D”
LCALL SEND BYTE
NEXT ASCII CLR A 取ASCII码
MOVC A@A+DPTR
INC DPTR
LCALL SEND BYTE
DJNZ R7NEXT ASCII
MOV A#0DH
LCALL SEND BYTE
RET
;清屏子程序
ORDER CLR:LCALL BUSY CK
MOV A,#“C”
LCALL SEND BYTE
MOV A#“L”
LCALL SEND BYTE
MOV A #“R”
LCALL S