lcd-16sn.lis

来自「大量ATMEGA16实例, 都可以运行,包括驱动LCD1602, 上位机显示等多」· LIS 代码 · 共 871 行 · 第 1/3 页

LIS
871
字号
 0158           ;  cursor_index=0x40;
 0158 80E4              ldi R24,64
 015A 90E0              ldi R25,0
 015C 90930B00          sts _cursor_index+1,R25
 0160 80930A00          sts _cursor_index,R24
 0164                   .dbline 148
 0164           ;  ldelay(2);
 0164 02E0              ldi R16,2
 0166 10E0              ldi R17,0
 0168 68DF              xcall _ldelay
 016A                   .dbline -2
 016A           L23:
 016A                   .dbline 0 ; func end
 016A 0895              ret
 016C                   .dbend
 016C                   .dbfunc e space _space fV
                        .even
 016C           _space::
 016C                   .dbline -1
 016C                   .dbline 152
 016C           ; } 
 016C           ; 
 016C           ; void space(void)                       //Write space, ' ', on the panel
 016C           ; {
 016C                   .dbline 153
 016C           ;  wr_data2(' ');
 016C 00E2              ldi R16,32
 016E B0DF              xcall _wr_data2
 0170                   .dbline -2
 0170           L24:
 0170                   .dbline 0 ; func end
 0170 0895              ret
 0172                   .dbend
 0172                   .dbfunc e out_string _out_string fV
 0172           ;        onechar -> R12
 0172           ;              i -> R20,R21
 0172           ;          array -> R10,R11
                        .even
 0172           _out_string::
 0172 0E940000          xcall push_xgset303C
 0176 5801              movw R10,R16
 0178                   .dbline -1
 0178                   .dbline 157
 0178           ;  }
 0178           ;  
 0178           ; void out_string(const char array[])    //Send a string stored in array to LCD panel
 0178           ; {
 0178                   .dbline 158
 0178           ;  int i=0;
 0178 4427              clr R20
 017A 5527              clr R21
 017C                   .dbline 160
 017C           ;  unsigned char onechar;
 017C           ;  i=0;
 017C 09C0              xjmp L27
 017E           L26:
 017E                   .dbline 162
 017E           ;  while(array[i])
 017E           ;   {
 017E                   .dbline 163
 017E           ;    onechar=array[i++];
 017E 1A01              movw R2,R20
 0180 4F5F              subi R20,255  ; offset = 1
 0182 5F4F              sbci R21,255
 0184 F101              movw R30,R2
 0186 EA0D              add R30,R10
 0188 FB1D              adc R31,R11
 018A C690              elpm R12,Z
 018C                   .dbline 164
 018C           ;    wr_data2(onechar);
 018C 0C2D              mov R16,R12
 018E A0DF              xcall _wr_data2
 0190                   .dbline 165
 0190           ;   }
 0190           L27:
 0190                   .dbline 161
 0190 FA01              movw R30,R20
 0192 EA0D              add R30,R10
 0194 FB1D              adc R31,R11
 0196 2690              elpm R2,Z
 0198 2220              tst R2
 019A 89F7              brne L26
 019C           X4:
 019C                   .dbline -2
 019C           L25:
 019C                   .dbline 0 ; func end
 019C 0C940000          xjmp pop_xgset303C
 01A0                   .dbsym r onechar 12 c
 01A0                   .dbsym r i 20 I
 01A0                   .dbsym r array 10 pkc
 01A0                   .dbend
 01A0                   .dbfunc e lcd_on _lcd_on fV
 01A0           ;      ctrl_data -> <dead>
 01A0           ;              i -> <dead>
                        .even
 01A0           _lcd_on::
 01A0                   .dbline -1
 01A0                   .dbline 169
 01A0           ; }
 01A0           ; 
 01A0           ; void lcd_on(void)
 01A0           ; {
 01A0                   .dbline 171
 01A0           ;  unsigned char i, ctrl_data;
 01A0           ;  ldelay(20);
 01A0 04E1              ldi R16,20
 01A2 10E0              ldi R17,0
 01A4 4ADF              xcall _ldelay
 01A6                   .dbline 172
 01A6           ;  PORTD=0x01;
 01A6 81E0              ldi R24,1
 01A8 82BB              out 0x12,R24
 01AA                   .dbline 173
 01AA           ;  ldelay(40);
 01AA 08E2              ldi R16,40
 01AC 10E0              ldi R17,0
 01AE 45DF              xcall _ldelay
 01B0                   .dbline 174
 01B0           ;  wr_instruction(0b00110000);   //Function Set:set 8-bit, 2line, 5x7 fonts
 01B0 00E3              ldi R16,48
 01B2 53DF              xcall _wr_instruction
 01B4                   .dbline 175
 01B4           ;  ldelay(2);
 01B4 02E0              ldi R16,2
 01B6 10E0              ldi R17,0
 01B8 40DF              xcall _ldelay
 01BA                   .dbline 176
 01BA           ;  wr_instruction(0b00110000);   //
 01BA 00E3              ldi R16,48
 01BC 4EDF              xcall _wr_instruction
 01BE                   .dbline 177
 01BE           ;  ldelay(2);
 01BE 02E0              ldi R16,2
 01C0 10E0              ldi R17,0
 01C2 3BDF              xcall _ldelay
 01C4                   .dbline 178
 01C4           ;  wr_instruction(0b00110000);   //
 01C4 00E3              ldi R16,48
 01C6 49DF              xcall _wr_instruction
 01C8                   .dbline 179
 01C8           ;  lcd_delay(80);
 01C8 00E5              ldi R16,80
 01CA 10E0              ldi R17,0
 01CC 27DF              xcall _lcd_delay
 01CE                   .dbline 180
 01CE           ;  wr_instruction(0b00111100);   //8-bit, 2 lines, 5x7 font
 01CE 0CE3              ldi R16,60
 01D0 44DF              xcall _wr_instruction
 01D2                   .dbline 181
 01D2           ;  lcd_delay(20);
 01D2 04E1              ldi R16,20
 01D4 10E0              ldi R17,0
 01D6 22DF              xcall _lcd_delay
 01D8                   .dbline 182
 01D8           ;  wr_instruction(0b00001110);   //display on, cursor on, blink off
 01D8 0EE0              ldi R16,14
 01DA 3FDF              xcall _wr_instruction
 01DC                   .dbline 183
 01DC           ;  lcd_delay(20);
 01DC 04E1              ldi R16,20
 01DE 10E0              ldi R17,0
 01E0 1DDF              xcall _lcd_delay
 01E2                   .dbline 184
 01E2           ;  wr_instruction(0b00001110);   //display on, 
 01E2 0EE0              ldi R16,14
 01E4 3ADF              xcall _wr_instruction
 01E6                   .dbline 185
 01E6           ;  lcd_delay(20);
 01E6 04E1              ldi R16,20
 01E8 10E0              ldi R17,0
 01EA 18DF              xcall _lcd_delay
 01EC                   .dbline 186
 01EC           ;  wr_instruction(0b00000001);   //clear display
 01EC 01E0              ldi R16,1
 01EE 35DF              xcall _wr_instruction
 01F0                   .dbline 187
 01F0           ;  ldelay(5);
 01F0 05E0              ldi R16,5
 01F2 10E0              ldi R17,0
 01F4 22DF              xcall _ldelay
 01F6                   .dbline 188
 01F6           ;  wr_instruction(0b00000110);   //Entry mode
 01F6 06E0              ldi R16,6
 01F8 30DF              xcall _wr_instruction
 01FA                   .dbline 189
 01FA           ;  lcd_delay(10);
 01FA 0AE0              ldi R16,10
 01FC 10E0              ldi R17,0
 01FE 0EDF              xcall _lcd_delay
 0200                   .dbline 190
 0200           ;  wr_instruction(0b00000001);   //clear display
 0200 01E0              ldi R16,1
 0202 2BDF              xcall _wr_instruction
 0204                   .dbline 191
 0204           ;  lcd_delay(20);
 0204 04E1              ldi R16,20
 0206 10E0              ldi R17,0
 0208 09DF              xcall _lcd_delay
 020A                   .dbline -2
 020A           L29:
 020A                   .dbline 0 ; func end
 020A 0895              ret
 020C                   .dbsym l ctrl_data 1 c
 020C                   .dbsym l i 1 c
 020C                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile C:\+samples-16small\DEMOA-16sm\LCD-16sn.c
 0000           _swin2::
 0000                   .blkb 1
 0001                   .dbsym e swin2 _swin2 c
 0001           _swin::
 0001                   .blkb 1
 0002                   .dbsym e swin _swin c
 0002           _indexcount::
 0002                   .blkb 2
 0004                   .dbsym e indexcount _indexcount I
 0004           ;  }
 0004           ; //***********************************************************
 0004           ; 
 0004           ; // **********************************************************
 0004           ; // Main program
 0004           ; /*
 0004           ; void main(void)
 0004           ; {
 0004           ;  unsigned char data, pfin, dark, darkfg=0xff;
 0004           ;  int i=0;
 0004           ;  unsigned char j, jsave, array1[10];
 0004           ;  int a;
 0004           ;  CLI();
 0004           ;  port_init();
 0004           ;  WDT_off();
 0004           ;  ldelay(200);
 0004           ;  lcd_on();
 0004           ;  PORTD=0x50;
 0004           ;  ldelay(50);
 0004           ;  PORTD=0x05;
 0004           ;  ldelay(50);
 0004           ;  out_string(message1);
 0004           ;  cursor_line2();
 0004           ;  out_string(message2);
 0004           ;  PORTD=0x55;
 0004           ;  PORTA=0xF8;
 0004           ;  PORTB=0x00;
 0004           ;  ldelay(100);
 0004           ; 
 0004           ;  while(1)
 0004           ;  {
 0004           ;   WDR();
 0004           ;   swin=PINC&0x30;
 0004           ;   swin=(swin>>4)&0x03;
 0004           ;   
 0004           ;   
 0004           ;   if(swin2!=swin)
 0004           ;     {
 0004           ;        PORTD=swin;
 0004           ;        swin2=swin;
 0004           ;        if(swin==0x00)
 0004           ;       {
 0004           ;         cursor_home();
 0004           ;         out_string(message1);
 0004           ;         cursor_line2();
 0004           ;         out_string(message2);
 0004           ;         }
 0004           ;        else if(swin==0x01)
 0004           ;       {
 0004           ;         cursor_home();
 0004           ;         out_string(message3);
 0004           ;         cursor_line2();
 0004           ;         out_string(message4);
 0004           ;         }
 0004           ;      else if(swin==0x02)
 0004           ;       {
 0004           ;         cursor_home();
 0004           ;         out_string(message5);
 0004           ;         cursor_line2();
 0004           ;         out_string(message6);
 0004           ;         }
 0004           ;      else
 0004           ;       {
 0004           ;         cursor_home();
 0004           ;         out_string(message7);
 0004           ;         cursor_line2();
 0004           ;         out_string(message8);
 0004           ;         }             
 0004           ;       }
 0004           ;   ldelay(10);
 0004           ;   }  
 0004           ; }*/

⌨️ 快捷键说明

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