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