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 + -
显示快捷键?