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

📄 1602.lis

📁 用AVR单片机Mega16控制的1602液晶屏显示
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 00B2 402F              mov R20,R16
 00B4                   .dbline -1
 00B4                   .dbline 80
 00B4           ; }
 00B4           ; 
 00B4           ; /****************** 写数据函数 *****************/
 00B4           ; void lcd_data(uchar data)
 00B4           ; {
 00B4                   .dbline 81
 00B4           ;  lcd_busy();
 00B4 D5DF              xcall _lcd_busy
 00B6                   .dbline 82
 00B6           ;  PORTD = 0X40;
 00B6 80E4              ldi R24,64
 00B8 82BB              out 0x12,R24
 00BA                   .dbline 83
 00BA           ;  delay(1);
 00BA 01E0              ldi R16,1
 00BC 10E0              ldi R17,0
 00BE A0DF              xcall _delay
 00C0                   .dbline 84
 00C0           ;  PORTC = data;                //写要显示的字
 00C0 45BB              out 0x15,R20
 00C2                   .dbline 85
 00C2           ;  delay(1);
 00C2 01E0              ldi R16,1
 00C4 10E0              ldi R17,0
 00C6 9CDF              xcall _delay
 00C8                   .dbline 86
 00C8           ;  PORTD = 0X50;
 00C8 80E5              ldi R24,80
 00CA 82BB              out 0x12,R24
 00CC                   .dbline 87
 00CC           ;  delay(1);
 00CC 01E0              ldi R16,1
 00CE 10E0              ldi R17,0
 00D0 97DF              xcall _delay
 00D2                   .dbline 88
 00D2           ;  PORTD = 0X40;
 00D2 80E4              ldi R24,64
 00D4 82BB              out 0x12,R24
 00D6                   .dbline -2
 00D6           L21:
 00D6 0E940000          xcall pop_gset1
 00DA                   .dbline 0 ; func end
 00DA 0895              ret
 00DC                   .dbsym r data 20 c
 00DC                   .dbend
 00DC                   .dbfunc e lcd_DAT _lcd_DAT fV
 00DC           ;            DAT -> y+4
 00DC           ;              y -> R22
 00DC           ;              x -> R20
                        .even
 00DC           _lcd_DAT::
 00DC 0E940000          xcall push_gset2
 00E0 622F              mov R22,R18
 00E2 402F              mov R20,R16
 00E4                   .dbline -1
 00E4                   .dbline 93
 00E4           ; }
 00E4           ; 
 00E4           ; /****************** 显示函数 *****************/
 00E4           ; void lcd_DAT(uchar x,uchar y,uchar DAT)
 00E4           ; {
 00E4                   .dbline 94
 00E4           ;  if(y) x += 0x40;
 00E4 6623              tst R22
 00E6 09F0              breq L23
 00E8                   .dbline 94
 00E8 405C              subi R20,192    ; addi 64
 00EA           L23:
 00EA                   .dbline 95
 00EA           ;  x |= 0x80;
 00EA 4068              ori R20,128
 00EC                   .dbline 96
 00EC           ;  lcd_cmd(x);     //写要显示的地址
 00EC 042F              mov R16,R20
 00EE C8DF              xcall _lcd_cmd
 00F0                   .dbline 97
 00F0           ;  lcd_data(DAT);          //写显示的内容
 00F0 0C81              ldd R16,y+4
 00F2 DDDF              xcall _lcd_data
 00F4                   .dbline -2
 00F4           L22:
 00F4 0E940000          xcall pop_gset2
 00F8                   .dbline 0 ; func end
 00F8 0895              ret
 00FA                   .dbsym l DAT 4 c
 00FA                   .dbsym r y 22 c
 00FA                   .dbsym r x 20 c
 00FA                   .dbend
 00FA                   .dbfunc e lcd_init _lcd_init fV
                        .even
 00FA           _lcd_init::
 00FA                   .dbline -1
 00FA                   .dbline 102
 00FA           ; }
 00FA           ; 
 00FA           ; /****************** lcd 初始化 *****************/
 00FA           ; void lcd_init()
 00FA           ; {
 00FA                   .dbline 103
 00FA           ;  lcd_cmd(0x38);
 00FA 08E3              ldi R16,56
 00FC C1DF              xcall _lcd_cmd
 00FE                   .dbline 104
 00FE           ;  lcd_cmd(0x08);
 00FE 08E0              ldi R16,8
 0100 BFDF              xcall _lcd_cmd
 0102                   .dbline 105
 0102           ;  lcd_cmd(0x01);
 0102 01E0              ldi R16,1
 0104 BDDF              xcall _lcd_cmd
 0106                   .dbline 106
 0106           ;  lcd_cmd(0x06);
 0106 06E0              ldi R16,6
 0108 BBDF              xcall _lcd_cmd
 010A                   .dbline 107
 010A           ;  lcd_cmd(0x0c);
 010A 0CE0              ldi R16,12
 010C B9DF              xcall _lcd_cmd
 010E                   .dbline -2
 010E           L25:
 010E                   .dbline 0 ; func end
 010E 0895              ret
 0110                   .dbend
 0110                   .dbfunc e main _main fV
 0110           ;              p -> R20
 0110           ;              m -> R22
 0110           ;              i -> R10
                        .even
 0110           _main::
 0110 2197              sbiw R28,1
 0112                   .dbline -1
 0112                   .dbline 112
 0112           ; }
 0112           ; 
 0112           ; /****************** 主函数 *****************/
 0112           ; void main(void)
 0112           ; {
 0112                   .dbline 113
 0112           ;  uchar i,p=1;
 0112 41E0              ldi R20,1
 0114                   .dbline 114
 0114           ;  char m = 11;
 0114 6BE0              ldi R22,11
 0116                   .dbline 115
 0116           ;  init_devices();
 0116 9CDF              xcall _init_devices
 0118                   .dbline 116
 0118           ;  delay_ms(100);
 0118 04E6              ldi R16,100
 011A 10E0              ldi R17,0
 011C 79DF              xcall _delay_ms
 011E                   .dbline 117
 011E           ;  lcd_init();
 011E EDDF              xcall _lcd_init
 0120                   .dbline 126
 0120           ;  
 0120           ;  /*lcd_DAT(0,0,'G');
 0120           ;  lcd_DAT(1,0,'O');
 0120           ;  lcd_DAT(2,0,'O');
 0120           ;  lcd_DAT(3,0,'D');
 0120           ;  lcd_DAT(5,1,'B');
 0120           ;  lcd_DAT(6,1,'Y');
 0120           ;  lcd_DAT(7,1,'E');*/
 0120           ;  lcd_cmd(0x80);
 0120 00E8              ldi R16,128
 0122 AEDF              xcall _lcd_cmd
 0124                   .dbline 127
 0124           ;  for(i=0;DATA1[i] != '\0';i++)
 0124 AA24              clr R10
 0126 0CC0              xjmp L30
 0128           L27:
 0128                   .dbline 128
 0128                   .dbline 129
 0128 80E0              ldi R24,<_DATA1
 012A 90E0              ldi R25,>_DATA1
 012C EA2D              mov R30,R10
 012E FF27              clr R31
 0130 E80F              add R30,R24
 0132 F91F              adc R31,R25
 0134 2080              ldd R2,z+0
 0136 2882              std y+0,R2
 0138 2227              clr R18
 013A 0A2D              mov R16,R10
 013C CFDF              xcall _lcd_DAT
 013E                   .dbline 130
 013E           L28:
 013E                   .dbline 127
 013E A394              inc R10
 0140           L30:
 0140                   .dbline 127
 0140 80E0              ldi R24,<_DATA1
 0142 90E0              ldi R25,>_DATA1
 0144 EA2D              mov R30,R10
 0146 FF27              clr R31
 0148 E80F              add R30,R24
 014A F91F              adc R31,R25
 014C 2080              ldd R2,z+0
 014E 2220              tst R2
 0150 59F7              brne L27
 0152 27C0              xjmp L32
 0154           L31:
 0154                   .dbline 132
 0154           ;   {
 0154           ;    lcd_DAT(i,0,DATA1[i]);
 0154           ;   }
 0154           ;  while(1)
 0154           ;  {  
 0154                   .dbline 133
 0154           ;   for(i=0;i<16;i++)
 0154 AA24              clr R10
 0156 10C0              xjmp L37
 0158           L34:
 0158                   .dbline 134
 0158                   .dbline 135
 0158 262E              mov R2,R22
 015A 3324              clr R3
 015C EA2D              mov R30,R10
 015E FF27              clr R31
 0160 E20D              add R30,R2
 0162 F31D              adc R31,R3
 0164 80E0              ldi R24,<_DATA2
 0166 90E0              ldi R25,>_DATA2
 0168 E80F              add R30,R24
 016A F91F              adc R31,R25
 016C 2080              ldd R2,z+0
 016E 2882              std y+0,R2
 0170 21E0              ldi R18,1
 0172 0A2D              mov R16,R10
 0174 B3DF              xcall _lcd_DAT
 0176                   .dbline 136
 0176           L35:
 0176                   .dbline 133
 0176 A394              inc R10
 0178           L37:
 0178                   .dbline 133
 0178 8A2D              mov R24,R10
 017A 8031              cpi R24,16
 017C 68F3              brlo L34
 017E                   .dbline 137
 017E           ;   {
 017E           ;    lcd_DAT(i,1,DATA2[i+m]);
 017E           ;   }
 017E           ;   delay_ms(700);                        //滚动屏
 017E 0CEB              ldi R16,700
 0180 12E0              ldi R17,2
 0182 46DF              xcall _delay_ms
 0184                   .dbline 138
 0184           ;   if(p == 1) m --;
 0184 4130              cpi R20,1
 0186 11F4              brne L38
 0188                   .dbline 138
 0188 6A95              dec R22
 018A 03C0              xjmp L39
 018C           L38:
 018C                   .dbline 139
 018C           ;   else if(p == 0) m++;
 018C 4423              tst R20
 018E 09F4              brne L40
 0190                   .dbline 139
 0190 6395              inc R22
 0192           L40:
 0192           L39:
 0192                   .dbline 140
 0192           ;   if(m >= 11) p = 1;
 0192 6B30              cpi R22,11
 0194 10F0              brlo L42
 0196                   .dbline 140
 0196 41E0              ldi R20,1
 0198 04C0              xjmp L43
 019A           L42:
 019A                   .dbline 141
 019A           ;   else if(m <= 0) p = 0;
 019A 2224              clr R2
 019C 2616              cp R2,R22
 019E 08F0              brlo L44
 01A0                   .dbline 141
 01A0 4427              clr R20
 01A2           L44:
 01A2           L43:
 01A2                   .dbline 142
 01A2           L32:
 01A2                   .dbline 131
 01A2 D8CF              xjmp L31
 01A4           X2:
 01A4                   .dbline -2
 01A4           L26:
 01A4 2196              adiw R28,1
 01A6                   .dbline 0 ; func end
 01A6 0895              ret
 01A8                   .dbsym r p 20 c
 01A8                   .dbsym r m 22 c
 01A8                   .dbsym r i 10 c
 01A8                   .dbend

⌨️ 快捷键说明

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