📄 lcd1602.lst
字号:
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 + -