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

📄 main.lst

📁 是一款开发板的外围电路试验程序(附有原理图)
💻 LST
📖 第 1 页 / 共 2 页
字号:
__start:
__text_start:
    00EA E5CF      LDI	R28,0x5F
    00EB E0D4      LDI	R29,4
    00EC BFCD      OUT	0x3D,R28
    00ED BFDE      OUT	0x3E,R29
    00EE 51C0      SUBI	R28,0x10
    00EF 40D0      SBCI	R29,0
    00F0 EA0A      LDI	R16,0xAA
    00F1 8308      STD	Y+0,R16
    00F2 2400      CLR	R0
    00F3 E6E0      LDI	R30,0x60
    00F4 E0F0      LDI	R31,0
    00F5 E010      LDI	R17,0
    00F6 36E4      CPI	R30,0x64
    00F7 07F1      CPC	R31,R17
    00F8 F011      BEQ	0x00FB
    00F9 9201      ST	R0,Z+
    00FA CFFB      RJMP	0x00F6
    00FB 8300      STD	Z+0,R16
    00FC EDE4      LDI	R30,0xD4
    00FD E0F1      LDI	R31,1
    00FE E6A0      LDI	R26,0x60
    00FF E0B0      LDI	R27,0
    0100 E011      LDI	R17,1
    0101 3DE4      CPI	R30,0xD4
    0102 07F1      CPC	R31,R17
    0103 F021      BEQ	0x0108
    0104 95C8      LPM
    0105 9631      ADIW	R30,1
    0106 920D      ST	R0,X+
    0107 CFF9      RJMP	0x0101
    0108 940E0216  CALL	_main
_exit:
    010A CFFF      RJMP	_exit
_OutI:
  aa                   --> R10
  Com                  --> R20
  CtroCode             --> R22
    010B 940E026C  CALL	push_gset3
    010D 2F42      MOV	R20,R18
    010E 2F60      MOV	R22,R16
FILE: F:\工程文件\程序\12864\12864.h
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #include <stdlib.h>
(0004) #include "font.h"
(0005) #include "string.h"
(0006) /*************19264显示接口引脚定义*****************/
(0007) 
(0008) 
(0009) #define	LCD_DI (1 <<6)			    	// PA0----DI
(0010) #define	LCD_RW (1 <<5)					// PA1----RW
(0011) #define	LCD_E (1 <<4)			    	// PA2----E
(0012) #define	LCD_CS1 (1 << 3)	           	// PA3----CS1
(0013) #define	LCD_CS2 (1 << 2)				// PA4----CS2
(0014) 
(0015) #define	LCD_SET_CS1() (PORTA |= LCD_CS1)	// 位置位,输出1
(0016) #define	LCD_SET_CS2() (PORTA |= LCD_CS2)
(0017) #define	LCD_SET_DI() (PORTA |= LCD_DI)
(0018) #define	LCD_SET_RW() (PORTA |= LCD_RW)
(0019) #define	LCD_SET_E() (PORTA |= LCD_E)
(0020) 
(0021) #define	LCD_CLEAR_CS1() (PORTA &= ~LCD_CS1)			// 位清零,输出0
(0022) #define	LCD_CLEAR_CS2() (PORTA &= ~LCD_CS2)
(0023) 
(0024) #define	LCD_CLEAR_DI() (PORTA &= ~LCD_DI)
(0025) #define	LCD_CLEAR_RW()   (PORTA &= ~LCD_RW)
(0026) #define	LCD_CLEAR_E() (PORTA &= ~LCD_E)
(0027) #define	LCD_DATA_OUT	PORTB				//LCD数据输出口
(0028) #define	LCD_DATA_IN 	PINB				//LCD数据输出口
(0029) #define	LCD_DDR 	    DDRB				//LCD数据口方向
(0030) 
(0031) void OutI(unsigned char CtroCode,unsigned char Com);
(0032) void OutD(unsigned char CtroCode,unsigned char Dat);
(0033) void LCD_NOP(void);
(0034) void ClearDisplay(void);
(0035) void DisplayWord(unsigned int Add,unsigned char xAdd,unsigned char yAdd,
(0036) unsigned char SelscP,unsigned char num,unsigned char flag);
(0037) void DisplayLine(unsigned int Add,unsigned char com,unsigned char line,unsigned char flag);
(0038) 
(0039) 
(0040) 
(0041) void OutI(unsigned char CtroCode,unsigned char Com)
(0042) { //Com为指令
(0043)   unsigned char aa=1;    
    010F 24AA      CLR	R10
    0110 94A3      INC	R10
(0044)   switch(CtroCode)
    0111 2777      CLR	R23
    0112 3060      CPI	R22,0
    0113 0767      CPC	R22,R23
    0114 F049      BEQ	0x011E
    0115 3061      CPI	R22,1
    0116 E0E0      LDI	R30,0
    0117 077E      CPC	R23,R30
    0118 F041      BEQ	0x0121
    0119 3062      CPI	R22,2
    011A E0E0      LDI	R30,0
    011B 077E      CPC	R23,R30
    011C F039      BEQ	0x0124
    011D C008      RJMP	0x0126
(0045)   { case 0: LCD_SET_CS1(); //全屏,CS1=0,CS2=0,CS3=0
    011E 9ADB      SBI	0x1B,3
(0046)             LCD_SET_CS2(); 
    011F 9ADA      SBI	0x1B,2
(0047) 			
(0048)   		 	break;
    0120 C005      RJMP	0x0126
(0049)   	case 1: LCD_CLEAR_CS2(); //左屏,CS1=0,CS2=1,CS3=1
    0121 98DA      CBI	0x1B,2
(0050)             LCD_SET_CS1(); 
    0122 9ADB      SBI	0x1B,3
(0051) 			
(0052) 		 	break;
    0123 C002      RJMP	0x0126
(0053) 	case 2: LCD_SET_CS2(); //中屏,CS1=1,CS2=0,CS3=1
    0124 9ADA      SBI	0x1B,2
(0054)             LCD_CLEAR_CS1(); 
    0125 98DB      CBI	0x1B,3
(0055) 			
(0056) 		 	break;	
(0057)    
(0058)   }
(0059)   LCD_DDR=0;
    0126 2422      CLR	R2
    0127 BA27      OUT	0x17,R2
(0060)   LCD_CLEAR_DI();          //DI=0
    0128 98DE      CBI	0x1B,6
(0061)   /*
(0062)   while(aa)
(0063)   { LCD_SET_RW(); //R/W=1
(0064) 	LCD_CLEAR_DI(); //D/I=0
(0065)     LCD_SET_E(); //E=1
(0066)     NOP();
(0067)     LCD_CLEAR_E(); //E=0
(0068)     aa=LCD_DATA_IN;
(0069) 	
(0070)     aa&=0x80;
(0071) 	//if(aa==0) break;
(0072)   }*/
(0073)    LCD_NOP();
    0129 D041      RCALL	_LCD_NOP
(0074)     LCD_NOP();
    012A D040      RCALL	_LCD_NOP
(0075) 	 LCD_NOP();
    012B D03F      RCALL	_LCD_NOP
(0076) 	  LCD_NOP();
    012C D03E      RCALL	_LCD_NOP
(0077)   LCD_DDR=0Xff;
    012D EF8F      LDI	R24,0xFF
    012E BB87      OUT	0x17,R24
(0078)   LCD_CLEAR_RW(); //R/W=0
    012F 98DD      CBI	0x1B,5
(0079)   
(0080)   LCD_SET_E(); //E=1
    0130 9ADC      SBI	0x1B,4
(0081)   LCD_NOP();
    0131 D039      RCALL	_LCD_NOP
(0082)   LCD_DATA_OUT=Com;
    0132 BB48      OUT	0x18,R20
(0083)   LCD_NOP();
    0133 D037      RCALL	_LCD_NOP
(0084)   LCD_CLEAR_E(); //E=0
    0134 98DC      CBI	0x1B,4
(0085)   //
(0086)   LCD_SET_CS1(); //CS1=1,CS2=1,CS3=1
    0135 9ADB      SBI	0x1B,3
(0087)   LCD_SET_CS2(); 
    0136 9ADA      SBI	0x1B,2
    0137 940E0262  CALL	pop_gset3
    0139 9508      RET
_OutD:
  aa                   --> R10
  Dat                  --> R20
  CtroCode             --> R22
    013A 940E026C  CALL	push_gset3
    013C 2F42      MOV	R20,R18
    013D 2F60      MOV	R22,R16
(0088)   
(0089) }
(0090) 
(0091) void OutD(unsigned char CtroCode,unsigned char Dat)
(0092) { //Dat为数据
(0093)   unsigned char aa=1;  
    013E 24AA      CLR	R10
    013F 94A3      INC	R10
(0094)    switch(CtroCode)
    0140 2777      CLR	R23
    0141 3060      CPI	R22,0
    0142 0767      CPC	R22,R23
    0143 F049      BEQ	0x014D
    0144 3061      CPI	R22,1
    0145 E0E0      LDI	R30,0
    0146 077E      CPC	R23,R30
    0147 F041      BEQ	0x0150
    0148 3062      CPI	R22,2
    0149 E0E0      LDI	R30,0
    014A 077E      CPC	R23,R30
    014B F039      BEQ	0x0153
    014C C008      RJMP	0x0155
(0095)   { case 0: LCD_SET_CS1(); //全屏,CS1=0,CS2=0
    014D 9ADB      SBI	0x1B,3
(0096)             LCD_SET_CS2(); 
    014E 9ADA      SBI	0x1B,2
(0097) 			
(0098)   		 	break;
    014F C005      RJMP	0x0155
(0099)   	case 1: LCD_CLEAR_CS2(); //左屏,CS1=0,CS2=1
    0150 98DA      CBI	0x1B,2
(0100)             LCD_SET_CS1(); 
    0151 9ADB      SBI	0x1B,3
(0101) 			
(0102) 		 	break;
    0152 C002      RJMP	0x0155
(0103) 	case 2: LCD_SET_CS2(); //中屏,CS1=1,CS2=0
    0153 9ADA      SBI	0x1B,2
(0104)             LCD_CLEAR_CS1(); 
    0154 98DB      CBI	0x1B,3
(0105) 			
(0106) 		 	break;	
(0107)    
(0108)   }
(0109)   LCD_DDR=0X00;
    0155 2422      CLR	R2
    0156 BA27      OUT	0x17,R2
(0110)  /* while(aa)
(0111)   { LCD_SET_RW(); //RW=1
(0112)     LCD_CLEAR_DI(); //D/I=0
(0113)     LCD_SET_E(); //E=1
(0114) 	NOP();
(0115)     LCD_CLEAR_E(); //E=0
(0116)     aa=LCD_DATA_IN;
(0117)     aa&=0x80;
(0118)   }*/
(0119)   LCD_NOP();
    0157 D013      RCALL	_LCD_NOP
(0120)   LCD_NOP();
    0158 D012      RCALL	_LCD_NOP
(0121)   LCD_NOP();
    0159 D011      RCALL	_LCD_NOP
(0122)   LCD_NOP();
    015A D010      RCALL	_LCD_NOP
(0123)   LCD_NOP();
    015B D00F      RCALL	_LCD_NOP
(0124)   LCD_NOP();
    015C D00E      RCALL	_LCD_NOP
(0125)   
(0126)   LCD_CLEAR_RW(); //RW=0
    015D 98DD      CBI	0x1B,5
(0127)   LCD_SET_DI(); //D/I=1
    015E 9ADE      SBI	0x1B,6
(0128)   LCD_DDR=0Xff;
    015F EF8F      LDI	R24,0xFF
    0160 BB87      OUT	0x17,R24
(0129)   LCD_SET_E(); //E=1
    0161 9ADC      SBI	0x1B,4
(0130)   LCD_NOP();
    0162 D008      RCALL	_LCD_NOP
(0131)   LCD_DATA_OUT=Dat;
    0163 BB48      OUT	0x18,R20
(0132)   
(0133)   
(0134)   LCD_NOP();
    0164 D006      RCALL	_LCD_NOP
(0135)   LCD_CLEAR_E(); //E=0
    0165 98DC      CBI	0x1B,4
(0136)   LCD_SET_CS1(); //CS1=1,CS2=1,CS3=1
    0166 9ADB      SBI	0x1B,3
(0137)   LCD_SET_CS2(); 
    0167 9ADA      SBI	0x1B,2
    0168 940E0262  CALL	pop_gset3
    016A 9508      RET
(0138)   
(0139) }
(0140) 
(0141) void LCD_NOP(void)
(0142) { unsigned int i;
(0143) 
(0144)   for(i=0;i<50;i++); 
_LCD_NOP:
  i                    --> R16
    016B 2700      CLR	R16
    016C 2711      CLR	R17
    016D C002      RJMP	0x0170
    016E 5F0F      SUBI	R16,0xFF
    016F 4F1F      SBCI	R17,0xFF
    0170 3302      CPI	R16,0x32
    0171 E0E0      LDI	R30,0
    0172 071E      CPC	R17,R30
    0173 F3D0      BCS	0x016E
    0174 9508      RET
_ClearDisplay:
  i                    --> R20
  j                    --> R22
    0175 940E026E  CALL	push_gset2
(0145) }
(0146) 
(0147) void ClearDisplay(void)
(0148) { unsigned char i,j;
(0149) 
(0150)   for(i=0;i<8;i++)
    0177 2744      CLR	R20
    0178 C010      RJMP	0x0189
(0151)   { OutI(0,0xb8+i); //X首地址
    0179 2F24      MOV	R18,R20
    017A 5428      SUBI	R18,0x48
    017B 2700      CLR	R16
    017C DF8E      RCALL	_OutI
(0152)   	OutI(0,0x40); //y首地址
    017D E420      LDI	R18,0x40
    017E 2700      CLR	R16
    017F DF8B      RCALL	_OutI
(0153)   	for(j=0;j<64;j++)
    0180 2766      CLR	R22
    0181 C004      RJMP	0x0186
(0154)       OutD(0,0x0);
    0182 2722      CLR	R18
    0183 2700      CLR	R16
    0184 DFB5      RCALL	_OutD
    0185 9563      INC	R22
    0186 3460      CPI	R22,0x40
    0187 F3D0      BCS	0x0182
    0188 9543      INC	R20
    0189 3048      CPI	R20,0x8
    018A F370      BCS	0x0179
    018B 940E025F  CALL	pop_gset2
    018D 9508      RET
_DisplayWord:
  m                    --> R20
  dat                  --> R14
  i                    --> R22
  flag                 --> R10
  num                  --> R12
  SelscP               --> Y+16
  yAdd                 --> Y+14
  xAdd                 --> Y+12
  Add                  --> Y+10
    018E 940E0242  CALL	push_arg4
    0190 940E0268  CALL	push_gset5
    0192 88CA      LDD	R12,Y+18
    0193 88AC      LDD	R10,Y+20
(0155)   }
(0156) }
(0157) 
(0158) 

⌨️ 快捷键说明

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