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

📄 lcd1602.src

📁 这个是市面常用液晶显示器1602的C51源代码,能够在各种51单片机上可靠运行.
💻 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 # 125
;---- Variable 'dat?344' assigned to Register 'R7' ----
; {                          
			; SOURCE LINE # 126
; 
;     lcd_busy();
			; SOURCE LINE # 128
	LCALL	lcd_busy
;     lck = 0;
			; SOURCE LINE # 129
	CLR  	lck
;     P1 = 0xef;//LCD_EN = 0
			; SOURCE LINE # 130
	MOV  	P1,#0EFH
;     lck = 1;
			; SOURCE LINE # 131
	SETB 	lck
;     P2 = 0x40;//LCD_RW = P2^7,LCD_RW =1; LCD_RS = P2^6,LCD_RS = 1
			; SOURCE LINE # 132
	MOV  	P2,#040H
; 
;     P0 = dat;
			; SOURCE LINE # 134
	MOV  	P0,R7
;     _nop_();
			; SOURCE LINE # 135
	NOP  	
;     _nop_();
			; SOURCE LINE # 136
	NOP  	
;     _nop_();
			; SOURCE LINE # 137
	NOP  	
;     _nop_();
			; SOURCE LINE # 138
	NOP  	
;     
;     lck = 0;
			; SOURCE LINE # 140
	CLR  	lck
;     P1 = 0xff;//LCD_EN = 1
			; SOURCE LINE # 141
	MOV  	P1,#0FFH
;     lck = 1;
			; SOURCE LINE # 142
	SETB 	lck
; 
;     _nop_();
			; SOURCE LINE # 144
	NOP  	
;     _nop_();
			; SOURCE LINE # 145
	NOP  	
;     _nop_();
			; SOURCE LINE # 146
	NOP  	
;     _nop_();
			; SOURCE LINE # 147
	NOP  	
; 
;     lck = 0;
			; SOURCE LINE # 149
	CLR  	lck
;     P1 = 0xef;//LCD_EN = 0
			; SOURCE LINE # 150
	MOV  	P1,#0EFH
;     lck = 1;
			; SOURCE LINE # 151
	SETB 	lck
;     P2 = 0x00;
			; SOURCE LINE # 152
	CLR  	A
	MOV  	P2,A
; }
			; SOURCE LINE # 153
	RET  	
; END OF _lcd_wdat

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

	RSEG  ?PR?_lcd_pos?LCD1602
_lcd_pos:
	USING	0
			; SOURCE LINE # 161
;---- Variable 'pos?445' assigned to Register 'R7' ----
; {                          
			; SOURCE LINE # 162
;    lcd_wcmd(pos|0x80);      //数据指针=80+地址变量
			; SOURCE LINE # 163
	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 # 172
; { 
			; SOURCE LINE # 173
;     delay(15);                     //等待LCD电源稳定        
			; SOURCE LINE # 174
	MOV  	R7,#0FH
	MOV  	R6,#00H
	LCALL	_delay
;     lcd_wcmd(0x38);          //16*2显示,5*7点阵,8位数据
			; SOURCE LINE # 175
	MOV  	R7,#038H
	LCALL	_lcd_wcmd
;     delay(5);
			; SOURCE LINE # 176
	LCALL	L?0029
;     lcd_wcmd(0x38);         
			; SOURCE LINE # 177
	MOV  	R7,#038H
	LCALL	_lcd_wcmd
;     delay(5);
			; SOURCE LINE # 178
	LCALL	L?0029
;     lcd_wcmd(0x38);         
			; SOURCE LINE # 179
	MOV  	R7,#038H
	LCALL	_lcd_wcmd
;     delay(5);
			; SOURCE LINE # 180
	MOV  	R7,#05H
; 
;     lcd_wcmd(0x0c);          //显示开,关光标
			; SOURCE LINE # 182
	LCALL	L?0028
;     delay(5);
			; SOURCE LINE # 183
	LCALL	L?0030
;     lcd_wcmd(0x06);          //移动光标
			; SOURCE LINE # 184
	MOV  	R7,#06H
	LCALL	_lcd_wcmd
;     delay(5);
			; SOURCE LINE # 185
	DEC  	R7
	MOV  	R6,#00H
	LCALL	_delay
;     lcd_wcmd(0x01);          //清除LCD的显示内容
			; SOURCE LINE # 186
	MOV  	R7,#01H
	LCALL	_lcd_wcmd
;     delay(5);
			; SOURCE LINE # 187
	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 # 196
; {
			; SOURCE LINE # 197
;     lcd_wcmd(0x01);          //清除LCD的显示内容
			; SOURCE LINE # 198
	MOV  	R7,#01H
	LCALL	_lcd_wcmd
;     delay(5);
			; SOURCE LINE # 199
	MOV  	R7,#05H
	MOV  	R6,#00H
	LJMP 	_delay
; END OF lcd_clr

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

	RSEG  ?PR?flash?LCD1602
flash:
	USING	0
			; SOURCE LINE # 208
; {
			; SOURCE LINE # 209
;     delay(600);                //控制停留时间
			; SOURCE LINE # 210
	MOV  	R7,#058H
	MOV  	R6,#02H
	LCALL	_delay
;     lcd_wcmd(0x08);            //关闭显示
			; SOURCE LINE # 211
	MOV  	R7,#08H
	LCALL	_lcd_wcmd
;     delay(100);                    //延时
			; SOURCE LINE # 212
;     lcd_wcmd(0x0c);            //开显示
			; SOURCE LINE # 213
	LCALL	L?0026
;     delay(100);
			; SOURCE LINE # 214
	MOV  	R7,#064H
	MOV  	R6,#00H
	LCALL	_delay
;     lcd_wcmd(0x08);            //关闭显示
			; SOURCE LINE # 215
	MOV  	R7,#08H
	LCALL	_lcd_wcmd
;     delay(100);                     //延时
			; SOURCE LINE # 216
;     lcd_wcmd(0x0c);            //开显示
			; SOURCE LINE # 217
	LCALL	L?0026
;     delay(100);
			; SOURCE LINE # 218
	MOV  	R7,#064H
	MOV  	R6,#00H
	LCALL	_delay
;     lcd_wcmd(0x08);            //关闭显示
			; SOURCE LINE # 219
	MOV  	R7,#08H
	LCALL	_lcd_wcmd
;     delay(100);                     //延时
			; SOURCE LINE # 220
;     lcd_wcmd(0x0c);            //开显示
			; SOURCE LINE # 221
	LCALL	L?0027
;     delay(100);
			; SOURCE LINE # 222
	MOV  	R7,#064H
	MOV  	R6,#00H
	LJMP 	_delay
; END OF flash

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

	RSEG  ?PR?main?LCD1602
main:
	USING	0
			; SOURCE LINE # 231
; {
			; SOURCE LINE # 232
;     uchar i,j;
;     delay(10);
			; SOURCE LINE # 234
	MOV  	R7,#0AH
	MOV  	R6,#00H
	LCALL	_delay
;     P1 = 0x20;//"液晶"指示灯亮
			; SOURCE LINE # 235
	MOV  	P1,#020H
;     lcd_init();                         //初始化LCD
			; SOURCE LINE # 236
	LCALL	lcd_init
?C0014:
;     while(1)              
			; SOURCE LINE # 237
;    { 
			; SOURCE LINE # 238
;       lcd_clr();
			; SOURCE LINE # 239
	LCALL	lcd_clr
; 
;       lcd_pos(0x10);               //设置显示位置为第一行第17列
			; SOURCE LINE # 241
	MOV  	R7,#010H
	LCALL	_lcd_pos
;       i = 0;
			; SOURCE LINE # 242
;---- Variable 'i?846' assigned to Register 'R6' ----
	CLR  	A
	MOV  	R6,A
?C0016:
; 
;      while(dis1[i] != '\0')
			; SOURCE LINE # 244
	MOV  	A,R6
	MOV  	DPTR,#dis1
	MOVC 	A,@A+DPTR
	MOV  	R7,A
	JZ   	?C0017
;      {                                      //显示字符"    Happy     "
			; SOURCE LINE # 245
;        lcd_wdat(dis1[i]);
			; SOURCE LINE # 246
	LCALL	_lcd_wdat
;        i++;
			; SOURCE LINE # 247
	INC  	R6
;      }
			; SOURCE LINE # 248
	SJMP 	?C0016
?C0017:
; 
;       lcd_pos(0x50);              //设置显示位置为第二行第17列
			; SOURCE LINE # 250
	MOV  	R7,#050H
	LCALL	_lcd_pos
;       i = 0;
			; SOURCE LINE # 251
	CLR  	A
	MOV  	R6,A
?C0018:
; 
;      while(dis2[i] != '\0')
			; SOURCE LINE # 253
	MOV  	A,R6
	MOV  	DPTR,#dis2
	MOVC 	A,@A+DPTR
	MOV  	R7,A
	JZ   	?C0019
;      {
			; SOURCE LINE # 254
;        lcd_wdat(dis2[i]);         //显示字符"    51kaifa.com    "
			; SOURCE LINE # 255
	LCALL	_lcd_wdat
;        i++;
			; SOURCE LINE # 256
	INC  	R6
;      }
			; SOURCE LINE # 257
	SJMP 	?C0018
?C0019:
; 
;      for(j=0;j<16;j++)           //向左移动16格
			; SOURCE LINE # 259
;---- Variable 'j?847' assigned to Register 'R3' ----
	CLR  	A
	MOV  	R3,A
?C0020:
;      {
			; SOURCE LINE # 260
;        lcd_wcmd(0x18);           //字符同时左移一格
			; SOURCE LINE # 261
	MOV  	R7,#018H
	LCALL	_lcd_wcmd
;        delay(100);                   //控制移动时间
			; SOURCE LINE # 262
	MOV  	R7,#064H
	MOV  	R6,#00H
	LCALL	_delay
;      }  
			; SOURCE LINE # 263
	INC  	R3
	CJNE 	R3,#010H,?C0020
?C0021:
; 
;       flash();                    //闪动三次
			; SOURCE LINE # 265
	LCALL	flash
;       
;    }
			; SOURCE LINE # 267
	SJMP 	?C0014
; END OF main

	END

⌨️ 快捷键说明

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