📄 led.lis
字号:
.module led.c
.area lit(rom, con, rel)
0000 _led_data::
0000 3F00 .word 63
0002 0600 .word 6
0004 5B00 .word 91
0006 4F00 .word 79
0008 6600 .word 102
000A 6D00 .word 109
000C 7D00 .word 125
000E 0700 .word 7
0010 7F00 .word 127
0012 6F00 .word 111
0014 7700 .word 119
0016 7C00 .word 124
0018 3900 .word 57
001A 5E00 .word 94
001C 7900 .word 121
001E 7100 .word 113
0020 0000 .word 0
0022 .dbfile F:\单片机源程序\AVR单片机程序\MAGE16\LED\led.c
0022 .dbsym e led_data _led_data A[34:17]kI
.area text(rom, con, rel)
0000 .dbfile F:\单片机源程序\AVR单片机程序\MAGE16\LED\led.c
0000 .dbfunc e led_init _led_init fV
.even
0000 _led_init::
0000 .dbline -1
0000 .dbline 6
0000 ; #include "config.h"
0000 ;
0000 ; const led_data[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
0000 ;
0000 ; void led_init(void)
0000 ; {
0000 .dbline 7
0000 ; led_ddr = 0xFF; //abcdefg dpi 各位设为输出
0000 8FEF ldi R24,255
0002 8ABB out 0x1a,R24
0004 .dbline 8
0004 ; led_contrl_ddr |= (1<<led_a)|(1<<led_b)|(1<<led_c)|(1<<led_d); //ABCD四个控制设为输出
0004 84B3 in R24,0x14
0006 8F60 ori R24,15
0008 84BB out 0x14,R24
000A .dbline -2
000A L1:
000A .dbline 0 ; func end
000A 0895 ret
000C .dbend
000C .dbfunc e display_one _display_one fV
000C ; data -> R22
000C ; count -> R20
.even
000C _display_one::
000C 0E940000 xcall push_gset2
0010 622F mov R22,R18
0012 402F mov R20,R16
0014 .dbline -1
0014 .dbline 16
0014 ; }
0014 ;
0014 ; /***********************
0014 ; ** 显示一位
0014 ; ** 输入:count显示在第几位(3210),data 要显示的数(0~f)
0014 ; ************************/
0014 ; void display_one(uint8 count, uint8 data)
0014 ; {
0014 .dbline 17
0014 ; led_port = led_data[data]; //显示的数
0014 82E0 ldi R24,2
0016 869F mul R24,R22
0018 F001 movw R30,R0
001A 80E0 ldi R24,<_led_data
001C 90E0 ldi R25,>_led_data
001E E80F add R30,R24
0020 F91F adc R31,R25
0022 0590 lpm R0,Z+
0024 1490 lpm R1,Z
0026 F001 movw R30,R0
0028 EBBB out 0x1b,R30
002A .dbline 18
002A ; led_contrl_port &= ~(1<<count); //选中对应要显示的位,从右至左,0123
002A 01E0 ldi R16,1
002C 142F mov R17,R20
002E 0E940000 xcall lsl8
0032 202E mov R2,R16
0034 2094 com R2
0036 35B2 in R3,0x15
0038 3220 and R3,R2
003A 35BA out 0x15,R3
003C .dbline -2
003C L2:
003C 0E940000 xcall pop_gset2
0040 .dbline 0 ; func end
0040 0895 ret
0042 .dbsym r data 22 c
0042 .dbsym r count 20 c
0042 .dbend
0042 .dbfunc e display _display fV
0042 ; temp -> R20
0042 ; data -> R22,R23
.even
0042 _display::
0042 0E940000 xcall push_gset2
0046 B801 movw R22,R16
0048 .dbline -1
0048 .dbline 28
0048 ; //如果对位进行了调整,就不在是0123,而是对应的值
0048 ; }
0048 ;
0048 ; /***********************
0048 ; ** 显示四位整数
0048 ; ** 输入:要显示的四位数data,显示模式mode,1为补零显示模式,默认不显示零
0048 ; ** 说明:可以小于四位数,mode=1时 自动补零
0048 ; ************************/
0048 ; void display(uint16 data)
0048 ; {
0048 .dbline 30
0048 ; uint8 temp;
0048 ; if(data>1000) //千位
0048 88EE ldi R24,1000
004A 93E0 ldi R25,3
004C 8617 cp R24,R22
004E 9707 cpc R25,R23
0050 78F4 brsh L4
0052 .dbline 31
0052 ; {
0052 .dbline 32
0052 ; temp=data/1000;
0052 28EE ldi R18,1000
0054 33E0 ldi R19,3
0056 8B01 movw R16,R22
0058 0E940000 xcall div16u
005C 402F mov R20,R16
005E .dbline 33
005E ; display_one(0,temp);
005E 242F mov R18,R20
0060 0027 clr R16
0062 D4DF xcall _display_one
0064 .dbline 34
0064 ; delay_ms(1); //是个经验值,刚好无闪烁,并且亮度较高
0064 01E0 ldi R16,1
0066 10E0 ldi R17,0
0068 0E940000 xcall _delay_ms
006C .dbline 35
006C ; led_contrl_port |= (1<<0);
006C A89A sbi 0x15,0
006E .dbline 36
006E ; }
006E 08C0 xjmp L5
0070 L4:
0070 .dbline 38
0070 ; else
0070 ; {
0070 .dbline 39
0070 ; display_one(0,16);
0070 20E1 ldi R18,16
0072 0027 clr R16
0074 CBDF xcall _display_one
0076 .dbline 40
0076 ; delay_ms(1);
0076 01E0 ldi R16,1
0078 10E0 ldi R17,0
007A 0E940000 xcall _delay_ms
007E .dbline 41
007E ; led_contrl_port |= (1<<0);
007E A89A sbi 0x15,0
0080 .dbline 42
0080 ; }
0080 L5:
0080 .dbline 44
0080 ;
0080 ; if(data>100) //百位
0080 84E6 ldi R24,100
0082 90E0 ldi R25,0
0084 8617 cp R24,R22
0086 9707 cpc R25,R23
0088 98F4 brsh L6
008A .dbline 45
008A ; {
008A .dbline 46
008A ; temp=(data%1000)/100;
008A 28EE ldi R18,1000
008C 33E0 ldi R19,3
008E 8B01 movw R16,R22
0090 0E940000 xcall mod16u
0094 24E6 ldi R18,100
0096 30E0 ldi R19,0
0098 0E940000 xcall div16u
009C 402F mov R20,R16
009E .dbline 47
009E ; display_one(1,temp);
009E 242F mov R18,R20
00A0 01E0 ldi R16,1
00A2 B4DF xcall _display_one
00A4 .dbline 48
00A4 ; delay_ms(1);
00A4 01E0 ldi R16,1
00A6 10E0 ldi R17,0
00A8 0E940000 xcall _delay_ms
00AC .dbline 49
00AC ; led_contrl_port |= (1<<1);
00AC A99A sbi 0x15,1
00AE .dbline 50
00AE ; }
00AE 08C0 xjmp L7
00B0 L6:
00B0 .dbline 52
00B0 ; else
00B0 ; {
00B0 .dbline 53
00B0 ; display_one(1,16);
00B0 20E1 ldi R18,16
00B2 01E0 ldi R16,1
00B4 ABDF xcall _display_one
00B6 .dbline 54
00B6 ; delay_ms(1);
00B6 01E0 ldi R16,1
00B8 10E0 ldi R17,0
00BA 0E940000 xcall _delay_ms
00BE .dbline 55
00BE ; led_contrl_port |= (1<<1);
00BE A99A sbi 0x15,1
00C0 .dbline 56
00C0 ; }
00C0 L7:
00C0 .dbline 58
00C0 ;
00C0 ; if(data>10) //十位
00C0 8AE0 ldi R24,10
00C2 90E0 ldi R25,0
00C4 8617 cp R24,R22
00C6 9707 cpc R25,R23
00C8 98F4 brsh L8
00CA .dbline 59
00CA ; {
00CA .dbline 60
00CA ; temp=(data%100)/10;
00CA 24E6 ldi R18,100
00CC 30E0 ldi R19,0
00CE 8B01 movw R16,R22
00D0 0E940000 xcall mod16u
00D4 2AE0 ldi R18,10
00D6 30E0 ldi R19,0
00D8 0E940000 xcall div16u
00DC 402F mov R20,R16
00DE .dbline 61
00DE ; display_one(2,temp);
00DE 242F mov R18,R20
00E0 02E0 ldi R16,2
00E2 94DF xcall _display_one
00E4 .dbline 62
00E4 ; delay_ms(1);
00E4 01E0 ldi R16,1
00E6 10E0 ldi R17,0
00E8 0E940000 xcall _delay_ms
00EC .dbline 63
00EC ; led_contrl_port |= (1<<2);
00EC AA9A sbi 0x15,2
00EE .dbline 64
00EE ; }
00EE 08C0 xjmp L9
00F0 L8:
00F0 .dbline 66
00F0 ; else
00F0 ; {
00F0 .dbline 67
00F0 ; display_one(2,16);
00F0 20E1 ldi R18,16
00F2 02E0 ldi R16,2
00F4 8BDF xcall _display_one
00F6 .dbline 68
00F6 ; delay_ms(1);
00F6 01E0 ldi R16,1
00F8 10E0 ldi R17,0
00FA 0E940000 xcall _delay_ms
00FE .dbline 69
00FE ; led_contrl_port |= (1<<2);
00FE AA9A sbi 0x15,2
0100 .dbline 70
0100 ; }
0100 L9:
0100 .dbline 72
0100 ; //个位
0100 ; temp=data%10;
0100 2AE0 ldi R18,10
0102 30E0 ldi R19,0
0104 8B01 movw R16,R22
0106 0E940000 xcall mod16u
010A 402F mov R20,R16
010C .dbline 73
010C ; display_one(3,temp);
010C 242F mov R18,R20
010E 03E0 ldi R16,3
0110 7DDF xcall _display_one
0112 .dbline 74
0112 ; delay_ms(1);
0112 01E0 ldi R16,1
0114 10E0 ldi R17,0
0116 0E940000 xcall _delay_ms
011A .dbline 75
011A ; led_contrl_port |= (1<<3);
011A AB9A sbi 0x15,3
011C .dbline -2
011C L3:
011C 0E940000 xcall pop_gset2
0120 .dbline 0 ; func end
0120 0895 ret
0122 .dbsym r temp 20 c
0122 .dbsym r data 22 i
0122 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -