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

📄 disp.lis

📁 电压计(c语言编写的) 通过led灯显示 电路图说明: 1、R1、R2、D1、D2 组成发光二极管显示
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module disp.c
                        .area data(ram, con, rel)
 0000           _disp_table::
 0000                   .blkb 2
                        .area idata
 0000 3F06              .byte 63,6
                        .area data(ram, con, rel)
 0002                   .blkb 2
                        .area idata
 0002 5B4F              .byte 91,'O
                        .area data(ram, con, rel)
 0004                   .blkb 2
                        .area idata
 0004 666D              .byte 'f,'m
                        .area data(ram, con, rel)
 0006                   .blkb 2
                        .area idata
 0006 7D07              .byte 125,7
                        .area data(ram, con, rel)
 0008                   .blkb 2
                        .area idata
 0008 7F6F              .byte 127,'o
                        .area data(ram, con, rel)
 000A                   .blkb 2
                        .area idata
 000A 777C              .byte 'w,124
                        .area data(ram, con, rel)
 000C                   .blkb 2
                        .area idata
 000C 395E              .byte 57,94
                        .area data(ram, con, rel)
 000E                   .blkb 2
                        .area idata
 000E 7971              .byte 'y,'q
                        .area data(ram, con, rel)
 0010                   .dbfile E:\avrc\disp.c
 0010                   .dbsym e disp_table _disp_table A[16:16]c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\avrc\disp.c
 0000                   .dbfunc e main _main fV
 0000           ;              i -> <dead>
 0000           ;              j -> R20,R21
                        .even
 0000           _main::
 0000                   .dbline -1
 0000                   .dbline 16
 0000           ; #include <iom8v.h> //和单片机类型相对应的头文件,选择Atmega8做实验;
 0000           ; #include <macros.h>
 0000           ; #include <stdio.h>
 0000           ; #define uchar unsigned char
 0000           ; #define uint unsigned int
 0000           ; void send_byte(uchar x);
 0000           ; void disp_led(uchar buffer,uchar control);
 0000           ; void delay_1ms(void); 
 0000           ; void delay_nms(unsigned int n);
 0000           ; uchar  disp_table[16] = {
 0000           ;       0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
 0000           ;       0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
 0000           ; uint count;
 0000           ; uchar dp;
 0000           ; void main(void)
 0000           ; {   
 0000                   .dbline 19
 0000           ;     uint i;
 0000           ;       int j;
 0000           ;       disp_led(0,0);//显示0
 0000 2227              clr R18
 0002 0027              clr R16
 0004 57D0              rcall _disp_led
 0006                   .dbline 20
 0006           ;       OSCCAL=0X9d; //系统时钟校准,不同的芯片和不同的频率,
 0006 8DE9              ldi R24,157
 0008 81BF              out 0x31,R24
 000A                   .dbline 21
 000A           ;       DDRB=0x03;   //定义B口的PB0、PB1为输出口
 000A 83E0              ldi R24,3
 000C 87BB              out 0x17,R24
 000E                   .dbline 22
 000E           ;       DDRC=0x30;   //定义C口的PC4和PC5为输出口
 000E 80E3              ldi R24,48
 0010 84BB              out 0x14,R24
 0012                   .dbline 23
 0012           ;       WDR();       //看门狗计数清零
 0012 A895              wdr
 0014                   .dbline 24
 0014           ;     WDTCR=0x0F;  //使能watchdog,并且,采用2048K分频,典型溢出时间5V时2.1S
 0014 8FE0              ldi R24,15
 0016 81BD              out 0x21,R24
 0018                   .dbline 25
 0018           ;     ADCSRA=0X00;    
 0018 2224              clr R2
 001A 26B8              out 0x6,R2
 001C                   .dbline 26
 001C           ;     ADMUX =(1<<REFS0)|(1<<REFS1)|(1<<MUX1)|(1<<MUX0); //采用内部2.56参考电压,ADC3输入
 001C 83EC              ldi R24,195
 001E 87B9              out 0x7,R24
 0020                   .dbline 27
 0020           ;     ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1) ;//ADC转换 64分频
 0020 8EEC              ldi R24,206
 0022 86B9              out 0x6,R24
 0024                   .dbline 28
 0024           ;       SEI();       //开放中断
 0024 7894              sei
 0026                   .dbline 30
 0026           ;       //delay_nms(5000); //延时5秒
 0026           ;       PORTB=0B00000010; //PB1口输出高电平,PB0口输出低电平,关闭绿灯,红灯亮
 0026 82E0              ldi R24,2
 0028 88BB              out 0x18,R24
 002A                   .dbline 31
 002A           ;       delay_nms(500); //延时1秒
 002A 04EF              ldi R16,500
 002C 11E0              ldi R17,1
 002E D0D0              rcall _delay_nms
 0030 20C0              rjmp L3
 0032           L2:
 0032                   .dbline 33
 0032           ;       while(1) 
 0032           ;      {       
 0032                   .dbline 34
 0032           ;                PORTB=0B00000010;
 0032 82E0              ldi R24,2
 0034 88BB              out 0x18,R24
 0036                   .dbline 35
 0036           ;                        delay_nms(100); //延时0.1左右
 0036 04E6              ldi R16,100
 0038 10E0              ldi R17,0
 003A CAD0              rcall _delay_nms
 003C                   .dbline 36
 003C           ;                        j=((25600/1023)*(ADCH*256+ADCL))/1000;//数据计算
 003C 24B0              in R2,0x4
 003E 35B0              in R3,0x5
 0040 332D              mov R19,R3
 0042 222D              mov R18,R2
 0044 09E1              ldi R16,25
 0046 10E0              ldi R17,0
 0048 00D0              rcall mpy16s
 004A 28EE              ldi R18,1000
 004C 33E0              ldi R19,3
 004E 00D0              rcall div16s
 0050 402F              mov R20,R16
 0052 512F              mov R21,R17
 0054                   .dbline 37
 0054           ;                        count=j;
 0054 50930200          sts _count+1,R21
 0058 40930100          sts _count,R20
 005C                   .dbline 38
 005C           ;                        if(j>24)
 005C 88E1              ldi R24,24
 005E 90E0              ldi R25,0
 0060 8017              cp R24,R16
 0062 9107              cpc R25,R17
 0064 14F4              brge L5
 0066                   .dbline 39
 0066           ;                        PORTB=0B00000011; //翻转PB0和PB1口 过压或过流显示
 0066 83E0              ldi R24,3
 0068 88BB              out 0x18,R24
 006A           L5:
 006A                   .dbline 40
 006A 21E0              ldi R18,1
 006C 0027              clr R16
 006E 22D0              rcall _disp_led
 0070                   .dbline 41
 0070 A895              wdr
 0072                   .dbline 42
 0072           L3:
 0072                   .dbline 32
 0072 DFCF              rjmp L2
 0074           X0:
 0074                   .dbline -2
 0074                   .dbline 43
 0074           ;                        disp_led(0,1);  //显示数据
 0074           ;                        WDR();          //清看门狗
 0074           ;     }
 0074           ; }
 0074           L1:
 0074                   .dbline 0 ; func end
 0074 0895              ret
 0076                   .dbsym l i 1 i
 0076                   .dbsym r j 20 I
 0076                   .dbend
 0076                   .dbfunc e send_byte _send_byte fV
 0076           ;              i -> R20
 0076           ;              x -> R22
                        .even
 0076           _send_byte::
 0076 00D0              rcall push_gset2
 0078 602F              mov R22,R16
 007A                   .dbline -1
 007A                   .dbline 45
 007A           ; void send_byte(uchar x)
 007A           ; {
 007A                   .dbline 47
 007A           ;       uchar i;
 007A           ;       for(i=0;i<8;i++)
 007A 4427              clr R20
 007C 17C0              rjmp L11
 007E           L8:
 007E                   .dbline 48
 007E           ;       {
 007E                   .dbline 49
 007E           ;               PORTC=0<<5;   // PC5为底  为164提供时钟信号
 007E 2224              clr R2
 0080 25BA              out 0x15,R2
 0082                   .dbline 50
 0082           ;               if((x&(1<<(7-i)))||((dp==1)&&(i==0))) //判断每位数据的电平,及小数点判断
 0082 17E0              ldi R17,7
 0084 141B              sub R17,R20
 0086 01E0              ldi R16,1
 0088 00D0              rcall lsl8
 008A 262E              mov R2,R22
 008C 2022              and R2,R16
 008E 31F4              brne L14
 0090 80910000          lds R24,_dp
 0094 8130              cpi R24,1
 0096 29F4              brne L12
 0098 4423              tst R20
 009A 19F4              brne L12
 009C           L14:
 009C                   .dbline 51
 009C           ;               PORTC=1<<4;                           //若为高着PC4输出高电平   
 009C 80E1              ldi R24,16
 009E 85BB              out 0x15,R24
 00A0 02C0              rjmp L13
 00A2           L12:
 00A2                   .dbline 53
 00A2           ;               else
 00A2           ;               PORTC=0<<4;                           //若为低着输出低电平
 00A2 2224              clr R2
 00A4 25BA              out 0x15,R2
 00A6           L13:
 00A6                   .dbline 54
 00A6 80E2              ldi R24,32
 00A8 85BB              out 0x15,R24
 00AA                   .dbline 55
 00AA           L9:
 00AA                   .dbline 47
 00AA 4395              inc R20
 00AC           L11:
 00AC                   .dbline 47
 00AC 4830              cpi R20,8
 00AE 38F3              brlo L8
 00B0                   .dbline -2
 00B0                   .dbline 56
 00B0           ;               PORTC=1<<5;   //PC5 提供始终信号
 00B0           ;       }
 00B0           ; }
 00B0           L7:
 00B0 00D0              rcall pop_gset2
 00B2                   .dbline 0 ; func end
 00B2 0895              ret
 00B4                   .dbsym r i 20 c
 00B4                   .dbsym r x 22 c
 00B4                   .dbend
 00B4                   .dbfunc e disp_led _disp_led fV
 00B4           ;           temp -> y+0
 00B4           ;      tempcount -> R20,R21
 00B4           ;              i -> R22
 00B4           ;        control -> R20
 00B4           ;         buffer -> R10
                        .even
 00B4           _disp_led::
 00B4 00D0              rcall push_gset3
 00B6 422F              mov R20,R18
 00B8 A02E              mov R10,R16
 00BA 2697              sbiw R28,6
 00BC                   .dbline -1
 00BC                   .dbline 59
 00BC           ; //显示程序 CONTROL为控制显示 BUFFER为显示数据
 00BC           ; void disp_led(uchar buffer,uchar control)
 00BC           ; {
 00BC                   .dbline 62
 00BC           ;       uchar i,temp[6];
 00BC           ;       uint tempcount;
 00BC           ;       dp=0;
 00BC 2224              clr R2
 00BE 20920000          sts _dp,R2
 00C2                   .dbline 63
 00C2           ;       switch(control)
 00C2 5527              clr R21
 00C4 4030              cpi R20,0
 00C6 4507              cpc R20,R21
 00C8 29F0              breq L19
 00CA           X1:
 00CA 4130              cpi R20,1
 00CC E0E0              ldi R30,0
 00CE 5E07              cpc R21,R30
 00D0 A1F0              breq L24
 00D2 6EC0              rjmp L16
 00D4           X2:
 00D4                   .dbline 64
 00D4           ;       {
 00D4           L19:
 00D4                   .dbline 66
 00D4           ;               case 0:         //CONTROL为零全部数码管显示buffer  
 00D4           ;               {
 00D4                   .dbline 67
 00D4           ;                       for(i=0;i<11;i++)
 00D4 6627              clr R22
 00D6 0EC0              rjmp L23
 00D8           L20:
 00D8                   .dbline 68
 00D8 2AE0              ldi R18,10
 00DA 30E0              ldi R19,0
 00DC 0A2D              mov R16,R10
 00DE 1127              clr R17

⌨️ 快捷键说明

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