📄 80c_pio.asm
字号:
;==========================演示程序=========================
;用并口通信时,只需发送仿真软件的十六进制显示窗口的第四个字节后的所有数据。
;如:清全屏的十六进制显示窗口是55AA0001434C42,采用并口通信时只需发送434C42
;
;P1为数据总线
;定义LCD控制线
EE EQU P3.1 ;使能信号.下降沿有效。
RWA EQU P3.0 ;读数据时必须低电平,向控制板写数据时必须高电平
END0 EQU P3.2 ;指令结束信号,在读最后一个数据时,或写最后一个数据时必须是低电平。
;当读第一个数据时END0就为低电平则所读为查忙数据。
PINT EQU P3.3 ;触摸屏中断,产生低电平。
;另一功能是当控制板上电准备就绪时产生一个5MS的低电平
CHX_DATH EQU 40H
CHX_DATL EQU 41H
CHY_DATH EQU 42H
CHY_DATL EQU 43H
JUDE EQU 30H
Year EQU 31H
Mon EQU 32H
Day EQU 33H
Hour EQU 34H
Min EQU 35H
Sec EQU 36H
Date EQU 37H
ORG 0000H
JMP START
ORG 0003H
RETI
ORG 000BH
JMP LOOP;;;;;;;;;;
ORG 0013H
LJMP REXY
ORG 001BH
RETI
ORG 0023H
RETI
ORG 002BH
RETI
ORG 0030H
NOP
START:
NOP
MOV C,PINT
;JC START ;检查控制板是否上电就绪。若用仿真器仿真时应屏蔽此指令。
MAIN: NOP
CALL LCD_CLR ;清屏
;main1: CALL DISLINE ;显示直线
; CALL DISell ;显示椭圆
; CALL DEL2S
; CALL DISN ;显示第0幅位图
; CALL DISFS ;反色矩形
; CALL DEL2S
; CALL DISFS ;反色矩形
; CALL DEL2S
; CALL DISCLR ;矩形清除
; CALL DEL2S
; CALL LCD_CLR
;CALL DISN1 ;自动显示位图
;CALL SETTIME ;设置时间(当时间存在误差时,可以重新设置时间)
; CALL TIME ;打开时间显示功能
; CALL RETIME ;读时间,必须在紧跟在"打开时间显示功能"后面。
; CALL DEL2S
; CALL TIME1 ;关闭时间显示功能
; CALL LCD_CLR
; CALL DISZZ ;显示字符
;__________________________________________________
jia: ajmp main
;--------------------------------------------------
LOOP: NOP
MOV C,PINT
JC LOOP
CALL REXY ;读被触摸的X,Y 值
NOP
CALL DISVi_1 ;调用显示变量子程序,显示X轴坐标值。
CALL DISVi_2 ;调用显示变量子程序,显示Y轴坐标值。
CALL DISell_2 ;调用显示圆子程序,在按下的地方显示一个小圆。
RETI;;;;;;;;;;;;;
; LJMP LOOP
;**********************************************************************
;读触摸屏子程序(在实际应用中必须是在PINT产生中断时才调用这个子程序)
REXY: NOP
CALL REBUY
CLR RWA ;读数据时必须低电平
CALL EETASK ;产生下降沿时序
MOV CHX_DATH,P1 ;读入的第一个数据送CHX_DATH
CALL EETASK
MOV CHX_DATL,P1 ;读入的第二个数据送CHX_DATL
CALL EETASK
MOV CHY_DATH,P1 ;读入的第三个数据送CHY_DATH
CLR END0 ;END0为低电平,表示读最后一个数据
CALL EETASK ;产生下降沿时序
MOV CHY_DATL,P1 ;读入的第四个数据送CHY_DATL
SETB END0
SETB RWA
RET
;************************************************************************
;查忙子程序
REBUY: CLR RWA
CLR END0 ;读第一个数据时END0就低电平。则所读数据为查忙信号
CALL EETASK
MOV A,P1
JNZ REBUY
SETB END0
SETB RWA
RET
;****************************************************************
;清屏子程序
LCD_CLR:
CALL REBUY ;查忙
SETB RWA
MOV P1,#043H ;发送清屏指令高字节
CALL EETASK
MOV P1,#04CH ;发送清屏指令低字节
CALL EETASK
MOV P1,#0E0H ;发送前景颜色E0H指令
CALL EETASK
MOV P1,#01CH ;发送背景颜色1FH指令
CLR END0 ;END0为低电平,表示写最后一个数据
CALL EETASK
SETB END0
RET
;***********************************************************
;显示字符子程序
DISZZ: CALL REBUY ;查忙
SETB RWA
MOV P1,#044H ;发送显示字符指令高字节
CALL EETASK
MOV P1,#057H ;发送显示字符指令低字节
CALL EETASK
MOV P1,#0E0H ;发送前景颜色E0H指令
CALL EETASK
MOV P1,#01FH ;发送背景颜色1FH指令
CALL EETASK
MOV P1,#000H ;X轴起点坐标高字节
CALL EETASK
MOV P1,#000H ;X轴起点坐标低字节
CALL EETASK
MOV P1,#000H ;Y轴起点坐标高字节
CALL EETASK
MOV P1,#000H ;Y轴起点坐标低字节
CALL EETASK
MOV P1,#0C7H ;送字符对用ASCII码
CALL EETASK
MOV P1,#0EBH
CALL EETASK
MOV P1,#0B0H
CALL EETASK
MOV P1,#0B4H
CALL EETASK
MOV P1,#0B4H
CALL EETASK
MOV P1,#0A5H
CALL EETASK
MOV P1,#0C3H
CALL EETASK
MOV P1,#0FEH
CALL EETASK
MOV P1,#0C6H
CALL EETASK
MOV P1,#0C1H
CLR END0 ;END0为低电平,表示写最后一个数据
CALL EETASK
SETB END0
RET
;***************************************************************
;显示变量子程序1
DISVi_1:
CALL REBUY ;查忙
SETB RWA
MOV P1,#044H ;发送显示变量指令高字节
CALL EETASK
MOV P1,#056H ;发送显示变量指令低字节
CALL EETASK
MOV P1,#0E0H ;发送前景颜色E0H指令
CALL EETASK
MOV P1,#01FH ;发送背景颜色1FH指令
CALL EETASK
MOV P1,#000H ;X轴起点坐标高字节
CALL EETASK
MOV P1,#100 ;X轴起点坐标低字节
CALL EETASK
MOV P1,#000H ;Y轴起点坐标高字节
CALL EETASK
MOV P1,#000H ;Y轴起点坐标低字节
CALL EETASK
MOV P1,CHX_DATH ;变量值(2个字节)
CALL EETASK
MOV P1,CHX_DATL
CALL EETASK
MOV P1,#03H
CLR END0 ;END0为低电平,表示写最后一个数据
CALL EETASK
SETB END0
RET
;*****************************************************************
;显示变量子程序2
DISVi_2:
CALL REBUY ;查忙
SETB RWA
MOV P1,#044H ;发送显示变量指令高字节
CALL EETASK
MOV P1,#056H ;发送显示变量指令低字节
CALL EETASK
MOV P1,#0E0H ;发送前景颜色E0H指令
CALL EETASK
MOV P1,#01FH ;发送背景颜色1FH指令
CALL EETASK
MOV P1,#000H ;X轴起点坐标高字节
CALL EETASK
MOV P1,#150 ;X轴起点坐标低字节
CALL EETASK
MOV P1,#000H ;Y轴起点坐标高字节
CALL EETASK
MOV P1,#000H ;Y轴起点坐标低字节
CALL EETASK
MOV P1,CHY_DATH ;变量值(2个字节)
CALL EETASK
MOV P1,CHY_DATL
CALL EETASK
MOV P1,#03H
CLR END0 ;END0为低电平,表示写最后一个数据
CALL EETASK
SETB END0
RET
;***********************************************************
;显示椭圆子程序
DISell: CALL REBUY ;查忙
SETB RWA
MOV P1,#044H ;发送显示椭圆指令高字节
CALL EETASK
MOV P1,#045H ;发送显示椭圆指令低字节
CALL EETASK
MOV P1,#0E0H ;发送前景颜色E0H指令
CALL EETASK
MOV P1,#01FH ;发送背景颜色1FH指令
CALL EETASK
MOV P1,#000H ;圆心坐标X轴高字节
CALL EETASK
MOV P1,#0A0H ;圆心坐标X轴低字节
CALL EETASK
MOV P1,#000H ;圆心坐标Y轴高字节
CALL EETASK
MOV P1,#078H ;圆心坐标Y轴低字节,即圆心坐标为(00A0H,0078H)
CALL EETASK
MOV P1,#000H ;椭圆X轴半径高字节
CALL EETASK
MOV P1,#01EH ;椭圆X轴半径低字节
CALL EETASK
MOV P1,#000H ;椭圆Y轴半径高字节
CALL EETASK
MOV P1,#032H ;椭圆Y轴半径低字节(当椭圆X轴半径=椭圆Y轴半径的时,显示为一个圆).
CLR END0 ;END0为低电平,表示写最后一个数据
CALL EETASK
SETB END0
RET
;*************************************************************
;在按下的地方显示圆子程序
DISell_2:
CALL REBUY ;查忙
SETB RWA
MOV P1,#044H
CALL EETASK
MOV P1,#045H
CALL EETASK
MOV P1,#0E0H ;发送前景颜色E0H指令
CALL EETASK
MOV P1,#01FH ;发送背景颜色1FH指令
CALL EETASK
MOV P1,CHX_DATH
CALL EETASK
MOV P1,CHX_DATL ;圆心坐标(XX)
CALL EETASK
MOV P1,#000H
CALL EETASK
MOV P1,CHY_DATL ;圆心坐标(YY)
CALL EETASK
MOV P1,#000H ;X轴半径高字节
CALL EETASK
MOV P1,#004H ;X轴半径低字节
CALL EETASK
MOV P1,#000H ;Y轴半径高字节
CALL EETASK
MOV P1,#004H ;Y轴半径低字节(X轴半径=Y轴半径的时,显示为一个圆).
CLR END0 ;END0为低电平,表示写最后一个数据
CALL EETASK
SETB END0
RET
;***************************************************************
;显示直线子程序
DISLINE:
CALL REBUY ;查忙
SETB RWA
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -