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

📄 yj1602.s

📁 AVR单片机开发版资料测试程序里的源程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	ldi R16,2
	ldi R17,0
	.dbline -2
	.dbline 105
; }
L27:
	.dbline 0 ; func end
	xjmp _Delayms
	.dbend
	.dbfunc e LCD1602_readBF _LCD1602_readBF fc
;           busy -> R20
	.even
_LCD1602_readBF::
	xcall push_gset1
	.dbline -1
	.dbline 113
; /*******************************************
; 函数名称: LCD1602_readBF
; 功    能: 1602液晶清屏
; 参    数: 无
; 返回值  : busy--为1时忙,为0时可以接收指令
; /********************************************/
; uchar LCD1602_readBF(void)
; {	  
	.dbline 115
; 	uchar busy;
; 	busy=LCD1602_readbyte(iCmd);		//读回BF标志和地址
	clr R16
	xcall _LCD1602_readbyte
	mov R20,R16
	.dbline 116
; 	if(busy&0x80)						//忙
	sbrs R16,7
	rjmp L29
	.dbline 117
; 		busy=1;
	ldi R20,1
	xjmp L30
L29:
	.dbline 119
; 	else	   							//不忙,可以写入
; 		busy=0;
	clr R20
L30:
	.dbline 120
; 	return busy;
	mov R16,R20
	.dbline -2
L28:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r busy 20 c
	.dbend
	.dbfunc e LCD1602_gotoXY _LCD1602_gotoXY fV
;            Col -> R20
;            Row -> R22
	.even
_LCD1602_gotoXY::
	xcall push_gset2
	mov R20,R18
	mov R22,R16
	.dbline -1
	.dbline 130
; }
; /*******************************************
; 函数名称: LCD1602_gotoXY
; 功    能: 移动到指定位置
; 参    数: Row--指定的行
; 	  	  Col--指定的列
; 返回值  : 无
; /********************************************/
; void LCD1602_gotoXY(uchar Row, uchar Col)
; {	
	.dbline 131
; 	switch (Row)		  //选择行
	clr R23
	cpi R22,2
	ldi R30,0
	cpc R23,R30
	breq L35
	xjmp L32
X0:
	.dbline 132
; 	{
L35:
	.dbline 134
; 		case 2:
; 			LCD1602_sendbyte(iCmd, LCDa_L2 + Col); break;	//写入第2行的指定列	
	mov R18,R20
	subi R18,64    ; addi 192
	clr R16
	xcall _LCD1602_sendbyte
	.dbline 134
	xjmp L33
L32:
	.dbline 136
	mov R18,R20
	subi R18,128    ; addi 128
	clr R16
	xcall _LCD1602_sendbyte
	.dbline 136
L33:
	.dbline -2
	.dbline 138
; 		default:
; 			LCD1602_sendbyte(iCmd, LCDa_L1 + Col); break;	//写入第1行的指定列	
; 	}
; }
L31:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r Col 20 c
	.dbsym r Row 22 c
	.dbend
	.dbfunc e LCD1602_initial _LCD1602_initial fV
	.even
_LCD1602_initial::
	.dbline -1
	.dbline 146
; /*******************************************
; 函数名称: LCD1602_initial
; 功    能: 1602液晶初始化
; 参    数: 无
; 返回值  : 无
; /********************************************/
; void LCD1602_initial(void)
; {
	.dbline 147
; 	Delayms(100);				// 等待内部复位
	ldi R16,100
	ldi R17,0
	xcall _Delayms
	.dbline 148
; 	LCD1602_portini();			//端口初始化
	xcall _LCD1602_portini
	.dbline 150
; 	
; 	LCD1602_sendbyte(iCmd, LCDa_FUNCTION);	// 功能、模式设定
	ldi R18,56
	clr R16
	xcall _LCD1602_sendbyte
L37:
	.dbline 151
L38:
	.dbline 151
; 	while(LCD1602_readBF());
	xcall _LCD1602_readBF
	tst R16
	brne L37
	.dbline 152
; 	LCD1602_sendbyte(iCmd, LCDa_ON);		//打开显示
	ldi R18,12
	clr R16
	xcall _LCD1602_sendbyte
L40:
	.dbline 153
L41:
	.dbline 153
; 	while(LCD1602_readBF());
	xcall _LCD1602_readBF
	tst R16
	brne L40
	.dbline 154
; 	LCD1602_clear();						//清屏
	xcall _LCD1602_clear
L43:
	.dbline 155
L44:
	.dbline 155
; 	while(LCD1602_readBF());
	xcall _LCD1602_readBF
	tst R16
	brne L43
	.dbline 156
; 	LCD1602_sendbyte(iCmd, LCDa_ENTRY);	// 输入模式设定		
	ldi R18,6
	clr R16
	.dbline -2
	.dbline 157
; }
L36:
	.dbline 0 ; func end
	xjmp _LCD1602_sendbyte
	.dbend
	.dbfunc e LCD1602_wrCGRAM _LCD1602_wrCGRAM fV
;              i -> R20
;        ptCGRAM -> R22,R23
	.even
_LCD1602_wrCGRAM::
	xcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 165
; /*******************************************
; 函数名称: LCD1602_wrCGRAM
; 功    能: 向CGRAM写入数据
; 参    数: ptCGRAM--CGRAM数据指针
; 返回值  : 无
; /********************************************/
; void LCD1602_wrCGRAM(const uchar *ptCGRAM)
; {
	.dbline 167
; 	uchar i;
; 	LCD1602_sendbyte(iCmd, LCDa_CGRAM_ADDR);  //写入CGRAM首地址
	ldi R18,64
	clr R16
	xcall _LCD1602_sendbyte
	.dbline 168
; 	for (i = 0; i < LCDa_CGMAX; i++)		  //写入64个字节的CGRAM内容
	clr R20
	xjmp L50
L47:
	.dbline 169
	.dbline 170
	mov R30,R20
	clr R31
	add R30,R22
	adc R31,R23
	lpm R18,Z
	ldi R16,1
	xcall _LCD1602_sendbyte
	.dbline 171
L48:
	.dbline 168
	inc R20
L50:
	.dbline 168
	cpi R20,64
	brlo L47
	.dbline -2
	.dbline 172
; 	{
; 		LCD1602_sendbyte(iDat,ptCGRAM[i]);
; 	}
; }
L46:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r ptCGRAM 22 pc
	.dbend
	.dbfunc e LCD1602_disCGRAM _LCD1602_disCGRAM fV
;              i -> R20
	.even
_LCD1602_disCGRAM::
	xcall push_gset1
	.dbline -1
	.dbline 180
; /*******************************************
; 函数名称: LCD1602_disCGRAM
; 功    能: 显示CGRAM内容,将64个字节写在两行,每行32个字节
; 参    数: 无
; 返回值  : 无
; /********************************************/
; void LCD1602_disCGRAM(void)
; {
	.dbline 182
; 	uchar i;
; 	LCD1602_gotoXY(1,6);   //从第1行第6列开始显示
	ldi R18,6
	ldi R16,1
	xcall _LCD1602_gotoXY
	.dbline 183
; 	for (i = 0;i <4;i++)   //显示前32个字节的内容
	clr R20
	xjmp L55
L52:
	.dbline 184
	.dbline 185
	mov R18,R20
	ldi R16,1
	xcall _LCD1602_sendbyte
	.dbline 186
L53:
	.dbline 183
	inc R20
L55:
	.dbline 183
	cpi R20,4
	brlo L52
	.dbline 187
; 	{	 	
; 		LCD1602_sendbyte(iDat, i);		
; 	}
; 	LCD1602_gotoXY(2,6);   //从第2行第6列开始显示
	ldi R18,6
	ldi R16,2
	xcall _LCD1602_gotoXY
	.dbline 188
; 	for (i = 4;i <8;i++)   //显示后32个字节的内容
	ldi R20,4
	xjmp L59
L56:
	.dbline 189
	.dbline 190
	mov R18,R20
	ldi R16,1
	xcall _LCD1602_sendbyte
	.dbline 191
L57:
	.dbline 188
	inc R20
L59:
	.dbline 188
	cpi R20,8
	brlo L56
	.dbline -2
	.dbline 192
; 	{	 	
; 		LCD1602_sendbyte(iDat,i);		
; 	}
; }
L51:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbend
	.dbfunc e main _main fV
;              i -> R20
	.even
_main::
	.dbline -1
	.dbline 200
; /*******************************************
; 函数名称: main
; 功    能: 1602液晶驱动主程序
; 参    数: 无
; 返回值  : 无
; /********************************************/
; void main(void)
; {
	.dbline 202
;  uchar i;
;  Board_init( );
	xcall _Board_init
	.dbline 203
;  LCD1602_initial(); 
	xcall _LCD1602_initial
	xjmp L62
X1:
	.dbline 205
;  while(1)
;  {		 //滚动显示CGROM的字符
L64:
	.dbline 206
L65:
	.dbline 206
;   while(LCD1602_readBF());
	xcall _LCD1602_readBF
	tst R16
	brne L64
	.dbline 207
;   LCD1602_gotoXY(1,17);
	ldi R18,17
	ldi R16,1
	xcall _LCD1602_gotoXY
	.dbline 208
;   LCD1602_sendstr("AVR_PQ1A BOARD");	
	ldi R16,<L67
	ldi R17,>L67
	xcall _LCD1602_sendstr
L68:
	.dbline 209
L69:
	.dbline 209
;   while(LCD1602_readBF());
	xcall _LCD1602_readBF
	tst R16
	brne L68
	.dbline 210
;   LCD1602_gotoXY(2,18);
	ldi R18,18
	ldi R16,2
	xcall _LCD1602_gotoXY
	.dbline 211
;   LCD1602_sendstr("13212800564");	
	ldi R16,<L71
	ldi R17,>L71
	xcall _LCD1602_sendstr
	.dbline 212
;   for(i=0;i<30;i++)
	clr R20
	xjmp L75
L72:
	.dbline 213
	.dbline 214
	ldi R18,24
	clr R16
	xcall _LCD1602_sendbyte
	.dbline 215
	ldi R16,500
	ldi R17,1
	xcall _Delayms
	.dbline 216
L73:
	.dbline 212
	inc R20
L75:
	.dbline 212
	cpi R20,30
	brlo L72
	.dbline 217
	xcall _LCD1602_clear
	.dbline 219
	ldi R16,<_CGRAM
	ldi R17,>_CGRAM
	xcall _LCD1602_wrCGRAM
	.dbline 220
	ldi R16,90
	ldi R17,0
	xcall _Delayms
	.dbline 221
	xcall _LCD1602_disCGRAM
	.dbline 222
	ldi R16,2000
	ldi R17,7
	xcall _Delayms
	.dbline 223
	xcall _LCD1602_clear
	.dbline 224
L62:
	.dbline 204
	xjmp L65
X2:
	.dbline -2
	.dbline 225
;   {
;    LCD1602_sendbyte(iCmd, LCDa_D2L);
;    Delayms(500);
;   }
;   LCD1602_clear();
;   		 //静止显示CGRAM的内容
;   LCD1602_wrCGRAM(CGRAM);
;   Delayms(90);
;   LCD1602_disCGRAM();
;   Delayms(2000);
;   LCD1602_clear();
;  }
; }
L60:
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbend
	.area data(ram, con, rel)
	.dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\3_1602\YJ1602.C
L71:
	.blkb 12
	.area idata
	.byte 49,51,50,49,50,56,48,48,53,54,52,0
	.area data(ram, con, rel)
	.dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\3_1602\YJ1602.C
L67:
	.blkb 15
	.area idata
	.byte 'A,'V,'R,95,'P,'Q,49,'A,32,'B,'O,'A,'R,'D,0
	.area data(ram, con, rel)
	.dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\3_1602\YJ1602.C

⌨️ 快捷键说明

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