segdisp-16sn.lis
来自「大量ATMEGA16实例, 都可以运行,包括驱动LCD1602, 上位机显示等多」· LIS 代码 · 共 800 行 · 第 1/3 页
LIS
800 行
0146 .dbline 76
0146 ; data=data%1000;
0146 28EE ldi R18,1000
0148 33E0 ldi R19,3
014A 8A01 movw R16,R20
014C 0E940000 xcall mod16s
0150 A801 movw R20,R16
0152 .dbline 77
0152 ; }
0152 L24:
0152 .dbline 78
0152 ; if(data>=100)
0152 4436 cpi R20,100
0154 E0E0 ldi R30,0
0156 5E07 cpc R21,R30
0158 6CF0 brlt L26
015A X10:
015A .dbline 79
015A ; {
015A .dbline 80
015A ; BCD2=data/100;
015A 24E6 ldi R18,100
015C 30E0 ldi R19,0
015E 8A01 movw R16,R20
0160 0E940000 xcall div16s
0164 00930400 sts _BCD2,R16
0168 .dbline 81
0168 ; data=data%100;
0168 24E6 ldi R18,100
016A 30E0 ldi R19,0
016C 8A01 movw R16,R20
016E 0E940000 xcall mod16s
0172 A801 movw R20,R16
0174 .dbline 82
0174 ; }
0174 L26:
0174 .dbline 84
0174 ;
0174 ; if(data>=10)
0174 4A30 cpi R20,10
0176 E0E0 ldi R30,0
0178 5E07 cpc R21,R30
017A 6CF0 brlt L28
017C X11:
017C .dbline 85
017C ; {
017C .dbline 86
017C ; BCD1=data/10;
017C 2AE0 ldi R18,10
017E 30E0 ldi R19,0
0180 8A01 movw R16,R20
0182 0E940000 xcall div16s
0186 00930500 sts _BCD1,R16
018A .dbline 87
018A ; data=data%10;
018A 2AE0 ldi R18,10
018C 30E0 ldi R19,0
018E 8A01 movw R16,R20
0190 0E940000 xcall mod16s
0194 A801 movw R20,R16
0196 .dbline 88
0196 ; }
0196 L28:
0196 .dbline 89
0196 ; BCD0=data;
0196 40930600 sts _BCD0,R20
019A .dbline -2
019A L21:
019A .dbline 0 ; func end
019A 5991 ld R21,y+
019C 4991 ld R20,y+
019E 0895 ret
01A0 .dbsym r data 20 I
01A0 .dbend
01A0 .dbfunc e dispseg _dispseg fV
.even
01A0 _dispseg::
01A0 .dbline -1
01A0 .dbline 93
01A0 ; }
01A0 ;
01A0 ; void dispseg(void)
01A0 ; {
01A0 .dbline 94
01A0 ; PORTB=~segconv[BCD0];
01A0 80E0 ldi R24,<_segconv
01A2 90E0 ldi R25,>_segconv
01A4 E0910600 lds R30,_BCD0
01A8 FF27 clr R31
01AA E80F add R30,R24
01AC F91F adc R31,R25
01AE 2080 ldd R2,z+0
01B0 2094 com R2
01B2 28BA out 0x18,R2
01B4 .dbline 95
01B4 ; PORTA=dig0;
01B4 E0E0 ldi R30,<_dig0
01B6 F0E0 ldi R31,>_dig0
01B8 2690 elpm R2,Z
01BA 2BBA out 0x1b,R2
01BC .dbline 96
01BC ; led_disp();
01BC 37DF xcall _led_disp
01BE .dbline 97
01BE ; PORTB=~segconv[BCD1];
01BE 80E0 ldi R24,<_segconv
01C0 90E0 ldi R25,>_segconv
01C2 E0910500 lds R30,_BCD1
01C6 FF27 clr R31
01C8 E80F add R30,R24
01CA F91F adc R31,R25
01CC 2080 ldd R2,z+0
01CE 2094 com R2
01D0 28BA out 0x18,R2
01D2 .dbline 98
01D2 ; PORTA=dig1;
01D2 E0E0 ldi R30,<_dig1
01D4 F0E0 ldi R31,>_dig1
01D6 2690 elpm R2,Z
01D8 2BBA out 0x1b,R2
01DA .dbline 99
01DA ; led_disp();
01DA 28DF xcall _led_disp
01DC .dbline 100
01DC ; PORTB=~segconv[BCD2];
01DC 80E0 ldi R24,<_segconv
01DE 90E0 ldi R25,>_segconv
01E0 E0910400 lds R30,_BCD2
01E4 FF27 clr R31
01E6 E80F add R30,R24
01E8 F91F adc R31,R25
01EA 2080 ldd R2,z+0
01EC 2094 com R2
01EE 28BA out 0x18,R2
01F0 .dbline 101
01F0 ; PORTA=dig2;
01F0 E0E0 ldi R30,<_dig2
01F2 F0E0 ldi R31,>_dig2
01F4 2690 elpm R2,Z
01F6 2BBA out 0x1b,R2
01F8 .dbline 102
01F8 ; led_disp();
01F8 19DF xcall _led_disp
01FA .dbline 103
01FA ; PORTB=~segconv[BCD3];
01FA 80E0 ldi R24,<_segconv
01FC 90E0 ldi R25,>_segconv
01FE E0910300 lds R30,_BCD3
0202 FF27 clr R31
0204 E80F add R30,R24
0206 F91F adc R31,R25
0208 2080 ldd R2,z+0
020A 2094 com R2
020C 28BA out 0x18,R2
020E .dbline 104
020E ; PORTA=dig3;
020E E0E0 ldi R30,<_dig3
0210 F0E0 ldi R31,>_dig3
0212 2690 elpm R2,Z
0214 2BBA out 0x1b,R2
0216 .dbline 105
0216 ; led_disp();
0216 0ADF xcall _led_disp
0218 .dbline 106
0218 ; time_over++;
0218 80910C00 lds R24,_time_over
021C 90910D00 lds R25,_time_over+1
0220 0196 adiw R24,1
0222 90930D00 sts _time_over+1,R25
0226 80930C00 sts _time_over,R24
022A .dbline 107
022A ; if(time_over>10)
022A 8AE0 ldi R24,10
022C 90E0 ldi R25,0
022E 20900C00 lds R2,_time_over
0232 30900D00 lds R3,_time_over+1
0236 8215 cp R24,R2
0238 9305 cpc R25,R3
023A 34F4 brge L31
023C X12:
023C .dbline 108
023C ; time_over=0;
023C 2224 clr R2
023E 3324 clr R3
0240 30920D00 sts _time_over+1,R3
0244 20920C00 sts _time_over,R2
0248 L31:
0248 .dbline -2
0248 L30:
0248 .dbline 0 ; func end
0248 0895 ret
024A .dbend
024A .dbfunc e dot_on _dot_on fV
.even
024A _dot_on::
024A .dbline -1
024A .dbline 112
024A ; }
024A ;
024A ; void dot_on(void)
024A ; {
024A .dbline 113
024A ; PORTB=~0x80;
024A 8FE7 ldi R24,-129
024C 9FEF ldi R25,-1
024E 88BB out 0x18,R24
0250 .dbline 114
0250 ; PORTA=dot;
0250 E0E0 ldi R30,<_dot
0252 F0E0 ldi R31,>_dot
0254 2690 elpm R2,Z
0256 2BBA out 0x1b,R2
0258 .dbline 115
0258 ; delay(20);
0258 04E1 ldi R16,20
025A 10E0 ldi R17,0
025C D1DE xcall _delay
025E .dbline -2
025E L33:
025E .dbline 0 ; func end
025E 0895 ret
0260 .dbend
.area bss(ram, con, rel)
0000 .dbfile C:\+samples-16small\DEMOA-16sm\SegDisp-16sn.c
0000 _swin3::
0000 .blkb 1
0001 .dbsym e swin3 _swin3 c
0001 _count::
0001 .blkb 2
0003 .dbsym e count _count I
0003 _BCD3::
0003 .blkb 1
0004 .dbsym e BCD3 _BCD3 c
0004 _BCD2::
0004 .blkb 1
0005 .dbsym e BCD2 _BCD2 c
0005 _BCD1::
0005 .blkb 1
0006 .dbsym e BCD1 _BCD1 c
0006 _BCD0::
0006 .blkb 1
0007 .dbsym e BCD0 _BCD0 c
0007 ; }
0007 ;
0007 ;
0007 ; //*****************************************************************
0007 ; /*
0007 ; void main(void)
0007 ; {
0007 ; unsigned char outa=0x00, outb=0x00, outc=0x00, outd=0x00;
0007 ; unsigned char dswin;
0007 ; port_init();
0007 ; while(1)
0007 ; {
0007 ; WDR(); //Watchdog reset
0007 ; dswin=PINC;
0007 ; //dswin=1234;
0007 ; BinToBCD(dswin);
0007 ; dispseg();
0007 ; dot_on();
0007 ; PORTD=0x55;
0007 ; //PORTB=dswin;
0007 ; delay(5);
0007 ; }
0007 ; }*/
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?