📄 4x4key_main.lis
字号:
.module _4x4key_main.c
.area text(rom, con, rel)
0000 .dbfile 4x4key_main.c
0000 .dbfile E:\16实验程序\4x4键盘\ch595.h
0000 .dbfunc e s_ms _s_ms fV
0000 ; t -> R16,R17
.even
0000 _s_ms::
0000 .dbline -1
0000 .dbline 8
0000 ; //4x4键盘试验程序
0000 ; //使用板载的4x4键盘
0000 ; //数码管显示按键值
0000 ;
0000 ; #define uchar unsigned char
0000 ; #define uint unsigned int
0000 ; #include<iom16v.h>
0000 ; #include"ch595.h"
0000 .dbline 9
0000 ; #include"encoder.h"
0000 02C0 xjmp L5
0002 L2:
0002 .dbline 10
0002 ; #include"key_value.h"
0002 .dbline 11
0002 ; #include"disp.h"
0002 L3:
0002 .dbline 9
0002 0150 subi R16,1
0004 1040 sbci R17,0
0006 L5:
0006 .dbline 9
0006 81E0 ldi R24,1
0008 90E0 ldi R25,0
000A 8017 cp R24,R16
000C 9107 cpc R25,R17
000E C8F3 brlo L2
0010 X0:
0010 .dbline -2
0010 L1:
0010 .dbline 0 ; func end
0010 0895 ret
0012 .dbsym r t 16 i
0012 .dbend
0012 .dbfunc e sendbyte _sendbyte fV
0012 ; tem -> R10
0012 ; i -> R22
0012 ; byte -> R20
.even
0012 _sendbyte::
0012 0E940000 xcall push_xgsetF00C
0016 402F mov R20,R16
0018 .dbline -1
0018 .dbline 15
0018 ;
0018 ; //uchar a1,a2,a3;
0018 ;
0018 ; //键值转换
0018 .dbline 17
0018 ; turn(uchar key)
0018 ; {
0018 042F mov R16,R20
001A 1127 clr R17
001C 18D0 xcall _encoder
001E 402F mov R20,R16
0020 .dbline 18
0020 ; switch(key)
0020 6627 clr R22
0022 0CC0 xjmp L10
0024 L7:
0024 .dbline 19
0024 ; {
0024 .dbline 20
0024 ; case 0x11:
0024 D998 cbi 0x1b,1
0026 .dbline 21
0026 ; key=0x01;break;
0026 842F mov R24,R20
0028 8078 andi R24,128
002A A82E mov R10,R24
002C .dbline 22
002C ; case 0x21:
002C 8823 tst R24
002E 11F4 brne L11
0030 X1:
0030 .dbline 23
0030 ; key=0x02;break;
0030 .dbline 24
0030 ; case 0x41:
0030 DB98 cbi 0x1b,3
0032 .dbline 25
0032 ; key=0x03;break;
0032 01C0 xjmp L12
0034 L11:
0034 .dbline 27
0034 ; case 0x81:
0034 ; key=0x04;break;
0034 .dbline 28
0034 ; case 0x12:
0034 DB9A sbi 0x1b,3
0036 .dbline 29
0036 ; key=0x05;break;
0036 L12:
0036 .dbline 30
0036 ; case 0x22:
0036 440F lsl R20
0038 .dbline 31
0038 ; key=0x06;break;
0038 D99A sbi 0x1b,1
003A .dbline 32
003A ; case 0x42:
003A L8:
003A .dbline 18
003A 6395 inc R22
003C L10:
003C .dbline 18
003C 6830 cpi R22,8
003E 90F3 brlo L7
0040 X2:
0040 .dbline 33
0040 ; key=0x07;break;
0040 DA98 cbi 0x1b,2
0042 .dbline 34
0042 ; case 0x82:
0042 04E6 ldi R16,100
0044 10E0 ldi R17,0
0046 DCDF xcall _s_ms
0048 .dbline 35
0048 ; key=0x08;break;
0048 DA9A sbi 0x1b,2
004A .dbline -2
004A L6:
004A .dbline 0 ; func end
004A 0C940000 xjmp pop_xgsetF00C
004E .dbsym r tem 10 c
004E .dbsym r i 22 c
004E .dbsym r byte 20 c
004E .dbend
004E .dbfile E:\16实验程序\4x4键盘\encoder.h
004E .dbfunc e encoder _encoder fc
004E ; code -> R20
004E ; num -> R16
.even
004E _encoder::
004E 0E940000 xcall push_xgsetF000
0052 .dbline -1
0052 .dbline 3
0052 ; //数码管译码函数
0052 ; uchar encoder(uchar num)
0052 ; {
0052 .dbline 5
0052 ; uchar code;
0052 ; switch(num)
0052 602F mov R22,R16
0054 7727 clr R23
0056 6030 cpi R22,0
0058 6707 cpc R22,R23
005A 29F1 breq L17
005C X3:
005C 6130 cpi R22,1
005E E0E0 ldi R30,0
0060 7E07 cpc R23,R30
0062 19F1 breq L18
0064 X4:
0064 6230 cpi R22,2
0066 E0E0 ldi R30,0
0068 7E07 cpc R23,R30
006A 09F1 breq L19
006C X5:
006C 6330 cpi R22,3
006E E0E0 ldi R30,0
0070 7E07 cpc R23,R30
0072 F9F0 breq L20
0074 X6:
0074 6430 cpi R22,4
0076 E0E0 ldi R30,0
0078 7E07 cpc R23,R30
007A E9F0 breq L21
007C X7:
007C 6530 cpi R22,5
007E E0E0 ldi R30,0
0080 7E07 cpc R23,R30
0082 D9F0 breq L22
0084 X8:
0084 6630 cpi R22,6
0086 E0E0 ldi R30,0
0088 7E07 cpc R23,R30
008A C9F0 breq L23
008C X9:
008C 6730 cpi R22,7
008E E0E0 ldi R30,0
0090 7E07 cpc R23,R30
0092 B9F0 breq L24
0094 X10:
0094 6830 cpi R22,8
0096 E0E0 ldi R30,0
0098 7E07 cpc R23,R30
009A A9F0 breq L25
009C X11:
009C 6930 cpi R22,9
009E E0E0 ldi R30,0
00A0 7E07 cpc R23,R30
00A2 99F0 breq L26
00A4 X12:
00A4 13C0 xjmp L14
00A6 L17:
00A6 .dbline 8
00A6 ; {
00A6 ; case 0x00:
00A6 ; code=0xc0;break;
00A6 40EC ldi R20,192
00A8 .dbline 8
00A8 11C0 xjmp L15
00AA L18:
00AA .dbline 10
00AA ; case 0x01:
00AA ; code=0xf9;break;
00AA 49EF ldi R20,249
00AC .dbline 10
00AC 0FC0 xjmp L15
00AE L19:
00AE .dbline 12
00AE ; case 0x02:
00AE ; code=0xa4;break;
00AE 44EA ldi R20,164
00B0 .dbline 12
00B0 0DC0 xjmp L15
00B2 L20:
00B2 .dbline 14
00B2 ; case 0x03:
00B2 ; code=0xb0;break;
00B2 40EB ldi R20,176
00B4 .dbline 14
00B4 0BC0 xjmp L15
00B6 L21:
00B6 .dbline 16
00B6 ; case 0x04:
00B6 ; code=0x99;break;
00B6 49E9 ldi R20,153
00B8 .dbline 16
00B8 09C0 xjmp L15
00BA L22:
00BA .dbline 18
00BA ; case 0x05:
00BA ; code=0x92;break;
00BA 42E9 ldi R20,146
00BC .dbline 18
00BC 07C0 xjmp L15
00BE L23:
00BE .dbline 20
00BE ; case 0x06:
00BE ; code=0x82;break;
00BE 42E8 ldi R20,130
00C0 .dbline 20
00C0 05C0 xjmp L15
00C2 L24:
00C2 .dbline 22
00C2 ; case 0x07:
00C2 ; code=0xf8;break;
00C2 48EF ldi R20,248
00C4 .dbline 22
00C4 03C0 xjmp L15
00C6 L25:
00C6 .dbline 24
00C6 ; case 0x08:
00C6 ; code=0x80;break;
00C6 40E8 ldi R20,128
00C8 .dbline 24
00C8 01C0 xjmp L15
00CA L26:
00CA .dbline 26
00CA ; case 0x09:
00CA ; code=0x90;break;
00CA 40E9 ldi R20,144
00CC .dbline 26
00CC L14:
00CC L15:
00CC .dbline 28
00CC ; }
00CC ; return(code);
00CC 042F mov R16,R20
00CE .dbline -2
00CE L13:
00CE .dbline 0 ; func end
00CE 0C940000 xjmp pop_xgsetF000
00D2 .dbsym r code 20 c
00D2 .dbsym r num 16 c
00D2 .dbend
00D2 .dbfile E:\16实验程序\4x4键盘\key_value.h
00D2 .dbfunc e key_value _key_value fc
00D2 ; i -> <dead>
00D2 ; tem2 -> R10
00D2 ; rem -> R20
00D2 ; tem1 -> R22
.even
00D2 _key_value::
00D2 0E940000 xcall push_xgsetF00C
00D6 .dbline -1
00D6 .dbline 3
00D6 ; //读键盘值 键盘在端口B
00D6 ; uchar key_value()
00D6 ; {
00D6 .dbline 5
00D6 ; uchar tem1,tem2,rem,i;
00D6 ; rem=0; //不清零会返回一个不可预知的值
00D6 4427 clr R20
00D8 .dbline 6
00D8 ; DDRB=0xf0; //B口高四位输出 低四位输入
00D8 80EF ldi R24,240
00DA 87BB out 0x17,R24
00DC .dbline 7
00DC ; PORTB=0x0f; //输入有上拉电阻 输出低电平
00DC 8FE0 ldi R24,15
00DE 88BB out 0x18,R24
00E0 .dbline 8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -