?? 觸摸鍵盤、拼音輸入法、動態曲線和區域圖片切換.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 + -