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

📄 display.lis

📁 屏幕显示程序。用于液晶屏幕及数码显示管的显示程序。已调试通过。
💻 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 + -