📄 main.s
字号:
cpu LMM
.module main.c
.area lit(rom, con, rel)
_FirstKeyArray::
.byte 'P,0
.byte 0
.byte 25,40
.byte 13
.byte 6,4
.byte 9
.byte 27,4
.byte 8
.byte 29,4
.byte 7
.byte 163,0
.byte 0
.byte 10,4
.byte 10
.byte 9,4
.byte 6
.byte 7,4
.byte 5
.byte 22,4
.byte 4
.byte 4,0
.byte 0
.byte 44,0
.byte 0
.byte 51,8
.byte 15
.byte 23,40
.byte 11
.byte 21,4
.byte 3
.byte 8,4
.byte 2
.byte 26,4
.byte 1
.byte 20,40
.byte 10
.byte 'O,0
.byte 0
.byte 165,0
.byte 0
.byte 5,40
.byte 1
.byte 17,8
.byte 7
.byte 16,8
.byte 6
.byte 'L,0
.byte 0
.byte 42,0
.byte 0
.byte 11,8
.byte 2
.byte 13,8
.byte 4
.byte 14,40
.byte 5
.byte 15,40
.byte 17
.byte 40,0
.byte 0
.byte 31,40
.byte 16
.byte 28,40
.byte 14
.byte 24,8
.byte 12
.byte 12,40
.byte 3
.byte 18,40
.byte 8
.byte 19,40
.byte 9
.word 0,0,0,0,0
.byte 0,0
.dbfile ./CSD_KeyProcess.c
.dbsym e FirstKeyArray _FirstKeyArray A[120:40:3]c
_ShiftKeyArray::
.byte 49,51
.byte 46,52
.byte 52,55
.byte 54,54
.byte 55,32
.byte 38,45
.byte 56,39
.byte 56,34
.byte 30
.byte 0,0
.dbsym e ShiftKeyArray _ShiftKeyArray A[19:19]c
_NumKeyArray::
.byte 30,31
.byte 32,33
.byte 34,35
.byte 36,37
.byte 38,39
.byte 0,0,0
.dbsym e NumKeyArray _NumKeyArray A[13:13]c
_ArrowKeyArray::
.byte 'R
.byte 0,0,0
.dbsym e ArrowKeyArray _ArrowKeyArray A[4:4]c
.area text(rom, con, rel)
.dbfile ./CSD_KeyProcess.c
.dbfunc e delay_ms _delay_ms fV
; i -> X+2
; j -> X+0
; MsTimes -> X-5
_delay_ms::
.dbline -1
push X
mov X,SP
add SP,4
.dbline 243
; //----------------------------------------------------------------------------
; // C main ( unisen Cyber Station K.B. Qwert Mode Keyboard )
; // 2007-1 ver 1.00
; // 应 增加 NumLock,ArrowLock,Shift,Ctrl四个LED灯
; //----------------------------------------------------------------------------
;
; #include <m8c.h> // part specific constants and macros
; #include <string.h>
; #include "PSoCAPI.h" // PSoC API definitions for all User Modules
; #include "CSD_KeyProcess.c"
;
; int KB_empty_cnt;
; BYTE KB_save;
; /*
; //GPIO 操作例程,先在 Device Editer 中将其中一个IO口 命名为
; #define Beep_BIT_Enable Beep_BIT_Data_ADDR |= Beep_BIT_MASK
; #define Beep_BIT_Disable Beep_BIT_Data_ADDR &= ~Beep_BIT_MASK
; //如何判断以上IO的高低电平?
; //如何控制IO高低电平?
;
; //下面是 中断服务程序的定义方法:
; #pragma interrupt_handler timer_handler
; ...
; void timer_handler()
; {
; ...
; }
;
; //在 boot.tpl 中,将对应的中断向量表中 填写 ljmp timer_handler
; */
;
; //memcmp(RPT_DATA,USB_INTERFACE_0_OUT_RPT_DATA,8); //从 USB 得到USB HOST送来的数据
;
; BYTE abKeyboardData[8] = {0,0,0,0,0,0,0,0};
; // ^ ^
; // | |
; // ctrl Alpha
;
; //M8C_Reset;
; char KeyPressMainFlg;
;
; void main()
; {
; M8C_EnableGInt; //Enable Global Interrupts
;
; Beep_Start(); Beep_Switch(0);
;
; LED_ShiftCAP_Start(); LED_ShiftCAP_Switch(0);
;
; CSD_1_Start();//CSD 电容式键盘初始化
; CSD_1_InitializeBaselines() ; //scan all sensors first time, init baseline
; CSD_1_SetDefaultFingerThresholds() ;//设置 电容式键盘 Finger Thresholds
;
; USBFS_1_Start(0, USB_5V_OPERATION); //Start USBFS Operation using device 0
; //and with 5V operation
; while(!USBFS_1_bGetConfiguration()); //Wait for Device to enumerate 等待USB HOST取得USB描述符
; //Enumeration is completed load endpoint 1. Do not toggle the first time
; USBFS_1_LoadInEP(1, abKeyboardData, 8, USB_NO_TOGGLE);
;
; //M8C_EnableWatchDog; //(CPU_SCR0 &= ~CPU_SCR0_PORS_MASK)
; memset( abKeyboardData,0,8 );
; KB_empty_cnt = 0; KB_save = 0; KeyPressMainFlg = 0;
; while( 1 )
; {
; memset( ScanArrayImage,0,5 );//将键盘位图清零
; KeyPressMainFlg = KeyPressMain();//扫描键盘
; while(!USBFS_1_bGetEPAckState(1)); //Wait for ACK before loading data 等待 USB HOST ACK 协议发生
; //ACK has occurred, load the endpoint and toggle the data bit
; //扫描键盘
; if( KeyPressMainFlg == 1 ) //产生了键盘码
; {
; if( USB_KeyAct[1]==KB_save && KB_empty_cnt<1 )//防抖动
; continue;
; else
; {
; KB_empty_cnt = 0; KB_save = USB_KeyAct[1];
; }
; //向 USB 送键盘扫描码
; BeepDelayXXms( 50 ); //响铃,表示按键有效
; memset( abKeyboardData,0,8 );
; abKeyboardData[0] = USB_KeyAct[0];
; abKeyboardData[2] = USB_KeyAct[1];
; USBFS_1_LoadInEP(1, abKeyboardData, 8, USB_TOGGLE);//将键盘码送USB
; memset( abKeyboardData,0,8 );
; while(!USBFS_1_bGetEPAckState(1));
; USBFS_1_LoadInEP(1, abKeyboardData, 8, USB_TOGGLE);//将键盘抬起送USB
; }else
; {
; KB_empty_cnt ++;
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
.dbline 245
; }
; }
mov [X+3],0
mov [X+2],0
xjmp L6
L3:
.dbline 246
; }
mov [X+1],0
mov [X+0],0
L7:
.dbline 247
L8:
.dbline 246
inc [X+1]
adc [X+0],0
.dbline 246
mov A,[X+1]
sub A,100
mov A,[X+0]
xor A,-128
sbb A,(0 ^ 0x80)
jc L7
X0:
L4:
.dbline 245
inc [X+3]
adc [X+2],0
L6:
.dbline 245
mov A,[X+3]
sub A,[X-4]
mov A,[X-5]
xor A,-128
mov REG[0xd0],>__r0
mov [__rX],A
mov A,[X+2]
xor A,-128
sbb A,[__rX]
jc L3
X1:
.dbline -2
.dbline 248
; }
; }
L2:
add SP,-4
pop X
.dbline 0 ; func end
ret
.dbsym l i 2 I
.dbsym l j 0 I
.dbsym l MsTimes -5 I
.dbend
.dbfunc e BeepDelayXXms _BeepDelayXXms fV
; XXms -> X-5
_BeepDelayXXms::
.dbline -1
push X
mov X,SP
.dbline 250
; }
; }
.dbline 251
; }
push X
mov A,1
xcall _Beep_Switch
pop X
.dbline 252
; }
mov A,[X-5]
push A
mov A,[X-4]
push A
xcall _delay_ms
add SP,-2
.dbline 253
; }
push X
mov A,0
xcall _Beep_Switch
pop X
.dbline -2
.dbline 254
; }
L11:
pop X
.dbline 0 ; func end
ret
.dbsym l XXms -5 I
.dbend
.dbfunc e ScanAllKey _ScanAllKey fc
; KeyPressCnt -> X+4
; ncount -> X+3
; tmp2 -> X+2
; j -> X+1
; tmp -> X+0
_ScanAllKey::
.dbline -1
push X
mov X,SP
add SP,5
.dbline 258
; }
; }
; }
; }
.dbline 263
; }
; }
; }
; }
; }
mov [X+4],0
.dbline 264
; }
push X
xcall _CSD_1_ScanAllSensors
.dbline 265
; }
xcall _CSD_1_UpdateAllBaselines
.dbline 267
; }
; }
xcall _CSD_1_bIsAnySensorActive
mov REG[0xd0],>__r0
pop X
cmp A,0
jz L13
.dbline 268
; }
.dbline 273
; }
; }
; }
; }
; }
mov [X+3],0
xjmp L18
L15:
.dbline 274
mov REG[0xd0],>__r0
mov A,[X+3]
mov [__r1],A
mov [__r0],0
add [__r1],<_CSD_1_baSnsOnMask
adc [__r0],>_CSD_1_baSnsOnMask
mov A,[__r0]
mov REG[0xd4],A
mvi A,[__r1]
mov [__r0],A
mov A,[X+3]
mov [__r3],A
mov [__r2],0
add [__r3],<_ScanArrayImage
adc [__r2],>_ScanArrayImage
mov A,[__r2]
mov REG[0xd5],A
mov A,[__r0]
mvi [__r3],A
L16:
.dbline 273
inc [X+3]
L18:
.dbline 273
cmp [X+3],5
jc L15
X2:
.dbline 275
; }
; }
mov [X+3],0
xjmp L22
L19:
.dbline 276
; }
mov [X+1],0
xjmp L26
L23:
.dbline 277
; }
.dbline 278
; }
mov REG[0xd0],>__r0
mov [__r0],1
mov A,[X+1]
jz X3
X4:
mov REG[0xd0],>__r0
asl [__r0]
dec A
jnz X4
X3:
mov REG[0xd0],>__r0
mov A,[__r0]
mov [X+0],A
.dbline 278
mov A,[X+3]
mov [__r1],A
mov [__r0],0
add [__r1],<_ScanArrayImage
adc [__r0],>_ScanArrayImage
mov A,[__r0]
mov REG[0xd4],A
mvi A,[__r1]
mov [X+2],A
.dbline 278
mov A,[X+2]
and A,[X+0]
mov [X+0],A
.dbline 279
; }
cmp [X+0],0
jz L27
.dbline 280
; }
inc [X+4]
L27:
.dbline 282
L24:
.dbline 276
inc [X+1]
L26:
.dbline 276
cmp [X+1],8
jc L23
X5:
L20:
.dbline 275
inc [X+3]
L22:
.dbline 275
cmp [X+3],5
jc L19
X6:
.dbline 283
; }
; }
; }
L13:
.dbline 286
; }
; }
; }
mov A,[X+4]
mov REG[0xd0],>__r0
.dbline -2
L12:
add SP,-5
pop X
.dbline 0 ; func end
ret
.dbsym l KeyPressCnt 4 c
.dbsym l ncount 3 c
.dbsym l tmp2 2 c
.dbsym l j 1 c
.dbsym l tmp 0 c
.dbend
.dbfunc e CalcRealKeyNum _CalcRealKeyNum fc
; cnt -> X+4
; i -> X+3
; tmp2 -> X+2
; j -> X+1
; tmp -> X+0
_CalcRealKeyNum::
.dbline -1
push X
mov X,SP
add SP,5
.dbline 291
; }
; }
; }
; }
; }
.dbline 292
; }
mov [X+4],0
.dbline 294
; }
; }
mov [X+3],0
xjmp L33
L30:
.dbline 295
; }
.dbline 296
; }
mov [X+1],0
xjmp L37
L34:
.dbline 297
; }
.dbline 298
; }
mov REG[0xd0],>__r0
mov [__r0],1
mov A,[X+1]
jz X7
X8:
mov REG[0xd0],>__r0
asl [__r0]
dec A
jnz X8
X7:
mov REG[0xd0],>__r0
mov A,[__r0]
mov [X+0],A
.dbline 298
mov A,[X+3]
mov [__r1],A
mov [__r0],0
add [__r1],<_ScanArrayImage
adc [__r0],>_ScanArrayImage
mov A,[__r0]
mov REG[0xd4],A
mvi A,[__r1]
mov [X+2],A
.dbline 298
mov A,[X+2]
and A,[X+0]
mov [X+0],A
.dbline 299
; }
cmp [X+0],0
jz L38
.dbline 300
; }
xjmp L36
L38:
.dbline 302
inc [X+4]
.dbline 303
L35:
.dbline 296
inc [X+1]
L37:
.dbline 296
cmp [X+1],8
jc L34
X9:
L36:
.dbline 304
; }
; }
; }
; }
cmp [X+1],8
jz L40
.dbline 305
; }
xjmp L32
L40:
.dbline 306
L31:
.dbline 294
inc [X+3]
L33:
.dbline 294
cmp [X+3],5
jc L30
X10:
L32:
.dbline 307
; }
; }
cmp [X+1],8
jnz L42
.dbline 307
mov REG[0xd0],>__r0
mov A,0
xjmp L29
L42:
.dbline 308
; }
mov REG[0xd0],>__r0
mov A,[X+4]
add A,1
.dbline -2
L29:
add SP,-5
pop X
.dbline 0 ; func end
ret
.dbsym l cnt 4 c
.dbsym l i 3 c
.dbsym l tmp2 2 c
.dbsym l j 1 c
.dbsym l tmp 0 c
.dbend
.area lit(rom, con, rel)
L45:
.byte 0,0
.area text(rom, con, rel)
.dbfile ./CSD_KeyProcess.c
.dbfunc e ChangeKeyStatus _ChangeKeyStatus fV
; ChrIndex -> X+2
; ch_str -> X+0
; C_Code -> X-4
_ChangeKeyStatus::
.dbline -1
push X
mov X,SP
add SP,15
.dbline 313
; }
; }
; }
; }
; }
.dbline 314
; }
mov REG[0xd0],>__r0
mov [__r1],<L45
mov [__r0],>L45
mov [__r3],X
mov REG[0xd5],3
push X
mov [__rX],0
mov A,[__r0]
mov X,[__r1]
X12:
push A
romx
mov REG[0xd0],>__r0
mvi [__r3],A
pop A
inc X
adc A,0
inc [__rX]
cmp [__rX],2
jnz X12
pop X
.dbline 316
; }
; }
mov A,[X-4]
mov [X+4],A
mov [X+3],0
cmp [X+3],0
jnz X13
cmp [X+4],-95
jz L49
X13:
cmp [X+3],0
jnz X14
cmp [X+4],-94
jz L53
X14:
cmp [X+3],0
jnz X15
cmp [X+4],-93
jz L57
X15:
cmp [X+3],0
jnz X16
cmp [X+4],-92
jz L61
X16:
cmp [X+3],0
jnz X17
cmp [X+4],-91
jz L65
X17:
xjmp L46
X11:
.dbline 317
; }
L49:
.dbline 319
; }
; }
mov REG[0xd0],>_KeyProStatus
mov A,[_KeyProStatus]
mov REG[0xd0],>__r0
asr A
asr A
asr A
asr A
asr A
asr A
and A,3
mov [__r0],A
and [__r0],1
cmp [__r0],0
jz L51
mov [X+6],0
mov [X+5],0
xjmp L52
L51:
mov [X+6],1
mov [X+5],0
L52:
mov REG[0xd0],>__r0
mov A,[X+6]
mov [__r0],A
and [__r0],1
mov A,[__r0]
asl A
asl A
asl A
asl A
asl A
asl A
mov [__r0],A
and [__r0],64
mov REG[0xd0],>_KeyProStatus
mov A,[_KeyProStatus]
and A,-65
mov REG[0xd0],>__r0
or A,[__r0]
mov REG[0xd0],>_KeyProStatus
mov [_KeyProStatus],A
.dbline 320
; }
xjmp L47
L53:
.dbline 322
; }
; }
mov REG[0xd0],>_KeyProStatus
mov A,[_KeyProStatus]
mov REG[0xd0],>__r0
asr A
asr A
asr A
asr A
asr A
and A,7
mov [__r0],A
and [__r0],1
cmp [__r0],0
jz L55
mov [X+8],0
mov [X+7],0
xjmp L56
L55:
mov [X+8],1
mov [X+7],0
L56:
mov REG[0xd0],>__r0
mov A,[X+8]
mov [__r0],A
and [__r0],1
mov A,[__r0]
asl A
asl A
asl A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -