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

📄 disp.lis

📁 电压计(c语言编写的) 通过led灯显示 电路图说明: 1、R1、R2、D1、D2 组成发光二极管显示
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 00E0 00D0              rcall mod16s
 00E2 E02F              mov R30,R16
 00E4 F12F              mov R31,R17
 00E6 80E0              ldi R24,<_disp_table
 00E8 90E0              ldi R25,>_disp_table
 00EA E80F              add R30,R24
 00EC F91F              adc R31,R25
 00EE 0081              ldd R16,z+0
 00F0 C2DF              rcall _send_byte
 00F2           L21:
 00F2                   .dbline 67
 00F2 6395              inc R22
 00F4           L23:
 00F4                   .dbline 67
 00F4 6B30              cpi R22,11
 00F6 80F3              brlo L20
 00F8                   .dbline 69
 00F8           ;                       send_byte(disp_table[buffer%10]);//显示数字
 00F8           ;                       break;
 00F8 5BC0              rjmp L17
 00FA           L24:
 00FA                   .dbline 72
 00FA           ;               }
 00FA           ;               case 1:         //control为1,显示count中的数据为6位
 00FA           ;               {
 00FA                   .dbline 73
 00FA           ;                       tempcount=count;
 00FA 40910100          lds R20,_count
 00FE 50910200          lds R21,_count+1
 0102                   .dbline 74
 0102           ;                       for(i=0;i<6;i++)   //取出每位中的数据
 0102 6627              clr R22
 0104 14C0              rjmp L28
 0106           L25:
 0106                   .dbline 75
 0106                   .dbline 76
 0106 2AE0              ldi R18,10
 0108 30E0              ldi R19,0
 010A 042F              mov R16,R20
 010C 152F              mov R17,R21
 010E 00D0              rcall mod16u
 0110 8C2F              mov R24,R28
 0112 9D2F              mov R25,R29
 0114 E62F              mov R30,R22
 0116 FF27              clr R31
 0118 E80F              add R30,R24
 011A F91F              adc R31,R25
 011C 0083              std z+0,R16
 011E                   .dbline 77
 011E 2AE0              ldi R18,10
 0120 30E0              ldi R19,0
 0122 042F              mov R16,R20
 0124 152F              mov R17,R21
 0126 00D0              rcall div16u
 0128 402F              mov R20,R16
 012A 512F              mov R21,R17
 012C                   .dbline 78
 012C           L26:
 012C                   .dbline 74
 012C 6395              inc R22
 012E           L28:
 012E                   .dbline 74
 012E 6630              cpi R22,6
 0130 50F3              brlo L25
 0132                   .dbline 79
 0132           ;                       {
 0132           ;                               temp[i]=tempcount%10;
 0132           ;                               tempcount/=10;
 0132           ;                       }
 0132           ;                       send_byte(disp_table[buffer/10]);  //最开始显示buffer数据
 0132 2AE0              ldi R18,10
 0134 30E0              ldi R19,0
 0136 0A2D              mov R16,R10
 0138 1127              clr R17
 013A 00D0              rcall div16s
 013C E02F              mov R30,R16
 013E F12F              mov R31,R17
 0140 80E0              ldi R24,<_disp_table
 0142 90E0              ldi R25,>_disp_table
 0144 E80F              add R30,R24
 0146 F91F              adc R31,R25
 0148 0081              ldd R16,z+0
 014A 95DF              rcall _send_byte
 014C                   .dbline 80
 014C           ;                       send_byte(disp_table[buffer%10]);
 014C 2AE0              ldi R18,10
 014E 30E0              ldi R19,0
 0150 0A2D              mov R16,R10
 0152 1127              clr R17
 0154 00D0              rcall mod16s
 0156 E02F              mov R30,R16
 0158 F12F              mov R31,R17
 015A 80E0              ldi R24,<_disp_table
 015C 90E0              ldi R25,>_disp_table
 015E E80F              add R30,R24
 0160 F91F              adc R31,R25
 0162 0081              ldd R16,z+0
 0164 88DF              rcall _send_byte
 0166                   .dbline 81
 0166           ;                       send_byte(0x00);          
 0166 0027              clr R16
 0168 86DF              rcall _send_byte
 016A                   .dbline 82
 016A           ;                       send_byte(0x00);
 016A 0027              clr R16
 016C 84DF              rcall _send_byte
 016E                   .dbline 83
 016E           ;                       send_byte(0x00);
 016E 0027              clr R16
 0170 82DF              rcall _send_byte
 0172                   .dbline 84
 0172           ;                       for(i=0;i<6;i++)
 0172 6627              clr R22
 0174 1BC0              rjmp L32
 0176           L29:
 0176                   .dbline 85
 0176           ;                       {    
 0176                   .dbline 86
 0176           ;                           if(i==4)
 0176 6430              cpi R22,4
 0178 19F4              brne L33
 017A                   .dbline 87
 017A           ;                               dp=1;       //小数点控制位
 017A 81E0              ldi R24,1
 017C 80930000          sts _dp,R24
 0180           L33:
 0180                   .dbline 88
 0180 262E              mov R2,R22
 0182 3324              clr R3
 0184 E5E0              ldi R30,5
 0186 F0E0              ldi R31,0
 0188 E219              sub R30,R2
 018A F309              sbc R31,R3
 018C 8C2F              mov R24,R28
 018E 9D2F              mov R25,R29
 0190 E80F              add R30,R24
 0192 F91F              adc R31,R25
 0194 E081              ldd R30,z+0
 0196 FF27              clr R31
 0198 80E0              ldi R24,<_disp_table
 019A 90E0              ldi R25,>_disp_table
 019C E80F              add R30,R24
 019E F91F              adc R31,R25
 01A0 0081              ldd R16,z+0
 01A2 69DF              rcall _send_byte
 01A4                   .dbline 89
 01A4 2224              clr R2
 01A6 20920000          sts _dp,R2
 01AA                   .dbline 90
 01AA           L30:
 01AA                   .dbline 84
 01AA 6395              inc R22
 01AC           L32:
 01AC                   .dbline 84
 01AC 6630              cpi R22,6
 01AE 18F3              brlo L29
 01B0                   .dbline 91
 01B0           ;                           send_byte(disp_table[temp[5-i]]);
 01B0           ;                               dp=0;
 01B0           ;                       }
 01B0           ;                       break;
 01B0           L16:
 01B0           L17:
 01B0                   .dbline 94
 01B0           ;               }
 01B0           ;       }
 01B0           ;       PORTC=1<<4;
 01B0 80E1              ldi R24,16
 01B2 85BB              out 0x15,R24
 01B4                   .dbline -2
 01B4                   .dbline 95
 01B4           ; }
 01B4           L15:
 01B4 2696              adiw R28,6
 01B6 00D0              rcall pop_gset3
 01B8                   .dbline 0 ; func end
 01B8 0895              ret
 01BA                   .dbsym l temp 0 A[6:6]c
 01BA                   .dbsym r tempcount 20 i
 01BA                   .dbsym r i 22 c
 01BA                   .dbsym r control 20 c
 01BA                   .dbsym r buffer 10 c
 01BA                   .dbend
 01BA                   .dbfunc e delay_1ms _delay_1ms fV
 01BA           ;              i -> R16,R17
                        .even
 01BA           _delay_1ms::
 01BA                   .dbline -1
 01BA                   .dbline 97
 01BA           ; void delay_1ms(void)//1ms延时函数
 01BA           ; {
 01BA                   .dbline 99
 01BA 0027              clr R16
 01BC 1127              clr R17
 01BE 02C0              rjmp L39
 01C0           L36:
 01C0                   .dbline 99
 01C0           L37:
 01C0                   .dbline 99
 01C0 0F5F              subi R16,255  ; offset = 1
 01C2 1F4F              sbci R17,255
 01C4           L39:
 01C4                   .dbline 99
 01C4           ;   unsigned int i;
 01C4           ;   for (i=0;i<150;i++);
 01C4 0639              cpi R16,150
 01C6 E0E0              ldi R30,0
 01C8 1E07              cpc R17,R30
 01CA D0F3              brlo L36
 01CC                   .dbline 100
 01CC           ;   WDR();    //清看门狗
 01CC A895              wdr
 01CE                   .dbline -2
 01CE                   .dbline 101
 01CE           ; }
 01CE           L35:
 01CE                   .dbline 0 ; func end
 01CE 0895              ret
 01D0                   .dbsym r i 16 i
 01D0                   .dbend
 01D0                   .dbfunc e delay_nms _delay_nms fV
 01D0           ;              i -> R20,R21
 01D0           ;              n -> R22,R23
                        .even
 01D0           _delay_nms::
 01D0 00D0              rcall push_gset2
 01D2 602F              mov R22,R16
 01D4 712F              mov R23,R17
 01D6                   .dbline -1
 01D6                   .dbline 103
 01D6           ; void delay_nms(unsigned int n)//延时n毫秒
 01D6           ; {
 01D6                   .dbline 105
 01D6           ;   unsigned int i;
 01D6           ;   for (i=0;i<n;i++)//执行n次1毫秒延时
 01D6 4427              clr R20
 01D8 5527              clr R21
 01DA 03C0              rjmp L44
 01DC           L41:
 01DC                   .dbline 106
 01DC EEDF              rcall _delay_1ms
 01DE           L42:
 01DE                   .dbline 105
 01DE 4F5F              subi R20,255  ; offset = 1
 01E0 5F4F              sbci R21,255
 01E2           L44:
 01E2                   .dbline 105
 01E2 4617              cp R20,R22
 01E4 5707              cpc R21,R23
 01E6 D0F3              brlo L41
 01E8                   .dbline -2
 01E8                   .dbline 107
 01E8           ;   delay_1ms(); 
 01E8           ; }
 01E8           L40:
 01E8 00D0              rcall pop_gset2
 01EA                   .dbline 0 ; func end
 01EA 0895              ret
 01EC                   .dbsym r i 20 i
 01EC                   .dbsym r n 22 i
 01EC                   .dbend
                        .area vector(rom, abs)
                        .org 28
 001C F6C0              rjmp _adc_isr
                        .area text(rom, con, rel)
 01EC                   .dbfile E:\avrc\disp.c
 01EC                   .dbfunc e adc_isr _adc_isr fV
                        .even
 01EC           _adc_isr::
 01EC 8A93              st -y,R24
 01EE 8FB7              in R24,0x3f
 01F0 8A93              st -y,R24
 01F2                   .dbline -1
 01F2                   .dbline 111
 01F2           ; //ADC完成中断
 01F2           ; #pragma interrupt_handler adc_isr:iv_ADC     
 01F2           ; void adc_isr(void)
 01F2           ; {
 01F2                   .dbline 112
 01F2           ;  ADMUX =(1<<REFS0)|(1<<REFS1)|(1<<MUX1)|(1<<MUX0);
 01F2 83EC              ldi R24,195
 01F4 87B9              out 0x7,R24
 01F6                   .dbline 113
 01F6           ;  ADCSRA|=(1<<ADSC);//启动AD转换
 01F6 369A              sbi 0x6,6
 01F8                   .dbline -2
 01F8                   .dbline 114
 01F8           ; }
 01F8           L45:
 01F8 8991              ld R24,y+
 01FA 8FBF              out 0x3f,R24
 01FC 8991              ld R24,y+
 01FE                   .dbline 0 ; func end
 01FE 1895              reti
 0200                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile E:\avrc\disp.c
 0000           _dp::
 0000                   .blkb 1
 0001                   .dbsym e dp _dp c
 0001           _count::
 0001                   .blkb 2
 0003                   .dbsym e count _count i

⌨️ 快捷键说明

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