📄 display.lis
字号:
.module display.c
.area text(rom, con, rel)
0000 .dbfile display.c
.area lit(rom, con, rel)
0000 _tabel::
0000 C0F9 .byte 192,249
0002 A4B0 .byte 164,176
0004 9992 .byte 153,146
0006 82F8 .byte 130,248
0008 8090 .byte 128,144
000A 8883 .byte 136,131
000C C6A1 .byte 198,161
000E 868E .byte 134,142
0010 .dbsym e tabel _tabel A[16:16]kc
.area data(ram, con, rel)
0000 .dbfile display.c
0000 _ledbuff::
0000 .blkb 2
.area idata
0000 3F3F .byte 63,63
.area data(ram, con, rel)
0002 .dbfile display.c
0002 .blkb 2
.area idata
0002 3F3F .byte 63,63
.area data(ram, con, rel)
0004 .dbfile display.c
0004 .blkb 2
.area idata
0004 3F3F .byte 63,63
.area data(ram, con, rel)
0006 .dbfile display.c
0006 .dbsym e ledbuff _ledbuff A[6:6]c
.area text(rom, con, rel)
0000 .dbfile display.c
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 14
0000 ; /*********************************************
0000 ; HTTP://WWW.SL.COM.CN
0000 ; 双龙电子
0000 ; 六路动态扫描显示程序
0000 ; **********************************************/
0000 ; #include <iom16v.h>
0000 ; extern void delay_ms(unsigned int n);//引用外部函数
0000 ; extern void delay_1ms(void);
0000 ; /* 七段译码字形表 */
0000 ; const unsigned char tabel[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
0000 ; /* 显示缓冲区 */
0000 ; unsigned char ledbuff[]={0x3f,0x3f,0x3f,0x3f,0x3f,0x3f};
0000 ; void port_init(void)//端口初始化
0000 ; {
0000 .dbline 15
0000 ; DDRD=0x3f;
0000 8FE3 ldi R24,63
0002 81BB out 0x11,R24
0004 .dbline 16
0004 ; DDRB=0xff;
0004 8FEF ldi R24,255
0006 87BB out 0x17,R24
0008 .dbline 17
0008 ; PORTD=0xff;
0008 82BB out 0x12,R24
000A .dbline 18
000A ; PORTB=0xff;
000A 88BB out 0x18,R24
000C .dbline -2
000C L1:
000C .dbline 0 ; func end
000C 0895 ret
000E .dbend
000E .dbfunc e display _display fV
000E ; i -> R20
.even
000E _display::
000E 00D0 rcall push_gset1
0010 .dbline -1
0010 .dbline 21
0010 ; }
0010 ; void display(void)//六路动态扫描显示电路
0010 ; {
0010 .dbline 23
0010 ; unsigned char i;
0010 ; for (i=0;i<6;i++)
0010 4427 clr R20
0012 16C0 rjmp L6
0014 L3:
0014 .dbline 24
0014 .dbline 25
0014 80E0 ldi R24,<_ledbuff
0016 90E0 ldi R25,>_ledbuff
0018 E42F mov R30,R20
001A FF27 clr R31
001C E80F add R30,R24
001E F91F adc R31,R25
0020 2080 ldd R2,z+0
0022 28BA out 0x18,R2
0024 .dbline 26
0024 01E0 ldi R16,1
0026 142F mov R17,R20
0028 00D0 rcall lsl8
002A 202E mov R2,R16
002C 2094 com R2
002E 22BA out 0x12,R2
0030 .dbline 27
0030 31D0 rcall _delay_1ms
0032 .dbline 28
0032 01E0 ldi R16,1
0034 142F mov R17,R20
0036 00D0 rcall lsl8
0038 22B2 in R2,0x12
003A 202A or R2,R16
003C 22BA out 0x12,R2
003E .dbline 29
003E L4:
003E .dbline 23
003E 4395 inc R20
0040 L6:
0040 .dbline 23
0040 4630 cpi R20,6
0042 40F3 brlo L3
0044 .dbline -2
0044 L2:
0044 00D0 rcall pop_gset1
0046 .dbline 0 ; func end
0046 0895 ret
0048 .dbsym r i 20 c
0048 .dbend
0048 .dbfunc e main _main fV
0048 ; i -> R20
0048 ; j -> R22
.even
0048 _main::
0048 .dbline -1
0048 .dbline 33
0048 ; {
0048 ; PORTB=ledbuff[i];//将显示缓冲区数据送PORTB口
0048 ; PORTD=~(1<<i); //开始显示
0048 ; delay_1ms(); //每一位显示保持一定时间
0048 ; PORTD|=(1<<i); //关闭显示
0048 ; }
0048 ; }
0048 ; /*主程序功能:演示了一个多路动态扫描程序的工作过程*/
0048 ; void main(void)
0048 ; {
0048 .dbline 35
0048 ; unsigned char i,j;
0048 ; MCUCR=0;
0048 2224 clr R2
004A 25BE out 0x35,R2
004C .dbline 36
004C ; port_init(); //端口初始化
004C D9DF rcall _port_init
004E 20C0 rjmp L9
0050 L8:
0050 .dbline 38
0050 ; while(1)
0050 ; {
0050 .dbline 39
0050 ; for(i=0;i<0x10;i++)
0050 4427 clr R20
0052 1CC0 rjmp L14
0054 L11:
0054 .dbline 40
0054 ; {
0054 .dbline 41
0054 ; for(j=0;j<6;j++)
0054 6627 clr R22
0056 11C0 rjmp L18
0058 L15:
0058 .dbline 42
0058 80E0 ldi R24,<_tabel
005A 90E0 ldi R25,>_tabel
005C 242E mov R2,R20
005E 3324 clr R3
0060 280E add R2,R24
0062 391E adc R3,R25
0064 E22D mov R30,R2
0066 F32D mov R31,R3
0068 C895 lpm
006A 80E0 ldi R24,<_ledbuff
006C 90E0 ldi R25,>_ledbuff
006E E62F mov R30,R22
0070 FF27 clr R31
0072 E80F add R30,R24
0074 F91F adc R31,R25
0076 0082 std z+0,R0
0078 L16:
0078 .dbline 41
0078 6395 inc R22
007A L18:
007A .dbline 41
007A 6630 cpi R22,6
007C 68F3 brlo L15
007E .dbline 43
007E ; ledbuff[j]=tabel[i] ;//更换显示字形
007E ; for (j=0;j<200;j++)
007E 6627 clr R22
0080 02C0 rjmp L22
0082 L19:
0082 .dbline 44
0082 C5DF rcall _display
0084 L20:
0084 .dbline 43
0084 6395 inc R22
0086 L22:
0086 .dbline 43
0086 683C cpi R22,200
0088 E0F3 brlo L19
008A .dbline 45
008A L12:
008A .dbline 39
008A 4395 inc R20
008C L14:
008C .dbline 39
008C 4031 cpi R20,16
008E 10F3 brlo L11
0090 .dbline 46
0090 L9:
0090 .dbline 37
0090 DFCF rjmp L8
0092 X0:
0092 .dbline -2
0092 L7:
0092 .dbline 0 ; func end
0092 0895 ret
0094 .dbsym r i 20 c
0094 .dbsym r j 22 c
0094 .dbend
0094 .dbfunc e delay_1ms _delay_1ms fV
0094 ; i -> R16,R17
.even
0094 _delay_1ms::
0094 .dbline -1
0094 .dbline 51
0094 ; display(); //循环显示200次
0094 ; }
0094 ; }
0094 ; }
0094 ;
0094 ; #define xtal 8
0094 ; void delay_1ms(void)
0094 ; { unsigned int i;
0094 .dbline 52
0094 ; for(i=1;i<(unsigned int)(xtal*143-2);i++)
0094 01E0 ldi R16,1
0096 10E0 ldi R17,0
0098 02C0 rjmp L27
009A L24:
009A .dbline 53
009A L25:
009A .dbline 52
009A 0F5F subi R16,255 ; offset = 1
009C 1F4F sbci R17,255
009E L27:
009E .dbline 52
009E 86E7 ldi R24,1142
00A0 94E0 ldi R25,4
00A2 0817 cp R16,R24
00A4 1907 cpc R17,R25
00A6 C8F3 brlo L24
00A8 .dbline -2
00A8 L23:
00A8 .dbline 0 ; func end
00A8 0895 ret
00AA .dbsym r i 16 i
00AA .dbend
00AA .dbfunc e delay_ms _delay_ms fV
00AA ; i -> R20,R21
00AA ; n -> R22,R23
.even
00AA _delay_ms::
00AA 00D0 rcall push_gset2
00AC 602F mov R22,R16
00AE 712F mov R23,R17
00B0 .dbline -1
00B0 .dbline 56
00B0 ; ;
00B0 ; }
00B0 ; void delay_ms(unsigned int n)
00B0 ; {
00B0 .dbline 57
00B0 ; unsigned int i=0;
00B0 4427 clr R20
00B2 5527 clr R21
00B4 03C0 rjmp L30
00B6 L29:
00B6 .dbline 59
00B6 .dbline 59
00B6 EEDF rcall _delay_1ms
00B8 .dbline 60
00B8 4F5F subi R20,255 ; offset = 1
00BA 5F4F sbci R21,255
00BC .dbline 61
00BC L30:
00BC .dbline 58
00BC ; while(i<n)
00BC 4617 cp R20,R22
00BE 5707 cpc R21,R23
00C0 D0F3 brlo L29
00C2 .dbline -2
00C2 L28:
00C2 00D0 rcall pop_gset2
00C4 .dbline 0 ; func end
00C4 0895 ret
00C6 .dbsym r i 20 i
00C6 .dbsym r n 22 i
00C6 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -