📄 key.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 0072 CALL _main
_exit:
68 CFFF RJMP _exit
FILE: D:\16实验程序\key\key.c
(0001) //独立按键的程序
(0002) //使用按键:k1,k2,k3,k4
(0003) //按下按键时相应的led会点亮
(0004)
(0005) #define uchar unsigned char
(0006) #define uint unsigned int
(0007) #include<iom128v.h>
(0008)
(0009) //延时函数
(0010) void s_ms(unsigned int t)
(0011) {
(0012) 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
(0013) {
(0014) }
(0015) }
(0016)
(0017) void main()
(0018) {
(0019) uchar tem,key;
(0020) //端口初始化
(0021) DDRD=0xff;
_main:
key --> R10
tem --> R20
72 EF8F LDI R24,0xFF
73 BB81 OUT 0x11,R24
(0022) PORTD=0xff;
74 BB82 OUT 0x12,R24
(0023) DDRB=0x00;
75 2422 CLR R2
76 BA27 OUT 0x17,R2
(0024) PORTB=0xff;
77 BB88 OUT 0x18,R24
78 C00A RJMP 0x0083
(0025) while(1)
(0026) {
(0027) tem=PINB; //读取端口b
79 B346 IN R20,0x16
(0028) if(tem!=0xff) //判断是否有按键按下
7A 3F4F CPI R20,0xFF
7B F039 BEQ 0x0083
(0029) {
(0030) s_ms(500); //排除按键抖动和抗干扰
7C EF04 LDI R16,0xF4
7D E011 LDI R17,1
7E DFEA RCALL _s_ms
(0031) key=PINB;
7F B2A6 IN R10,0x16
(0032) if(key==tem)
80 16A4 CP R10,R20
81 F409 BNE 0x0083
(0033) {
(0034) PORTD=key; //端口D输出按键值
FILE: <library>
82 BAA2 OUT 0x12,R10
83 CFF5 RJMP 0x0079
84 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -