📄 两位数码管显示.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 D04C RCALL _main
_exit:
3C CFFF RJMP _exit
FILE: E:\xiaozhiyong2009\设计资料\项目设计\mega8_C语言常用程序\ICCAVR_mega8_两位数码管显示\两位数码管显示.c
(0001) //ICC-AVR application builder : 2009-3-10 14:45:48
(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 D032 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 D019 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) void main()
(0083) {
(0084) port_init();
_main:
88 DFB4 RCALL _port_init
(0085) init_devices();
89 DFBB RCALL _init_devices
8A C002 RJMP 0x008D
(0086)
(0087) while(1)
(0088) {
(0089) show_2_digit(34);
FILE: <library>
8B E202 LDI R16,0x22
8C DFC8 RCALL _show_2_digit
8D CFFD RJMP 0x008B
8E 9508 RET
mod16s:
8F 9468 BSET 6
90 92DA ST R13,-Y
91 2ED1 MOV R13,R17
92 C004 RJMP 0x0097
div16s:
93 94E8 BCLR 6
94 92DA ST R13,-Y
95 2ED1 MOV R13,R17
96 26D3 EOR R13,R19
97 FF17 SBRS R17,7
98 C004 RJMP 0x009D
99 9510 COM R17
9A 9500 COM R16
9B 5F0F SUBI R16,0xFF
9C 4F1F SBCI R17,0xFF
9D FF37 SBRS R19,7
9E C004 RJMP 0x00A3
9F 9530 COM R19
A0 9520 COM R18
A1 5F2F SUBI R18,0xFF
A2 4F3F SBCI R19,0xFF
A3 D00B RCALL xdiv16u
A4 FED7 SBRS R13,7
A5 C004 RJMP 0x00AA
A6 9510 COM R17
A7 9500 COM R16
A8 5F0F SUBI R16,0xFF
A9 4F1F SBCI R17,0xFF
AA 90D9 LD R13,Y+
AB 9508 RET
mod16u:
AC 9468 BSET 6
AD C001 RJMP xdiv16u
div16u:
AE 94E8 BCLR 6
xdiv16u:
AF 92EA ST R14,-Y
B0 92FA ST R15,-Y
B1 938A ST R24,-Y
B2 24EE CLR R14
B3 24FF CLR R15
B4 E180 LDI R24,0x10
B5 0F00 LSL R16
B6 1F11 ROL R17
B7 1CEE ROL R14
B8 1CFF ROL R15
B9 16E2 CP R14,R18
BA 06F3 CPC R15,R19
BB F018 BCS 0x00BF
BC 1AE2 SUB R14,R18
BD 0AF3 SBC R15,R19
BE 9503 INC R16
BF 958A DEC R24
C0 F7A1 BNE 0x00B5
C1 F416 BRTC 0x00C4
C2 2D0E MOV R16,R14
C3 2D1F MOV R17,R15
C4 9189 LD R24,Y+
C5 90F9 LD R15,Y+
C6 90E9 LD R14,Y+
C7 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -