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

📄 lcd1602.lst

📁 C语言单片机编程的代码及教程文献
💻 LST
📖 第 1 页 / 共 5 页
字号:
    01D0 2F04      MOV	R16,R20
    01D1 DFA0      RCALL	_I2C_SendDat
    01D2 2300      TST	R16
    01D3 F411      BNE	0x01D6
(0332) 		return I2C_ERR;
    01D4 2700      CLR	R16
    01D5 C015      RJMP	0x01EB
(0333) 
(0334) 	if( I2C_Restart()==I2C_ERR )
    01D6 DF3E      RCALL	_I2C_Restart
    01D7 2300      TST	R16
    01D8 F411      BNE	0x01DB
(0335) 		return I2C_ERR;
    01D9 2700      CLR	R16
    01DA C010      RJMP	0x01EB
(0336) 
(0337) 	if( I2C_SendRdDAdr(rdDAdr)==I2C_ERR )
    01DB 810C      LDD	R16,Y+4
    01DC DF6D      RCALL	_I2C_SendRdDAdr
    01DD 2300      TST	R16
    01DE F411      BNE	0x01E1
(0338) 		return I2C_ERR;
    01DF 2700      CLR	R16
    01E0 C00A      RJMP	0x01EB
(0339) 
(0340) 	if( I2C_RcvNAckDat(pRdDat)==I2C_ERR )
    01E1 810E      LDD	R16,Y+6
    01E2 811F      LDD	R17,Y+7
    01E3 DF9C      RCALL	_I2C_RcvNAckDat
    01E4 2300      TST	R16
    01E5 F411      BNE	0x01E8
(0341) 		return I2C_ERR;
    01E6 2700      CLR	R16
    01E7 C003      RJMP	0x01EB
(0342) 
(0343) 	I2C_Stop();
    01E8 E984      LDI	R24,0x94
    01E9 BF86      OUT	0x36,R24
(0344) 
(0345) 	return I2C_CRR;
    01EA E001      LDI	R16,1
    01EB 940E0764  CALL	pop_gset2
    01ED 9508      RET
_I2C_Read_:
  i                    --> R20
  num                  --> R22
  pRdDat               --> R10
  rdDAdr               --> Y+8
  wordAdr              --> R20
  wrDAdr               --> R12
    01EE 940E076F  CALL	push_gset4
    01F0 2F42      MOV	R20,R18
    01F1 0168      MOVW	R12,R16
    01F2 84AA      LDD	R10,Y+10
    01F3 84BB      LDD	R11,Y+11
    01F4 856C      LDD	R22,Y+12
(0346) }
(0347) /*--------------------------------------------------------------------
(0348) 函数名称:I2C读器件,读N个数据
(0349) 函数功能:
(0350) 注意事项:
(0351) 提示说明:
(0352) 输    入:wrDAdr: write device-address 写器件地址
(0353) 		 wordAdr: word address 字地址
(0354) 		 rdDAdr: read device-address 读器件地址
(0355) 		 *pRdDat: p->read data 读取数据指针
(0356) 		 num: number 读取数据个数
(0357) 返    回:
(0358) --------------------------------------------------------------------*/
(0359) bool I2C_Read_(uint16 wrDAdr,uint8 wordAdr,
(0360) 			   uint8 rdDAdr,uint8 *pRdDat,uint8 num)
(0361) {
(0362)  	uint8 i;
(0363) 	
(0364) 	if( I2C_Start()==I2C_ERR )
    01F5 DF12      RCALL	_I2C_Start
    01F6 2300      TST	R16
    01F7 F411      BNE	0x01FA
(0365) 		return I2C_ERR;
    01F8 2700      CLR	R16
    01F9 C033      RJMP	0x022D
(0366) 
(0367) 	if( I2C_SendWrDAdr_(wrDAdr)==I2C_ERR )
    01FA 0186      MOVW	R16,R12
    01FB DF34      RCALL	_I2C_SendWrDAdr_
    01FC 2300      TST	R16
    01FD F411      BNE	0x0200
(0368) 		return I2C_ERR;
    01FE 2700      CLR	R16
    01FF C02D      RJMP	0x022D
(0369) 
(0370) 	if( I2C_SendDat(wordAdr)==I2C_ERR )
    0200 2F04      MOV	R16,R20
    0201 DF70      RCALL	_I2C_SendDat
    0202 2300      TST	R16
    0203 F411      BNE	0x0206
(0371) 		return I2C_ERR;
    0204 2700      CLR	R16
    0205 C027      RJMP	0x022D
(0372) 
(0373) 	if( I2C_Restart()==I2C_ERR )
    0206 DF0E      RCALL	_I2C_Restart
    0207 2300      TST	R16
    0208 F411      BNE	0x020B
(0374) 		return I2C_ERR;
    0209 2700      CLR	R16
    020A C022      RJMP	0x022D
(0375) 
(0376) 	if( I2C_SendRdDAdr(rdDAdr)==I2C_ERR )
    020B 8508      LDD	R16,Y+8
    020C DF3D      RCALL	_I2C_SendRdDAdr
    020D 2300      TST	R16
    020E F411      BNE	0x0211
(0377) 		return I2C_ERR;
    020F 2700      CLR	R16
    0210 C01C      RJMP	0x022D
(0378) 
(0379) 	for(i=0;i<num-1;i++)
    0211 2744      CLR	R20
    0212 C00A      RJMP	0x021D
(0380) 		if( I2C_RcvAckDat(pRdDat+i)==I2C_ERR )
    0213 2F04      MOV	R16,R20
    0214 2711      CLR	R17
    0215 0D0A      ADD	R16,R10
    0216 1D1B      ADC	R17,R11
    0217 DF78      RCALL	_I2C_RcvAckDat
    0218 2300      TST	R16
    0219 F411      BNE	0x021C
(0381) 			return I2C_ERR;
    021A 2700      CLR	R16
    021B C011      RJMP	0x022D
    021C 9543      INC	R20
    021D 2F86      MOV	R24,R22
    021E 5081      SUBI	R24,1
    021F 1748      CP	R20,R24
    0220 F390      BCS	0x0213
(0382) 	
(0383) 	if( I2C_RcvNAckDat(pRdDat+i)==I2C_ERR )
    0221 2F04      MOV	R16,R20
    0222 2711      CLR	R17
    0223 0D0A      ADD	R16,R10
    0224 1D1B      ADC	R17,R11
    0225 DF5A      RCALL	_I2C_RcvNAckDat
    0226 2300      TST	R16
    0227 F411      BNE	0x022A
(0384) 			return I2C_ERR;
    0228 2700      CLR	R16
    0229 C003      RJMP	0x022D
(0385) 
(0386) 	I2C_Stop();
    022A E984      LDI	R24,0x94
    022B BF86      OUT	0x36,R24
(0387) 	
(0388) 	return I2C_CRR;
    022C E001      LDI	R16,1
    022D 940E0767  CALL	pop_gset4
    022F 9508      RET
_delay50us:
  j                    --> R20
  t                    --> R16
    0230 940E0775  CALL	push_gset1
FILE: D:\ICC_H\Hardware.H
(0001) /*********************************************************************
(0002) 	微 雪 电 子   WaveShare   http://www.waveShare.net            	
(0003) 		                                                        
(0004) 目    的:   建立AVR的硬件提取库,增加各类补丁,方便移植
(0005) 					
(0006) 目标系统:   基于AVR单片机
(0007) 		                                                                
(0008) 应用软件:   ICCAVR
(0009) 		                                                                
(0010) 版    本:   Version 1.0                                                          
(0011) 		                                                                
(0012) 圆版时间:   2005-06-25
(0013) 	
(0014) 开发人员:   SEE
(0015) 
(0016) 说    明:   若用于商业用途,请保留此段文字或注明代码来源
(0017) 	
(0018) 	深 圳 市 微 雪 电 子 有 限 公 司 保 留 所 有 的 版 权     
(0019) *********************************************************************/
(0020) 
(0021) /*01010101010101010101010101010101010101010101010101010101010101010101
(0022) ----------------------------------------------------------------------
(0023) 版本更新记录:
(0024) 
(0025) ----------------------------------------------------------------------
(0026) 入口参数说明:
(0027) 
(0028) ----------------------------------------------------------------------
(0029) 待定参数说明:
(0030) 
(0031) ----------------------------------------------------------------------	
(0032) 对外变量说明:
(0033)     
(0034) ----------------------------------------------------------------------
(0035) 对外函数说明:
(0036)    
(0037) ----------------------------------------------------------------------
(0038) 10101010101010101010101010101010101010101010101010101010101010101010*/
(0039) 
(0040) #ifndef Hardware_H
(0041) #define Hardware_H
(0042) 
(0043) #include <math.h>
(0044) #include <string.h>
(0045) #include <stdio.h>
(0046) #include <macros.h>
(0047) #include <eeprom.h>
(0048) //#include <wdt.h>
(0049) 
(0050) /* TWI configs */
(0051) //如使用ATMEGA162(没有TWI接口)之类的MCU,在加载Hardware.H前,务必加“#define NO_INCLUDE_I2C_H 1”语句
(0052) #if NO_INCLUDE_I2C_H
(0053) ;
(0054) #else
(0055) #include "D:\ICC_H\I2C.H"	//i2c即AVR的"twi"
(0056) #endif
(0057) 
(0058) /* hard configs */
(0059) #ifndef flash
(0060) 	#define flash	const
(0061) #endif
(0062) 
(0063) #ifndef code
(0064) 	#define code	const
(0065) #endif
(0066) 
(0067) #ifndef NOP
(0068) 	#define NOP()	asm("nop")
(0069) #endif
(0070) 
(0071) /* io configs */
(0072) #define sbi(io,bit)		(  io |=  (1<<bit) )	//example: sbi(PORTA,0);sbi(DDRA,0);
(0073) #define cbi(io,bit)		(  io &= ~(1<<bit) )	//example: cbi(PORTA,0);cbi(DDRA,0);
(0074) #define gbi(pin ,bit)	( pin &   (1<<bit) )	//example: gbi(PINA,0);
(0075) 
(0076) /* interrupt configs */
(0077) #define DIS_INT  asm("sei")
(0078) #define EN_INT   asm("cli")
(0079) 
(0080) /* wdt configs */
(0081) #define WDT()    asm("wdr")
(0082) 
(0083) /* bit operation */
(0084) //#ifndef BIT
(0085) //#define BIT(x)	( 1<<(x) )
(0086) //#endif
(0087) 
(0088) /* USART configs for 4 Mhz crystal */
(0089) //#define BAUD9600			25
(0090) //#define BAUD19000			12
(0091) //#define UART_TRAN_ON()	UCR |=  0x08
(0092) //#define UART_TRAN_OFF()	UCR &= ~0x08
(0093) //#define UART_RCV_ON()		UCR |=  0x10
(0094) //#define UART_RCV_OFF()	UCR &= ~0x10
(0095) 
(0096) /*--------------------------------------------------------------------
(0097) 函数全称:50us 延时
(0098) 函数功能:当然是 50us延时 啦
(0099) 注意事项:基于7.3728M晶振,稍微有点误差
(0100) 提示说明:调用delay50us(20),得到1ms延时
(0101) 输    入:	
(0102) 返    回:无 
(0103) --------------------------------------------------------------------*/
(0104) void delay50us(sint16 t)
(0105) {
(0106)     uint8 j;		
(0107)     for(;t>0;t--)			
    0232 C007      RJMP	0x023A
(0108)         for(j=0;j<70;j++)	
    0233 2744      CLR	R20
    0234 C001      RJMP	0x0236
    0235 9543      INC	R20
    0236 3446      CPI	R20,0x46
    0237 F3E8      BCS	0x0235
    0238 5001      SUBI	R16,1
    0239 4010      SBCI	R17,0
    023A 2422      CLR	R2
    023B 2433      CLR	R3
    023C 1620      CP	R2,R16
    023D 0631      CPC	R3,R17
    023E F3A4      BLT	0x0233
    023F 940E0778  CALL	pop_gset1
    0241 9508      RET
_delay50ms:
  i                    --> R20
  t                    --> R16
    0242 940E0775  CALL	push_gset1
(0109)             ;
(0110) }
(0111) /*--------------------------------------------------------------------
(0112) 函数全称:50ms 延时
(0113) 函数功能:当然是 50ms延时 啦
(0114) 注意事项:基于7.3728M晶振,稍微有点误差
(0115) 提示说明:调用delay50ms(20),得到1s延时 
(0116) 输    入:
(0117) 返    回:无
(0118) --------------------------------------------------------------------*/
(0119) void delay50ms(sint16 t)
(0120) {
(0121) 	uint16 i; 
(0122) 	for(;t>0;t--)
    0244 C00B      RJMP	0x0250
(0123) 		for(i=0;i<52642;i++)
    0245 2744      CLR	R20
    0246 2755      CLR	R21
    0247 C002      RJMP	0x024A
    0248 5F4F      SUBI	R20,0xFF
    0249 4F5F      SBCI	R21,0xFF
    024A 3A42      CPI	R20,0xA2
    024B ECED      LDI	R30,0xCD
    024C 075E      CPC	R21,R30
    024D F3D0      BCS	0x0248
    024E 5001      SUBI	R16,1
    024F 4010      SBCI	R17,0
    0250 2422      CLR	R2
    0251 2433      CLR	R3
    0252 1620      CP	R2,R16
    0253 0631      CPC	R3,R17
    0254 F384      BLT	0x0245
    0255 940E0778  CALL	pop_gset1
    0257 9508      RET
FILE: D:\ICC_H\LCD1602_.H
(0001) /*********************************************************************
(0002) 	微 雪 电 子   WaveShare   http://www.waveShare.net            	
(0003) 	                                                        
(0004) 目    的:   建立LCD1602的4位数据模式操作库
(0005) 
(0006) 目标系统:   基于AVR单片机
(0007) 	                                                                
(0008) 应用软件:   ICCAVR                                               
(0009) 	                                                                
(0010) 版    本:   Version 1.0
(0011) 	                                                                
(0012) 圆版时间:   2004-08-25
(0013) 
(0014) 开发人员:   SEE
(0015) 
(0016) 说    明:   若用于商业用途,请保留此段文字或注明代码来源
(0017) 
(0018) 	深 圳 市 微 雪 电 子 有 限 公 司 保 留 所 有 的 版 权 
(0019) *********************************************************************/
(0020) 
(0021) /*01010101010101010101010101010101010101010101010101010101010101010101
(0022) ----------------------------------------------------------------------
(0023) 版本更新记录:
(0024) 	版    本:   Version 1.1
(0025) 	圆版时间:   2005-03-25
(0026) 
(0027) ----------------------------------------------------------------------
(0028) 入口参数说明:
(0029) 
(0030) 	// control port
(0031) 	//#define SET_RS  sbi(PORTB,5)
(0032) 	//#define CLR_RS  cbi(PORTB,5)
(0033) 	//#define OUT_RS  sbi(DDRB,5)
(0034)     
(0035) 	//#define SET_RW  sbi(PORTB,6)
(0036) 	//#define CLR_RW  cbi(PORTB,6)
(0037) 	//#define OUT_RW  sbi(DDRB,6)
(0038)     
(0039) 	//#define SET_E   sbi(PORTB,7)
(0040) 	//#define CLR_E   cbi(PORTB,7)
(0041) 	//#define OUT_E   sbi(DDRB,7)
(0042)     
(0043) 	// data port
(0044) 	//#define SET_D4  sbi(PORTD,4)
(0045) 	//#define CLR_D4  cbi(PORTD,4)
(0046) 	//#define OUT_D4  sbi(DDRD,4)
(0047)     
(0048) 	//#define SET_D5  sbi(PORTD,5)
(0049) 	//#define CLR_D5  cbi(PORTD,5)
(0050) 	//#define OUT_D5  sbi(DDRD,5)
(0051)     
(0052) 	//#define SET_D6  sbi(PORTD,6)
(0053) 	//#define CLR_D6  cbi(PORTD,6)
(0054) 	//#define OUT_D6  sbi(DDRD,6)
(0055)     
(0056) 	//#define SET_D7  sbi(PORTD,7)
(0057) 	//#define CLR_D7  cbi(PORTD,7)
(0058) 	//#define OUT_D7  sbi(DDRD,7)
(0059)     
(0060) 	// busy port
(0061) 	//#define GET_BF  gbi(PIND,7)
(0062) 	//#define OUT_BF  sbi(DDRD,7)
(0063) 	//#define IN_BF	  cbi(DDRD,7)
(0064) 	
(0065) ----------------------------------------------------------------------
(0066) 接口定义:
(0067) LCD1602				ATmega16
(0068) 1.GND		--------	GND
(0069) 2.VCC		--------	VCC
(0070) 3.V0		--------	V0
(0071) 4.RS		--------	由外部程序定义
(0072) 5.R/W		--------	由外部程序定义
(0073) 6.E		--------	由外部程序定义
(0074) 7.D0		--------	NC
(0075) 8.D1		--------	NC
(0076) 9.D2		--------	NC
(0077) 10.D3		--------	NC
(0078) 11.D4		--------	由外部程序定义

⌨️ 快捷键说明

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