📄 keyboard1.lis
字号:
.module keyboard1.c
.area lit(rom, con, rel)
0000 _tabel::
0000 3F06 .byte 63,6
0002 5B4F .byte 91,'O
0004 666D .byte 'f,'m
0006 7D07 .byte 125,7
0008 7F6F .byte 127,'o
000A 777C .byte 'w,124
000C 395E .byte 57,94
000E 7971 .byte 'y,'q
0010 .dbfile D:\ICC-AVR\examples.sl\KEYBOARD\keyboard1.c
0010 .dbsym s tabel _tabel Ac[16:16]
.area data(ram, con, rel)
0000 .dbfile D:\ICC-AVR\examples.sl\KEYBOARD\keyboard1.c
0000 _ledbuff::
0000 .blkb 2
.area idata
0000 3F3F .byte 63,63
.area data(ram, con, rel)
0002 .dbfile D:\ICC-AVR\examples.sl\KEYBOARD\keyboard1.c
0002 .blkb 2
.area idata
0002 3F3F .byte 63,63
.area data(ram, con, rel)
0004 .dbfile D:\ICC-AVR\examples.sl\KEYBOARD\keyboard1.c
0004 .blkb 2
.area idata
0004 3F3F .byte 63,63
.area data(ram, con, rel)
0006 .dbfile D:\ICC-AVR\examples.sl\KEYBOARD\keyboard1.c
0006 .dbsym s ledbuff _ledbuff Ac[6:6]
.area text(rom, con, rel)
0000 .dbfile D:\ICC-AVR\examples.sl\KEYBOARD\keyboard1.c
0000 .dbfunc s port_init _port_init fI
.even
0000 _port_init::
0000 .dbline 19{
; /*****************************************************
; HTTP://WWW.SL.COM.CN
; 双龙电子
; 使用注意:1、应包含头文件slavr.h
; 2、在工程选项中的Additional Lib中填入slavr
; 使用编译器使用附加库文件libslavr.a
; 3、本例采用了不作按键释放检查的函数,适用于显
; 示电路需要频繁刷新 或占用CPU时间较多的程序
; ,如动态显示电路。
; ******************************************************/
; #include <io8515.h>
; #include <slavr.h>
; //字形表
; const unsigned char tabel[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
; //显示缓冲区
; unsigned char ledbuff[]={0x3f,0x3f,0x3f,0x3f,0x3f,0x3f};
;
; void port_init(void)//端口初始化
; {
0000 .dbline 20
; DDRC=0x0f;
0000 8FE0 ldi R24,15
0002 84BB out 0x14,R24
0004 .dbline 21
; DDRD=0x3f;
0004 8FE3 ldi R24,63
0006 81BB out 0x11,R24
0008 .dbline 22
; DDRB=0xff;
0008 8FEF ldi R24,255
000A 87BB out 0x17,R24
000C .dbline 23
; PORTD=0xff;
000C 82BB out 0x12,R24
000E .dbline 24
; PORTB=0xff;
000E 88BB out 0x18,R24
0010 .dbline 25
; PORTC=0xff;
0010 85BB out 0x15,R24
0012 .dbline 26}
; }
0012 L1:
0012 0895 ret
0014 .dbfunc s display _display fI
; i -> R20
.even
0014 _display::
0014 00D0 rcall push_gset1
0016 .dbline 28{
; void display(void)//六路动态扫描显示
; {
0016 .dbline 30
; unsigned char i;
; for (i=0;i<6;i++)
0016 4427 clr R20
0018 16C0 rjmp L6
001A L3:
001A .dbline 31
001A .dbline 32
001A 80E0 ldi R24,<_ledbuff
001C 90E0 ldi R25,>_ledbuff
001E E42F mov R30,R20
0020 FF27 clr R31
0022 E80F add R30,R24
0024 F91F adc R31,R25
0026 2080 ldd R2,z+0
0028 28BA out 0x18,R2
002A .dbline 33
002A 01E0 ldi R16,1
002C 142F mov R17,R20
002E 00D0 rcall lsl8
0030 202E mov R2,R16
0032 2094 com R2
0034 22BA out 0x12,R2
0036 .dbline 34
0036 00D0 rcall _delay_1ms
0038 .dbline 35
0038 01E0 ldi R16,1
003A 142F mov R17,R20
003C 00D0 rcall lsl8
003E 22B2 in R2,0x12
0040 202A or R2,R16
0042 22BA out 0x12,R2
0044 .dbline 36
0044 L4:
0044 .dbline 30
0044 4395 inc R20
0046 L6:
0046 .dbline 30
0046 4630 cpi R20,6
0048 40F3 brlo L3
004A .dbline 37}
; {
; PORTB=ledbuff[i];
; PORTD=~(1<<i);
; delay_1ms();
; PORTD|=(1<<i);
; }
; }
004A L2:
004A 00D0 rcall pop_gset1
004C 0895 ret
004E .dbsym r i 20 c
004E .dbfunc s main _main fI
; keyval1 -> R20
; keyval2 -> R10
; i -> R22
.even
004E _main::
004E .dbline 42{
; /*主程序的功能:读取键盘扫描码,转换成相应的字形码后*/
; /*送入显示缓冲区进行显示,显示部分参考display.c */
; /*如果shift键按下,则全部清0 */
; void main(void)
; {
004E .dbline 44
; unsigned char keyval1,keyval2;
; unsigned char i=0;
004E 6627 clr R22
0050 .dbline 45
; MCUCR=0;
0050 2224 clr R2
0052 25BE out 0x35,R2
0054 .dbline 46
; port_init();
0054 D5DF rcall _port_init
0056 4DC0 rjmp L9
0058 L8:
0058 .dbline 48
; while(1)
; {
0058 .dbline 49
; keyval1=scan_key();//键盘扫描函数,不作按键释放检查
0058 00D0 rcall _scan_key
005A 202E mov R2,R16
005C 312E mov R3,R17
005E 422D mov R20,R2
0060 .dbline 50
; if (keyval1!=0x7f)
0060 4F37 cpi R20,127
0062 09F4 brne X1
0064 45C0 rjmp L11
0066 X1:
0066 .dbline 51
; {
0066 L13:
0066 .dbline 53
; do
; {
0066 .dbline 54
; keyval2=scan_key();
0066 00D0 rcall _scan_key
0068 202E mov R2,R16
006A 312E mov R3,R17
006C A22C mov R10,R2
006E .dbline 55
; display();
006E D2DF rcall _display
0070 .dbline 56
; }
0070 L14:
0070 .dbline 57
; while (keyval1==keyval2);//作按键释放检查
0070 4A15 cp R20,R10
0072 C9F3 breq L13
0074 .dbline 59
;
; if ((keyval1&0x80)==0x80)
0074 842F mov R24,R20
0076 8078 andi R24,128
0078 8038 cpi R24,128
007A B1F4 brne L16
007C .dbline 60
; {
007C .dbline 61
; for(i=0;i<6;i++)
007C 6627 clr R22
007E 11C0 rjmp L21
0080 L18:
0080 .dbline 62
0080 80E0 ldi R24,<_ledbuff
0082 90E0 ldi R25,>_ledbuff
0084 E62F mov R30,R22
0086 FF27 clr R31
0088 E80F add R30,R24
008A F91F adc R31,R25
008C 80E0 ldi R24,<_tabel
008E 90E0 ldi R25,>_tabel
0090 FA93 st -y,R31
0092 EA93 st -y,R30
0094 E82F mov R30,R24
0096 F92F mov R31,R25
0098 C895 lpm
009A E991 ld R30,y+
009C F991 ld R31,y+
009E 0082 std z+0,R0
00A0 L19:
00A0 .dbline 61
00A0 6395 inc R22
00A2 L21:
00A2 .dbline 61
00A2 6630 cpi R22,6
00A4 68F3 brlo L18
00A6 .dbline 63
; ledbuff[i]=tabel[0];
; }
00A6 24C0 rjmp L17
00A8 L16:
00A8 .dbline 65
; else
; {for (i=0;i<5;i++)
00A8 .dbline 65
00A8 6627 clr R22
00AA 15C0 rjmp L25
00AC L22:
00AC .dbline 66
00AC .dbline 67
00AC 262E mov R2,R22
00AE 3324 clr R3
00B0 E4E0 ldi R30,4
00B2 F0E0 ldi R31,0
00B4 E219 sub R30,R2
00B6 F309 sbc R31,R3
00B8 80E0 ldi R24,<_ledbuff
00BA 90E0 ldi R25,>_ledbuff
00BC E80F add R30,R24
00BE F91F adc R31,R25
00C0 2080 ldd R2,z+0
00C2 362E mov R3,R22
00C4 4424 clr R4
00C6 E5E0 ldi R30,5
00C8 F0E0 ldi R31,0
00CA E319 sub R30,R3
00CC F409 sbc R31,R4
00CE E80F add R30,R24
00D0 F91F adc R31,R25
00D2 2082 std z+0,R2
00D4 .dbline 68
00D4 L23:
00D4 .dbline 65
00D4 6395 inc R22
00D6 L25:
00D6 .dbline 65
00D6 6530 cpi R22,5
00D8 48F3 brlo L22
00DA .dbline 69
; {
; ledbuff[5-i]=ledbuff[4-i];//每按一次键,左移一位
; }
; ledbuff[0]=tabel[keyval1&0x7f];
00DA 80E0 ldi R24,<_tabel
00DC 90E0 ldi R25,>_tabel
00DE E42F mov R30,R20
00E0 FF27 clr R31
00E2 EF77 andi R30,127
00E4 F070 andi R31,0
00E6 E80F add R30,R24
00E8 F91F adc R31,R25
00EA C895 lpm
00EC 00920000 sts _ledbuff,R0
00F0 .dbline 70
; }
00F0 L17:
00F0 .dbline 71
; }
00F0 L11:
00F0 .dbline 72
00F0 91DF rcall _display
00F2 .dbline 73
00F2 L9:
00F2 .dbline 47
00F2 B2CF rjmp L8
00F4 X0:
00F4 .dbline 74}
; display();
; }
; }
00F4 L7:
00F4 0895 ret
00F6 .dbsym r keyval1 20 c
00F6 .dbsym r keyval2 10 c
00F6 .dbsym r i 22 c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -