⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.s

📁 键盘扫描及其LCD显示输出,有源程序与仿真文件,都测试通过.
💻 S
📖 第 1 页 / 共 2 页
字号:
	.dbline 154
; asm("nop");
	nop
	.dbline 155
; asm("nop");
	nop
	.dbline 156
; lcd_clear_e(); // Disable LCD
	cbi 0x18,2
	.dbline -2
L7:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r temp 20 c
	.dbsym r Data 22 c
	.dbend
	.dbfunc e Init_LCD _Init_LCD fV
	.even
_Init_LCD::
	.dbline -1
	.dbline 162
; }
; // ********************************* //
; // *** Initialize the LCD driver *** //
; // ********************************* //
; void Init_LCD(void)
; {
	.dbline 163
; LCD_INIT();
	rcall _LCD_INIT
	.dbline 164
; LCD_WriteControl (LCD_FUNCTION_SET);
	ldi R16,40
	rcall _LCD_WriteControl
	.dbline 165
; LCD_WriteControl (LCD_OFF);
	ldi R16,8
	rcall _LCD_WriteControl
	.dbline 166
; LCD_WriteControl (LCD_CLEAR);
	ldi R16,1
	rcall _LCD_WriteControl
	.dbline 167
; LCD_WriteControl (LCD_MODE_SET);
	ldi R16,6
	rcall _LCD_WriteControl
	.dbline 168
; LCD_WriteControl (LCD_ON);
	ldi R16,12
	rcall _LCD_WriteControl
	.dbline 169
; LCD_WriteControl (LCD_HOME);
	ldi R16,2
	rcall _LCD_WriteControl
	.dbline -2
L8:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e LCD_Clear _LCD_Clear fV
	.even
_LCD_Clear::
	.dbline -1
	.dbline 177
; //LCD_WriteControl (0x90);
; 
; }
; // ************************************************ //
; // *** Clear the LCD screen (also homes cursor) *** //
; // ************************************************ //
; void LCD_Clear(void)
; {
	.dbline 178
; LCD_WriteControl(0x01);
	ldi R16,1
	rcall _LCD_WriteControl
	.dbline -2
L9:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e LCD_Home _LCD_Home fV
	.even
_LCD_Home::
	.dbline -1
	.dbline 184
; }
; // *********************************************** //
; // *** Position the LCD cursor at row 1, col 1 *** //
; // *********************************************** //
; void LCD_Home(void)
; {
	.dbline 185
; LCD_WriteControl(0x02);
	ldi R16,2
	rcall _LCD_WriteControl
	.dbline -2
L10:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e LCD_DisplayCharacter _LCD_DisplayCharacter fV
;           Char -> R20
	.even
_LCD_DisplayCharacter::
	rcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 191
; }
; // ****************************************************************** //
; // *** Display a single character, at the current cursor location *** //
; // ****************************************************************** //
; void LCD_DisplayCharacter (char Char)
; {
	.dbline 192
; LCD_WriteData (Char);
	mov R16,R20
	rcall _LCD_WriteData
	.dbline -2
L11:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r Char 20 c
	.dbend
	.dbfunc e LCD_DisplayString_F _LCD_DisplayString_F fV
;         string -> R20,R21
;         column -> R10
;            row -> R22
	.even
_LCD_DisplayString_F::
	rcall push_gset3
	mov R10,R18
	mov R22,R16
	ldd R20,y+6
	ldd R21,y+7
	.dbline -1
	.dbline 198
; }
; // ********************************************************************* //
; // *** Display a string at the specified row and column, using FLASH *** //
; // ********************************************************************* //
; void LCD_DisplayString_F (char row, char column ,const unsigned char  *string)
; {
	.dbline 199
; LCD_Cursor (row, column);
	mov R18,R10
	mov R16,R22
	rcall _LCD_Cursor
	rjmp L14
L13:
	.dbline 201
	.dbline 202
	mov R2,R20
	mov R3,R21
	subi R20,255  ; offset = 1
	sbci R21,255
	mov R30,R2
	mov R31,R3
	lpm
	mov R16,R0
	rcall _LCD_DisplayCharacter
	.dbline 203
L14:
	.dbline 200
; while (*string)
	mov R30,R20
	mov R31,R21
	lpm
	tst R0
	brne L13
	.dbline -2
L12:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r string 20 pkc
	.dbsym r column 10 c
	.dbsym r row 22 c
	.dbend
	.dbfunc e LCD_DisplayString _LCD_DisplayString fV
;         string -> R20,R21
;         column -> R10
;            row -> R22
	.even
_LCD_DisplayString::
	rcall push_gset3
	mov R10,R18
	mov R22,R16
	ldd R20,y+6
	ldd R21,y+7
	.dbline -1
	.dbline 209
; {
; LCD_DisplayCharacter (*string++);
; }
; }
; // ******************************************************************* //
; // *** Display a string at the specified row and column, using RAM *** //
; // ******************************************************************* //
; void LCD_DisplayString (char row, char column ,unsigned char *string)
; {
	.dbline 210
; LCD_Cursor (row, column);
	mov R18,R10
	mov R16,R22
	rcall _LCD_Cursor
	rjmp L18
L17:
	.dbline 212
	mov R30,R20
	mov R31,R21
	ld R16,Z+
	mov R20,R30
	mov R21,R31
	rcall _LCD_DisplayCharacter
L18:
	.dbline 211
; while (*string)
	mov R30,R20
	mov R31,R21
	ldd R2,z+0
	tst R2
	brne L17
	.dbline -2
L16:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r string 20 pc
	.dbsym r column 10 c
	.dbsym r row 22 c
	.dbend
	.dbfunc e LCD_Cursor _LCD_Cursor fV
;         column -> R20
;            row -> R22
	.even
_LCD_Cursor::
	rcall push_gset2
	mov R20,R18
	mov R22,R16
	.dbline -1
	.dbline 218
; LCD_DisplayCharacter (*string++);
; }
; // *************************************************** //
; // *** Position the LCD cursor at "row", "column". *** //
; // *************************************************** //
; void LCD_Cursor (char row, char column)
; {
	.dbline 219
	clr R23
	cpi R22,1
	ldi R30,0
	cpc R23,R30
	breq L24
	cpi R22,2
	ldi R30,0
	cpc R23,R30
	breq L25
	cpi R22,3
	ldi R30,0
	cpc R23,R30
	breq L26
	cpi R22,4
	ldi R30,0
	cpc R23,R30
	breq L27
	rjmp L22
X0:
	.dbline 219
; switch (row) {
L24:
	.dbline 220
; case 1: LCD_WriteControl (0x80 + column - 1); break;
	mov R16,R20
	subi R16,128    ; addi 128
	subi R16,1
	rcall _LCD_WriteControl
	.dbline 220
	rjmp L22
L25:
	.dbline 221
; case 2: LCD_WriteControl (0xc0 + column - 1); break;
	mov R16,R20
	subi R16,64    ; addi 192
	subi R16,1
	rcall _LCD_WriteControl
	.dbline 221
	rjmp L22
L26:
	.dbline 222
; case 3: LCD_WriteControl (0x94 + column - 1); break;
	mov R16,R20
	subi R16,108    ; addi 148
	subi R16,1
	rcall _LCD_WriteControl
	.dbline 222
	rjmp L22
L27:
	.dbline 223
	mov R16,R20
	subi R16,44    ; addi 212
	subi R16,1
	rcall _LCD_WriteControl
	.dbline 223
	.dbline 224
L22:
	.dbline -2
L20:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r column 20 c
	.dbsym r row 22 c
	.dbend
	.dbfunc e LCD_Cursor_On _LCD_Cursor_On fV
	.even
_LCD_Cursor_On::
	.dbline -1
	.dbline 231
; case 4: LCD_WriteControl (0xd4 + column - 1); break;
; default: break;
; }
; }
; // ************************** //
; // *** Turn the cursor on *** //
; // ************************** //
; void LCD_Cursor_On (void)
; {
	.dbline 232
; LCD_WriteControl (LCD_CURS_ON);
	ldi R16,13
	rcall _LCD_WriteControl
	.dbline -2
L28:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e LCD_Cursor_Off _LCD_Cursor_Off fV
	.even
_LCD_Cursor_Off::
	.dbline -1
	.dbline 238
; }
; // *************************** //
; // *** Turn the cursor off *** //
; // *************************** //
; void LCD_Cursor_Off (void)
; {
	.dbline 239
; LCD_WriteControl (LCD_ON);
	ldi R16,12
	rcall _LCD_WriteControl
	.dbline -2
L29:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e LCD_Display_Off _LCD_Display_Off fV
	.even
_LCD_Display_Off::
	.dbline -1
	.dbline 245
; }
; // ******************** //
; // *** Turn Off LCD *** //
; // ******************** //
; void LCD_Display_Off (void)
; {
	.dbline 246
; LCD_WriteControl(LCD_OFF);
	ldi R16,8
	rcall _LCD_WriteControl
	.dbline -2
L30:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e LCD_Display_On _LCD_Display_On fV
	.even
_LCD_Display_On::
	.dbline -1
	.dbline 252
; }
; // ******************* //
; // *** Turn On LCD *** //
; // ******************* //
; void LCD_Display_On (void)
; {
	.dbline 253
; LCD_WriteControl(LCD_ON);
	ldi R16,12
	rcall _LCD_WriteControl
	.dbline -2
L31:
	.dbline 0 ; func end
	ret
	.dbend

⌨️ 快捷键说明

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