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

📄 led.lis

📁 单片机中的ADC模块
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .module led.c
                        .area lit(rom, con, rel)
 0000           _led_data::
 0000 C000              .word 192
 0002 F900              .word 249
 0004 A400              .word 164
 0006 B000              .word 176
 0008 9900              .word 153
 000A 9200              .word 146
 000C 8200              .word 130
 000E F800              .word 248
 0010 8000              .word 128
 0012 9000              .word 144
 0014 8800              .word 136
 0016 8300              .word 131
 0018 C600              .word 198
 001A A100              .word 161
 001C 8600              .word 134
 001E 8E00              .word 142
 0020                   .dbfile F:\芯生光盘资料\范例代码\ADC\4led\led.c
 0020                   .dbsym e led_data _led_data A[32:16]kI
                        .area text(rom, con, rel)
 0000                   .dbfile F:\芯生光盘资料\范例代码\ADC\4led\led.c
 0000                   .dbfunc e delay_1ms _delay_1ms fV
 0000           ;              i -> R16,R17
                        .even
 0000           _delay_1ms::
 0000                   .dbline -1
 0000                   .dbline 25
 0000           ; /**********************************
 0000           ; ** file_name led.c             **
 0000           ; ** describe  七段数码管函数        **
 0000           ; ** auther    芯生  **
 0000           ; ** Time      2007-12-14          **
 0000           ; ***********************************/
 0000           ; 
 0000           ; #include <iom128v.h>
 0000           ; #include <macros.h>
 0000           ; #include "stdtypes.h"
 0000           ; #include "led.h"
 0000           ; 
 0000           ; //共阳极,LED数据 不显点,亮的段为1,连接为P0~P7对应a~g,dp
 0000           ; const led_data[16]={
 0000           ;       0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
 0000           ;           0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e
 0000           ;         };
 0000           ; 
 0000           ; /***********************
 0000           ; **8M时为 1000.25us
 0000           ; **4M时为 999.5us
 0000           ; **xtal 为晶振频率,单位为Mhz
 0000           ; ************************/
 0000           ; void delay_1ms(void)
 0000           ; {
 0000                   .dbline 27
 0000           ;  unsigned int i;
 0000           ;  for(i=200;i>0;i--)
 0000 08EC              ldi R16,200
 0002 10E0              ldi R17,0
 0004 02C0              xjmp L5
 0006           L2:
 0006                   .dbline 28
 0006           L3:
 0006                   .dbline 27
 0006 0150              subi R16,1
 0008 1040              sbci R17,0
 000A           L5:
 000A                   .dbline 27
 000A 0030              cpi R16,0
 000C 0107              cpc R16,R17
 000E D9F7              brne L2
 0010           X0:
 0010                   .dbline -2
 0010           L1:
 0010                   .dbline 0 ; func end
 0010 0895              ret
 0012                   .dbsym r i 16 i
 0012                   .dbend
 0012                   .dbfunc e delay_ms _delay_ms fV
 0012           ;              i -> R20,R21
 0012           ;              n -> R22,R23
                        .even
 0012           _delay_ms::
 0012 0E940000          xcall push_gset2
 0016 B801              movw R22,R16
 0018                   .dbline -1
 0018                   .dbline 34
 0018           ;   ;
 0018           ; }
 0018           ; /***********************
 0018           ; **毫秒级延时
 0018           ; ************************/
 0018           ; void delay_ms(unsigned int n)
 0018           ; {
 0018                   .dbline 36
 0018           ;  unsigned int i;
 0018           ;  for(i=n;i>0;i--)
 0018 AB01              movw R20,R22
 001A 03C0              xjmp L10
 001C           L7:
 001C                   .dbline 37
 001C F1DF              xcall _delay_1ms
 001E           L8:
 001E                   .dbline 36
 001E 4150              subi R20,1
 0020 5040              sbci R21,0
 0022           L10:
 0022                   .dbline 36
 0022 4030              cpi R20,0
 0024 4507              cpc R20,R21
 0026 D1F7              brne L7
 0028           X1:
 0028                   .dbline -2
 0028           L6:
 0028 0E940000          xcall pop_gset2
 002C                   .dbline 0 ; func end
 002C 0895              ret
 002E                   .dbsym r i 20 i
 002E                   .dbsym r n 22 i
 002E                   .dbend
 002E                   .dbfunc e led_init _led_init fV
                        .even
 002E           _led_init::
 002E                   .dbline -1
 002E                   .dbline 46
 002E           ;  delay_1ms();
 002E           ; }
 002E           ;                 
 002E           ; /***********************
 002E           ; ** 初始化对应端口为输出 
 002E           ; ** ABCD 和 abcdefg dpi 共12个IO口
 002E           ; ** 默认为 PD(4567) 和 PA(012345678)                                                                                                                                                                                                                                                                    
 002E           ; ***********************/
 002E           ; void led_init(void)
 002E           ; {
 002E                   .dbline 47
 002E           ;  led_ddr = 0xFF; //abcdefg dpi               各位设为输出
 002E 8FEF              ldi R24,255
 0030 8ABB              out 0x1a,R24
 0032                   .dbline 48
 0032           ;  led_contrl_ddr |= (1<<led_a)|(1<<led_b)|(1<<led_c)|(1<<led_d); //ABCD四个控制设为输出
 0032 81B3              in R24,0x11
 0034 806F              ori R24,240
 0036 81BB              out 0x11,R24
 0038                   .dbline 51
 0038           ;  
 0038           ;  //初始化全灭
 0038           ;  led_port = 0xFF;
 0038 8FEF              ldi R24,255
 003A 8BBB              out 0x1b,R24
 003C                   .dbline 52
 003C           ;  led_contrl_port |= (1<<led_a)|(1<<led_b)|(1<<led_c)|(1<<led_d);
 003C 82B3              in R24,0x12
 003E 806F              ori R24,240
 0040 82BB              out 0x12,R24
 0042                   .dbline -2
 0042           L11:
 0042                   .dbline 0 ; func end
 0042 0895              ret
 0044                   .dbend
 0044                   .dbfunc e display_one _display_one fV
 0044           ;           data -> R20
 0044           ;          count -> R22
                        .even
 0044           _display_one::
 0044 0E940000          xcall push_gset2
 0048 422F              mov R20,R18
 004A 602F              mov R22,R16
 004C                   .dbline -1
 004C                   .dbline 60
 004C           ; }
 004C           ; 
 004C           ; /***********************
 004C           ; ** 显示一位
 004C           ; ** 输入:count显示在第几位(3210),data 要显示的数(0~f)
 004C           ; ************************/
 004C           ; void display_one(UNS8 count, UNS8 data)
 004C           ; {
 004C                   .dbline 62
 004C           ; 
 004C           ;  led_contrl_port &= ~(1<<count); //选中对应要显示的位,从右至左,4567
 004C 01E0              ldi R16,1
 004E 162F              mov R17,R22
 0050 0E940000          xcall lsl8
 0054 202E              mov R2,R16
 0056 2094              com R2
 0058 32B2              in R3,0x12
 005A 3220              and R3,R2
 005C 32BA              out 0x12,R3
 005E                   .dbline 63
 005E           ;  led_port = led_data[data];    //显示的数
 005E 82E0              ldi R24,2
 0060 849F              mul R24,R20
 0062 F001              movw R30,R0
 0064 80E0              ldi R24,<_led_data
 0066 90E0              ldi R25,>_led_data
 0068 E80F              add R30,R24
 006A F91F              adc R31,R25
 006C 0590              lpm R0,Z+
 006E 1490              lpm R1,Z
 0070 F001              movw R30,R0
 0072 EBBB              out 0x1b,R30
 0074                   .dbline -2
 0074           L12:
 0074 0E940000          xcall pop_gset2
 0078                   .dbline 0 ; func end
 0078 0895              ret
 007A                   .dbsym r data 20 c
 007A                   .dbsym r count 22 c
 007A                   .dbend
 007A                   .dbfunc e display _display fV
 007A           ;           temp -> R20
 007A           ;           mode -> R10
 007A           ;           data -> R22,R23
                        .even
 007A           _display::
 007A 0E940000          xcall push_gset3
 007E A22E              mov R10,R18
 0080 B801              movw R22,R16
 0082                   .dbline -1
 0082                   .dbline 74
 0082           ;  
 0082           ;  //如果对位进行了调整,就不在是4567,而是对应的值
 0082           ; }
 0082           ; 
 0082           ; /***********************
 0082           ; ** 显示四位整数
 0082           ; ** 输入:要显示的四位数data,显示模式mode,1为补零显示模式,默认不显示零
 0082           ; ** 说明:可以小于四位数,mode=1时 自动补零
 0082           ; ************************/
 0082           ; void display(UNS16 data,UNS8 mode)
 0082           ; {
 0082                   .dbline 77
 0082           ; UNS8 temp;
 0082           ;  //千位
 0082           ;  if(data>=1000)
 0082 683E              cpi R22,232
 0084 E3E0              ldi R30,3
 0086 7E07              cpc R23,R30
 0088 70F0              brlo L14
 008A                   .dbline 78
 008A           ;  {//补零
 008A                   .dbline 79
 008A           ;    temp=data/1000;
 008A 28EE              ldi R18,1000
 008C 33E0              ldi R19,3
 008E 8B01              movw R16,R22
 0090 0E940000          xcall div16u
 0094 402F              mov R20,R16
 0096                   .dbline 80
 0096           ;    display_one(7,temp);
 0096 242F              mov R18,R20
 0098 07E0              ldi R16,7
 009A D4DF              xcall _display_one
 009C                   .dbline 81
 009C           ;    delay_ms(6);  //6ms 是个经验值,刚好无闪烁,并且亮度较高
 009C 06E0              ldi R16,6
 009E 10E0              ldi R17,0
 00A0 B8DF              xcall _delay_ms
 00A2                   .dbline 82
 00A2           ;    led_contrl_port |= (1<<7);
 00A2 979A              sbi 0x12,7
 00A4                   .dbline 84
 00A4           ;  
 00A4           ;  }
 00A4 0AC0              xjmp L15
 00A6           L14:
 00A6                   .dbline 86
 00A6           ;  else
 00A6           ;   {  if(mode==1)
 00A6                   .dbline 86
 00A6 8A2D              mov R24,R10
 00A8 8130              cpi R24,1
 00AA 39F4              brne L16
 00AC                   .dbline 87
 00AC           ;     {
 00AC                   .dbline 88
 00AC           ;     display_one(7,0);
 00AC 2227              clr R18
 00AE 07E0              ldi R16,7
 00B0 C9DF              xcall _display_one
 00B2                   .dbline 89
 00B2           ;     delay_ms(6);
 00B2 06E0              ldi R16,6
 00B4 10E0              ldi R17,0
 00B6 ADDF              xcall _delay_ms
 00B8                   .dbline 90
 00B8           ;     led_contrl_port |= (1<<7);
 00B8 979A              sbi 0x12,7
 00BA                   .dbline 91
 00BA           ;       }
 00BA           L16:
 00BA                   .dbline 92
 00BA           ;   } 
 00BA           L15:
 00BA                   .dbline 95
 00BA           ;  
 00BA           ;  //百位
 00BA           ;  if(data>=100)
 00BA 6436              cpi R22,100
 00BC E0E0              ldi R30,0
 00BE 7E07              cpc R23,R30
 00C0 90F0              brlo L18
 00C2                   .dbline 96
 00C2           ;  {
 00C2                   .dbline 97
 00C2           ;   temp=(data%1000)/100;
 00C2 28EE              ldi R18,1000
 00C4 33E0              ldi R19,3
 00C6 8B01              movw R16,R22
 00C8 0E940000          xcall mod16u
 00CC 24E6              ldi R18,100
 00CE 30E0              ldi R19,0
 00D0 0E940000          xcall div16u
 00D4 402F              mov R20,R16
 00D6                   .dbline 98
 00D6           ;   display_one(6,temp);
 00D6 242F              mov R18,R20
 00D8 06E0              ldi R16,6
 00DA B4DF              xcall _display_one
 00DC                   .dbline 99
 00DC           ;   delay_ms(6);
 00DC 06E0              ldi R16,6
 00DE 10E0              ldi R17,0
 00E0 98DF              xcall _delay_ms
 00E2                   .dbline 100
 00E2           ;   led_contrl_port |= (1<<6);
 00E2 969A              sbi 0x12,6
 00E4                   .dbline 101
 00E4           ;  }
 00E4 0AC0              xjmp L19
 00E6           L18:
 00E6                   .dbline 103
 00E6           ;  else
 00E6           ;  {
 00E6                   .dbline 104
 00E6           ;   if(mode==1)
 00E6 8A2D              mov R24,R10
 00E8 8130              cpi R24,1
 00EA 39F4              brne L20
 00EC                   .dbline 105
 00EC           ;   {
 00EC                   .dbline 106
 00EC           ;   display_one(6,0);
 00EC 2227              clr R18
 00EE 06E0              ldi R16,6
 00F0 A9DF              xcall _display_one
 00F2                   .dbline 107
 00F2           ;   delay_ms(6);
 00F2 06E0              ldi R16,6
 00F4 10E0              ldi R17,0
 00F6 8DDF              xcall _delay_ms
 00F8                   .dbline 108
 00F8           ;   led_contrl_port |= (1<<6);
 00F8 969A              sbi 0x12,6

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -