📄 numled.lis
字号:
.module NumLED.c
.area lit(rom, con, rel)
0000 _seg_table::
0000 C0F9 .byte 192,249
0002 A4B0 .byte 164,176
0004 9992 .byte 153,146
0006 82F8 .byte 130,248
0008 8090 .byte 128,144
000A 8883 .byte 136,131
000C C6A1 .byte 198,161
000E 868E .byte 134,142
0010 .dbfile E:\Mega8程序\UART通信\NumLED.c
0010 .dbsym e seg_table _seg_table A[16:16]kc
.area data(ram, con, rel)
0000 .dbfile E:\Mega8程序\UART通信\NumLED.c
0000 _led_buff::
0000 .blkb 2
.area idata
0000 DB83 .byte 219,131
.area data(ram, con, rel)
0002 .dbfile E:\Mega8程序\UART通信\NumLED.c
0002 .blkb 2
.area idata
0002 8FD6 .byte 143,214
.area data(ram, con, rel)
0004 .dbfile E:\Mega8程序\UART通信\NumLED.c
0004 .dbsym e led_buff _led_buff A[4:4]c
.area text(rom, con, rel)
0000 .dbfile E:\Mega8程序\UART通信\NumLED.c
0000 .dbfunc e ADCtoBCD _ADCtoBCD fV
0000 ; i -> R10
0000 ; temp -> R12,R13
.even
0000 _ADCtoBCD::
0000 00D0 rcall push_gset4
0002 6801 movw R12,R16
0004 .dbline -1
0004 .dbline 12
0004 ; /* 目标MCU:MEGA8 晶振:内部RC(INT) 8MHZ,该模块中使用了seg_table[16]数组
0004 ; 来表示LED的16个字符0~F,led_buff[4]表示4个LED的字符代码*/
0004 ; #include<iom8v.h>
0004 ; #include <macros.h>
0004 ; #define Vref 4995
0004 ; const unsigned char seg_table[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0004 ; 0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
0004 ; /*LED Code:0,1,2,3,4,5
0004 ; 6,7,8,9,A,B,C,D,E,F*/
0004 ; unsigned char led_buff[4]={0b011011011,0b10000011,0b10001111,0b11010110};//首位为点,其他没有显示
0004 ; void ADCtoBCD(unsigned int temp)//16进制数值转换为BCD码,12精度
0004 ; {unsigned char i;
0004 .dbline 13
0004 ; temp=(unsigned int)(((unsigned long)((unsigned long)temp*Vref))/0xfff);
0004 1601 movw R2,R12
0006 4424 clr R4
0008 5524 clr R5
000A 43E8 ldi R20,131
000C 53E1 ldi R21,19
000E 60E0 ldi R22,0
0010 70E0 ldi R23,0
0012 5A92 st -y,R5
0014 4A92 st -y,R4
0016 3A92 st -y,R3
0018 2A92 st -y,R2
001A 8A01 movw R16,R20
001C 9B01 movw R18,R22
001E 00D0 rcall empy32u
0020 4FEF ldi R20,255
0022 5FE0 ldi R21,15
0024 60E0 ldi R22,0
0026 70E0 ldi R23,0
0028 7A93 st -y,R23
002A 6A93 st -y,R22
002C 5A93 st -y,R21
002E 4A93 st -y,R20
0030 00D0 rcall div32u
0032 6801 movw R12,R16
0034 .dbline 14
0034 ; for(i=0;i<4;i++)
0034 AA24 clr R10
0036 17C0 rjmp L5
0038 L2:
0038 .dbline 15
0038 .dbline 15
0038 2AE0 ldi R18,10
003A 30E0 ldi R19,0
003C 8601 movw R16,R12
003E 00D0 rcall mod16u
0040 F801 movw R30,R16
0042 80E0 ldi R24,<_seg_table
0044 90E0 ldi R25,>_seg_table
0046 E80F add R30,R24
0048 F91F adc R31,R25
004A E491 lpm R30,Z
004C 80E0 ldi R24,<_led_buff
004E 90E0 ldi R25,>_led_buff
0050 AA2D mov R26,R10
0052 BB27 clr R27
0054 A80F add R26,R24
0056 B91F adc R27,R25
0058 EC93 st x,R30
005A .dbline 16
005A 2AE0 ldi R18,10
005C 30E0 ldi R19,0
005E 8601 movw R16,R12
0060 00D0 rcall div16u
0062 6801 movw R12,R16
0064 .dbline 16
0064 L3:
0064 .dbline 14
0064 A394 inc R10
0066 L5:
0066 .dbline 14
0066 8A2D mov R24,R10
0068 8430 cpi R24,4
006A 30F3 brlo L2
006C .dbline 17
006C ; {led_buff[i]=seg_table[temp%10];
006C ; temp=temp/10;}
006C ; led_buff[3]&=0x7f;}
006C 80910300 lds R24,_led_buff+3
0070 8F77 andi R24,127
0072 80930300 sts _led_buff+3,R24
0076 .dbline -2
0076 L1:
0076 00D0 rcall pop_gset4
0078 .dbline 0 ; func end
0078 0895 ret
007A .dbsym r i 10 c
007A .dbsym r temp 12 i
007A .dbend
007A .dbfunc e led_init _led_init fV
.even
007A _led_init::
007A .dbline -1
007A .dbline 19
007A ; void led_init(void)
007A ; {DDRB|=0xff;//方向:输出
007A .dbline 19
007A 87B3 in R24,0x17
007C 8F6F ori R24,255
007E 87BB out 0x17,R24
0080 .dbline 20
0080 ; PORTB|=0xff;//LED数据-
0080 88B3 in R24,0x18
0082 8F6F ori R24,255
0084 88BB out 0x18,R24
0086 .dbline 21
0086 ; DDRD|=0xf0;//D口高位输出,单只选通4个LED功能
0086 81B3 in R24,0x11
0088 806F ori R24,240
008A 81BB out 0x11,R24
008C .dbline 22
008C ; PORTD|=0xf0;}//高位输出高电平,LED全部熄灭.低位输入,全部为高阻态,如果为1,则带上拉电阻
008C 82B3 in R24,0x12
008E 806F ori R24,240
0090 82BB out 0x12,R24
0092 .dbline -2
0092 L7:
0092 .dbline 0 ; func end
0092 0895 ret
0094 .dbend
0094 .dbfunc e spark _spark fV
0094 ; num -> R20
.even
0094 _spark::
0094 00D0 rcall push_gset1
0096 402F mov R20,R16
0098 .dbline -1
0098 .dbline 24
0098 ; void spark(unsigned char num)
0098 ; {DDRB|=0xff;//方向:输出
0098 .dbline 24
0098 87B3 in R24,0x17
009A 8F6F ori R24,255
009C 87BB out 0x17,R24
009E .dbline 25
009E ; PORTB=led_buff[num];
009E 80E0 ldi R24,<_led_buff
00A0 90E0 ldi R25,>_led_buff
00A2 E42F mov R30,R20
00A4 FF27 clr R31
00A6 E80F add R30,R24
00A8 F91F adc R31,R25
00AA 2080 ldd R2,z+0
00AC 28BA out 0x18,R2
00AE .dbline 26
00AE ; PORTD=(1<<(num+4));}
00AE 142F mov R17,R20
00B0 1C5F subi R17,252 ; addi 4
00B2 01E0 ldi R16,1
00B4 00D0 rcall lsl8
00B6 02BB out 0x12,R16
00B8 .dbline -2
00B8 L8:
00B8 00D0 rcall pop_gset1
00BA .dbline 0 ; func end
00BA 0895 ret
00BC .dbsym r num 20 c
00BC .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -