📄 一般按键.lst
字号:
__start:
__text_start:
1B E5CF LDI R28,0x5F
1C E0D4 LDI R29,4
1D BFCD OUT 0x3D,R28
1E BFDE OUT 0x3E,R29
1F 51CE SUBI R28,0x1E
20 40D0 SBCI R29,0
21 EA0A LDI R16,0xAA
22 8308 STD Y+0,R16
23 2400 CLR R0
24 E6E0 LDI R30,0x60
25 E0F0 LDI R31,0
26 E010 LDI R17,0
27 36E0 CPI R30,0x60
28 07F1 CPC R31,R17
29 F011 BEQ 0x002C
2A 9201 ST R0,Z+
2B CFFB RJMP 0x0027
2C 8300 STD Z+0,R16
2D E3E6 LDI R30,0x36
2E E0F0 LDI R31,0
2F E6A0 LDI R26,0x60
30 E0B0 LDI R27,0
31 E010 LDI R17,0
32 E000 LDI R16,0
33 BF0B OUT 0x3B,R16
34 33E6 CPI R30,0x36
35 07F1 CPC R31,R17
36 F021 BEQ 0x003B
37 95C8 LPM
38 9631 ADIW R30,1
39 920D ST R0,X+
3A CFF9 RJMP 0x0034
3B D062 RCALL _main
_exit:
3C CFFF RJMP _exit
FILE: E:\xiaozhiyong2009\设计资料\项目设计\mega8_C语言常用程序\ICCAVR_mega8_一般按键\一般按键.c
(0001) //ICC-AVR application builder : 2009-3-10 17:31:43
(0002) // Target : M8
(0003) // Crystal: 8.0000Mhz
(0004)
(0005) #include <iom8v.h>
(0006) #include <macros.h>
(0007)
(0008) void port_init(void)
(0009) {
(0010) PORTB = 0x00;
_port_init:
3D 2422 CLR R2
3E BA28 OUT 0x18,R2
(0011) DDRB = 0x00;
3F BA27 OUT 0x17,R2
(0012) PORTC = 0x00; //m103 output only
40 BA25 OUT 0x15,R2
(0013) DDRC = 0x00;
41 BA24 OUT 0x14,R2
(0014) PORTD = 0x00;
42 BA22 OUT 0x12,R2
(0015) DDRD = 0x00;
43 BA21 OUT 0x11,R2
44 9508 RET
(0016) }
(0017)
(0018) //call this routine to initialize all peripherals
(0019) void init_devices(void)
(0020) {
(0021) //stop errant interrupts until set up
(0022) CLI(); //disable all interrupts
_init_devices:
45 94F8 BCLR 7
(0023) port_init();
46 DFF6 RCALL _port_init
(0024)
(0025) MCUCR = 0x00;
47 2422 CLR R2
48 BE25 OUT 0x35,R2
(0026) GICR = 0x00;
49 BE2B OUT 0x3B,R2
(0027) TIMSK = 0x00; //timer interrupt sources
4A BE29 OUT 0x39,R2
(0028) SEI(); //re-enable interrupts
4B 9478 BSET 7
4C 9508 RET
(0029) //all peripherals are now initialized
(0030) }
(0031)
(0032) /************************************
(0033) 用 途:微秒级延时程序
(0034) Taget :mega8
(0035) crystal :8M
(0036) 介 绍:在8M的晶振上进行us级的延时
(0037) 入口参数:
(0038) *************************************/
(0039) void delay_us(int time)
(0040) {
(0041) do
(0042) {
(0043) time--;
_delay_us:
time --> R16
4D 5001 SUBI R16,1
4E 4010 SBCI R17,0
(0044) }
(0045) while (time > 1);
4F E081 LDI R24,1
50 E090 LDI R25,0
51 1780 CP R24,R16
52 0791 CPC R25,R17
53 F3CC BLT 0x004D
54 9508 RET
_show_2_digit:
i --> Y,+1
digi --> R10
55 92AA ST R10,-Y
56 2EA0 MOV R10,R16
(0046) }
(0047)
(0048)
(0049) /************************************
(0050) 用 途:两位数码管显示一个数
(0051) Taget :mega8
(0052) crystal :8M
(0053) 介 绍:共阳数码管
(0054) 1-PC1(片选)
(0055) 2-PC0
(0056) -----
(0057) a-PB0(数据)
(0058) b-PB1
(0059) ...
(0060) h-PB6
(0061) DP-PB7
(0062) 入口参数:要显示的数,十进制表示
(0063) *************************************/
(0064) const unsigned char num[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
(0065) 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
(0066) void show_2_digit(unsigned char digi)
(0067) {
(0068) unsigned char i;
(0069) DDRC=0xff;
57 EF8F LDI R24,0xFF
58 BB84 OUT 0x14,R24
(0070) DDRB=0xff;
59 BB87 OUT 0x17,R24
(0071) PORTC=0;//关片选
5A 2422 CLR R2
5B BA25 OUT 0x15,R2
(0072) PORTB=~num[(unsigned char )(digi/10)];//显示十位
5C E02A LDI R18,0xA
5D E030 LDI R19,0
5E 2D0A MOV R16,R10
5F 2711 CLR R17
60 D048 RCALL div16s
61 2FE0 MOV R30,R16
62 27FF CLR R31
63 E286 LDI R24,0x26
64 E090 LDI R25,0
65 0FE8 ADD R30,R24
66 1FF9 ADC R31,R25
67 9024 LPM R2,0(Z)
68 9420 COM R2
69 BA28 OUT 0x18,R2
(0073) PORTC=(0x1<<1);//开十位的显示
6A E082 LDI R24,2
6B BB85 OUT 0x15,R24
(0074) delay_us(200);
6C EC08 LDI R16,0xC8
6D E010 LDI R17,0
6E DFDE RCALL _delay_us
(0075) PORTC=0;//关显示
6F 2422 CLR R2
70 BA25 OUT 0x15,R2
(0076) PORTB=~num[(unsigned char )(digi%10)];//显示个位
71 E02A LDI R18,0xA
72 E030 LDI R19,0
73 2D0A MOV R16,R10
74 2711 CLR R17
75 D02F RCALL mod16s
76 2FE0 MOV R30,R16
77 27FF CLR R31
78 E286 LDI R24,0x26
79 E090 LDI R25,0
7A 0FE8 ADD R30,R24
7B 1FF9 ADC R31,R25
7C 9024 LPM R2,0(Z)
7D 9420 COM R2
7E BA28 OUT 0x18,R2
(0077) PORTC=(0x1<<0);//开个位的显示
7F E081 LDI R24,1
80 BB85 OUT 0x15,R24
(0078) delay_us(200);
81 EC08 LDI R16,0xC8
82 E010 LDI R17,0
83 DFC9 RCALL _delay_us
(0079) PORTC=0x0;//关显示
84 2422 CLR R2
85 BA25 OUT 0x15,R2
86 90A9 LD R10,Y+
87 9508 RET
(0080) }
(0081)
(0082) /************************************
(0083) 用 途:单键扫描程序
(0084) Taget :mega8
(0085) crystal :8M
(0086) 介 绍:用的是D的前四个口,共有四个按键
(0087) 入口参数:
(0088) 出口参数:为0表示没有按键(1,2,3,4)
(0089) *************************************/
(0090) unsigned char key_scan()
(0091) {
(0092) unsigned char k,j=0;
_key_scan:
j --> R16
k --> R18
88 2700 CLR R16
(0093) PORTD|=0x0f;
89 B382 IN R24,0x12
8A 608F ORI R24,0xF
8B BB82 OUT 0x12,R24
(0094) k=PIND;
8C B320 IN R18,0x10
(0095) k=k&0x0f;
8D 702F ANDI R18,0xF
(0096) if(k==0x0e)
8E 302E CPI R18,0xE
8F F411 BNE 0x0092
(0097) j=1;
90 E001 LDI R16,1
91 C00B RJMP 0x009D
(0098) else if(k==0x0d)
92 302D CPI R18,0xD
93 F411 BNE 0x0096
(0099) j=2;
94 E002 LDI R16,2
95 C007 RJMP 0x009D
(0100) else if(k==0x0b)
96 302B CPI R18,0xB
97 F411 BNE 0x009A
(0101) j=3;
98 E003 LDI R16,3
99 C003 RJMP 0x009D
(0102) else if (k==0x07)
9A 3027 CPI R18,7
9B F409 BNE 0x009D
(0103) j=4;
9C E004 LDI R16,4
(0104) return j;
9D 9508 RET
(0105) }
(0106)
(0107) void main()
(0108) {
(0109) port_init();
_main:
9E DF9E RCALL _port_init
(0110) init_devices();
9F DFA5 RCALL _init_devices
A0 C002 RJMP 0x00A3
(0111)
(0112) while(1)
(0113) {
(0114) show_2_digit(key_scan());
FILE: <library>
A1 DFE6 RCALL _key_scan
A2 DFB2 RCALL _show_2_digit
A3 CFFD RJMP 0x00A1
A4 9508 RET
mod16s:
A5 9468 BSET 6
A6 92DA ST R13,-Y
A7 2ED1 MOV R13,R17
A8 C004 RJMP 0x00AD
div16s:
A9 94E8 BCLR 6
AA 92DA ST R13,-Y
AB 2ED1 MOV R13,R17
AC 26D3 EOR R13,R19
AD FF17 SBRS R17,7
AE C004 RJMP 0x00B3
AF 9510 COM R17
B0 9500 COM R16
B1 5F0F SUBI R16,0xFF
B2 4F1F SBCI R17,0xFF
B3 FF37 SBRS R19,7
B4 C004 RJMP 0x00B9
B5 9530 COM R19
B6 9520 COM R18
B7 5F2F SUBI R18,0xFF
B8 4F3F SBCI R19,0xFF
B9 D00B RCALL xdiv16u
BA FED7 SBRS R13,7
BB C004 RJMP 0x00C0
BC 9510 COM R17
BD 9500 COM R16
BE 5F0F SUBI R16,0xFF
BF 4F1F SBCI R17,0xFF
C0 90D9 LD R13,Y+
C1 9508 RET
mod16u:
C2 9468 BSET 6
C3 C001 RJMP xdiv16u
div16u:
C4 94E8 BCLR 6
xdiv16u:
C5 92EA ST R14,-Y
C6 92FA ST R15,-Y
C7 938A ST R24,-Y
C8 24EE CLR R14
C9 24FF CLR R15
CA E180 LDI R24,0x10
CB 0F00 LSL R16
CC 1F11 ROL R17
CD 1CEE ROL R14
CE 1CFF ROL R15
CF 16E2 CP R14,R18
D0 06F3 CPC R15,R19
D1 F018 BCS 0x00D5
D2 1AE2 SUB R14,R18
D3 0AF3 SBC R15,R19
D4 9503 INC R16
D5 958A DEC R24
D6 F7A1 BNE 0x00CB
D7 F416 BRTC 0x00DA
D8 2D0E MOV R16,R14
D9 2D1F MOV R17,R15
DA 9189 LD R24,Y+
DB 90F9 LD R15,Y+
DC 90E9 LD R14,Y+
DD 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -