📄 设计最后.s
字号:
st -y,R21
st -y,R20
movw R16,R2
movw R18,R4
xcall div32u
movw R30,R16
ldi R24,<_table1
ldi R25,>_table1
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
std y+3,R3
std y+2,R2
ldi R24,32
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,6
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 431
; write_ASCII(0xf9,7,32,table1[rezult%1000000000/100000000]);
ldi R20,0
ldi R21,202
ldi R22,154
ldi R23,59
lds R4,_rezult+2
lds R5,_rezult+2+1
lds R2,_rezult
lds R3,_rezult+1
st -y,R23
st -y,R22
st -y,R21
st -y,R20
movw R16,R2
movw R18,R4
xcall mod32u
ldi R20,0
ldi R21,225
ldi R22,245
ldi R23,5
st -y,R23
st -y,R22
st -y,R21
st -y,R20
xcall div32u
movw R30,R16
ldi R24,<_table1
ldi R25,>_table1
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
std y+3,R3
std y+2,R2
ldi R24,32
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,7
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 432
; write_ASCII(0xf9,8,32,table1[rezult%100000000/10000000]);
ldi R20,0
ldi R21,225
ldi R22,245
ldi R23,5
lds R4,_rezult+2
lds R5,_rezult+2+1
lds R2,_rezult
lds R3,_rezult+1
st -y,R23
st -y,R22
st -y,R21
st -y,R20
movw R16,R2
movw R18,R4
xcall mod32u
ldi R20,128
ldi R21,150
ldi R22,152
ldi R23,0
st -y,R23
st -y,R22
st -y,R21
st -y,R20
xcall div32u
movw R30,R16
ldi R24,<_table1
ldi R25,>_table1
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
std y+3,R3
std y+2,R2
ldi R24,32
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,8
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 433
; write_ASCII(0xf9,9,32,table1[rezult%10000000/1000000]);
ldi R20,128
ldi R21,150
ldi R22,152
ldi R23,0
lds R4,_rezult+2
lds R5,_rezult+2+1
lds R2,_rezult
lds R3,_rezult+1
st -y,R23
st -y,R22
st -y,R21
st -y,R20
movw R16,R2
movw R18,R4
xcall mod32u
ldi R20,64
ldi R21,66
ldi R22,15
ldi R23,0
st -y,R23
st -y,R22
st -y,R21
st -y,R20
xcall div32u
movw R30,R16
ldi R24,<_table1
ldi R25,>_table1
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
std y+3,R3
std y+2,R2
ldi R24,32
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,9
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 434
; write_ASCII(0xf9,10,32,table1[rezult%1000000/100000]);
ldi R20,64
ldi R21,66
ldi R22,15
ldi R23,0
lds R4,_rezult+2
lds R5,_rezult+2+1
lds R2,_rezult
lds R3,_rezult+1
st -y,R23
st -y,R22
st -y,R21
st -y,R20
movw R16,R2
movw R18,R4
xcall mod32u
ldi R20,160
ldi R21,134
ldi R22,1
ldi R23,0
st -y,R23
st -y,R22
st -y,R21
st -y,R20
xcall div32u
movw R30,R16
ldi R24,<_table1
ldi R25,>_table1
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
std y+3,R3
std y+2,R2
ldi R24,32
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,10
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 435
; write_ASCII(0xf9,11,32,table1[rezult%100000/10000]);
ldi R20,160
ldi R21,134
ldi R22,1
ldi R23,0
lds R4,_rezult+2
lds R5,_rezult+2+1
lds R2,_rezult
lds R3,_rezult+1
st -y,R23
st -y,R22
st -y,R21
st -y,R20
movw R16,R2
movw R18,R4
xcall mod32u
ldi R20,16
ldi R21,39
ldi R22,0
ldi R23,0
st -y,R23
st -y,R22
st -y,R21
st -y,R20
xcall div32u
movw R30,R16
ldi R24,<_table1
ldi R25,>_table1
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
std y+3,R3
std y+2,R2
ldi R24,32
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,11
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 436
; write_ASCII(0xf9,12,32,table1[rezult%10000/1000]);
ldi R20,16
ldi R21,39
ldi R22,0
ldi R23,0
lds R4,_rezult+2
lds R5,_rezult+2+1
lds R2,_rezult
lds R3,_rezult+1
st -y,R23
st -y,R22
st -y,R21
st -y,R20
movw R16,R2
movw R18,R4
xcall mod32u
ldi R20,232
ldi R21,3
ldi R22,0
ldi R23,0
st -y,R23
st -y,R22
st -y,R21
st -y,R20
xcall div32u
movw R30,R16
ldi R24,<_table1
ldi R25,>_table1
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
std y+3,R3
std y+2,R2
ldi R24,32
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,12
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 437
; write_ASCII(0xf9,13,32,table1[rezult%1000/100]);
ldi R20,232
ldi R21,3
ldi R22,0
ldi R23,0
lds R4,_rezult+2
lds R5,_rezult+2+1
lds R2,_rezult
lds R3,_rezult+1
st -y,R23
st -y,R22
st -y,R21
st -y,R20
movw R16,R2
movw R18,R4
xcall mod32u
ldi R20,100
ldi R21,0
ldi R22,0
ldi R23,0
st -y,R23
st -y,R22
st -y,R21
st -y,R20
xcall div32u
movw R30,R16
ldi R24,<_table1
ldi R25,>_table1
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
std y+3,R3
std y+2,R2
ldi R24,32
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,13
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 438
; write_ASCII(0xf9,14,32,table1[rezult%100/10]);
ldi R20,100
ldi R21,0
ldi R22,0
ldi R23,0
lds R4,_rezult+2
lds R5,_rezult+2+1
lds R2,_rezult
lds R3,_rezult+1
st -y,R23
st -y,R22
st -y,R21
st -y,R20
movw R16,R2
movw R18,R4
xcall mod32u
ldi R20,10
ldi R21,0
ldi R22,0
ldi R23,0
st -y,R23
st -y,R22
st -y,R21
st -y,R20
xcall div32u
movw R30,R16
ldi R24,<_table1
ldi R25,>_table1
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
std y+3,R3
std y+2,R2
ldi R24,32
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,14
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 439
; write_ASCII(0xf9,15,32,table1[rezult%10]);
ldi R20,10
ldi R21,0
ldi R22,0
ldi R23,0
lds R4,_rezult+2
lds R5,_rezult+2+1
lds R2,_rezult
lds R3,_rezult+1
st -y,R23
st -y,R22
st -y,R21
st -y,R20
movw R16,R2
movw R18,R4
xcall mod32u
movw R30,R16
ldi R24,<_table1
ldi R25,>_table1
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
std y+3,R3
std y+2,R2
ldi R24,32
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,15
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline -2
L74:
adiw R28,4
xcall pop_gset2
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 20
jmp _PS2_KEY
.area text(rom, con, rel)
.dbfile F:\调试\计算器\设计最后.c
.dbfunc e PS2_KEY _PS2_KEY fV
.even
_PS2_KEY::
st -y,R2
st -y,R3
st -y,R24
st -y,R25
in R2,0x3f
st -y,R2
.dbline -1
.dbline 449
; }
;
; //*********************************************************//
; /*PS2键盘中断处理*/
; //******************************************************** //
;
; #pragma interrupt_handler PS2_KEY:6
;
; void PS2_KEY(void)
; {
.dbline 451
;
; if((count_jiema>0)&&(count_jiema<9))
clr R2
lds R3,_count_jiema
cp R2,R3
brsh L76
mov R24,R3
cpi R24,9
brsh L76
.dbline 452
; {
.dbline 453
; data=data>>1;
lds R2,_data
lsr R2
sts _data,R2
.dbline 454
; if(PINE&DATA1)
sbis 0x1,5
rjmp L78
.dbline 455
; data|=0x80;
mov R24,R2
ori R24,128
sts _data,R24
L78:
.dbline 456
; }
L76:
.dbline 457
; count_jiema++;
lds R24,_count_jiema
subi R24,255 ; addi 1
sts _count_jiema,R24
L80:
.dbline 459
L81:
.dbline 459
sbis 0x1,4
rjmp L80
.dbline 461
ldi R24,10
lds R2,_count_jiema
cp R24,R2
brsh L83
.dbline 462
.dbline 464
clr R2
sts _count_jiema,R2
.dbline 465
ldi R24,1
sts _flag,R24
.dbline 466
out 0x39,R2
.dbline 468
L83:
.dbline -2
L75:
ld R2,y+
out 0x3f,R2
ld R25,y+
ld R24,y+
ld R3,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbend
.dbfunc e Decode _Decode fV
; TempCyc -> R12
; ScanCode -> R10
.even
_Decode::
xcall push_gset5
mov R10,R16
sbiw R28,9
.dbline -1
.dbline 476
;
; while(!(PINE&0X10)); //
;
; if(count_jiema>10)
; {
; // putchar0(data);//测试键盘码用
; count_jiema=0;
; flag=1;
; EIMSK=0x00;
;
; }
; }
;
; //*********************************************************//
; /*译码*/
; //******************************************************** //
;
; void Decode(unsigned char ScanCode) //注意:如SHIFT+G为12H 34H F0H 34H F0H 12H,也就是说shift的通码+G的通码+shift的断码+G的断码
; {
.dbline 479
; unsigned char TempCyc;
;
; if (!Key_UP) //
lds R2,_Key_UP
tst R2
breq X6
xjmp L86
X6:
.dbline 480
; {
.dbline 481
; switch (ScanCode)
mov R12,R10
clr R13
movw R24,R12
cpi R24,88
ldi R30,0
cpc R25,R30
breq L93
cpi R24,89
ldi R30,0
cpc R25,R30
breq L94
ldi R24,89
cp R24,R12
cpc R25,R13
brlt L181
L180:
movw R24,R12
cpi R24,18
ldi R30,0
cpc R25,R30
breq L92
xjmp L88
L181:
movw R24,R12
cpi R24,102
ldi R30,0
cpc R25,R30
breq L95
cpi R24,102
ldi R30,0
cpc R25,R30
brlt L88
L182:
movw R24,R12
cpi R24,240
ldi R30,0
cpc R25,R30
breq L91
xjmp L88
X2:
.dbline 482
; {
L91:
.dbline 484
; case 0xF0 : // 当收到0xF0,Key_UP置1表示断码开始,把Shift = 1;解锁。否则下次总是显示大写字母
; Key_UP = 1;
ldi R24,1
sts _Key_UP,R24
.dbline 485
; break;
xjmp L87
L92:
.dbline 488
;
; case 0x12 : // 左 SHIFT
; Shift = 1;
ldi R24,1
sts _Shift,R24
.dbline 489
; break;
xjmp L87
L93:
.dbline 491
;
; case 0x58 : Shift=~Shift;break;
lds R2,_Shift
com R2
sts _Shift,R2
.dbline 491
xjmp L87
L94:
.dbline 493
; case 0x59 : // 右 SHIFT
; Shift = 1;
ldi R24,1
sts _Shift,R24
.dbline 494
; break;
xjmp L87
L95:
.dbline 496
; case 0x66 : //DEL键
; if (DisNumx==-1)
lds R24,_DisNumx
cpi R24,255
brne L96
.dbline 497
; {
.dbline 498
; DisNumy=DisNumy-8;
lds R24,_DisNumy
subi R24,8
sts _DisNumy,R24
.dbline 499
; DisNumx=15;
ldi R24,15
sts _DisNumx,R24
.dbline 500
; }
xjmp L87
L96:
.dbline 502
; else
; {
.dbline 503
; write_asiic(DisNumx, DisNumy, UnShifted[40][1]);
lds R2,_UnShifted+80+1
std y+0,R2
lds R18,_DisNumy
lds R16,_DisNumx
xcall _write_asiic
.dbline 504
; DisNumx--;
lds R24,_DisNumx
subi R24,1
sts _DisNumx,R24
.dbline 505
; }
.dbline 506
; break;
xjmp L87
L88:
.dbline 508
; default:
; if (DisNumx > 15)
ldi R24,15
lds R2,_DisNumx
cp R24,R2
brsh L100
.dbline 509
; {
.dbline 510
; DisNumy=DisNumy+8;
lds R24,_DisNumy
subi R24,248 ; addi 8
sts _DisNumy,R24
.dbline 511
; if( DisNumy==64)DisNumy=0;
cpi R24,64
brne L102
.dbline 511
clr R2
sts _DisNumy,R2
L102:
.dbline 512
; DisplayListChar(0, DisNumy);//清LCD第二行
lds R18,_DisNumy
clr R16
xcall _DisplayListChar
.dbline 513
; DisNumx=0;
clr R2
sts _DisNumx,R2
.dbline 516
;
;
; }
L100:
.dbline 517
; if(!Shift) //如果SHIFT没按下
lds R2,_Shift
tst R2
breq X7
xjmp L104
X7:
.dbline 518
; {
.dbline 519
clr R12
xjmp L109
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -