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

📄 democs32.asm

📁 51单片机模拟串口
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;==== DEMOCS32.ASM ==========================================================
;触摸屏_硬件或模拟串口_汇编语言_KY-C55A(H)P_彩色终端配触摸屏例程
;本程序以KY-C55A(H)P为例校准,用于其它终端时,需重新校准"按键数据存放区C03ANZ3"中的数据.
;============================================================================
;============================================================================
;本程序可在任何51系列单片机中运行
;如8031,8032,AT89C2051,AT89C4051,AT89C51,AT89C52,AT89C55,W78E51
;   W78E52,W78E58,W78E516......
;通过K_MNCK可以选择使用硬件串口或模拟串口.
;当使用模拟串口时,CMP_DATA和ZD_DATA可任意选择单片机的引脚
;  当使用硬件串口时,CMP_DATA必须为P3.0    ZD_DATA必须为P3.1
;  其它功能引脚可任意安排.
;本例中使用AT89C51,18.432MHz.
;硬件支持为本公司的51单片机实验板(TEST51B.PCB)
;可完成如下功能:
; 1)使用模拟串口,CMP_DATA和ZD_DATA可任意选择单片机的引脚
; 2)触摸屏演示.
; 3)本程序可用于KY系列中320*240,640*480分辨率之单色或彩色终端配套触摸屏的演示
; 4)本例中为9个按键,用户可以根据需要,选择任意个按键并放在任何位置。
;  其中的子程序用户可以直接使用,也可根据需要适当改动。
; 5)建议晶振频率为18.432MHz,通信波特率为9600Hz
; 6)程序运行后,画出9个按键(9个矩形),按键后画面发生相应变化。
;============================================================================
;********用户开发触摸屏系统工作过程(仅供参考)********************************
;1)将需要使用到的所有按键用矩形画出.
;2)将触摸屏控制器的输出信号经RS232C转换板接微机的RS232C接口,运行配套软件,选
;  择"触摸屏测试",即可在微机屏幕上显示触摸屏的输出数据即手压位置的XY坐标.
;3)用铅笔分别点触各个矩形的对角两个点,即左上角和右下角.
;  记下各点(每个按键2个点)的XY坐标,并将这些数据分别填入标号为按键数据区.
;4)运行后将完成各键对应的功能.
;============================================================================
;============================================================================
TIMEzq   EQU     22      ;通过修改TIMEzq使本程序适用于各种晶振及各种波特率.
;============================================================================
K_MNCK   EQU     1       ;当K_MNCK=1时,使用模拟串口输出/接收数据.(本例中波特率为9600Hz)
                         ;当K_MNCK=0时,使用硬件串口输出/接收数据.(本例中波特率为9600Hz)
CMP_DATA EQU     P3.0    ;接收触摸屏控制器发来的串行数据
                         ;当K_MNCK=1时,使用模拟串口接收数据,故可以连接于任意一位输入引脚上.
                         ;当K_MNCK=0时,使用硬件串口接收数据,故必须连接于P3.0
ZD_DATA  EQU     P3.1    ;向液晶终端输出串行数据
                         ;当K_MNCK=1时,使用模拟串口输出数据,故可以连接于任意一位输出引脚上.
                         ;当K_MNCK=0时,使用硬件串口输出数据,故必须连接于P3.1
ZD_BUSY  EQU     P1.2    ;接收液晶终端发来的"忙"(BUSY)信号,可以连接于任意一位输入引脚上.
;=========================
;====使用硬件串口时,波特率的设置及计算方法:  =================================
;BTL*(256-TH)=(18.432MHz*1000)/(12*16)      BTL*(256-TH)=96    TH=256-(96/BTL)
;例:当BTL=9600Hz=9.6KHz时,TH=256-(96/9.6)=246
BTL96000  EQU     255    ;=FFH;18.432MHz:96000Hz(SMOD=1)
BTL19200  EQU     251    ;=FBH;18.432MHz:19200Hz(SMOD=1)
BTL9600   EQU     246    ;=F6H;18.432MHz: 9600Hz(SMOD=1)
BTL2400   EQU     216    ;=D8H;18.432MHz: 2400Hz(SMOD=1)
;=============================================================================
ESC     EQU     1BH
XHDM    EQU     37H     ;型号代码0-7
MXH     EQU     2BH
MXL     EQU     2AH
MYH     EQU     29H
MYL     EQU     28H
;============================================================================
;=====  主程序  ==============================================================
        ORG     0
        JB      K_MNCK,M00;使用模拟串口时不进行串口初始化
        LCALL   CSH     ;串口初始化
M00:    NOP
;============================================================================
;=======CMP03===C55A(H)P=====================================================
CMP03:  NOP                    ;
        MOV     DPTR,#C03QPM   ;清屏
        LCALL    SC1PSJ        ;
        MOV     DPTR,#C03A1WZ  ;AN1位置
        LCALL    SC1PSJ        ;
        MOV     DPTR,#C03WX    ;AN外形
        LCALL    SC1PSJ        ;
        MOV     DPTR,#C03A2WZ
        LCALL    SC1PSJ        ;
        MOV     DPTR,#C03WX
        LCALL    SC1PSJ        ;
        MOV     DPTR,#C03A3WZ
        LCALL    SC1PSJ        ;
        MOV     DPTR,#C03WX
        LCALL    SC1PSJ        ;
        MOV     DPTR,#C03A4WZ
        LCALL    SC1PSJ        ;
        MOV     DPTR,#C03WX
        LCALL    SC1PSJ        ;
        MOV     DPTR,#C03A5WZ
        LCALL    SC1PSJ        ;
        MOV     DPTR,#C03WX
        LCALL    SC1PSJ        ;
        MOV     DPTR,#C03A6WZ
        LCALL    SC1PSJ        ;
        MOV     DPTR,#C03WX
        LCALL    SC1PSJ        ;
        MOV     DPTR,#C03A7WZ
        LCALL    SC1PSJ        ;
        MOV     DPTR,#C03WX
        LCALL    SC1PSJ        ;
        MOV     DPTR,#C03A8WZ
        LCALL    SC1PSJ        ;
        MOV     DPTR,#C03WX
        LCALL    SC1PSJ        ;
        MOV     DPTR,#C03A9WZ
        LCALL    SC1PSJ        ;
        MOV     DPTR,#C03WX
        LCALL    SC1PSJ        ;
        MOV     DPTR,#C03WZH0  ;位置回0
        LCALL    SC1PSJ        ;
C0320:  MOV     DPTR,#C03ANZ3 ;DPTR为按键数据区首地址
        MOV     R7,#9         ;R7为最大按键值(如9个按键,则R7=9)
        LCALL   CMPAJ         ;触摸屏按键处理,如果无压力或没有按指定的按
                              ;键,则始终在本程序中运行.
C0330:  MOV     DPTR,#C0340
        DEC     A
        MOV     B,#3
        MUL     AB
        JMP     @A+DPTR
C0340:  LJMP    C03AN1CL        ;AN1处理,完毕后转C0320
        LJMP    C03AN2CL
        LJMP    C03AN3CL
        LJMP    C03AN4CL
        LJMP    C03AN5CL
        LJMP    C03AN6CL
        LJMP    C03AN7CL
        LJMP    C03AN8CL
        LJMP    C03AN9CL
;============================================================================
C03AN1CL:MOV     DPTR,#C03AN1ML ;演示画面按键1
        LCALL    SC
        LJMP     C0320
C03AN2CL:MOV     DPTR,#C03AN2ML
        LCALL    SC
        LJMP     C0320
C03AN3CL:MOV     DPTR,#C03AN3ML
        LCALL    SC
        LJMP     C0320
C03AN4CL:MOV     DPTR,#C03AN4ML
        LCALL    SC
        LJMP     C0320
C03AN5CL:MOV     DPTR,#C03AN5ML
        LCALL    SC
        LJMP     C0320
C03AN6CL:MOV     DPTR,#C03AN6ML
        LCALL    SC
        LJMP     C0320
C03AN7CL:MOV     DPTR,#C03AN7ML
        LCALL    SC
        LJMP     C0320
C03AN8CL:MOV     DPTR,#C03AN8ML
        LCALL    SC
        LJMP     C0320
C03AN9CL:MOV     DPTR,#C03AN9ML
        LCALL    SC
        LJMP     C0320
;============================================================================
;============================================================================
;============================================================================
;按键数据存放区
;当触摸屏位置与开发时发生较大偏移时,可将以下4个常数改为非零的正数或负数以抵
;消触摸位置的偏差,一般情况下,X1PY=X2PY,Y1PY=Y2PY。
C03X1PY    EQU     0      ;X1偏移量
C03Y1PY    EQU     0      ;Y1偏移量
C03X2PY    EQU     0      ;X2偏移量
C03Y2PY    EQU     0      ;Y2偏移量
;KY-C55A(H)P       OK
;存放顺序依次为:按键左上角坐标X1,Y1  按键右下角X2,Y2
;              X1           Y1           X2           Y2
C03ANZ3:DW   00589+C03X1PY,  00100+C03Y1PY,  00483+C03X2PY,  00193+C03Y2PY  ;第1键
        DW   00589+C03X1PY,  00351+C03Y1PY,  00483+C03X2PY,  00457+C03Y2PY  ;第2键
        DW   00589+C03X1PY,  00612+C03Y1PY,  00483+C03X2PY,  00716+C03Y2PY  ;第3键
        DW   00408+C03X1PY,  00100+C03Y1PY,  00300+C03X2PY,  00193+C03Y2PY  ;第4键
        DW   00408+C03X1PY,  00351+C03Y1PY,  00300+C03X2PY,  00457+C03Y2PY  ;第5键
        DW   00408+C03X1PY,  00612+C03Y1PY,  00300+C03X2PY,  00716+C03Y2PY  ;第6键
        DW   00225+C03X1PY,  00100+C03Y1PY,  00118+C03X2PY,  00193+C03Y2PY  ;第7键
        DW   00225+C03X1PY,  00351+C03Y1PY,  00118+C03X2PY,  00457+C03Y2PY  ;第8键
        DW   00225+C03X1PY,  00612+C03Y1PY,  00118+C03X2PY,  00716+C03Y2PY  ;第9键
;================================================
C03QPM: DW   3                                   ;清屏幕
        DB   1BH,51H,1
C03A1WZ:DW   204
        DB   1BH,'m',0,010H,0,010H ;第1键,用"设置新坐标原点"命令决定以下6个矩形的左上角位置.
        DB   ESC,'z',0,8,0,8
        DB   1DH,42H
        USES "sz1_32.bmp"          ;数字1的BMP图象(32*32单色)190个字节
C03A2WZ:DW   204
        DB   1BH,'m',0,088H,0,010H;第2键
        DB   ESC,'z',0,8,0,8
        DB   1DH,42H
        USES "sz2_32.bmp"
C03A3WZ:DW   204
        DB   1BH,'m',1,000H,0,010H;第3键
        DB   ESC,'z',0,8,0,8
        DB   1DH,42H
        USES "sz3_32.bmp"
C03A4WZ:DW   204
        DB   1BH,'m',0,010H,0,060H;第4键
        DB   ESC,'z',0,8,0,8
        DB   1DH,42H
        USES "sz4_32.bmp"
C03A5WZ:DW   204
        DB   1BH,'m',0,088H,0,060H;第5键
        DB   ESC,'z',0,8,0,8
        DB   1DH,42H
        USES "sz5_32.bmp"
C03A6WZ:DW   204
        DB   1BH,'m',1,000H,0,060H;第6键
        DB   ESC,'z',0,8,0,8
        DB   1DH,42H
        USES "sz6_32.bmp"
C03A7WZ:DW   204
        DB   1BH,'m',0,010H,0,0B0H;第7键
        DB   ESC,'z',0,8,0,8
        DB   1DH,42H
        USES "sz7_32.bmp"
C03A8WZ:DW   204
        DB   1BH,'m',0,088H,0,0B0H;第8键
        DB   ESC,'z',0,8,0,8
        DB   1DH,42H
        USES "sz8_32.bmp"
C03A9WZ:DW   204
        DB   1BH,'m',1,000H,0,0B0H;第9键
        DB   ESC,'z',0,8,0,8
        DB   1DH,42H
        USES "sz9_32.bmp"
C03WX:  DW   60
        DB   1BH, 6AH,0E0H, 0,030H, 0, 0,30H, 0,30H	;最外层,左边和上边黄色,每个按键画6个矩形
        DB   1BH, 6AH,080H, 0,0C0H, 0, 0,30H, 0,30H	;最外层,右边和下边黑色
        DB   1BH, 6AH,0F0H, 1,030H, 1, 0,2FH, 0,2FH	;中间层,左边和上边白色
        DB   1BH, 6AH,080H, 1,0C0H, 1, 0,2FH, 0,2FH	;中间层,右边和下边黑色
        DB   1BH, 6AH,0E0H, 2,030H, 2, 0,2EH, 0,2EH	;最里层,左边和上边黄色
        DB   1BH, 6AH,080H, 2,0C0H, 2, 0,2EH, 0,2EH	;最里层,右边和下边黑色
C03WZH0:DW   6
        DB   1BH,'m',0,0,0,0;
;================================================
;AN1-AN90按键被按压后的处理程序
C03AN1ML:DB     0
        DB      1BH,'m',0,010H,0,010H;第1键
        DB      ESC,'j',0,0,4,0,0,30H,0,30H;'q'
        DB      0,0,0,0,0,0,0,0,0,0,0,0
C03AN2ML:DB     0
        DB   1BH,'m',0,088H,0,010H;第2键
        DB      ESC,'j',0,0,4,0,0,30H,0,30H
        DB      0,0,0,0,0,0,0,0,0,0,0,0
C03AN3ML:DB     0
        DB   1BH,'m',1,000H,0,010H;第3键
        DB      ESC,'j',0,0,4,0,0,30H,0,30H
        DB      0,0,0,0,0,0,0,0,0,0,0,0
C03AN4ML:DB     0
        DB   1BH,'m',0,010H,0,060H;第4键
        DB      ESC,'j',0,0,4,0,0,30H,0,30H
        DB      0,0,0,0,0,0,0,0,0,0,0,0
C03AN5ML:DB     0
        DB   1BH,'m',0,088H,0,060H;第5键
        DB      ESC,'j',0,0,4,0,0,30H,0,30H
        DB      0,0,0,0,0,0,0,0,0,0,0,0
C03AN6ML:DB     0
        DB   1BH,'m',1,000H,0,060H;第6键
        DB      ESC,'j',0,0,4,0,0,30H,0,30H
        DB      0,0,0,0,0,0,0,0,0,0,0,0
C03AN7ML:DB     0
        DB   1BH,'m',0,010H,0,0B0H;第7键
        DB      ESC,'j',0,0,4,0,0,30H,0,30H
        DB      0,0,0,0,0,0,0,0,0,0,0,0
C03AN8ML:DB     0
        DB   1BH,'m',0,088H,0,0B0H;第8键
        DB      ESC,'j',0,0,4,0,0,30H,0,30H
        DB      0,0,0,0,0,0,0,0,0,0,0,0
C03AN9ML:DB     0
        DB   1BH,'m',1,000H,0,0B0H;第9键
        DB      ESC,'j',0,0,4,0,0,30H,0,30H
        DB      0,0,0,0,0,0,0,0,0,0,0,0
;============================================================================
;============================================================================
;============================================================================
;============================================================================
;功能:触摸屏按键处理,如果无压力或没有按指定的按键,则始终在本程序中运行.
;入口:DPTR为按键数据区首地址,每键4字=8字节.
;     R7为最大按键值(如9个按键,则R7=9)
;出口:A中为对应的键值.如A=1,2,3,4,5....为对应的键。
;影响:A,B,C,R6,R5,R4,R3
CMPAJ:  MOV     R5,DPH
        MOV     R4,DPL
CMPAJ1: MOV     R3,#0FFH
CMPAJ2: LCALL   CMP31         ;接收一组(5个字节)数据。
        LCALL   CMP38         ;转换求出XY坐标。X坐标于MXH,MXL中.Y坐标于MYH,MYL中.
        MOV     DPH,R5
        MOV     DPL,R4
        LCALL   QJ00           ;求按键值,A=0,没有按键被选中。A=1,2,3,4,5....为对应的键。
        JZ      CMPAJ1         ;=0:无按键,继续检测
        MOV     B,A
        CLR     C
        SUBB    A,R3
        JZ      CMPAJ3
        MOV     R3,B             ;有按键,存键值在R3中
        SJMP    CMPAJ2
CMPAJ3: LCALL   CMP31         ;第2次检测还是本键,开始第3次检测.(接收一组(5个字节)数据)
        LCALL   CMP38         ;转换求出XY坐标。X坐标于MXH,MXL中.Y坐标于MYH,MYL中.
        MOV     DPH,R5
        MOV     DPL,R4
        LCALL   QJ00           ;求按键值,A=0,没有按键被选中。A=1,2,3,4,5....为对应的键。
        JZ      CMPAJ1
        MOV     B,A
        CLR     C
        SUBB    A,R3
        JNZ     CMPAJ1         ;
        MOV     A,B
        RET                     ;A=1,2,3,4,5....为对应的键。
;================================================
;================================================
;功能:求按键值,
;入口:当前压力点的X坐标于MXH,MXL中.Y坐标于MYH,MYL中.
;     DPTR为按键数据区首地址,每键4字=8字节.
;     R7为最大按键值(如9个按键,则R7=9)
;出口:A=0时没有按键被选中。A非0时,A中为对应的键值.如A=1,2,3,4,5....为对应的键。
;影响:A,B,C,R6
QJ00:   MOV     R6,#1
QJ23:   CALL    BJ00        ;A非0:是本键(键值在R6中)
        JZ      QJ21
        MOV     A,R6
        RET
QJ21:   MOV     A,R6

⌨️ 快捷键说明

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