📄 触摸键盘、拼音输入法、动态曲线和区域图片切换.txt
字号:
M600实现触摸键盘、拼音输入法、动态曲线和区域图片切换
;DMT64480S_03演示程序,DMT64480S_03基于北京迪文科技有限公司的M600内核
;MCU 是C8051F410,时钟使用PCF8563,整个程序不到4K
;主要评估演示了以下功能
;.两条示波器效果动态曲线的实现,使用了连线和区域清除指令
;.时钟的显示和调整,使用了文本显示指令,中文和ASCII字符混合显示
;.图片剪切功能,在屏幕右上角每秒切换显示一个小图片,用户可以类似的制作漂亮的3D模拟表盘
;.触摸按键的实现
;.借助M600内嵌的拼音输入法实现汉字输入
$include (C8051F410.inc)
BUZZ BIT P1.4
JDQ0 BIT P1.0
JDQ1 BIT P1.1
KEYIN BIT P2.0
SDA1 BIT P0.7
SCL1 BIT P0.6
SADDR EQU 0A3H ;PCF8563 总线地址
SADDW1 EQU 0A2H
SYSFLG EQU 20H
TI0FLG BIT SYSFLG.7
RI0FLG BIT SYSFLG.6
RTCOK BIT SYSFLG.5 ;400mS定时器中断OK
PICOK BIT SYSFLG.4 ;300mS图片刷新时间OK
ADOK BIT SYSFLG.3
ADJFLG BIT SYSFLG.2
SYSFLG1 EQU 21H ;触摸按键
TCHOK BIT SYSFLG1.7
KEYOK BIT SYSFLG1.6
CAPSLK BIT SYSFLG1.5 ;0=正常 1=大写锁定
HZSTA BIT SYSFLG1.4 ;0=英文 1=拼音输入
SBUF0_RX EQU 22H
;触摸屏接收数据
RXAA EQU 30H
RX73 EQU 31H
RXXH EQU 32H
RXXL EQU 33H
RXYH EQU 34H
RXYL EQU 35H
KEYCODE EQU 36H
COLORH EQU 37H
COLORL EQU 38H
BCOLORH EQU 39H
BCOLORL EQU 3AH
TEXTX_H EQU 3BH ;文本显示位置
TEXTX_L EQU 3CH
TEXTY_H EQU 3DH
TEXTY_L EQU 3EH
HZPOS EQU 3FH
;RTC 接口定义
CSTA1 EQU 40H ;CONTROL REGISTER1
CSTA2 EQU 41H ;CONTROL REGISTER2
TIMES EQU 42H ;SECOND 00-59H BCD
TIMEM EQU 43H ;MINUTE
TIMEH EQU 44H ;HOUR
TIMED EQU 45H ;DATE DAY
TIMEW EQU 46H ;WEEK
TIMEMM EQU 47H ;MONTH
TIMEY EQU 48H ;YEAR
RTC200 EQU 49H
RTC500 EQU 4AH
RTC1S EQU 4BH
DL200MS EQU 4CH
;用户接口函数
PICPOS EQU 50H ;图片剪切的位置0-9
VAL_T EQU 51H
VAL_H EQU 52H
VAL_T0 EQU 53H
VAL_T1 EQU 54H
VAL_H0 EQU 55H
VAL_H1 EQU 56H
VALX0_H EQU 57H
VALX0_L EQU 58H
VALX1_H EQU 59H
VALX1_L EQU 5AH
PYCODE0 EQU 5BH ;拼音
PYCODE1 EQU 5CH
PYCODE2 EQU 5DH
PYCODE3 EQU 5EH
PYCODE4 EQU 5FH
PYCODE5 EQU 60H
ORG 0000H
LJMP MAIN
ORG 0023H
LJMP UARTPRO ;串口中断
ORG 002BH
LJMP SYSCLK ;10mS系统定时器中断
ORG 0100H
MAIN: CLR EA
MOV SP,#090H
LCALL INITCPU
LCALL INITSYS
SETB EA
LCALL ACKLCD ;检查M600是否已经上电OK
MOV A,#00H
LCALL PICDSP ;显示主界面图片
NOP
START: NOP
JNB RTCOK,START1
LCALL RDRTC
LCALL RTCDSP ;每500mS定时刷新时钟显示
CLR RTCOK
START1: JNB PICOK,START2
LCALL PICCUT ;每秒剪切一个200*140分辨率的小图片显示
CLR PICOK
START2: JNB ADOK,START3
LCALL ADPRO ;每200s显示一次动态数据,包括温度和湿度两个数据
CLR ADOK
START3: JNB TCHOK,START4 ;触摸按键处理
LCALL TCHPRO
START4: NOP
LJMP START
NOP
NOP
NOP
;参数初始化
INITSYS:PUSH IE
CLR EA
MOV SYSFLG,#00H
MOV SYSFLG1,#00H
MOV RTC500,#10
MOV RTC1S,#100
MOV PICPOS,#00H
MOV RTC200,#20
MOV VALX0_H,#00H
MOV VALX0_L,#03H
MOV VALX1_H,#00H
MOV VALX1_L,#08H
MOV VAL_T0,#17
MOV VAL_H0,#74
MOV TEXTX_H,#0
MOV TEXTX_L,#6
MOV TEXTY_H,#0
MOV TEXTY_L,#164
MOV DPTR,#0FFH ;00FF 位置保存了有效拼音字符串的个数
CLR A
MOVX @DPTR,A
POP IE
RET
;***************触摸键盘处理***********
TCHPRO: LCALL TCHKEY
JB KEYOK,TCHPR1
RET
TCHPR1: MOV A,KEYCODE
CJNE A,#02H,TCHPR2 ;CAPSLOCK
JB HZSTA,TCHPROE
CPL CAPSLK
MOV COLORH,#07H
MOV COLORL,#0E0H
MOV BCOLORH,#00H
MOV BCOLORL,#1FH
LCALL COLORSET
TCHPR10:MOV DPTR,#CMD54T1
JB CAPSLK,TCHPR11
MOV DPTR,#CMD54T2
TCHPR11:LCALL TXROMS
LCALL TXFEND
TCHPROE:NOP
RET
TCHPR2: CJNE A,#05H,TCHPR3 ;EN/PY
MOV COLORH,#07H
MOV COLORL,#0E0H
MOV BCOLORH,#00H
MOV BCOLORL,#1FH
LCALL COLORSET
CPL HZSTA
MOV C,HZSTA
MOV CAPSLK,C
MOV PYCODE0,#" "
MOV PYCODE1,#" "
MOV PYCODE2,#" "
MOV PYCODE3,#" "
MOV PYCODE4,#" "
MOV PYCODE5,#" "
JNC TCHPR21
MOV PYCODE0,#"-"
MOV PYCODE1,#"-"
MOV PYCODE2,#"-"
MOV PYCODE3,#"-"
MOV PYCODE4,#"-"
MOV PYCODE5,#"-"
TCHPR21:MOV DPTR,#CMD54T3
LCALL TXROMS
MOV R0,#PYCODE0
MOV R7,#6
LCALL TXRAMS
LCALL TXFEND
LJMP TCHPR10 ;中文方式就打开CAPSLOCK
TCHPR3: CJNE A,#0AH,TCHPR31
LCALL HZSEL ;选择一个汉字
RET
TCHPR31:CJNE A,#0BH,TCHPR32
MOV DL200MS,#50
LCALL DELAY
LCALL INITSYS
MOV A,#00H
LCALL PICDSP
RET
TCHPR32:CJNE A,#00H,TCHPR33
LCALL BKPRO ;退格
RET
TCHPR33:CJNE A,#0CH,TCHPR34
LCALL RTCADJ ;时钟调节
RET
TCHPR34:CLR C
SUBB A,#06H
JC TCHPR4
MOV A,KEYCODE
CLR C
SUBB A,#10
JNC TCHPR4 ;6-9 介绍图片
MOV A,KEYCODE
LCALL PICDSP
MOV DL200MS,#100
LCALL DELAY
CLR TCHOK
JNB TCHOK,$
CLR TCHOK
LCALL INITSYS
MOV A,#00H
LCALL PICDSP
RET
TCHPR4: CLR C
MOV A,KEYCODE
SUBB A,#20H
JNC TCHPR41
RET
TCHPR41:JNB HZSTA,TCHPR5
MOV PYCODE0,PYCODE1
MOV PYCODE1,PYCODE2
MOV PYCODE2,PYCODE3
MOV PYCODE3,PYCODE4
MOV PYCODE4,PYCODE5
MOV PYCODE5,KEYCODE
MOV COLORH,#07H
MOV COLORL,#0E0H
MOV BCOLORH,#00H
MOV BCOLORL,#1FH
LCALL COLORSET
MOV DPTR,#CMD54T3
LCALL TXROMS
MOV R0,#PYCODE0
MOV R7,#6
LCALL TXRAMS
LCALL TXFEND
LCALL PYPRO ;拼音输入法处理
RET
TCHPR5: MOV COLORH,#0FFH
MOV COLORL,#0FFH
MOV BCOLORH,#00H
MOV BCOLORL,#1FH
LCALL COLORSET
MOV DPTR,#CMD54
LCALL TXROMS
MOV R0,#TEXTX_H
MOV R7,#4
LCALL TXRAMS
MOV A,KEYCODE
LCALL TXBYTE
LCALL TXFEND
MOV A,TEXTX_L ;调整坐标位置
ADD A,#8
MOV TEXTX_L,A
CLR A
ADDC A,TEXTX_H
MOV TEXTX_H,A
CLR C
MOV A,TEXTX_L
SUBB A,#70H
MOV A,TEXTX_H
SUBB A,#02H
JC TCHPR5E
MOV TEXTX_H,#0
MOV TEXTX_L,#6
MOV A,TEXTY_L
ADD A,#18
MOV TEXTY_L,A
CLR A
ADDC A,TEXTY_H
MOV TEXTY_H,A
CLR C
MOV A,TEXTY_L
SUBB A,#199
MOV A,TEXTY_H
SUBB A,#00H
JC TCHPR5E
MOV TEXTY_H,#0
MOV TEXTY_L,#164
TCHPR5E:NOP
RET
CMD54: DB 0AAH,54H,0FFH
CMD54T1:DB 0AAH,54H
DW 22,240
DB "Caps Lock",0FFH
CMD54T2:DB 0AAH,54H
DW 22,240
DB " ",0FFH
CMD54T3:DB 0AAH,54H
DW 122,240
DB 0FFH
;时钟调整
RTCADJ: MOV C,CAPSLK
PUSH PSW
CLR CAPSLK
MOV R0,#TIMEY
LCALL SCANBCD
MOV R0,#TIMEMM
LCALL SCANBCD
MOV R0,#TIMED
LCALL SCANBCD
MOV R0,#TIMEH
LCALL SCANBCD
MOV R0,#TIMEM
LCALL SCANBCD
MOV R0,#TIMES
LCALL SCANBCD
LCALL WTNUMK
MOV TIMEW,A
LCALL RTCDSP
LCALL WRRTC
POP PSW
MOV CAPSLK,C
RET
;等待一个0-9的数字键
WTNUMK: JNB TCHOK,$
LCALL TCHKEY
JNB KEYOK,WTNUMK
MOV A,KEYCODE
CLR KEYOK
CLR C
SUBB A,#30H
JC WTNUMK
MOV B,A
CLR C
SUBB A,#10
JNC WTNUMK
MOV A,B
RET
;输入一个BCD码
SCANBCD:LCALL WTNUMK
MOV @R0,A
LCALL RTCDSP
MOV DL200MS,#20
LCALL DELAY
CLR TCHOK
LCALL WTNUMK
MOV B,A
MOV A,@R0
SWAP A
ADD A,B
MOV @R0,A
LCALL RTCDSP
MOV DL200MS,#20
LCALL DELAY
CLR TCHOK
RET
;退格处理
BKPRO: CLR C
MOV A,TEXTX_L ;调整坐标位置
SUBB A,#8
MOV TEXTX_L,A
MOV A,TEXTX_H
SUBB A,#00H
MOV TEXTX_H,A
JNC BKPRO1
MOV TEXTX_H,#02
MOV TEXTX_L,#6EH
CLR C
MOV A,TEXTY_L
SUBB A,#18
MOV TEXTY_L,A
MOV A,TEXTY_H
SUBB A,#00H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -