📄 lcd.s
字号:
; }
L18:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r status 22 c
.dbsym r data 20 c
.dbend
.dbfunc e LCD_Read_Data _LCD_Read_Data fc
; data -> R20
; status -> R20
.even
_LCD_Read_Data::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 169
;
; //******************************************************************************
; // Function : LCD_Read_Data
; // Input : status - Detect LCD Status when 1
; // Output : Data read from LCD
; // Description : Read Data from LCD
; //******************************************************************************
; INT8U LCD_Read_Data(INT8U status)
; {
.dbline 171
; INT8U data;
; if(status == 1)
cpi R20,1
brne L25
.dbline 172
; {
L27:
.dbline 173
.dbline 173
.dbline 173
L28:
.dbline 173
; while(LCD_Read_BF() != 0) {;}
xcall _LCD_Read_BF
tst R16
brne L27
.dbline 174
; }
L25:
.dbline 175
; DDRA = 0x00;
clr R2
out 0x1a,R2
.dbline 176
; Set_EN(0);
clr R16
xcall _Set_EN
.dbline 177
; Set_RS(1);
ldi R16,1
xcall _Set_RS
.dbline 178
; Set_RW(1);
ldi R16,1
xcall _Set_RW
.dbline 179
; Set_EN(1);
ldi R16,1
xcall _Set_EN
.dbline 180
; NOP();
nop
.dbline 181
; NOP();
nop
.dbline 182
; data = PINA;
in R20,0x19
.dbline 183
; Set_EN(0);
clr R16
xcall _Set_EN
.dbline 184
; DDRA = 0xFF;
ldi R24,255
out 0x1a,R24
.dbline 185
; return(data);
mov R16,R20
.dbline -2
L24:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r data 20 c
.dbsym r status 20 c
.dbend
.dbfunc e LCD_Reset _LCD_Reset fV
.even
_LCD_Reset::
.dbline -1
.dbline 195
; }
;
; //******************************************************************************
; // Function : LCD_Reset
; // Input : none
; // Output : none
; // Description : LCD software reset,must execute according to time sequence
; //******************************************************************************
; void LCD_Reset(void)
; {
.dbline 196
; Delay_ms(15);
ldi R16,15
xcall _Delay_ms
.dbline 197
; LCD_Write_Command(0x38,0);
clr R18
ldi R16,56
xcall _LCD_Write_Command
.dbline 198
; Delay_ms(5);
ldi R16,5
xcall _Delay_ms
.dbline 199
; LCD_Write_Command(0x38,0);
clr R18
ldi R16,56
xcall _LCD_Write_Command
.dbline 200
; Delay_ms(5);
ldi R16,5
xcall _Delay_ms
.dbline 201
; LCD_Write_Command(0x38,0);
clr R18
ldi R16,56
xcall _LCD_Write_Command
.dbline 202
; LCD_Write_Command(0x38,1);
ldi R18,1
ldi R16,56
xcall _LCD_Write_Command
.dbline 203
; LCD_Write_Command(0x08,1);
ldi R18,1
ldi R16,8
xcall _LCD_Write_Command
.dbline 204
; LCD_Write_Command(0x01,1);
ldi R18,1
ldi R16,1
xcall _LCD_Write_Command
.dbline 205
; LCD_Write_Command(0x06,1);
ldi R18,1
ldi R16,6
xcall _LCD_Write_Command
.dbline 206
; LCD_Write_Command(0x0C,1);
ldi R18,1
ldi R16,12
.dbline -2
.dbline 207
; }
L30:
.dbline 0 ; func end
xjmp _LCD_Write_Command
.dbend
.dbfunc e LCD_Show_Char _LCD_Show_Char fV
; address -> R20
; code -> y+4
; y -> R20
; x -> R22
.even
_LCD_Show_Char::
xcall push_gset2
mov R20,R18
mov R22,R16
.dbline -1
.dbline 218
.dbline 220
cpi R22,2
brsh L32
cpi R20,16
brsh L32
.dbline 221
.dbline 222
ldi R24,64
mul R24,R22
mov R2,R0
add R2,R20
mov R20,R2
.dbline 223
ldi R18,1
mov R16,R2
ori R16,128
xcall _LCD_Write_Command
.dbline 224
ldi R18,1
ldd R16,y+4
xcall _LCD_Write_Data
.dbline 225
L32:
.dbline -2
.dbline 226
;
; //******************************************************************************
; // Function : LCD_Show_Char
; // Input : x - Row of LCD(0 to 1);
; // y - Column of LCD(0 to 15);
; // code - Code of Char
; // Output : none
; // Description : Display a Char at Setting Row and Column
; //******************************************************************************
; void LCD_Show_Char(INT8U x,INT8U y,INT8U code)
; {
; INT8U address;
; if((x < 2) && (y < 16))
; {
; address = 0x40 * x + y;
; LCD_Write_Command(0x80 | address,1);
; LCD_Write_Data(code,1);
; }
; }
L31:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r address 20 c
.dbsym l code 4 c
.dbsym r y 20 c
.dbsym r x 22 c
.dbend
.dbfunc e LCD_Show_String _LCD_Show_String fV
; x_address -> R20
; y_address -> R22
; pdata -> R10,R11
; y -> R12
; x -> R22
.even
_LCD_Show_String::
xcall push_gset4
mov R12,R18
mov R22,R16
sbiw R28,1
ldd R10,y+9
ldd R11,y+10
.dbline -1
.dbline 237
;
; //******************************************************************************
; // Function : LCD_Show_String
; // Input : x - Row of LCD(0 to 1);
; // y - Column of LCD(0 to 15);
; // pdata - Pointer to a String
; // Output : none
; // Description : Display a String from at Setting Row and Column
; //******************************************************************************
; void LCD_Show_String(INT8U x,INT8U y,INT8U *pdata)
; {
.dbline 238
; INT8U x_address = x;
mov R20,R22
.dbline 239
; INT8U y_address = y;
mov R22,R12
xjmp L36
L35:
.dbline 241
; while(*pdata != '\0')
; {
.dbline 242
; LCD_Show_Char(x_address,y_address,*pdata++);
movw R30,R10
ld R2,Z+
movw R10,R30
std y+0,R2
mov R18,R22
mov R16,R20
xcall _LCD_Show_Char
.dbline 243
; y_address++;
inc R22
.dbline 244
; if((x_address == 0) && (y_address >= 16))
tst R20
brne L38
cpi R22,16
brlo L38
.dbline 245
; {
.dbline 246
; x_address = 1;
ldi R20,1
.dbline 247
; y_address = 0;
clr R22
.dbline 248
; }
xjmp L39
L38:
.dbline 249
; else if((x_address == 1) && (y_address >= 16))
cpi R20,1
brne L40
cpi R22,16
brlo L40
.dbline 250
; {
.dbline 251
; return;
xjmp L34
L40:
L39:
.dbline 253
L36:
.dbline 240
movw R30,R10
ldd R2,z+0
tst R2
brne L35
.dbline -2
.dbline 254
; }
; }
; }
L34:
adiw R28,1
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r x_address 20 c
.dbsym r y_address 22 c
.dbsym r pdata 10 pc
.dbsym r y 12 c
.dbsym r x 22 c
.dbend
.dbfunc e Delay_ms _Delay_ms fV
; cnt -> R20,R21
; time -> R16
.even
_Delay_ms::
xcall push_gset1
.dbline -1
.dbline 263
;
; //******************************************************************************
; // Function : Delay_ms
; // Input : time - Delay Time
; // Output : none
; // Description : Inaccurate ms Level Delay for Software Reset of LCD
; //******************************************************************************
; void Delay_ms(INT8U time)
; {
.dbline 264
; INT16U cnt = 0;
clr R20
clr R21
xjmp L44
L43:
.dbline 266
; while(time--)
; {
.dbline 267
; for(cnt = 0;cnt < 5000;cnt++)
clr R20
clr R21
xjmp L49
L46:
.dbline 268
.dbline 269
nop
.dbline 270
L47:
.dbline 267
subi R20,255 ; offset = 1
sbci R21,255
L49:
.dbline 267
cpi R20,136
ldi R30,19
cpc R21,R30
brlo L46
.dbline 271
L44:
.dbline 265
mov R2,R16
clr R3
subi R16,1
tst R2
brne L43
.dbline -2
.dbline 272
; {
; NOP();
; }
; }
; }
L42:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r cnt 20 i
.dbsym r time 16 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -