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

📄 12864_example.lst

📁 我们编写了一个支持位操作、普通端口操作、并行操作、串行操作等多种模式的12864驱动
💻 LST
📖 第 1 页 / 共 4 页
字号:
__text_start:
__start:
    022F E5CF      LDI	R28,0x5F
    0230 E0D4      LDI	R29,4
    0231 BFCD      OUT	0x3D,R28
    0232 BFDE      OUT	0x3E,R29
    0233 51C0      SUBI	R28,0x10
    0234 40D0      SBCI	R29,0
    0235 EA0A      LDI	R16,0xAA
    0236 8308      STD	Y+0,R16
    0237 2400      CLR	R0
    0238 E6E9      LDI	R30,0x69
    0239 E0F0      LDI	R31,0
    023A E010      LDI	R17,0
    023B 38E1      CPI	R30,0x81
    023C 07F1      CPC	R31,R17
    023D F011      BEQ	0x0240
    023E 9201      ST	R0,Z+
    023F CFFB      RJMP	0x023B
    0240 8300      STD	Z+0,R16
    0241 E5E4      LDI	R30,0x54
    0242 E0F4      LDI	R31,4
    0243 E6A0      LDI	R26,0x60
    0244 E0B0      LDI	R27,0
    0245 E014      LDI	R17,4
    0246 35ED      CPI	R30,0x5D
    0247 07F1      CPC	R31,R17
    0248 F021      BEQ	0x024D
    0249 95C8      LPM
    024A 9631      ADIW	R30,1
    024B 920D      ST	R0,X+
    024C CFF9      RJMP	0x0246
    024D 940E04E5  CALL	_main
_exit:
    024F CFFF      RJMP	_exit
FILE: G:\单片机\源程序\液晶12864驱动\CGM12864\LCD12864_Example\RD_ATMega16L.h
(0001) #ifndef _Use_AdvancedPortCommand
(0002) # define _Use_AdvancedPortCommand
(0003) /***********************************************************
(0004) *  支持库名: ATMage16L Bit Driver                          *
(0005) *  源文件:   RD_ATMage162L.h                               *
(0006) *  版本:     v1.3                                          *
(0007) *  说明:    AVR 通用位操作支持库                          *
(0008) *                                                          *
(0009) *  作者:    傻孩子                                        *
(0010) *  日期:    2005年10月8日                                 *
(0011) *  修改:    傻孩子                                        *
(0012) *  修改时间: 2005年11月28日                                *
(0013) *                                                          *
(0014) *  [说明]                                                  *
(0015) *           1、使用前务必在端口初始化前加入PORTDefine()。  *
(0016) ***********************************************************/
(0017) # include <iom16v.h>
(0018) # include <macros.h>
(0019) 
(0020) 
(0021) /****************************
(0022) *        资源说明           *
(0023) ****************************/
(0024) # define PAInUse        0xff
(0025) # define PBInUse        0xff
(0026) # define PCInUse        0xff
(0027) # define PDInUse        0xff
(0028) # define PEInUse        0x00
(0029) # define PFInUse        0x00
(0030) # define PGInUse        0x00
(0031) # define PHInUse        0x00
(0032) # define PIInUse        0x00
(0033) # define PJInUse        0x00
(0034) # define PKInUse        0x00
(0035) # define PLInUse        0x00
(0036) # define PMInUse        0x00
(0037) # define PNInUse        0x00
(0038) # define POInUse        0x00
(0039) # define PPInUse        0x00
(0040) # define PQInUse        0x00
(0041) # define PRInUse        0x00
(0042) # define PSInUse        0x00
(0043) # define PTInUse        0x00
(0044) # define PUInUse        0x00
(0045) # define PVInUse        0x00
(0046) # define PWInUse        0x00
(0047) # define PXInUse        0x00
(0048) # define PYInUse        0x00
(0049) # define PZInUse        0x00
(0050) 
(0051) /****************************
(0052) *       端口宏定义          *
(0053) ****************************/
(0054) 
(0055) /****************************
(0056) *     高级端口宏定义        *
(0057) ****************************/
(0058) struct PORTBIT
(0059) {
(0060)     unsigned Bit0:1;
(0061) 	unsigned Bit1:1;
(0062)     unsigned Bit2:1;
(0063) 	unsigned Bit3:1;
(0064)     unsigned Bit4:1;
(0065) 	unsigned Bit5:1;
(0066)     unsigned Bit6:1;
(0067) 	unsigned Bit7:1;	
(0068) }*PORTA_BIT,*PORTB_BIT,*PORTC_BIT,*PORTD_BIT,
(0069)  *DDRA_BIT,*DDRB_BIT,*DDRC_BIT,*DDRD_BIT,
(0070)  *PINA_BIT,*PINB_BIT,*PINC_BIT,*PIND_BIT;
(0071) 
(0072) /***********************************************************
(0073) *  函数说明:高级端口扩展初始化                            *
(0074) ***********************************************************/
(0075) void PORTDefine(void)
(0076) {
(0077)     PORTA_BIT = ( struct PORTBIT *)0x3b;
_PORTDefine:
    0250 E38B      LDI	R24,0x3B
    0251 E090      LDI	R25,0
    0252 93900080  STS	PORTA_BIT+1,R25
    0254 9380007F  STS	PORTA_BIT,R24
(0078)     PORTB_BIT = ( struct PORTBIT *)0x38;
    0256 E388      LDI	R24,0x38
    0257 9390007E  STS	PORTB_BIT+1,R25
    0259 9380007D  STS	PORTB_BIT,R24
(0079)     PORTC_BIT = ( struct PORTBIT *)0x35;
    025B E385      LDI	R24,0x35
    025C 9390007C  STS	PORTC_BIT+1,R25
    025E 9380007B  STS	PORTC_BIT,R24
(0080)     PORTD_BIT = ( struct PORTBIT *)0x32;
    0260 E382      LDI	R24,0x32
    0261 9390007A  STS	PORTD_BIT+1,R25
    0263 93800079  STS	PORTD_BIT,R24
(0081) 	
(0082) 	DDRA_BIT = ( struct PORTBIT *)0x3A;
    0265 E38A      LDI	R24,0x3A
    0266 93900078  STS	DDRA_BIT+1,R25
    0268 93800077  STS	DDRA_BIT,R24
(0083) 	DDRB_BIT = ( struct PORTBIT *)0x37;
    026A E387      LDI	R24,0x37
    026B 93900076  STS	DDRB_BIT+1,R25
    026D 93800075  STS	DDRB_BIT,R24
(0084) 	DDRC_BIT = ( struct PORTBIT *)0x34;
    026F E384      LDI	R24,0x34
    0270 93900074  STS	DDRC_BIT+1,R25
    0272 93800073  STS	DDRC_BIT,R24
(0085) 	DDRD_BIT = ( struct PORTBIT *)0x31;
    0274 E381      LDI	R24,0x31
    0275 93900072  STS	DDRD_BIT+1,R25
    0277 93800071  STS	DDRD_BIT,R24
(0086) 	
(0087) 	PINA_BIT = ( struct PORTBIT *)0x39;
    0279 E389      LDI	R24,0x39
    027A 93900070  STS	PINA_BIT+1,R25
    027C 9380006F  STS	PINA_BIT,R24
(0088) 	PINB_BIT = ( struct PORTBIT *)0x36;
    027E E386      LDI	R24,0x36
    027F 9390006E  STS	PINB_BIT+1,R25
    0281 9380006D  STS	PINB_BIT,R24
(0089) 	PINC_BIT = ( struct PORTBIT *)0x33;
    0283 E383      LDI	R24,0x33
    0284 9390006C  STS	PINC_BIT+1,R25
    0286 9380006B  STS	PINC_BIT,R24
(0090) 	PIND_BIT = ( struct PORTBIT *)0x30;
    0288 E380      LDI	R24,0x30
    0289 9390006A  STS	PIND_BIT+1,R25
    028B 93800069  STS	PIND_BIT,R24
    028D 9508      RET
_setBIT:
  BIT                  --> R20
    028E 940E053F  CALL	push_gset1
    0290 2F40      MOV	R20,R16
FILE: G:\单片机\源程序\液晶12864驱动\CGM12864\LCD12864_Example\SerialToCollateral.h
(0001) #ifndef _Use_SerialToCollateral
(0002) # define _Use_SerialToCollateral
(0003) /********************************************************
(0004) *  函数库说明:串行输出转为并行输出基本函数库           *
(0005) *  版本:      v1.0                                     *
(0006) *  作者:      傻孩子                                   *
(0007) *  日期:      2006年1月7日                             *
(0008) *  修改:      傻孩子                                   *
(0009) *  修改日期:  2006年2月09日                            *
(0010) *                                                       *
(0011) *  [说明]                                               *
(0012) *          1、该头文件通过3根线连接到595实现对级联的    *
(0013) *             595进行驱动,达到扩展输出端口的作用。     *
(0014) *          2、基本支持单595和2个595级联的情况,并允许   *
(0015) *             在头文件外部自定义多个595级联的情况。当   *
(0016) *             使用外部自定义多级595连接时,只需要定义   *
(0017) *             相应的位段和虚拟端口变量即可。支持位操作  *
(0018) *          3、使用的时候,可以通过查询扫描的方式,也    *
(0019) *             可以在修改虚拟端口值以后通过调用函数      *
(0020) *             refreshVirtualPORT()来即时刷新(推荐)。    *
(0021) ********************************************************/
(0022) 
(0023) /***********************
(0024) *    系 统 宏 定 义    *
(0025) ***********************/
(0026) 
(0027) /*---------------------*
(0028) *    常 数 宏 定 义    *
(0029) *---------------------*/
(0030) #ifndef True
(0031)     # define True       0x01
(0032) #endif
(0033) #ifndef False
(0034)     # define False      0x00
(0035) #endif
(0036) #ifndef NULL
(0037)     # define NULL       0x00
(0038) #endif
(0039) #ifndef Enable
(0040)     # define Enable     0x00
(0041) #endif
(0042) #ifndef Disable
(0043)     # define Disable    0x01
(0044) #endif
(0045) 
(0046) #ifdef _Use_8Bit_VitualPORT
(0047)     struct VirtualPORT
(0048) 	{
(0049) 	    unsigned BIT0:1;
(0050) 		unsigned BIT1:1;
(0051) 		unsigned BIT2:1;
(0052) 		unsigned BIT3:1;
(0053) 		unsigned BIT4:1;
(0054) 		unsigned BIT5:1;
(0055) 		unsigned BIT6:1;
(0056) 		unsigned BIT7:1;
(0057) 	};
(0058) 	
(0059) 	# define VIRTUAL_BIT_COUNT 8
(0060) #endif
(0061) #ifdef _Use_16Bit_VitualPORT
(0062) 	struct VirtualPORT
(0063) 	{
(0064) 	    unsigned BIT0:1;
(0065) 		unsigned BIT1:1;
(0066) 		unsigned BIT2:1;
(0067) 		unsigned BIT3:1;
(0068) 		unsigned BIT4:1;
(0069) 		unsigned BIT5:1;
(0070) 		unsigned BIT6:1;
(0071) 		unsigned BIT7:1;
(0072) 		
(0073) 		unsigned BIT8:1;
(0074) 		unsigned BIT9:1;
(0075) 		unsigned BIT10:1;
(0076) 		unsigned BIT11:1;
(0077) 		unsigned BIT12:1;
(0078) 		unsigned BIT13:1;
(0079) 		unsigned BIT14:1;
(0080) 		unsigned BIT15:1;
(0081) 	};
(0082) 	# define VIRTUAL_BIT_COUNT 16
(0083) #endif
(0084) 
(0085) /*---------------------*
(0086) *    动 作 宏 定 义    *
(0087) *---------------------*/
(0088) #ifndef VRCK
(0089)     # define VRCK       _PB1
(0090) #endif
(0091) #ifndef VSCK
(0092)     # define VSCK       _PB2
(0093) #endif
(0094) #ifndef VSI
(0095)     # define VSI        _PB3
(0096) #endif
(0097) /***********************
(0098) *    全局变量声明区    *
(0099) ***********************/
(0100) #if (VIRTUAL_BIT_COUNT == 8)
(0101)     char VPORT = 0;
(0102) 	
(0103) 	# define PV0        (*VPORTBit).BIT0
(0104) 	# define PV1        (*VPORTBit).BIT1
(0105) 	# define PV2        (*VPORTBit).BIT2
(0106) 	# define PV3        (*VPORTBit).BIT3
(0107) 	# define PV4        (*VPORTBit).BIT4
(0108) 	# define PV5        (*VPORTBit).BIT5
(0109) 	# define PV6        (*VPORTBit).BIT6
(0110) 	# define PV7        (*VPORTBit).BIT7
(0111) 	
(0112) #endif
(0113) #if (VIRTUAL_BIT_COUNT == 16)
(0114)     unsigned int VPORT = 0;
(0115) 
(0116) 	# define PV0        (*VPORTBit).BIT0
(0117) 	# define PV1        (*VPORTBit).BIT1
(0118) 	# define PV2        (*VPORTBit).BIT2
(0119) 	# define PV3        (*VPORTBit).BIT3
(0120) 	# define PV4        (*VPORTBit).BIT4
(0121) 	# define PV5        (*VPORTBit).BIT5
(0122) 	# define PV6        (*VPORTBit).BIT6
(0123) 	# define PV7        (*VPORTBit).BIT7
(0124) 	
(0125) 	# define PV8        (*VPORTBit).BIT8
(0126) 	# define PV9        (*VPORTBit).BIT9
(0127) 	# define PV10       (*VPORTBit).BIT10
(0128) 	# define PV11       (*VPORTBit).BIT11
(0129) 	# define PV12       (*VPORTBit).BIT12
(0130) 	# define PV13       (*VPORTBit).BIT13
(0131) 	# define PV14       (*VPORTBit).BIT14
(0132) 	# define PV15       (*VPORTBit).BIT15
(0133)   
(0134) #endif
(0135) 	struct VirtualPORT *VPORTBit = (struct VirtualPORT *)&(VPORT);
(0136) 
(0137) 
(0138) 
(0139) char IfPortChange = False;
(0140) /***********************
(0141) *    系统函数声明区    *
(0142) ***********************/
(0143) void refreshVirtualPORT(void);
(0144) void sendBITS(char Data);
(0145) void VirtualPORTProccess(void);
(0146) char setBIT(char BIT);
(0147) char clearBIT(char BIT);
(0148) 
(0149) /********************************************************
(0150) *  函数说明:虚拟端口置位函数                           *
(0151) *  输入:    位编号                                     *
(0152) *  输出:    操作是否成功                               *
(0153) ********************************************************/
(0154) char setBIT(char BIT)
(0155) {
(0156)     if (BIT >= VIRTUAL_BIT_COUNT)
    0291 3140      CPI	R20,0x10
    0292 F010      BCS	0x0295
(0157) 	{
(0158) 	    return False;
    0293 2700      CLR	R16
    0294 C015      RJMP	0x02AA
(0159) 	}
(0160) 	
(0161) 	VPORT |= 1<<BIT;
    0295 2F24      MOV	R18,R20
    0296 2733      CLR	R19
    0297 E001      LDI	R16,1
    0298 E010      LDI	R17,0
    0299 940E0556  CALL	lsl16
    029B 90200060  LDS	R2,VPORT
    029D 90300061  LDS	R3,VPORT+1
    029F 2A20      OR	R2,R16
    02A0 2A31      OR	R3,R17
    02A1 92300061  STS	VPORT+1,R3
    02A3 92200060  STS	VPORT,R2
(0162) 	IfPortChange = True;
    02A5 E081      LDI	R24,1
    02A6 93800064  STS	IfPortChange,R24
(0163) 	VirtualPORTProccess();                               //刷新端口
    02A8 D026      RCALL	_VirtualPORTProccess
(0164) 	return True;
    02A9 E001      LDI	R16,1
    02AA 940E0542  CALL	pop_gset1
    02AC 9508      RET
_clearBIT:
  BIT                  --> R20
    02AD 940E053F  CALL	push_gset1
    02AF 2F40      MOV	R20,R16
(0165) }
(0166) 
(0167) /********************************************************
(0168) *  函数说明:虚拟端口清零函数                           *
(0169) *  输入:    位编号                                     *
(0170) *  输出:    操作是否成功                               *
(0171) ********************************************************/
(0172) char clearBIT(char BIT)
(0173) {
(0174)     if (BIT >= VIRTUAL_BIT_COUNT)
    02B0 3140      CPI	R20,0x10
    02B1 F010      BCS	0x02B4
(0175) 	{
(0176) 	    return False;
    02B2 2700      CLR	R16
    02B3 C018      RJMP	0x02CC
(0177) 	}
(0178) 	
(0179) 	VPORT &= ~(1<<BIT);
    02B4 2F24      MOV	R18,R20
    02B5 2733      CLR	R19
    02B6 E001      LDI	R16,1
    02B7 E010      LDI	R17,0
    02B8 940E0556  CALL	lsl16
    02BA 0118      MOVW	R2,R16
    02BB 9420      COM	R2
    02BC 9430      COM	R3
    02BD 90400060  LDS	R4,VPORT
    02BF 90500061  LDS	R5,VPORT+1
    02C1 2042      AND	R4,R2
    02C2 2053      AND	R5,R3
    02C3 92500061  STS	VPORT+1,R5
    02C5 92400060  STS	VPORT,R4
(0180) 	IfPortChange = True;
    02C7 E081      LDI	R24,1
    02C8 93800064  STS	IfPortChange,R24
(0181) 	VirtualPORTProccess();                               //刷新端口
    02CA D004      RCALL	_VirtualPORTProccess
(0182) 	return True;
    02CB E001      LDI	R16,1
    02CC 940E0542  CALL	pop_gset1
    02CE 9508      RET
(0183) }
(0184) 

⌨️ 快捷键说明

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