📄 key4x4.lst
字号:
__start:
__text_start:
46 EFCF LDI R28,0xFF
47 E1D0 LDI R29,0x10
48 BFCD OUT 0x3D,R28
49 BFDE OUT 0x3E,R29
4A 51CE SUBI R28,0x1E
4B 40D0 SBCI R29,0
4C EA0A LDI R16,0xAA
4D 8308 STD Y+0,R16
4E 2400 CLR R0
4F E0E0 LDI R30,0
50 E0F1 LDI R31,1
51 E011 LDI R17,1
52 30E0 CPI R30,0
53 07F1 CPC R31,R17
54 F011 BEQ 0x0057
55 9201 ST R0,Z+
56 CFFB RJMP 0x0052
57 8300 STD Z+0,R16
58 E8EC LDI R30,0x8C
59 E0F0 LDI R31,0
5A E0A0 LDI R26,0
5B E0B1 LDI R27,1
5C E010 LDI R17,0
5D E000 LDI R16,0
5E BF0B OUT 0x3B,R16
5F 38EC CPI R30,0x8C
60 07F1 CPC R31,R17
61 F021 BEQ 0x0066
62 95C8 LPM
63 9631 ADIW R30,1
64 920D ST R0,X+
65 CFF9 RJMP 0x005F
66 940E 00A5 CALL _main
_exit:
68 CFFF RJMP _exit
FILE: E:\产品\开发板\mega128-board\待完成\扩展4x4键盘输入\key4x4.h
(0001) //延时
(0002) void s_ms(unsigned int t)
(0003) {
(0004) for(;t>1;t--)
_s_ms:
t --> R16
69 C002 RJMP 0x006C
6A 5001 SUBI R16,1
6B 4010 SBCI R17,0
6C E081 LDI R24,1
6D E090 LDI R25,0
6E 1780 CP R24,R16
6F 0791 CPC R25,R17
70 F3C8 BCS 0x006A
71 9508 RET
_key_value:
i --> Y,+1
tem2 --> R10
rem --> R20
tem1 --> R22
72 940E 00B3 CALL push_xgsetF00C
(0005) {
(0006) }
(0007) }
(0008)
(0009) //读取键盘
(0010) //PC口作为键盘输入
(0011) unsigned char key_value()
(0012) {
(0013) unsigned char tem1,tem2,rem,i ;
(0014) rem=0 ;
74 2744 CLR R20
(0015) //不清零会返回一个不可预知的数
(0016) DDRC=0xf0 ;
75 EF80 LDI R24,0xF0
76 BB84 OUT 0x14,R24
(0017) //c口高四位输出 低四位输入
(0018) PORTC=0x0f ;
77 E08F LDI R24,0xF
78 BB85 OUT 0x15,R24
(0019) //输入有上拉电阻
(0020) s_ms(30);
79 E10E LDI R16,0x1E
7A E010 LDI R17,0
7B DFED RCALL _s_ms
(0021) tem1=PINC ;
7C B363 IN R22,0x13
(0022) //读取端口c
(0023) tem1=tem1&0x0f ;
7D 706F ANDI R22,0xF
(0024) //判断是否有键被按下
(0025) if(tem1!=0x0f)
7E 306F CPI R22,0xF
7F F0E1 BEQ 0x009C
(0026) {
(0027) s_ms(800);
80 E200 LDI R16,0x20
81 E013 LDI R17,3
82 DFE6 RCALL _s_ms
(0028) //延时
(0029) tem2=PINC ;
83 B2A3 IN R10,0x13
(0030) //读取端口c
(0031) tem2=tem2&0x0f ;
84 2D8A MOV R24,R10
85 708F ANDI R24,0xF
86 2EA8 MOV R10,R24
(0032) //判断是否为干扰
(0033) if(tem1==tem2)
87 1768 CP R22,R24
88 F499 BNE 0x009C
(0034) {
(0035) DDRC=0x0f ;
89 E08F LDI R24,0xF
8A BB84 OUT 0x14,R24
(0036) //c口高四位输入 低四位输出
(0037) PORTC=0xf0 ;
8B EF80 LDI R24,0xF0
8C BB85 OUT 0x15,R24
(0038) //反相输出
(0039) s_ms(1);
8D E001 LDI R16,1
8E E010 LDI R17,0
8F DFD9 RCALL _s_ms
(0040) //换向后要延时
(0041) rem=PINC ;
90 B343 IN R20,0x13
(0042) //读取端口c
(0043) rem=rem&0xf0 ;
91 7F40 ANDI R20,0xF0
(0044) //取高四位
(0045) rem=rem+tem1 ;
92 0F46 ADD R20,R22
(0046) //合并
(0047) rem=~rem ;
93 9540 COM R20
(0048) //反向输出
(0049) //判断按键是否被释放
(0050) do
(0051) {
(0052) PORTC=0xf0 ;
94 EF80 LDI R24,0xF0
95 BB85 OUT 0x15,R24
(0053) s_ms(3000);
96 EB08 LDI R16,0xB8
97 E01B LDI R17,0xB
98 DFD0 RCALL _s_ms
(0054) }
(0055) while(PINC!=0xf0);
99 B383 IN R24,0x13
9A 3F80 CPI R24,0xF0
9B F7C1 BNE 0x0094
(0056) }
(0057) }
(0058) s_ms(6000);
9C E700 LDI R16,0x70
9D E117 LDI R17,0x17
9E DFCA RCALL _s_ms
(0059) s_ms(6000);
9F E700 LDI R16,0x70
A0 E117 LDI R17,0x17
A1 DFC7 RCALL _s_ms
(0060) return(rem);
A2 2F04 MOV R16,R20
A3 940C 00BA JMP pop_xgsetF00C
FILE: E:\产品\开发板\mega128-board\待完成\扩展4x4键盘输入\key4x4.c
(0001) #include<iom128v.h>
(0002) #include"key4x4.h"
(0003) #define uchar unsigned char
(0004) #define uint unsigned int
(0005)
(0006) //主函数
(0007) main()
(0008) {
(0009) uchar key;
(0010) DDRA=0xff;
_main:
key --> R10
A5 EF8F LDI R24,0xFF
A6 BB8A OUT 0x1A,R24
(0011) DDRC=0xff;
A7 BB84 OUT 0x14,R24
(0012) PORTA=0xff;
A8 BB8B OUT 0x1B,R24
A9 C007 RJMP 0x00B1
(0013) while(1)
(0014) {
(0015) key=key_value(); //读取4x4键盘
AA DFC7 RCALL _key_value
AB 2EA0 MOV R10,R16
(0016) if(key!=0) //有按键被按下
AC 2300 TST R16
AD F019 BEQ 0x00B1
(0017) {
(0018) PORTA=~key; //显示键值
FILE: <library>
AE 2C2A MOV R2,R10
AF 9420 COM R2
B0 BA2B OUT 0x1B,R2
B1 CFF8 RJMP 0x00AA
B2 9508 RET
push_xgsetF00C:
B3 937A ST R23,-Y
B4 936A ST R22,-Y
B5 935A ST R21,-Y
B6 934A ST R20,-Y
B7 92BA ST R11,-Y
B8 92AA ST R10,-Y
B9 9508 RET
pop_xgsetF00C:
BA 90A9 LD R10,Y+
BB 90B9 LD R11,Y+
BC 9149 LD R20,Y+
BD 9159 LD R21,Y+
BE 9169 LD R22,Y+
BF 9179 LD R23,Y+
C0 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -