⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 19264接口程序.txt

📁 1926419264jiekou,能够显示图像
💻 TXT
📖 第 1 页 / 共 3 页
字号:
JMP START
 org 0023h
 LJMP RS232
 
START: MOV SP,#60H  ; void main() {
MAIN: LCALL DELAY400MS ; void delay(void);
CALL LCDRESET ; void lcdreset(void);
MOV A,#55H
CALL LCDFILL  ; void lcdfill( uchar a );
MOV DPTR,#STRING1 ; uchar *p = *string1;
CALL PUTSTR  ; void putstr( uchar *p);
MOV YPOS,#2
MOV XPOS,#0
CALL PUTSTR  ; void putatr( uchar *p);
M1: AJMP M1  ; whil(1);
   ; }

;****************************************************************
; 长延时程序,主要用于初始化之前,CPU等待LCM准备好(400MS)
;****************************************************************
DELAY400MS:
MOV R0,#20
DL4_PA: MOV R1,#100
DL4_PB: MOV R2,#100
DJNZ R2,$
DJNZ R1,DL4_PB
DJNZ R0,DL4_PA
RET
;****************************************************************
; 短延时程序,主要用于显示演示速度
;****************************************************************
DELAY:
 MOV R5,#4
DLY_PA: MOV R4,#0
 DJNZ R4,$
 DJNZ R5,DLY_PA
 RET 

;****************************************************************
;获取字串内字符编码,C=0显示结束,字符串以0FFH结尾作为结束标志
;以两字节组成一个字符:前一字节表示是全角(>=80H)还是半角(<80H)
; 后一字节字符点阵表内偏移量“内码”
;****************************************************************
GETSTRCHAR: 
GSC_PA: 
 CLR A
 MOVC A,@A+DPTR ;先读取字头
 INC DPTR
 MOV B,A
 INC A
 CLR C  ;置程序出口标志(表示已经结束)
 JZ GSC_LAX  ;如果是结束码(0ffh+1=00h)
 CLR A
 MOVC A,@A+DPTR ;真正读取“内码”
 INC DPTR
 SETB C  ;编码有效
GSC_LAX: 
 RET
;****************************************************************
;字符数据输出
;****************************************************************
PUTSTR:
; CALL DELAY
 CALL GETSTRCHAR ;取字符串中的字符码
 PUSH DPL
 PUSH DPH
 JNC PSR_LAX  ;显示结束
 JNB B.7,PSR_LBY ;编码<128,英文
;CHINESE:   ;汉字输出16*16=8*16 + 8*16
 CALL HZKPOS  ;点阵码偏移量换算
 CALL PUTCWDOT ;16*16点阵输出
 JMP PSR_LBX
PSR_LBY:
;ENGLISH:   ;英文(数字)半角字符输出
 CALL EZKPOS  ;点阵码偏移量换算
 CALL PUTCHARDOT ;8*16点阵输出
PSR_LBX:
 POP DPH
 POP DPL
 JMP PUTSTR  ;继续下一位
PSR_LAX:POP DPH
 POP DPL 
 RET
;****************************************************************
;全角字符数据输出,16*16点阵
;****************************************************************
PUTCWDOT:
 PUSH XPOS
 MOV R7,#16
PCW_PA:    ;上半个字符
 CLR A
 MOVC A,@A+DPTR ;获取点阵码
 CALL LCDWRITE ;写入LCM(上半个字部分)
 INC XPOS  ;X坐标加1
 INC DPTR  ;指向下一个点阵码
 DJNZ R7,PCW_PA
 INC YPOS
 POP XPOS
 MOV R7,#16
PCW_PB:    ;下半个字符
 CLR A  ;
 MOVC A,@A+DPTR ;再取一个点阵码
 CALL LCDWRITE ;输出
 INC DPTR  ;指向下一个点阵码
 INC XPOS  ;指向下一列
 DJNZ R7,PCW_PB
 DEC XPOS
 CALL CUSORNEXT ;坐标指针自动移位计算(指向下一列)
 MOV A,XPOS  ;判断是否换行?
 JNZ PCW_PC
 INC YPOS
PCW_PC: DEC YPOS  ;返回上半个字部分
 RET
;****************************************************************
;半角字符数据输出,8*16点阵
;****************************************************************
PUTCHARDOT:
 PUSH XPOS
 MOV R7,#8
PAC_PA:    ;上半个字符
 CLR A
 MOVC A,@A+DPTR ;获取点阵码
 CALL LCDWRITE ;写入LCM(上半个字部分)
 INC DPTR  ;指向下一个点阵码
 INC XPOS
 DJNZ R7,PAC_PA
 INC YPOS
 POP XPOS
 MOV R7,#8
PAC_PB:    ;下半个字符
 CLR A  ;
 MOVC A,@A+DPTR ;再取一个点阵码
 CALL LCDWRITE ;输出
 INC DPTR  ;指向下一个点阵码
 INC XPOS
 DJNZ R7,PAC_PB
 DEC XPOS
 CALL CUSORNEXT ;坐标指针自动移位计算(指向下一列)
 MOV A,XPOS  ;判断是否换行?
 JNZ PAC_LA2
 INC YPOS
PAC_LA2: 
 DEC YPOS  ;返回上半个字部分
 RET
;****************************************************************
; 汉字库实际指针换算,结果置入DPTR
;****************************************************************
HZKPOS:
 MOV B,#32
 MUL AB
 MOV DPTR,#HZKDOT
 AJMP ZKPOS
;****************************************************************
; 英文字母数字实际指针换算,结果置入DPTR
;****************************************************************
EZKPOS:
 MOV B,#16
 MUL AB
 MOV DPTR,#EZKDOT ;修改数据指针,指向所选字母
ZKPOS: ADD A,DPL
 MOV DPL,A
 MOV A,B
 ADDC A,DPH
 MOV DPH,A
 RET 
;****************************************************************
;全屏填充程序,填充内容在调用前设定于A中
;****************************************************************
LCDFILL: ;LCD整屏显示A的内容
MOV R7,A
MOV YPOS,#0
LFL_PB: MOV XPOS,#0
LFL_PA: MOV A,R7
CALL LCDWRITE ;定位并写数据
CALL CUSORNEXT
MOV A,XPOS
JNZ LFL_PA 
MOV A,YPOS
JNZ LFL_PB 
RET

;****************************************************************
;按给定的XY坐标定位,并写数据子程序
;****************************************************************
LCDWRITE:  
CALL LCDPOS  ;坐标指针定位
CALL LCDWD  ;写数据
RET

;****************************************************************
; 连续输出时的坐标指针换算,自动指向下一个可写入地址
;****************************************************************
CUSORNEXT:
 ANL YPOS,#7
 INC XPOS
 MOV A,XPOS
 CJNE A,#192,CNT_LAX
 MOV XPOS,#0
 INC YPOS
 MOV A,YPOS
 ANL A,#0F8H
 JZ CNT_LAX
 MOV YPOS,#0
CNT_LAX: 
 RET
;****************************************************************
;一字节数据输出
;****************************************************************
LCDWD: MOV B,A
 MOV A,XPOS
 CJNE A,#64,$+3
 JNC LWD_LA1
 MOV A,B
 CALL LCDWD1
 JMP LWD_LA3
LWD_LA1:CJNE A,#128,$+3
 JNC LWD_LA2
 MOV A,B
 CALL LCDWD2
 JMP LWD_LA3
LWD_LA2:CJNE A,#192,$+3
 JNC LWD_LA3  
 MOV A,B
 CALL LCDWD3
LWD_LA3:
 RET 
;****************************************************************
; X,Y坐标定位处理
;****************************************************************
LCDPOS:
 PUSH ACC
 MOV A,YPOS  ;取Y座标
 ANL A,#7  ;保留低三位
 ADD A,#0B8H  ;光标定位指令
 MOV B,A  ;暂存Y坐标
 CLR C
 MOV A,XPOS  ;取X坐标值
 SUBB A,#PD1  ;左区边界
 JNC LPS_LA1  ;如果不在左区
 MOV A,XPOS  ;重新取X坐标值
 ANL A,#3FH  ;左边部分(CS1)
 ORL A,#40H  ;X方向定位指令
 CALL LCDWC1  ;X定位
 MOV A,B  ;Y定位
 CALL LCDWC1
 JMP LPS_LA3  ;返回
LPS_LA1:CLR C
 MOV A,XPOS
 SUBB A,#PD1*2 ;中间区右边界
 JNC LPS_LA2  ;如果不在中间区
 MOV A,XPOS
 ANL A,#3FH  ;中间部分(CS2)
 ORL A,#40H  ;X方向定位指令
 CALL LCDWC2  ;X定位
 MOV A,B
 CALL LCDWC2  ;Y坐标定位
 JMP LPS_LA3  ;返回
LPS_LA2:CLR C
 MOV A,XPOS
 SUBB A,#PD1*3 ;右边区域边界
 JNC LPS_LA3  ;如果还出界则不予定位
 MOV A,XPOS
 ANL A,#3FH  ;右边部分(CS3)
 ORL A,#40H  ;X方向定位指令
 CALL LCDWC3
 MOV A,B
 CALL LCDWC3  ;Y方向定位
LPS_LA3:
 POP ACC
 RET 
;****************************************************************
; LCM系统复位
;****************************************************************
LCDRESET:
MOV A,#3EH ;关LCD显示 
 CALL LCDWC1
 CALL LCDWC2
 CALL LCDWC3
MOV A,#3FH ;打开LCD显示 
 CALL LCDWC1
 CALL LCDWC2
 CALL LCDWC3
MOV A,#0C0H ;设首址
 CALL LCDWC1
 CALL LCDWC2
 CALL LCDWC3
 RET 
;****************************************************************
; 控制命令输出
;****************************************************************
LCDWC1: CALL WAITIDLE1
SJMP WCCOM
LCDWC2: CALL WAITIDLE2
SJMP WCCOM
LCDWC3: CALL WAITIDLE3
WCCOM: CLR DI
CLR RW
MOV DATA_LCM,A ;E=1 D/I=0 R/W=0
SETB ELCM
NOP
CLR ELCM
 RET
;****************************************************************
;数据写输出(分为左中右3个程序)
;****************************************************************
LCDWD1: ;片1写数据子程序
CALL WAITIDLE1 ; BUSY ?
SJMP WDCOM
LCDWD2: ;片2写数据子程序
 CALL WAITIDLE2
SJMP WDCOM
LCDWD3: ;片3写数据子程序
 CALL WAITIDLE3
WDCOM: SETB DI ; D/I=1 R/W=0
CLR RW
MOV DATA_LCM,A 
SETB ELCM  ;  e = 1;
NOP   ; _nop_()
CLR ELCM  ; e = 0;
 RET 
RET
;****************************************************************
; BUSY状态等待
;****************************************************************
WAITIDLE1:
PUSH ACC
MOV DATA_LCM,#0FFH ; E=1 CS1=0 CS2=1 CS3=1 D/I=0 R/W=1
CLR CS1
SETB CS2
SETB CS3
AJMP WT_COM
WAITIDLE2:
PUSH ACC
MOV DATA_LCM,#0FFH ; E=1 CS1=1 CS2=0 CS3=1 D/I=0 R/W=1
SETB CS1
CLR CS2
SETB CS3
 AJMP WT_COM
WAITIDLE3:
PUSH ACC
MOV DATA_LCM,#0FFH ; E=1 CS1=1 CS2=1 CS3=0 D/I=0 R/W=1
SETB CS1
SETB CS2
CLR CS3
WT_COM: CLR DI
SETB RW
SETB ELCM
WT_PA:  MOV A,DATA_LCM
JB ACC.7,WT_PA
CLR ELCM
POP ACC
RET
HZKDOT: 
;茂 C3515 0
 DB 004H,004H,0C4H,044H,05FH,044H,044H,0F4H
 DB 044H,04FH,054H,064H,044H,046H,004H,000H
 DB 080H,040H,03FH,000H,040H,040H,020H,020H
 DB 013H,00CH,018H,024H,043H,080H,0E0H,000H

;兴 C4843 1
 DB 000H,0FEH,04AH,04AH,000H,0FEH,0EAH,0AAH
 DB 0AAH,0FEH,000H,04AH,04AH,0FEH,000H,000H
 DB 002H,083H,042H,022H,012H,01BH,002H,002H
 DB 002H,00BH,012H,022H,062H,0C3H,002H,000H
 
;国 C2590 2
 DB 000H,0FEH,002H,0D2H,052H,052H,0D2H,03EH
 DB 0D2H,016H,01AH,012H,0FFH,002H,000H,000H
 DB 000H,0FFH,050H,053H,052H,04AH,06BH,050H
 DB 04FH,054H,07BH,040H,0FFH,000H,000H,000H

;际 C2842 3
 DB 000H,0FEH,022H,0D2H,00EH,020H,0B8H,04FH
 DB 0B2H,09EH,080H,09FH,072H,08AH,006H,000H
 DB 000H,0FFH,004H,008H,007H,021H,012H,00AH
 DB 046H,082H,07EH,006H,00AH,012H,031H,000H

;( C0308 4
 DB 000H,000H,000H,000H,000H,000H,000H,000H
 DB 000H,0C0H,030H,008H,004H,002H,000H,000H
 DB 000H,000H,000H,000H,000H,000H,000H,000H
 DB 000H,003H,00CH,010H,020H,040H,000H,000H

;广 C2567 5
 DB 000H,000H,0FCH,044H,054H,054H,07CH,055H
 DB 0D6H,054H,07CH,054H,054H,044H,044H,000H
 DB 080H,060H,01FH,080H,09FH,055H,035H,015H
 DB 01FH,015H,015H,035H,05FH,080H,000H,000H

;东 C2211 6
 DB 000H,008H,0E8H,0A8H,0A8H,0A8H,0A8H,0FFH
 DB 0A8H,0A8H,0A8H,0A8H,0E8H,00CH,008H,000H
 DB 000H,040H,023H,012H,00AH,006H,002H,0FFH
 DB 002H,006H,00AH,012H,023H,060H,020H,000H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -