📄 lcd12864_st7920.lst
字号:
(0325) if( I2C_Start()==I2C_ERR )
0176 DF42 RCALL _I2C_Start
0177 2300 TST R16
0178 F411 BNE 0x017B
(0326) return I2C_ERR;
0179 2700 CLR R16
017A C021 RJMP 0x019C
(0327)
(0328) if( I2C_SendWrDAdr_(wrDAdr)==I2C_ERR )
017B 018B MOVW R16,R22
017C DF64 RCALL _I2C_SendWrDAdr_
017D 2300 TST R16
017E F411 BNE 0x0181
(0329) return I2C_ERR;
017F 2700 CLR R16
0180 C01B RJMP 0x019C
(0330)
(0331) if( I2C_SendDat(wordAdr)==I2C_ERR )
0181 2F04 MOV R16,R20
0182 DFA0 RCALL _I2C_SendDat
0183 2300 TST R16
0184 F411 BNE 0x0187
(0332) return I2C_ERR;
0185 2700 CLR R16
0186 C015 RJMP 0x019C
(0333)
(0334) if( I2C_Restart()==I2C_ERR )
0187 DF3E RCALL _I2C_Restart
0188 2300 TST R16
0189 F411 BNE 0x018C
(0335) return I2C_ERR;
018A 2700 CLR R16
018B C010 RJMP 0x019C
(0336)
(0337) if( I2C_SendRdDAdr(rdDAdr)==I2C_ERR )
018C 810C LDD R16,Y+4
018D DF6D RCALL _I2C_SendRdDAdr
018E 2300 TST R16
018F F411 BNE 0x0192
(0338) return I2C_ERR;
0190 2700 CLR R16
0191 C00A RJMP 0x019C
(0339)
(0340) if( I2C_RcvNAckDat(pRdDat)==I2C_ERR )
0192 810E LDD R16,Y+6
0193 811F LDD R17,Y+7
0194 DF9C RCALL _I2C_RcvNAckDat
0195 2300 TST R16
0196 F411 BNE 0x0199
(0341) return I2C_ERR;
0197 2700 CLR R16
0198 C003 RJMP 0x019C
(0342)
(0343) I2C_Stop();
0199 E984 LDI R24,0x94
019A BF86 OUT 0x36,R24
(0344)
(0345) return I2C_CRR;
019B E001 LDI R16,1
019C 940E047A CALL pop_gset2
019E 9508 RET
_I2C_Read_:
i --> R20
num --> R22
pRdDat --> R10
rdDAdr --> Y+8
wordAdr --> R20
wrDAdr --> R12
019F 940E0488 CALL push_gset4
01A1 2F42 MOV R20,R18
01A2 0168 MOVW R12,R16
01A3 84AA LDD R10,Y+10
01A4 84BB LDD R11,Y+11
01A5 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 )
01A6 DF12 RCALL _I2C_Start
01A7 2300 TST R16
01A8 F411 BNE 0x01AB
(0365) return I2C_ERR;
01A9 2700 CLR R16
01AA C033 RJMP 0x01DE
(0366)
(0367) if( I2C_SendWrDAdr_(wrDAdr)==I2C_ERR )
01AB 0186 MOVW R16,R12
01AC DF34 RCALL _I2C_SendWrDAdr_
01AD 2300 TST R16
01AE F411 BNE 0x01B1
(0368) return I2C_ERR;
01AF 2700 CLR R16
01B0 C02D RJMP 0x01DE
(0369)
(0370) if( I2C_SendDat(wordAdr)==I2C_ERR )
01B1 2F04 MOV R16,R20
01B2 DF70 RCALL _I2C_SendDat
01B3 2300 TST R16
01B4 F411 BNE 0x01B7
(0371) return I2C_ERR;
01B5 2700 CLR R16
01B6 C027 RJMP 0x01DE
(0372)
(0373) if( I2C_Restart()==I2C_ERR )
01B7 DF0E RCALL _I2C_Restart
01B8 2300 TST R16
01B9 F411 BNE 0x01BC
(0374) return I2C_ERR;
01BA 2700 CLR R16
01BB C022 RJMP 0x01DE
(0375)
(0376) if( I2C_SendRdDAdr(rdDAdr)==I2C_ERR )
01BC 8508 LDD R16,Y+8
01BD DF3D RCALL _I2C_SendRdDAdr
01BE 2300 TST R16
01BF F411 BNE 0x01C2
(0377) return I2C_ERR;
01C0 2700 CLR R16
01C1 C01C RJMP 0x01DE
(0378)
(0379) for(i=0;i<num-1;i++)
01C2 2744 CLR R20
01C3 C00A RJMP 0x01CE
(0380) if( I2C_RcvAckDat(pRdDat+i)==I2C_ERR )
01C4 2F04 MOV R16,R20
01C5 2711 CLR R17
01C6 0D0A ADD R16,R10
01C7 1D1B ADC R17,R11
01C8 DF78 RCALL _I2C_RcvAckDat
01C9 2300 TST R16
01CA F411 BNE 0x01CD
(0381) return I2C_ERR;
01CB 2700 CLR R16
01CC C011 RJMP 0x01DE
01CD 9543 INC R20
01CE 2F86 MOV R24,R22
01CF 5081 SUBI R24,1
01D0 1748 CP R20,R24
01D1 F390 BCS 0x01C4
(0382)
(0383) if( I2C_RcvNAckDat(pRdDat+i)==I2C_ERR )
01D2 2F04 MOV R16,R20
01D3 2711 CLR R17
01D4 0D0A ADD R16,R10
01D5 1D1B ADC R17,R11
01D6 DF5A RCALL _I2C_RcvNAckDat
01D7 2300 TST R16
01D8 F411 BNE 0x01DB
(0384) return I2C_ERR;
01D9 2700 CLR R16
01DA C003 RJMP 0x01DE
(0385)
(0386) I2C_Stop();
01DB E984 LDI R24,0x94
01DC BF86 OUT 0x36,R24
(0387)
(0388) return I2C_CRR;
01DD E001 LDI R16,1
01DE 940E0480 CALL pop_gset4
01E0 9508 RET
_delay50us:
j --> R20
t --> R16
01E1 940E048E 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--)
01E3 C007 RJMP 0x01EB
(0108) for(j=0;j<70;j++)
01E4 2744 CLR R20
01E5 C001 RJMP 0x01E7
01E6 9543 INC R20
01E7 3446 CPI R20,0x46
01E8 F3E8 BCS 0x01E6
01E9 5001 SUBI R16,1
01EA 4010 SBCI R17,0
01EB 2422 CLR R2
01EC 2433 CLR R3
01ED 1620 CP R2,R16
01EE 0631 CPC R3,R17
01EF F3A4 BLT 0x01E4
01F0 940E0491 CALL pop_gset1
01F2 9508 RET
_delay50ms:
i --> R20
t --> R16
01F3 940E048E 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--)
01F5 C00B RJMP 0x0201
(0123) for(i=0;i<52642;i++)
01F6 2744 CLR R20
01F7 2755 CLR R21
01F8 C002 RJMP 0x01FB
01F9 5F4F SUBI R20,0xFF
01FA 4F5F SBCI R21,0xFF
01FB 3A42 CPI R20,0xA2
01FC ECED LDI R30,0xCD
01FD 075E CPC R21,R30
01FE F3D0 BCS 0x01F9
01FF 5001 SUBI R16,1
0200 4010 SBCI R17,0
0201 2422 CLR R2
0202 2433 CLR R3
0203 1620 CP R2,R16
0204 0631 CPC R3,R17
0205 F384 BLT 0x01F6
0206 940E0491 CALL pop_gset1
0208 9508 RET
FILE: D:\ICC_H\LCD12864_ST7920.H
(0001) /*********************************************************************
(0002) 微 雪 电 子 WaveShare http://www.waveShare.net
(0003)
(0004) 目 的: 建立LCD12864_ST7920的串模式操作库
(0005)
(0006) 目标系统: 基于AVR单片机
(0007)
(0008) 应用软件: ICCAVR
(0009)
(0010) 版 本: Version 1.0
(0011)
(0012) 圆版时间: 2005-09-06
(0013)
(0014) 开发人员: SEE
(0015)
(0016) 说 明: 若用于商业用途,请保留此段文字或注明代码来源
(0017)
(0018) 深 圳 市 微 雪 电 子 有 限 公 司 保 留 所 有 的 版 权
(0019) *********************************************************************/
(0020)
(0021) /*01010101010101010101010101010101010101010101010101010101010101010101
(0022) ----------------------------------------------------------------------
(0023) 版本更新记录:
(0024)
(0025)
(0026)
(0027) ----------------------------------------------------------------------
(0028) 入口参数说明:
(0029) //#define OUT_LCD_CS sbi(DDRD,0)
(0030) //#define SET_LCD_CS sbi(PORTD,0)
(0031) //#define CLR_LCD_CS cbi(PORTD,0)
(0032)
(0033) ----------------------------------------------------------------------
(0034) 待定参数说明:
(0035)
(0036)
(0037) ----------------------------------------------------------------------
(0038) 对外变量说明:
(0039)
(0040) ----------------------------------------------------------------------
(0041) 对外函数说明:
(0042)
(0043) ----------------------------------------------------------------------
(0044) 10101010101010101010101010101010101010101010101010101010101010101010*/
(0045)
(0046)
(0047) /*--------------------------------------------------------------------
(0048) 接口定义:
(0049)
(0050) LCD12864_ST7920 ATmega16
(0051) 1.GND -------- GND
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -