📄 led.lis
字号:
.module led.c
.area text(rom, con, rel)
0000 .dbfile F:\单片机资料\AVR单片机\制作ds18b20\18B20\led.c
.area data(ram, con, rel)
0000 .dbfile F:\单片机资料\AVR单片机\制作ds18b20\18B20\led.c
0000 _led_data::
0000 .blkb 2
.area idata
0000 3F00 .word 63
.area data(ram, con, rel)
0002 .dbfile F:\单片机资料\AVR单片机\制作ds18b20\18B20\led.c
0002 .blkb 2
.area idata
0002 0600 .word 6
.area data(ram, con, rel)
0004 .dbfile F:\单片机资料\AVR单片机\制作ds18b20\18B20\led.c
0004 .blkb 2
.area idata
0004 5B00 .word 91
.area data(ram, con, rel)
0006 .dbfile F:\单片机资料\AVR单片机\制作ds18b20\18B20\led.c
0006 .blkb 2
.area idata
0006 4F00 .word 79
.area data(ram, con, rel)
0008 .dbfile F:\单片机资料\AVR单片机\制作ds18b20\18B20\led.c
0008 .blkb 2
.area idata
0008 6600 .word 102
.area data(ram, con, rel)
000A .dbfile F:\单片机资料\AVR单片机\制作ds18b20\18B20\led.c
000A .blkb 2
.area idata
000A 6D00 .word 109
.area data(ram, con, rel)
000C .dbfile F:\单片机资料\AVR单片机\制作ds18b20\18B20\led.c
000C .blkb 2
.area idata
000C 7D00 .word 125
.area data(ram, con, rel)
000E .dbfile F:\单片机资料\AVR单片机\制作ds18b20\18B20\led.c
000E .blkb 2
.area idata
000E 0700 .word 7
.area data(ram, con, rel)
0010 .dbfile F:\单片机资料\AVR单片机\制作ds18b20\18B20\led.c
0010 .blkb 2
.area idata
0010 7F00 .word 127
.area data(ram, con, rel)
0012 .dbfile F:\单片机资料\AVR单片机\制作ds18b20\18B20\led.c
0012 .blkb 2
.area idata
0012 6F00 .word 111
.area data(ram, con, rel)
0014 .dbfile F:\单片机资料\AVR单片机\制作ds18b20\18B20\led.c
0014 .blkb 2
.area idata
0014 7700 .word 119
.area data(ram, con, rel)
0016 .dbfile F:\单片机资料\AVR单片机\制作ds18b20\18B20\led.c
0016 .blkb 2
.area idata
0016 7300 .word 115
.area data(ram, con, rel)
0018 .dbfile F:\单片机资料\AVR单片机\制作ds18b20\18B20\led.c
0018 .blkb 2
.area idata
0018 3900 .word 57
.area data(ram, con, rel)
001A .dbfile F:\单片机资料\AVR单片机\制作ds18b20\18B20\led.c
001A .blkb 2
.area idata
001A 6300 .word 99
.area data(ram, con, rel)
001C .dbfile F:\单片机资料\AVR单片机\制作ds18b20\18B20\led.c
001C .blkb 2
.area idata
001C 7900 .word 121
.area data(ram, con, rel)
001E .dbfile F:\单片机资料\AVR单片机\制作ds18b20\18B20\led.c
001E .blkb 2
.area idata
001E 0000 .byte 0,0
.area data(ram, con, rel)
0020 .dbfile F:\单片机资料\AVR单片机\制作ds18b20\18B20\led.c
0020 .dbsym e led_data _led_data A[32:16]kI
.area text(rom, con, rel)
0000 .dbfile F:\单片机资料\AVR单片机\制作ds18b20\18B20\led.c
0000 .dbfunc e led_init _led_init fV
.even
0000 _led_init::
0000 .dbline -1
0000 .dbline 20
0000 ; /**********************************
0000 ; ** file_name led.c **
0000 ; ** describe 七段数码管函数 **
0000 ; ** auther 古欣 www.avrvi.com **
0000 ; ** Time 200-2-25 **
0000 ; ** temp=(data*1000)%1; 这个式子中的%为取余数,temp为data的第三位小数,0.023(data) --> 3(temp)
0000 ; ***********************************/
0000 ; #include "config.h"
0000 ;
0000 ;
0000 ; //LED数据 不显点,亮的段为1,连接为P0~P7对应a~g,dp
0000 ; const led_data[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x73,0x39,0x63,0x79};
0000 ;
0000 ; /***********************
0000 ; ** 初始化对应端口为输出
0000 ; ** ABCD 和 abcdefg dpi 共12个IO口
0000 ; ** 默认为 PB(0123) 和 PA
0000 ; ***********************/
0000 ; void led_init(void)
0000 ; {
0000 .dbline 21
0000 ; led_ddr = 0xFF; //abcdefg dpi 各位设为输出
0000 8FEF ldi R24,255
0002 8ABB out 0x1a,R24
0004 .dbline 22
0004 ; led_contrl_ddr |= (1<<led_a)|(1<<led_b)|(1<<led_c)|(1<<led_d); //ABCD四个控制设为输出
0004 87B3 in R24,0x17
0006 8F60 ori R24,15
0008 87BB out 0x17,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 -> R12
000C ; count -> R10
.even
000C _display_one::
000C AA92 st -y,R10
000E CA92 st -y,R12
0010 C22E mov R12,R18
0012 A02E mov R10,R16
0014 .dbline -1
0014 .dbline 34
0014 ;
0014 ; // 以下两句将会使LED全亮,如果立即更改状态,将看不出来效果
0014 ; // led_port = 0xFF;
0014 ; // led_contrl_port |= (1<<led_a)|(1<<led_b)|(1<<led_c)|(1<<led_d);
0014 ; }
0014 ;
0014 ; /***********************
0014 ; ** 显示一位
0014 ; ** 输入:count显示在第几位(3210),data 要显示的数(0~f)
0014 ; ************************/
0014 ; void display_one(uint8 count, uint8 data)
0014 ; {
0014 .dbline 35
0014 ; led_port = led_data[data]; //显示的数
0014 80E0 ldi R24,<_led_data
0016 90E0 ldi R25,>_led_data
0018 EC2D mov R30,R12
001A FF27 clr R31
001C EE0F lsl R30
001E FF1F rol R31
0020 E80F add R30,R24
0022 F91F adc R31,R25
0024 2080 ldd R2,z+0
0026 3180 ldd R3,z+1
0028 2BBA out 0x1b,R2
002A .dbline 36
002A ; led_contrl_port |= (1<<count); //选中对应要显示的位,从右至左,0123
002A 01E0 ldi R16,1
002C 1A2D mov R17,R10
002E 0E940000 xcall lsl8
0032 28B2 in R2,0x18
0034 202A or R2,R16
0036 28BA out 0x18,R2
0038 .dbline -2
0038 L2:
0038 .dbline 0 ; func end
0038 C990 ld R12,y+
003A A990 ld R10,y+
003C 0895 ret
003E .dbsym r data 12 c
003E .dbsym r count 10 c
003E .dbend
003E .dbfunc e display _display fV
003E ; temp -> R10
003E ; mode -> R20
003E ; data -> R12,R13
.even
003E _display::
003E 0E940000 xcall push_xgset303C
0042 422F mov R20,R18
0044 6801 movw R12,R16
0046 .dbline -1
0046 .dbline 46
0046 ; //如果对位进行了调整,就不在是0123,而是对应的值
0046 ; }
0046 ;
0046 ; /***********************
0046 ; ** 显示四位整数
0046 ; ** 输入:要显示的四位数data,显示模式mode,1为补零显示模式,默认不显示零
0046 ; ** 说明:可以小于四位数,mode=1时 自动补零
0046 ; ************************/
0046 ; void display(uint16 data,uint8 mode)
0046 ; {
0046 .dbline 49
0046 ; uint8 temp;
0046 ; //千位
0046 ; if(data>1000)
0046 88EE ldi R24,1000
0048 93E0 ldi R25,3
004A 8C15 cp R24,R12
004C 9D05 cpc R25,R13
004E 78F4 brsh L4
0050 X0:
0050 .dbline 50
0050 ; {
0050 .dbline 51
0050 ; temp=data/1000;
0050 28EE ldi R18,1000
0052 33E0 ldi R19,3
0054 8601 movw R16,R12
0056 0E940000 xcall div16u
005A 5801 movw R10,R16
005C .dbline 52
005C ; display_one(3,temp);
005C 2A2D mov R18,R10
005E 03E0 ldi R16,3
0060 D5DF xcall _display_one
0062 .dbline 53
0062 ; delay_ms(6); //6ms 是个经验值,刚好无闪烁,并且亮度较高
0062 06E0 ldi R16,6
0064 10E0 ldi R17,0
0066 0E940000 xcall _delay_ms
006A .dbline 54
006A ; led_contrl_port &=~ (1<<3);
006A C398 cbi 0x18,3
006C .dbline 55
006C ; }
006C 0AC0 xjmp L5
006E L4:
006E .dbline 57
006E ; else
006E ; {
006E .dbline 58
006E ; if(mode==1)
006E 4130 cpi R20,1
0070 41F4 brne L6
0072 X1:
0072 .dbline 59
0072 ; {
0072 .dbline 60
0072 ; display_one(3,0);
0072 2227 clr R18
0074 03E0 ldi R16,3
0076 CADF xcall _display_one
0078 .dbline 61
0078 ; delay_ms(6);
0078 06E0 ldi R16,6
007A 10E0 ldi R17,0
007C 0E940000 xcall _delay_ms
0080 .dbline 62
0080 ; led_contrl_port &=~ (1<<3);
0080 C398 cbi 0x18,3
0082 .dbline 63
0082 ; }
0082 L6:
0082 .dbline 64
0082 ; }
0082 L5:
0082 .dbline 66
0082 ; //百位
0082 ; if(data>100)
0082 84E6 ldi R24,100
0084 90E0 ldi R25,0
0086 8C15 cp R24,R12
0088 9D05 cpc R25,R13
008A 98F4 brsh L8
008C X2:
008C .dbline 67
008C ; {
008C .dbline 68
008C ; temp=(data%1000)/100;
008C 28EE ldi R18,1000
008E 33E0 ldi R19,3
0090 8601 movw R16,R12
0092 0E940000 xcall mod16u
0096 24E6 ldi R18,100
0098 30E0 ldi R19,0
009A 0E940000 xcall div16u
009E 5801 movw R10,R16
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -