lcd-16sn.lis
来自「大量ATMEGA16实例, 都可以运行,包括驱动LCD1602, 上位机显示等多」· LIS 代码 · 共 871 行 · 第 1/3 页
LIS
871 行
005E ; //PA2--> E
005E ;
005E ; void wr_instruction(unsigned char instr)
005E ; {
005E .dbline 80
005E ; DDRA=0xff;
005E 8FEF ldi R24,255
0060 8ABB out 0x1a,R24
0062 .dbline 81
0062 ; lcd_delay(1);
0062 01E0 ldi R16,1
0064 10E0 ldi R17,0
0066 DADF xcall _lcd_delay
0068 .dbline 82
0068 ; PORTA=0b00000000;
0068 2224 clr R2
006A 2BBA out 0x1b,R2
006C .dbline 83
006C ; PORTB=instr; //send out instruction
006C A8BA out 0x18,R10
006E .dbline 84
006E ; lcd_delay(2);
006E 02E0 ldi R16,2
0070 10E0 ldi R17,0
0072 D4DF xcall _lcd_delay
0074 .dbline 85
0074 ; PORTA=0b00000100; //PA2<--1 LCD-E ON (enable)
0074 84E0 ldi R24,4
0076 8BBB out 0x1b,R24
0078 .dbline 86
0078 ; lcd_delay(2);
0078 02E0 ldi R16,2
007A 10E0 ldi R17,0
007C CFDF xcall _lcd_delay
007E .dbline 87
007E ; PORTA=0b00000000; //PA2<--0 LCD-E OFF (disable)
007E 2224 clr R2
0080 2BBA out 0x1b,R2
0082 .dbline 88
0082 ; lcd_delay(1);
0082 01E0 ldi R16,1
0084 10E0 ldi R17,0
0086 CADF xcall _lcd_delay
0088 .dbline -2
0088 L13:
0088 .dbline 0 ; func end
0088 A990 ld R10,y+
008A 0895 ret
008C .dbsym r instr 10 c
008C .dbend
008C .dbfunc e wr_data _wr_data fV
008C ; data -> R10
.even
008C _wr_data::
008C AA92 st -y,R10
008E A02E mov R10,R16
0090 .dbline -1
0090 .dbline 92
0090 ; }
0090 ;
0090 ; void wr_data(unsigned char data)
0090 ; {
0090 .dbline 93
0090 ; DDRA=0xff;
0090 8FEF ldi R24,255
0092 8ABB out 0x1a,R24
0094 .dbline 94
0094 ; PORTA=0b00000001; //PA0 <-- 1, Select data register
0094 81E0 ldi R24,1
0096 8BBB out 0x1b,R24
0098 .dbline 95
0098 ; PORTB=data; //Send out data
0098 A8BA out 0x18,R10
009A .dbline 96
009A ; lcd_delay(1);
009A 01E0 ldi R16,1
009C 10E0 ldi R17,0
009E BEDF xcall _lcd_delay
00A0 .dbline 97
00A0 ; PORTA=0b00000101; //Enable write to Data register
00A0 85E0 ldi R24,5
00A2 8BBB out 0x1b,R24
00A4 .dbline 98
00A4 ; lcd_delay(2);
00A4 02E0 ldi R16,2
00A6 10E0 ldi R17,0
00A8 B9DF xcall _lcd_delay
00AA .dbline 99
00AA ; PORTA=0b00000000; //disable ????
00AA 2224 clr R2
00AC 2BBA out 0x1b,R2
00AE .dbline 100
00AE ; lcd_delay(1);
00AE 01E0 ldi R16,1
00B0 10E0 ldi R17,0
00B2 B4DF xcall _lcd_delay
00B4 .dbline -2
00B4 L14:
00B4 .dbline 0 ; func end
00B4 A990 ld R10,y+
00B6 0895 ret
00B8 .dbsym r data 10 c
00B8 .dbend
00B8 .dbfunc e wr_instruction2 _wr_instruction2 fV
00B8 ; flags -> <dead>
00B8 ; instr -> R10
.even
00B8 _wr_instruction2::
00B8 AA92 st -y,R10
00BA A02E mov R10,R16
00BC .dbline -1
00BC .dbline 107
00BC ; }
00BC ;
00BC ; // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00BC ; // Following functions for LCD panel control
00BC ;
00BC ; void wr_instruction2(unsigned char instr)
00BC ; {
00BC .dbline 109
00BC ; unsigned char flags;
00BC ; lcd_delay(10);
00BC 0AE0 ldi R16,10
00BE 10E0 ldi R17,0
00C0 ADDF xcall _lcd_delay
00C2 .dbline 110
00C2 ; wr_instruction(instr);
00C2 0A2D mov R16,R10
00C4 CADF xcall _wr_instruction
00C6 .dbline 112
00C6 ; //PORTD=0x2f;
00C6 ; lcd_delay(10);
00C6 0AE0 ldi R16,10
00C8 10E0 ldi R17,0
00CA A8DF xcall _lcd_delay
00CC .dbline -2
00CC L15:
00CC .dbline 0 ; func end
00CC A990 ld R10,y+
00CE 0895 ret
00D0 .dbsym l flags 1 c
00D0 .dbsym r instr 10 c
00D0 .dbend
00D0 .dbfunc e wr_data2 _wr_data2 fV
00D0 ; flags -> <dead>
00D0 ; data -> R10
.even
00D0 _wr_data2::
00D0 AA92 st -y,R10
00D2 A02E mov R10,R16
00D4 .dbline -1
00D4 .dbline 116
00D4 ; }
00D4 ;
00D4 ; void wr_data2(unsigned char data)
00D4 ; {
00D4 .dbline 118
00D4 ; unsigned char flags;
00D4 ; if(cursor_index==0x10)
00D4 80910A00 lds R24,_cursor_index
00D8 90910B00 lds R25,_cursor_index+1
00DC 8031 cpi R24,16
00DE E0E0 ldi R30,0
00E0 9E07 cpc R25,R30
00E2 11F4 brne L17
00E4 X2:
00E4 .dbline 119
00E4 ; cursor_line2();
00E4 37D0 xcall _cursor_line2
00E6 09C0 xjmp L18
00E8 L17:
00E8 .dbline 120
00E8 ; else if(cursor_index==0x50)
00E8 80910A00 lds R24,_cursor_index
00EC 90910B00 lds R25,_cursor_index+1
00F0 8035 cpi R24,80
00F2 E0E0 ldi R30,0
00F4 9E07 cpc R25,R30
00F6 09F4 brne L19
00F8 X3:
00F8 .dbline 121
00F8 ; cursor_line1();
00F8 21D0 xcall _cursor_line1
00FA L19:
00FA L18:
00FA .dbline 122
00FA ; wr_data(data);
00FA 0A2D mov R16,R10
00FC C7DF xcall _wr_data
00FE .dbline 123
00FE ; cursor_index++;
00FE 80910A00 lds R24,_cursor_index
0102 90910B00 lds R25,_cursor_index+1
0106 0196 adiw R24,1
0108 90930B00 sts _cursor_index+1,R25
010C 80930A00 sts _cursor_index,R24
0110 .dbline 125
0110 ; //PORTD=0x4f;
0110 ; lcd_delay(50);
0110 02E3 ldi R16,50
0112 10E0 ldi R17,0
0114 83DF xcall _lcd_delay
0116 .dbline -2
0116 L16:
0116 .dbline 0 ; func end
0116 A990 ld R10,y+
0118 0895 ret
011A .dbsym l flags 1 c
011A .dbsym r data 10 c
011A .dbend
011A .dbfunc e cursor_home _cursor_home fV
.even
011A _cursor_home::
011A .dbline -1
011A .dbline 129
011A ; }
011A ;
011A ; void cursor_home(void) //Move cursor to Home
011A ; {
011A .dbline 130
011A ; wr_instruction2(0x01);
011A 01E0 ldi R16,1
011C CDDF xcall _wr_instruction2
011E .dbline 131
011E ; lcd_delay(10);
011E 0AE0 ldi R16,10
0120 10E0 ldi R17,0
0122 7CDF xcall _lcd_delay
0124 .dbline 132
0124 ; wr_instruction2(0x80);
0124 00E8 ldi R16,128
0126 C8DF xcall _wr_instruction2
0128 .dbline 133
0128 ; ldelay(5);
0128 05E0 ldi R16,5
012A 10E0 ldi R17,0
012C 86DF xcall _ldelay
012E .dbline 134
012E ; cursor_index=0;
012E 2224 clr R2
0130 3324 clr R3
0132 30920B00 sts _cursor_index+1,R3
0136 20920A00 sts _cursor_index,R2
013A .dbline -2
013A L21:
013A .dbline 0 ; func end
013A 0895 ret
013C .dbend
013C .dbfunc e cursor_line1 _cursor_line1 fV
.even
013C _cursor_line1::
013C .dbline -1
013C .dbline 138
013C ; }
013C ;
013C ; void cursor_line1(void) //Move cursor to the first line
013C ; {
013C .dbline 139
013C ; wr_instruction2(0x80);
013C 00E8 ldi R16,128
013E BCDF xcall _wr_instruction2
0140 .dbline 140
0140 ; cursor_index=0;
0140 2224 clr R2
0142 3324 clr R3
0144 30920B00 sts _cursor_index+1,R3
0148 20920A00 sts _cursor_index,R2
014C .dbline 141
014C ; ldelay(5);
014C 05E0 ldi R16,5
014E 10E0 ldi R17,0
0150 74DF xcall _ldelay
0152 .dbline -2
0152 L22:
0152 .dbline 0 ; func end
0152 0895 ret
0154 .dbend
0154 .dbfunc e cursor_line2 _cursor_line2 fV
.even
0154 _cursor_line2::
0154 .dbline -1
0154 .dbline 145
0154 ; }
0154 ;
0154 ; void cursor_line2(void) //Move cursor to the second line
0154 ; {
0154 .dbline 146
0154 ; wr_instruction2(0b11000000);
0154 00EC ldi R16,192
0156 B0DF xcall _wr_instruction2
0158 .dbline 147
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?