atmega16_8led.lis
来自「AVR单片机来驱动8位数码管」· LIS 代码 · 共 731 行 · 第 1/2 页
LIS
731 行
0108 ; temp=count%10;
0108 ; display_buff[i]=tab[temp];
0108 ; count=count/10;
0108 ; }
0108 ; }
0108 ; //发送一个字节
0108 ; void write_595 (uchar data)
0108 ; {
0108 .dbline 61
0108 ; uchar i,temp;
0108 ; temp=data;
0108 402F mov R20,R16
010A .dbline 62
010A ; for (i=0;i<8;i++)
010A 6627 clr R22
010C 09C0 xjmp L28
010E L25:
010E .dbline 63
010E ; {
010E .dbline 64
010E ; CLK_0;
010E D898 cbi 0x1b,0
0110 .dbline 65
0110 ; if (temp&0x80)DAT_1;
0110 47FF sbrs R20,7
0112 02C0 rjmp L29
0114 .dbline 65
0114 DA9A sbi 0x1b,2
0116 01C0 xjmp L30
0118 L29:
0118 .dbline 66
0118 ; else DAT_0;
0118 DA98 cbi 0x1b,2
011A L30:
011A .dbline 67
011A 440F lsl R20
011C .dbline 68
011C D89A sbi 0x1b,0
011E .dbline 69
011E L26:
011E .dbline 62
011E 6395 inc R22
0120 L28:
0120 .dbline 62
0120 6830 cpi R22,8
0122 A8F3 brlo L25
0124 .dbline -2
0124 L24:
0124 0E940000 xcall pop_gset2
0128 .dbline 0 ; func end
0128 0895 ret
012A .dbsym r temp 20 c
012A .dbsym r i 22 c
012A .dbsym r data 16 c
012A .dbend
012A .dbfunc e out_595 _out_595 fV
.even
012A _out_595::
012A .dbline -1
012A .dbline 73
012A ; temp<<=1;
012A ; CLK_1;
012A ; }
012A ; }
012A ;
012A ; void out_595 ()
012A ; {
012A .dbline 74
012A ; RCLK_0;
012A D998 cbi 0x1b,1
012C .dbline 75
012C ; RCLK_1;
012C D99A sbi 0x1b,1
012E .dbline -2
012E L31:
012E .dbline 0 ; func end
012E 0895 ret
0130 .dbend
0130 .dbfunc e display _display fV
0130 ; i -> R20
.even
0130 _display::
0130 0E940000 xcall push_gset1
0134 .dbline -1
0134 .dbline 80
0134 ; }
0134 ;
0134 ; //发送并显示四个字节
0134 ; void display ()
0134 ; {
0134 .dbline 82
0134 ; uchar i;
0134 ; for (i=0;i<4;i++)
0134 4427 clr R20
0136 15C0 xjmp L36
0138 L33:
0138 .dbline 83
0138 .dbline 84
0138 80E0 ldi R24,<_seg
013A 90E0 ldi R25,>_seg
013C E42F mov R30,R20
013E FF27 clr R31
0140 E80F add R30,R24
0142 F91F adc R31,R25
0144 0491 lpm R16,Z
0146 DEDF xcall _write_595
0148 .dbline 85
0148 80E0 ldi R24,<_display_buff
014A 90E0 ldi R25,>_display_buff
014C E42F mov R30,R20
014E FF27 clr R31
0150 E80F add R30,R24
0152 F91F adc R31,R25
0154 0081 ldd R16,z+0
0156 D6DF xcall _write_595
0158 .dbline 86
0158 E8DF xcall _out_595
015A .dbline 87
015A 02E0 ldi R16,2
015C 10E0 ldi R17,0
015E 6BDF xcall _delay_nms
0160 .dbline 88
0160 L34:
0160 .dbline 82
0160 4395 inc R20
0162 L36:
0162 .dbline 82
0162 4430 cpi R20,4
0164 48F3 brlo L33
0166 .dbline -2
0166 L32:
0166 0E940000 xcall pop_gset1
016A .dbline 0 ; func end
016A 0895 ret
016C .dbsym r i 20 c
016C .dbend
016C .dbfunc e display_off _display_off fV
016C ; i -> R20
.even
016C _display_off::
016C 0E940000 xcall push_gset1
0170 .dbline -1
0170 .dbline 92
0170 ; {
0170 ; write_595 (seg[i]);
0170 ; write_595 (display_buff[i]);
0170 ; out_595 ();
0170 ; delay_nms (2);
0170 ; }
0170 ; }
0170 ;
0170 ; void display_off ()
0170 ; {
0170 .dbline 94
0170 ; uchar i;
0170 ; for (i=0;i<4;i++)
0170 4427 clr R20
0172 15C0 xjmp L41
0174 L38:
0174 .dbline 95
0174 .dbline 96
0174 80E0 ldi R24,<_seg
0176 90E0 ldi R25,>_seg
0178 E42F mov R30,R20
017A FF27 clr R31
017C E80F add R30,R24
017E F91F adc R31,R25
0180 0491 lpm R16,Z
0182 C0DF xcall _write_595
0184 .dbline 97
0184 80E0 ldi R24,<_off
0186 90E0 ldi R25,>_off
0188 E42F mov R30,R20
018A FF27 clr R31
018C E80F add R30,R24
018E F91F adc R31,R25
0190 0491 lpm R16,Z
0192 B8DF xcall _write_595
0194 .dbline 98
0194 CADF xcall _out_595
0196 .dbline 99
0196 02E0 ldi R16,2
0198 10E0 ldi R17,0
019A 4DDF xcall _delay_nms
019C .dbline 100
019C L39:
019C .dbline 94
019C 4395 inc R20
019E L41:
019E .dbline 94
019E 4430 cpi R20,4
01A0 48F3 brlo L38
01A2 .dbline -2
01A2 L37:
01A2 0E940000 xcall pop_gset1
01A6 .dbline 0 ; func end
01A6 0895 ret
01A8 .dbsym r i 20 c
01A8 .dbend
01A8 .dbfunc e display_on _display_on fV
01A8 ; i -> R20
.even
01A8 _display_on::
01A8 0E940000 xcall push_gset1
01AC .dbline -1
01AC .dbline 104
01AC ; {
01AC ; write_595 (seg[i]);
01AC ; write_595 (off[i]);
01AC ; out_595 ();
01AC ; delay_nms (2);
01AC ; }
01AC ; }
01AC ;
01AC ; void display_on ()
01AC ; {
01AC .dbline 106
01AC ; uchar i;
01AC ; for (i=0;i<4;i++)
01AC 4427 clr R20
01AE 15C0 xjmp L46
01B0 L43:
01B0 .dbline 107
01B0 .dbline 108
01B0 80E0 ldi R24,<_seg
01B2 90E0 ldi R25,>_seg
01B4 E42F mov R30,R20
01B6 FF27 clr R31
01B8 E80F add R30,R24
01BA F91F adc R31,R25
01BC 0491 lpm R16,Z
01BE A2DF xcall _write_595
01C0 .dbline 109
01C0 80E0 ldi R24,<_on
01C2 90E0 ldi R25,>_on
01C4 E42F mov R30,R20
01C6 FF27 clr R31
01C8 E80F add R30,R24
01CA F91F adc R31,R25
01CC 0491 lpm R16,Z
01CE 9ADF xcall _write_595
01D0 .dbline 110
01D0 ACDF xcall _out_595
01D2 .dbline 111
01D2 02E0 ldi R16,2
01D4 10E0 ldi R17,0
01D6 2FDF xcall _delay_nms
01D8 .dbline 112
01D8 L44:
01D8 .dbline 106
01D8 4395 inc R20
01DA L46:
01DA .dbline 106
01DA 4430 cpi R20,4
01DC 48F3 brlo L43
01DE .dbline -2
01DE L42:
01DE 0E940000 xcall pop_gset1
01E2 .dbline 0 ; func end
01E2 0895 ret
01E4 .dbsym r i 20 c
01E4 .dbend
01E4 .dbfunc e main _main fV
.even
01E4 _main::
01E4 .dbline -1
01E4 .dbline 116
01E4 ; {
01E4 ; write_595 (seg[i]);
01E4 ; write_595 (on[i]);
01E4 ; out_595 ();
01E4 ; delay_nms (2);
01E4 ; }
01E4 ; }
01E4 ;
01E4 ; void main ()
01E4 ; {
01E4 .dbline 117
01E4 ; init_devices();
01E4 3CDF xcall _init_devices
01E6 .dbline 118
01E6 ; number=0;
01E6 2224 clr R2
01E8 3324 clr R3
01EA 30920100 sts _number+1,R3
01EE 20920000 sts _number,R2
01F2 36C0 xjmp L49
01F4 L48:
01F4 .dbline 120
01F4 ; while (1)
01F4 ; {
01F4 .dbline 121
01F4 ; number++;
01F4 80910000 lds R24,_number
01F8 90910100 lds R25,_number+1
01FC 0196 adiw R24,1
01FE 90930100 sts _number+1,R25
0202 80930000 sts _number,R24
0206 .dbline 122
0206 ; BINtoBCD(number);
0206 1C01 movw R2,R24
0208 4424 clr R4
020A 5524 clr R5
020C 8101 movw R16,R2
020E 9201 movw R18,R4
0210 2EDF xcall _BINtoBCD
0212 .dbline 123
0212 ; for (i=0;i<125;i++)
0212 2224 clr R2
0214 3324 clr R3
0216 30920300 sts _i+1,R3
021A 20920200 sts _i,R2
021E 0AC0 xjmp L54
0220 L51:
0220 .dbline 124
0220 87DF xcall _display
0222 L52:
0222 .dbline 123
0222 80910200 lds R24,_i
0226 90910300 lds R25,_i+1
022A 0196 adiw R24,1
022C 90930300 sts _i+1,R25
0230 80930200 sts _i,R24
0234 L54:
0234 .dbline 123
0234 80910200 lds R24,_i
0238 90910300 lds R25,_i+1
023C 8D37 cpi R24,125
023E E0E0 ldi R30,0
0240 9E07 cpc R25,R30
0242 70F3 brlo L51
0244 .dbline 125
0244 ; display ();
0244 ; if (number>=9999) number=0;
0244 80910000 lds R24,_number
0248 90910100 lds R25,_number+1
024C 8F30 cpi R24,15
024E E7E2 ldi R30,39
0250 9E07 cpc R25,R30
0252 30F0 brlo L55
0254 .dbline 125
0254 2224 clr R2
0256 3324 clr R3
0258 30920100 sts _number+1,R3
025C 20920000 sts _number,R2
0260 L55:
0260 .dbline 126
0260 L49:
0260 .dbline 119
0260 C9CF xjmp L48
0262 X1:
0262 .dbline -2
0262 L47:
0262 .dbline 0 ; func end
0262 0895 ret
0264 .dbend
.area bss(ram, con, rel)
0000 .dbfile E:\AVR单片机程序调试\ATMEGA16_8LED\ATMEGA16_8LED.C
0000 _number::
0000 .blkb 2
0002 .dbsym e number _number i
0002 _i::
0002 .blkb 2
0004 .dbsym e i _i i
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?