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

📄 yi1602.lst

📁 AVR单片机开发版资料测试程序里的源程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
    010A 9121      LD	R18,Z+
    010B 01AF      MOVW	R20,R30
    010C E001      LDI	R16,1
    010D DFE4      RCALL	_LCD1602_sendbyte
    010E 01FA      MOVW	R30,R20
    010F 8020      LDD	R2,0+Z
    0110 2022      TST	R2
    0111 F7B9      BNE	0x0109
(0093) 	}
(0094) }
    0112 940E01C7  CALL	pop_gset1
    0114 9508      RET
(0095) /*******************************************
(0096) 函数名称: LCD1602_clear
(0097) 功    能: 1602液晶清屏
(0098) 参    数: 无
(0099) 返回值  : 无
(0100) /********************************************/
(0101) void LCD1602_clear(void)
(0102) {
(0103) 	LCD1602_sendbyte(iCmd,LCDa_CLS);
_LCD1602_clear:
    0115 E021      LDI	R18,1
    0116 2700      CLR	R16
    0117 DFDA      RCALL	_LCD1602_sendbyte
(0104) 	Delayms(2);// 清屏指令写入后,2ms 的延时是很必要的!!!
    0118 E002      LDI	R16,2
    0119 E010      LDI	R17,0
(0105) }
    011A CF7C      RJMP	_Delayms
_LCD1602_readBF:
  busy                 --> R20
    011B 940E01C4  CALL	push_gset1
(0106) /*******************************************
(0107) 函数名称: LCD1602_readBF
(0108) 功    能: 1602液晶清屏
(0109) 参    数: 无
(0110) 返回值  : busy--为1时忙,为0时可以接收指令
(0111) /********************************************/
(0112) uchar LCD1602_readBF(void)
(0113) {	  
(0114) 	uchar busy;
(0115) 	busy=LCD1602_readbyte(iCmd);		//读回BF标志和地址
    011D 2700      CLR	R16
    011E DFBB      RCALL	_LCD1602_readbyte
    011F 2F40      MOV	R20,R16
(0116) 	if(busy&0x80)						//忙
    0120 FF07      SBRS	R16,7
    0121 C002      RJMP	0x0124
(0117) 		busy=1;
    0122 E041      LDI	R20,1
    0123 C001      RJMP	0x0125
(0118) 	else	   							//不忙,可以写入
(0119) 		busy=0;
    0124 2744      CLR	R20
(0120) 	return busy;
    0125 2F04      MOV	R16,R20
    0126 940E01C7  CALL	pop_gset1
    0128 9508      RET
_LCD1602_gotoXY:
  Col                  --> R20
  Row                  --> R22
    0129 940E01DB  CALL	push_gset2
    012B 2F42      MOV	R20,R18
    012C 2F60      MOV	R22,R16
(0121) }
(0122) /*******************************************
(0123) 函数名称: LCD1602_gotoXY
(0124) 功    能: 移动到指定位置
(0125) 参    数: Row--指定的行
(0126) 	  	  Col--指定的列
(0127) 返回值  : 无
(0128) /********************************************/
(0129) void LCD1602_gotoXY(uchar Row, uchar Col)
(0130) {	
(0131) 	switch (Row)		  //选择行
    012D 2777      CLR	R23
    012E 3062      CPI	R22,2
    012F E0E0      LDI	R30,0
    0130 077E      CPC	R23,R30
    0131 F009      BEQ	0x0133
    0132 C005      RJMP	0x0138
(0132) 	{
(0133) 		case 2:
(0134) 			LCD1602_sendbyte(iCmd, LCDa_L2 + Col); break;	//写入第2行的指定列	
    0133 2F24      MOV	R18,R20
    0134 5420      SUBI	R18,0x40
    0135 2700      CLR	R16
    0136 DFBB      RCALL	_LCD1602_sendbyte
    0137 C004      RJMP	0x013C
(0135) 		default:
(0136) 			LCD1602_sendbyte(iCmd, LCDa_L1 + Col); break;	//写入第1行的指定列	
    0138 2F24      MOV	R18,R20
    0139 5820      SUBI	R18,0x80
    013A 2700      CLR	R16
    013B DFB6      RCALL	_LCD1602_sendbyte
(0137) 	}
(0138) }
    013C 940E01DF  CALL	pop_gset2
    013E 9508      RET
(0139) /*******************************************
(0140) 函数名称: LCD1602_initial
(0141) 功    能: 1602液晶初始化
(0142) 参    数: 无
(0143) 返回值  : 无
(0144) /********************************************/
(0145) void LCD1602_initial(void)
(0146) {
(0147) 	Delayms(100);				// 等待内部复位
_LCD1602_initial:
    013F E604      LDI	R16,0x64
    0140 E010      LDI	R17,0
    0141 DF55      RCALL	_Delayms
(0148) 	LCD1602_portini();			//端口初始化
    0142 DF90      RCALL	_LCD1602_portini
(0149) 	
(0150) 	LCD1602_sendbyte(iCmd, LCDa_FUNCTION);	// 功能、模式设定
    0143 E328      LDI	R18,0x38
    0144 2700      CLR	R16
    0145 DFAC      RCALL	_LCD1602_sendbyte
(0151) 	while(LCD1602_readBF());
    0146 DFD4      RCALL	_LCD1602_readBF
    0147 2300      TST	R16
    0148 F7E9      BNE	0x0146
(0152) 	LCD1602_sendbyte(iCmd, LCDa_ON);		//打开显示
    0149 E02C      LDI	R18,0xC
    014A 2700      CLR	R16
    014B DFA6      RCALL	_LCD1602_sendbyte
(0153) 	while(LCD1602_readBF());
    014C DFCE      RCALL	_LCD1602_readBF
    014D 2300      TST	R16
    014E F7E9      BNE	0x014C
(0154) 	LCD1602_clear();						//清屏
    014F DFC5      RCALL	_LCD1602_clear
(0155) 	while(LCD1602_readBF());
    0150 DFCA      RCALL	_LCD1602_readBF
    0151 2300      TST	R16
    0152 F7E9      BNE	0x0150
(0156) 	LCD1602_sendbyte(iCmd, LCDa_ENTRY);	// 输入模式设定		
    0153 E026      LDI	R18,6
    0154 2700      CLR	R16
(0157) }
    0155 CF9C      RJMP	_LCD1602_sendbyte
_LCD1602_wrCGRAM:
  i                    --> R20
  ptCGRAM              --> R22
    0156 940E01DB  CALL	push_gset2
    0158 01B8      MOVW	R22,R16
(0158) /*******************************************
(0159) 函数名称: LCD1602_wrCGRAM
(0160) 功    能: 向CGRAM写入数据
(0161) 参    数: ptCGRAM--CGRAM数据指针
(0162) 返回值  : 无
(0163) /********************************************/
(0164) void LCD1602_wrCGRAM(const uchar *ptCGRAM)
(0165) {
(0166) 	uchar i;
(0167) 	LCD1602_sendbyte(iCmd, LCDa_CGRAM_ADDR);  //写入CGRAM首地址
    0159 E420      LDI	R18,0x40
    015A 2700      CLR	R16
    015B DF96      RCALL	_LCD1602_sendbyte
(0168) 	for (i = 0; i < LCDa_CGMAX; i++)		  //写入64个字节的CGRAM内容
    015C 2744      CLR	R20
    015D C008      RJMP	0x0166
(0169) 	{
(0170) 		LCD1602_sendbyte(iDat,ptCGRAM[i]);
    015E 2FE4      MOV	R30,R20
    015F 27FF      CLR	R31
    0160 0FE6      ADD	R30,R22
    0161 1FF7      ADC	R31,R23
    0162 9124      LD	R18,R18
    0163 E001      LDI	R16,1
    0164 DF8D      RCALL	_LCD1602_sendbyte
    0165 9543      INC	R20
    0166 3440      CPI	R20,0x40
    0167 F3B0      BCS	0x015E
(0171) 	}
(0172) }
    0168 940E01DF  CALL	pop_gset2
    016A 9508      RET
_LCD1602_disCGRAM:
  i                    --> R20
    016B 940E01C4  CALL	push_gset1
(0173) /*******************************************
(0174) 函数名称: LCD1602_disCGRAM
(0175) 功    能: 显示CGRAM内容,将64个字节写在两行,每行32个字节
(0176) 参    数: 无
(0177) 返回值  : 无
(0178) /********************************************/
(0179) void LCD1602_disCGRAM(void)
(0180) {
(0181) 	uchar i;
(0182) 	LCD1602_gotoXY(1,6);   //从第1行第6列开始显示
    016D E026      LDI	R18,6
    016E E001      LDI	R16,1
    016F DFB9      RCALL	_LCD1602_gotoXY
(0183) 	for (i = 0;i <4;i++)   //显示前32个字节的内容
    0170 2744      CLR	R20
    0171 C004      RJMP	0x0176
(0184) 	{	 	
(0185) 		LCD1602_sendbyte(iDat, i);		
    0172 2F24      MOV	R18,R20
    0173 E001      LDI	R16,1
    0174 DF7D      RCALL	_LCD1602_sendbyte
    0175 9543      INC	R20
    0176 3044      CPI	R20,4
    0177 F3D0      BCS	0x0172
(0186) 	}
(0187) 	LCD1602_gotoXY(2,6);   //从第2行第6列开始显示
    0178 E026      LDI	R18,6
    0179 E002      LDI	R16,2
    017A DFAE      RCALL	_LCD1602_gotoXY
(0188) 	for (i = 4;i <8;i++)   //显示后32个字节的内容
    017B E044      LDI	R20,4
    017C C004      RJMP	0x0181
(0189) 	{	 	
(0190) 		LCD1602_sendbyte(iDat,i);		
    017D 2F24      MOV	R18,R20
    017E E001      LDI	R16,1
    017F DF72      RCALL	_LCD1602_sendbyte
    0180 9543      INC	R20
    0181 3048      CPI	R20,0x8
    0182 F3D0      BCS	0x017D
(0191) 	}
(0192) }
    0183 940E01C7  CALL	pop_gset1
    0185 9508      RET
(0193) /*******************************************
(0194) 函数名称: main
(0195) 功    能: 1602液晶驱动主程序
(0196) 参    数: 无
(0197) 返回值  : 无
(0198) /********************************************/
(0199) void main(void)
(0200) {
(0201)  uchar i;
(0202)  Board_init( );
_main:
  i                    --> R20
    0186 DF26      RCALL	_Board_init
(0203)  LCD1602_initial(); 
    0187 DFB7      RCALL	_LCD1602_initial
    0188 C029      RJMP	0x01B2
(0204)  while(1)
(0205)  {		 //滚动显示CGROM的字符
(0206)   while(LCD1602_readBF());
    0189 DF91      RCALL	_LCD1602_readBF
    018A 2300      TST	R16
    018B F7E9      BNE	0x0189
(0207)   LCD1602_gotoXY(1,17);
    018C E121      LDI	R18,0x11
    018D E001      LDI	R16,1
    018E DF9A      RCALL	_LCD1602_gotoXY
(0208)   LCD1602_sendstr("AVR_PQ1A BOARD");	
    018F E60C      LDI	R16,0x6C
    0190 E010      LDI	R17,0
    0191 DF73      RCALL	_LCD1602_sendstr
(0209)   while(LCD1602_readBF());
    0192 DF88      RCALL	_LCD1602_readBF
    0193 2300      TST	R16
    0194 F7E9      BNE	0x0192
(0210)   LCD1602_gotoXY(2,18);
    0195 E122      LDI	R18,0x12
    0196 E002      LDI	R16,2
    0197 DF91      RCALL	_LCD1602_gotoXY
(0211)   LCD1602_sendstr("13212800564");	
    0198 E600      LDI	R16,0x60
    0199 E010      LDI	R17,0
    019A DF6A      RCALL	_LCD1602_sendstr
(0212)   for(i=0;i<30;i++)
    019B 2744      CLR	R20
    019C C007      RJMP	0x01A4
(0213)   {
(0214)    LCD1602_sendbyte(iCmd, LCDa_D2L);
    019D E128      LDI	R18,0x18
    019E 2700      CLR	R16
    019F DF52      RCALL	_LCD1602_sendbyte
(0215)    Delayms(500);
    01A0 EF04      LDI	R16,0xF4
    01A1 E011      LDI	R17,1
    01A2 DEF4      RCALL	_Delayms
    01A3 9543      INC	R20
    01A4 314E      CPI	R20,0x1E
    01A5 F3B8      BCS	0x019D
(0216)   }
(0217)   LCD1602_clear();
    01A6 DF6E      RCALL	_LCD1602_clear
(0218)   		 //静止显示CGRAM的内容
(0219)   LCD1602_wrCGRAM(CGRAM);
    01A7 E600      LDI	R16,0x60
    01A8 E010      LDI	R17,0
    01A9 DFAC      RCALL	_LCD1602_wrCGRAM
(0220)   Delayms(90);
    01AA E50A      LDI	R16,0x5A
    01AB E010      LDI	R17,0
    01AC DEEA      RCALL	_Delayms
(0221)   LCD1602_disCGRAM();
    01AD DFBD      RCALL	_LCD1602_disCGRAM
(0222)   Delayms(2000);
    01AE ED00      LDI	R16,0xD0
    01AF E017      LDI	R17,7
    01B0 DEE6      RCALL	_Delayms
(0223)   LCD1602_clear();
    01B1 DF63      RCALL	_LCD1602_clear
    01B2 CFD6      RJMP	0x0189
(0224)  }
(0225) }FILE: <library>
    01B3 9508      RET
empy16s:
    01B4 920A      ST	R0,-Y
    01B5 921A      ST	R1,-Y
    01B6 938A      ST	R24,-Y
    01B7 939A      ST	R25,-Y
    01B8 9F02      MUL	R16,R18
    01B9 01C0      MOVW	R24,R0
    01BA 9F12      MUL	R17,R18
    01BB 0D90      ADD	R25,R0
    01BC 9F03      MUL	R16,R19
    01BD 0D90      ADD	R25,R0
    01BE 018C      MOVW	R16,R24
    01BF 9199      LD	R25,Y+
    01C0 9189      LD	R24,Y+
    01C1 9019      LD	R1,Y+
    01C2 9009      LD	R0,Y+
    01C3 9508      RET
push_gset1:
    01C4 935A      ST	R21,-Y
    01C5 934A      ST	R20,-Y
    01C6 9508      RET
pop_gset1:
    01C7 E0E1      LDI	R30,1
pop:
    01C8 9149      LD	R20,Y+
    01C9 9159      LD	R21,Y+
    01CA FDE0      SBRC	R30,0
    01CB 9508      RET
    01CC 9169      LD	R22,Y+
    01CD 9179      LD	R23,Y+
    01CE FDE1      SBRC	R30,1
    01CF 9508      RET
    01D0 90A9      LD	R10,Y+
    01D1 90B9      LD	R11,Y+
    01D2 FDE2      SBRC	R30,2
    01D3 9508      RET
    01D4 90C9      LD	R12,Y+
    01D5 90D9      LD	R13,Y+
    01D6 FDE3      SBRC	R30,3
    01D7 9508      RET
    01D8 90E9      LD	R14,Y+
    01D9 90F9      LD	R15,Y+
    01DA 9508      RET
push_gset2:
    01DB 937A      ST	R23,-Y
    01DC 936A      ST	R22,-Y
    01DD 940C01C4  JMP	push_gset1
pop_gset2:
    01DF E0E2      LDI	R30,2
    01E0 940C01C8  JMP	pop

⌨️ 快捷键说明

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