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

📄 lcd1602.src

📁 LCD1602驱动
💻 SRC
📖 第 1 页 / 共 2 页
字号:
; /*                                                                 */                                                            
; /*写显示数据到LCD                                                  */                                                      
; /*RS=H,RW=L,E=上升沿,D0-D7=数据。                               */
; /*                                                                 */                                                                                                                                
; /*******************************************************************/
; 
; void lcd_wdat(uchar dat) 

	RSEG  ?PR?_lcd_wdat?LCD1602
_lcd_wdat:
			; SOURCE LINE # 121
;---- Variable 'dat?344' assigned to Register 'R7' ----
; {                          
			; SOURCE LINE # 122
?C0011:
;    while(lcd_busy());
			; SOURCE LINE # 123
	LCALL	lcd_busy
	JC   	?C0011
?C0012:
; 
;     lck = 0;
			; SOURCE LINE # 125
	CLR  	lck
;     P1 = 0x04; // LCD_RS = 1;   LCD_RW = 0; LCD_EN = 0;
			; SOURCE LINE # 126
	MOV  	P1,#04H
;     lck = 1; 
			; SOURCE LINE # 127
	SETB 	lck
; 
;     P0 = dat;
			; SOURCE LINE # 129
	MOV  	P0,R7
;     _nop_();
			; SOURCE LINE # 130
	NOP  	
;     _nop_();
			; SOURCE LINE # 131
	NOP  	
;     _nop_();
			; SOURCE LINE # 132
	NOP  	
;     _nop_();
			; SOURCE LINE # 133
	NOP  	
; 
;     lck = 0;
			; SOURCE LINE # 135
	CLR  	lck
;     P1 = 0x24;// LCD_EN = 1;
			; SOURCE LINE # 136
	MOV  	P1,#024H
;     lck = 1; 
			; SOURCE LINE # 137
	SETB 	lck
; 
;     _nop_();
			; SOURCE LINE # 139
	NOP  	
;     _nop_();
			; SOURCE LINE # 140
	NOP  	
;     _nop_();
			; SOURCE LINE # 141
	NOP  	
;     _nop_();
			; SOURCE LINE # 142
	NOP  	
; 
;     lck = 0;
			; SOURCE LINE # 144
	CLR  	lck
;     P1 = 0x00;//LCD_EN = 0; 
			; SOURCE LINE # 145
	CLR  	A
	MOV  	P1,A
;     lck = 1; 
			; SOURCE LINE # 146
	SETB 	lck
; }
			; SOURCE LINE # 147
	RET  	
; END OF _lcd_wdat

; 
; /*******************************************************************/
; /*                                                                 */                                                                
; /*  设定显示位置                                                   */                                                          
; /*                                                                 */                                                                
; /*******************************************************************/
; 
; void lcd_pos(uchar pos)  

	RSEG  ?PR?_lcd_pos?LCD1602
_lcd_pos:
	USING	0
			; SOURCE LINE # 155
;---- Variable 'pos?445' assigned to Register 'R7' ----
; {                          
			; SOURCE LINE # 156
;    lcd_wcmd(pos|0x80);      //数据指针=80+地址变量
			; SOURCE LINE # 157
	MOV  	A,R7
	ORL  	A,#080H
	MOV  	R7,A
	LJMP 	_lcd_wcmd
; END OF _lcd_pos

; }
; 
; /*******************************************************************/
; /*                                                                 */                                                               
; /*  LCD初始化设定                                                  */                                                         
; /*                                                                 */                                                                 
; /*******************************************************************/
; 
; void lcd_init()

	RSEG  ?PR?lcd_init?LCD1602
lcd_init:
	USING	0
			; SOURCE LINE # 166
; { 
			; SOURCE LINE # 167
;     delay(15);                     //等待LCD电源稳定        
			; SOURCE LINE # 168
	MOV  	R7,#0FH
	MOV  	R6,#00H
	LCALL	_delay
;     lcd_wcmd(0x38);          //16*2显示,5*7点阵,8位数据
			; SOURCE LINE # 169
	MOV  	R7,#038H
	LCALL	_lcd_wcmd
;     delay(5);
			; SOURCE LINE # 170
	LCALL	L?0033
;     lcd_wcmd(0x38);         
			; SOURCE LINE # 171
	MOV  	R7,#038H
	LCALL	_lcd_wcmd
;     delay(5);
			; SOURCE LINE # 172
	LCALL	L?0033
;     lcd_wcmd(0x38);         
			; SOURCE LINE # 173
	MOV  	R7,#038H
	LCALL	_lcd_wcmd
;     delay(5);
			; SOURCE LINE # 174
	MOV  	R7,#05H
; 
;     lcd_wcmd(0x0c);          //显示开,关光标
			; SOURCE LINE # 176
	LCALL	L?0032
;     delay(5);
			; SOURCE LINE # 177
	LCALL	L?0034
;     lcd_wcmd(0x06);          //移动光标
			; SOURCE LINE # 178
	MOV  	R7,#06H
	LCALL	_lcd_wcmd
;     delay(5);
			; SOURCE LINE # 179
	DEC  	R7
	MOV  	R6,#00H
	LCALL	_delay
;     lcd_wcmd(0x01);          //清除LCD的显示内容
			; SOURCE LINE # 180
	MOV  	R7,#01H
	LCALL	_lcd_wcmd
;     delay(5);
			; SOURCE LINE # 181
	MOV  	R7,#05H
	MOV  	R6,#00H
	LJMP 	_delay
; END OF lcd_init

; }
; 
; /*******************************************************************/
; /*                                                                 */                                                                
; /*  清屏子程序                                                     */                                                           
; /*                                                                 */                                                                
; /*******************************************************************/
; 
; void lcd_clr()

	RSEG  ?PR?lcd_clr?LCD1602
lcd_clr:
	USING	0
			; SOURCE LINE # 190
; {
			; SOURCE LINE # 191
;     lcd_wcmd(0x01);          //清除LCD的显示内容
			; SOURCE LINE # 192
	MOV  	R7,#01H
	LCALL	_lcd_wcmd
;     delay(5);
			; SOURCE LINE # 193
	MOV  	R7,#05H
	MOV  	R6,#00H
	LJMP 	_delay
; END OF lcd_clr

; }
; 
; /*******************************************************************/
; /*                                                                 */                                                                
; /*  闪动子程序                                                     */                                                           
; /*                                                                 */                                                                 
; /*******************************************************************/
; 
; void flash()

	RSEG  ?PR?flash?LCD1602
flash:
	USING	0
			; SOURCE LINE # 202
; {
			; SOURCE LINE # 203
;     delay(600);                //控制停留时间
			; SOURCE LINE # 204
	MOV  	R7,#058H
	MOV  	R6,#02H
	LCALL	_delay
;     lcd_wcmd(0x08);            //关闭显示
			; SOURCE LINE # 205
	MOV  	R7,#08H
	LCALL	_lcd_wcmd
;     delay(100);                    //延时
			; SOURCE LINE # 206
;     lcd_wcmd(0x0c);            //开显示
			; SOURCE LINE # 207
	LCALL	L?0030
;     delay(100);
			; SOURCE LINE # 208
	MOV  	R7,#064H
	MOV  	R6,#00H
	LCALL	_delay
;     lcd_wcmd(0x08);            //关闭显示
			; SOURCE LINE # 209
	MOV  	R7,#08H
	LCALL	_lcd_wcmd
;     delay(100);                     //延时
			; SOURCE LINE # 210
;     lcd_wcmd(0x0c);            //开显示
			; SOURCE LINE # 211
	LCALL	L?0030
;     delay(100);
			; SOURCE LINE # 212
	MOV  	R7,#064H
	MOV  	R6,#00H
	LCALL	_delay
;     lcd_wcmd(0x08);            //关闭显示
			; SOURCE LINE # 213
	MOV  	R7,#08H
	LCALL	_lcd_wcmd
;     delay(100);                     //延时
			; SOURCE LINE # 214
;     lcd_wcmd(0x0c);            //开显示
			; SOURCE LINE # 215
	LCALL	L?0031
;     delay(100);
			; SOURCE LINE # 216
	MOV  	R7,#064H
	MOV  	R6,#00H
	LJMP 	_delay
; END OF flash

; }
; 
; /*******************************************************************/
; /*                                                                 */                                                                 
; /*  主程序                                                         */                                                             
; /*                                                                 */                                                                 
; /*******************************************************************/
; 
; main()

	RSEG  ?PR?main?LCD1602
main:
	USING	0
			; SOURCE LINE # 225
; {
			; SOURCE LINE # 226
;     uchar i,j;
;     delay(10);
			; SOURCE LINE # 228
	MOV  	R7,#0AH
	MOV  	R6,#00H
	LCALL	_delay
;     lcd_init();                          //初始化LCD
			; SOURCE LINE # 229
	LCALL	lcd_init
?C0018:
;       
;     while(1)              
			; SOURCE LINE # 231
;    { 
			; SOURCE LINE # 232
;       lcd_clr();
			; SOURCE LINE # 233
	LCALL	lcd_clr
; 
;       lcd_pos(0x10);               //设置显示位置为第一行第17列
			; SOURCE LINE # 235
	MOV  	R7,#010H
	LCALL	_lcd_pos
;       i = 0;
			; SOURCE LINE # 236
;---- Variable 'i?846' assigned to Register 'R6' ----
	CLR  	A
	MOV  	R6,A
?C0020:
; 
;      while(dis1[i] != '\0')
			; SOURCE LINE # 238
	MOV  	A,R6
	MOV  	DPTR,#dis1
	MOVC 	A,@A+DPTR
	MOV  	R7,A
	JZ   	?C0021
;      {                                      //显示字符"    Happy     "
			; SOURCE LINE # 239
;        lcd_wdat(dis1[i]);
			; SOURCE LINE # 240
	LCALL	_lcd_wdat
;        i++;
			; SOURCE LINE # 241
	INC  	R6
;      }
			; SOURCE LINE # 242
	SJMP 	?C0020
?C0021:
; 
;       lcd_pos(0x50);              //设置显示位置为第二行第17列
			; SOURCE LINE # 244
	MOV  	R7,#050H
	LCALL	_lcd_pos
;       i = 0;
			; SOURCE LINE # 245
	CLR  	A
	MOV  	R6,A
?C0022:
; 
;      while(dis2[i] != '\0')
			; SOURCE LINE # 247
	MOV  	A,R6
	MOV  	DPTR,#dis2
	MOVC 	A,@A+DPTR
	MOV  	R7,A
	JZ   	?C0023
;      {
			; SOURCE LINE # 248
;        lcd_wdat(dis2[i]);         //显示字符"    NEW YEAR    "
			; SOURCE LINE # 249
	LCALL	_lcd_wdat
;        i++;
			; SOURCE LINE # 250
	INC  	R6
;      }
			; SOURCE LINE # 251
	SJMP 	?C0022
?C0023:
; 
;      for(j=0;j<16;j++)           //向左移动16格
			; SOURCE LINE # 253
;---- Variable 'j?847' assigned to Register 'R3' ----
	CLR  	A
	MOV  	R3,A
?C0024:
;      {
			; SOURCE LINE # 254
;        lcd_wcmd(0x18);           //字符同时左移一格
			; SOURCE LINE # 255
	MOV  	R7,#018H
	LCALL	_lcd_wcmd
;        delay(100);                   //控制移动时间
			; SOURCE LINE # 256
	MOV  	R7,#064H
	MOV  	R6,#00H
	LCALL	_delay
;      }  
			; SOURCE LINE # 257
	INC  	R3
	CJNE 	R3,#010H,?C0024
?C0025:
; 
;       flash();                            //闪动三次
			; SOURCE LINE # 259
	LCALL	flash
;       
;    }
			; SOURCE LINE # 261
	SJMP 	?C0018
; END OF main

	END

⌨️ 快捷键说明

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