⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 led.lis

📁 AVR mega16系列单片机开发程序
💻 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 + -