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

📄 lcdexper.lst

📁 AVR智能车灯控制系统,实现一些车灯的自动控制,还是多功能性,大家参考一下.
💻 LST
📖 第 1 页 / 共 2 页
字号:
__start:
__text_start:
     295 EFCF      LDI	R28,0xFF
     296 E2D1      LDI	R29,0x21
     297 BFCD      OUT	0x3D,R28
     298 BFDE      OUT	0x3E,R29
     299 51CE      SUBI	R28,0x1E
     29A 40D0      SBCI	R29,0
     29B EA0A      LDI	R16,0xAA
     29C 8308      STD	Y+0,R16
     29D 2400      CLR	R0
     29E E0E0      LDI	R30,0
     29F E0F2      LDI	R31,2
     2A0 E012      LDI	R17,2
     2A1 30E0      CPI	R30,0
     2A2 07F1      CPC	R31,R17
     2A3 F011      BEQ	0x02A6
     2A4 9201      ST	R0,Z+
     2A5 CFFB      RJMP	0x02A1
     2A6 8300      STD	Z+0,R16
     2A7 E2E9      LDI	R30,0x29
     2A8 E0F5      LDI	R31,5
     2A9 E0A0      LDI	R26,0
     2AA E0B2      LDI	R27,2
     2AB E015      LDI	R17,5
     2AC E000      LDI	R16,0
     2AD BF0B      OUT	0x3B,R16
     2AE 32E9      CPI	R30,0x29
     2AF 07F1      CPC	R31,R17
     2B0 F021      BEQ	0x02B5
     2B1 95C8      LPM
     2B2 9631      ADIW	R30,1
     2B3 920D      ST	R0,X+
     2B4 CFF9      RJMP	0x02AE
     2B5 940E 03FC CALL	_main
_exit:
     2B7 CFFF      RJMP	_exit
_Delay:
  i                    --> R20
  t                    --> R16
     2B8 934A      ST	R20,-Y
     2B9 935A      ST	R21,-Y
FILE: E:\example\icc\lcd_exper\lcdexper.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) 
(0004) #define uchar unsigned char
(0005) #define uint unsigned int
(0006) 
(0007) #define DB PORTA
(0008) /******************************************************************** */
(0009) #define	SETBIT(x,y) (x|=(1<<y))      //set bit y in byte x
(0010) #define	CLRBIT(x,y) (x&=(~(1<<y)))   //clear bit y in byte x
(0011) #define	CHKBIT(x,y) (x&(1<<y))       //check bit y in byte x
(0012) /******************************************************************** */
(0013) #define	RS	 0
(0014) #define	RW	 1
(0015) #define	E	 2
(0016) #define	PSB	 3
(0017) #define	RST	 4
(0018) 
(0019) unsigned flash char Chanping1[]={"简易信号采集系统"};
(0020) unsigned flash char jieguo_1[]={"南方医科大学"};
(0021) unsigned flash char jieguo_2[]={"生物医学工程学院"};
(0022) unsigned flash char jieguo_3[]={"2005级影像工程"};
(0023) unsigned flash char jieguo_4[]={"欧阳斌"};
(0024) 
(0025) //***************延时*********************************/
(0026) void Delay(uint t)
(0027) {
(0028)   uint i=0;
     2BA 2744      CLR	R20
     2BB 2755      CLR	R21
(0029)   for(i=0;i<=t;i++);
     2BC C002      RJMP	0x02BF
     2BD 5F4F      SUBI	R20,0xFF
     2BE 4F5F      SBCI	R21,0xFF
     2BF 1704      CP	R16,R20
     2C0 0715      CPC	R17,R21
     2C1 F7D8      BCC	0x02BD
     2C2 9159      LD	R21,Y+
     2C3 9149      LD	R20,Y+
     2C4 9508      RET
_delay_ms:
  t2                   --> R20
  t                    --> R16
     2C5 934A      ST	R20,-Y
(0030) }
(0031) 
(0032) void  delay_ms(unsigned int t)
(0033) {
(0034)     unsigned char t2=200;
     2C6 EC48      LDI	R20,0xC8
     2C7 C005      RJMP	0x02CD
(0035) 	while(t--)while(t2--);   
     2C8 2E24      MOV	R2,R20
     2C9 2433      CLR	R3
     2CA 5041      SUBI	R20,1
     2CB 2022      TST	R2
     2CC F7D9      BNE	0x02C8
     2CD 0118      MOVW	R2,R16
     2CE 5001      SUBI	R16,1
     2CF 4010      SBCI	R17,0
     2D0 2022      TST	R2
     2D1 F7B1      BNE	0x02C8
     2D2 2033      TST	R3
     2D3 F7A1      BNE	0x02C8
     2D4 9149      LD	R20,Y+
     2D5 9508      RET
(0036) }  
(0037) 
(0038) void port_init(void)
(0039) {
(0040)  	PORTA = 0xFF;
_port_init:
     2D6 EF8F      LDI	R24,0xFF
     2D7 BB8B      OUT	0x1B,R24
(0041)  	DDRA  = 0xFF;
     2D8 BB8A      OUT	0x1A,R24
(0042)  	PORTB = 0xFF;
     2D9 BB88      OUT	0x18,R24
(0043)  	DDRB  = 0xFF; 	
     2DA BB87      OUT	0x17,R24
     2DB 9508      RET
(0044) }
(0045) 
(0046) /*-----------------------------------------------------
(0047)   状态检查函数,判断是否处于忙状态
(0048) -------------------------------------------------------*/
(0049) void  Check_Busy(void)
(0050) {
(0051)  	unsigned char dat;
(0052)  	CLRBIT(PORTB,RS);  //RS=0
_Check_Busy:
  dat                  --> Y,+1
     2DC 98C0      CBI	0x18,0
(0053)  	SETBIT(PORTB,RW);  //RW=1
     2DD 9AC1      SBI	0x18,1
(0054)  	DDRA=0x00;			// portA as input
     2DE 2422      CLR	R2
     2DF BA2A      OUT	0x1A,R2
(0055)  	do
(0056)  	{
(0057)  	   	SETBIT(PORTB,E);
     2E0 9AC2      SBI	0x18,2
(0058) 		CLRBIT(PORTB,E);
     2E1 98C2      CBI	0x18,2
(0059)     }
(0060)  	while (PINA&0x80);
     2E2 99CF      SBIC	0x19,7
     2E3 CFFC      RJMP	0x02E0
     2E4 9508      RET
_Write_Command:
  cmdcode              --> R10
     2E5 92AA      ST	R10,-Y
     2E6 2EA0      MOV	R10,R16
(0061) }
(0062) //**********************写命令到LCD***************************/
(0063) 
(0064) void Write_Command(uchar cmdcode)
(0065) {
(0066)   Check_Busy();
     2E7 DFF4      RCALL	_Check_Busy
(0067)   DDRB=0xff;
     2E8 EF8F      LDI	R24,0xFF
     2E9 BB87      OUT	0x17,R24
(0068)   CLRBIT(PORTB,RS);//RS=0;
     2EA 98C0      CBI	0x18,0
(0069)   CLRBIT(PORTB,RW);//RW=0;
     2EB 98C1      CBI	0x18,1
(0070)   DDRA=0xff;
     2EC BB8A      OUT	0x1A,R24
(0071)   DB=cmdcode;
     2ED BAAB      OUT	0x1B,R10
(0072)   Delay(1);//Delay(1);
     2EE E001      LDI	R16,1
     2EF E010      LDI	R17,0
     2F0 DFC7      RCALL	_Delay
(0073)   SETBIT(PORTB,E);//E=1;
     2F1 9AC2      SBI	0x18,2
(0074)   Delay(1);//Delay(1);Delay(1);
     2F2 E001      LDI	R16,1
     2F3 E010      LDI	R17,0
     2F4 DFC3      RCALL	_Delay
(0075)   CLRBIT(PORTB,E);//E=0;
     2F5 98C2      CBI	0x18,2
     2F6 90A9      LD	R10,Y+
     2F7 9508      RET
_Write_Data:
  datacode             --> R10
     2F8 92AA      ST	R10,-Y
     2F9 2EA0      MOV	R10,R16
(0076) }
(0077) //**************************写数据到LCD*************************/
(0078) void Write_Data(uchar datacode)
(0079) {
(0080)   Check_Busy();
     2FA DFE1      RCALL	_Check_Busy
(0081)   DDRB=0xff;
     2FB EF8F      LDI	R24,0xFF
     2FC BB87      OUT	0x17,R24
(0082)   SETBIT(PORTB,RS);//RS=1;
     2FD 9AC0      SBI	0x18,0
(0083)   CLRBIT(PORTB,RW);//RW=0;
     2FE 98C1      CBI	0x18,1
(0084)   DDRA=0xff;
     2FF BB8A      OUT	0x1A,R24
(0085)   DB=datacode;
     300 BAAB      OUT	0x1B,R10
(0086)   Delay(1);//Delay(1);
     301 E001      LDI	R16,1
     302 E010      LDI	R17,0
     303 DFB4      RCALL	_Delay
(0087)   SETBIT(PORTB,E);//E=1;
     304 9AC2      SBI	0x18,2
(0088)   Delay(1);//Delay(1);Delay(1);
     305 E001      LDI	R16,1
     306 E010      LDI	R17,0
     307 DFB0      RCALL	_Delay
(0089)   CLRBIT(PORTB,E);//E=0;
     308 98C2      CBI	0x18,2
     309 90A9      LD	R10,Y+
     30A 9508      RET
(0090) }
(0091) //**************************初始化LCD***********************/
(0092) void Initial_LCD(void) 
(0093) {    
(0094)   Delay(10);
_Initial_LCD:
     30B E00A      LDI	R16,0xA
     30C E010      LDI	R17,0
     30D DFAA      RCALL	_Delay
(0095)   Write_Command(0x30);//30H--基本指令操作 
     30E E300      LDI	R16,0x30
     30F DFD5      RCALL	_Write_Command
(0096)   Delay(5);
     310 E005      LDI	R16,5
     311 E010      LDI	R17,0
     312 DFA5      RCALL	_Delay
(0097)   Write_Command(0x0c);//开显示,关光标,不闪烁.
     313 E00C      LDI	R16,0xC
     314 DFD0      RCALL	_Write_Command
(0098)   Delay(10);
     315 E00A      LDI	R16,0xA
     316 E010      LDI	R17,0
     317 DFA0      RCALL	_Delay
(0099)   Write_Command(0x02);
     318 E002      LDI	R16,2
     319 DFCB      RCALL	_Write_Command
(0100)   Delay(10);
     31A E00A      LDI	R16,0xA
     31B E010      LDI	R17,0
     31C DF9B      RCALL	_Delay
(0101)   Write_Command(0x06);//指定在资料写入或读取时,光标的移动方向,DDRAM的地址计数器(AC)加1。
     31D E006      LDI	R16,6
     31E DFC6      RCALL	_Write_Command
(0102)   Delay(10);
     31F E00A      LDI	R16,0xA
     320 E010      LDI	R17,0
     321 DF96      RCALL	_Delay
(0103)   Write_Command(0x01);//清除显示
     322 E001      LDI	R16,1
     323 DFC1      RCALL	_Write_Command
(0104)   Delay(10);
     324 E00A      LDI	R16,0xA
     325 E010      LDI	R17,0
     326 DF91      RCALL	_Delay
(0105)   Write_Command(0x80);//光标复位
     327 E800      LDI	R16,0x80
     328 DFBC      RCALL	_Write_Command
     329 9508      RET
_Write_String:
  i                    --> R20
  datacode             --> R10
     32A 940E 0450 CALL	push_xgset300C
     32C 0158      MOVW	R10,R16
(0106) } 
(0107) 
(0108) //*************************写一串字符到LCM**************************/
(0109) void Write_String(unsigned flash char datacode[])
(0110) {
(0111)   uchar i=0;
     32D 2744      CLR	R20
     32E C00A      RJMP	0x0339
(0112)   while(datacode[i])
(0113)   {
(0114)     Write_Data(datacode[i]);
     32F 2FE4      MOV	R30,R20
     330 27FF      CLR	R31
     331 0DEA      ADD	R30,R10
     332 1DFB      ADC	R31,R11
     333 9106      ELPM	R16,10(Z)
     334 DFC3      RCALL	_Write_Data
(0115)     i++;
     335 9543      INC	R20
(0116)     if(i==0xff)break;
     336 3F4F      CPI	R20,0xFF
     337 F409      BNE	0x0339
     338 C007      RJMP	0x0340
     339 2FE4      MOV	R30,R20
     33A 27FF      CLR	R31
     33B 0DEA      ADD	R30,R10
     33C 1DFB      ADC	R31,R11
     33D 9026      ELPM	R2,7(Z)
     33E 2022      TST	R2
     33F F779      BNE	0x032F
     340 940C 0455 JMP	pop_xgset300C
_Location_XY:
  y                    --> R20
  x                    --> R22
     342 940E 045A CALL	push_xgsetF00C
     344 2F42      MOV	R20,R18
     345 2F60      MOV	R22,R16
(0117)   }
(0118) }
(0119) /**********************设置坐标*****************/
(0120) void Location_XY(uchar x,uchar y)
(0121) {
(0122)   switch(y)
     346 2EA4      MOV	R10,R20
     347 24BB      CLR	R11
     348 20AA      TST	R10
     349 F411      BNE	0x034C
     34A 20BB      TST	R11
     34B F071      BEQ	0x035A
     34C 01C5      MOVW	R24,R10
     34D 3081      CPI	R24,1
     34E E0E0      LDI	R30,0
     34F 079E      CPC	R25,R30
     350 F059      BEQ	0x035C
     351 3082      CPI	R24,2
     352 E0E0      LDI	R30,0
     353 079E      CPC	R25,R30
     354 F049      BEQ	0x035E
     355 3083      CPI	R24,3
     356 E0E0      LDI	R30,0
     357 079E      CPC	R25,R30
     358 F039      BEQ	0x0360
     359 C008      RJMP	0x0362
(0123)   {
(0124)     case 0:
(0125)       y=0x80;break;
     35A E840      LDI	R20,0x80
     35B C007      RJMP	0x0363
(0126)     case 1:
(0127)       y=0x90;break;
     35C E940      LDI	R20,0x90
     35D C005      RJMP	0x0363
(0128)     case 2:
(0129)      y=0x88;break;
     35E E848      LDI	R20,0x88
     35F C003      RJMP	0x0363
(0130)     case 3:
(0131)       y=0x98;break;
     360 E948      LDI	R20,0x98
     361 C001      RJMP	0x0363
(0132)     default:
(0133)       y=0x80;
     362 E840      LDI	R20,0x80
(0134)   }
(0135)   x=x&0x07;
     363 7067      ANDI	R22,7
(0136)   Write_Command(x+y);
     364 2F06      MOV	R16,R22
     365 0F04      ADD	R16,R20
     366 DF7E      RCALL	_Write_Command
     367 940C 0461 JMP	pop_xgsetF00C
_Write_String_atXY:
  string               --> Y,+2
  y                    --> R12
  x                    --> R10
     369 92AA      ST	R10,-Y
     36A 92CA      ST	R12,-Y
     36B 2EC2      MOV	R12,R18
     36C 2EA0      MOV	R10,R16
(0137) }
(0138) //************************在(x,y)处显示字符串string*************/
(0139) void Write_String_atXY(uchar x,uchar y,unsigned flash char string[])
(0140) {
(0141)   Location_XY(x,y);
     36D 2D2C      MOV	R18,R12
     36E 2D0A      MOV	R16,R10
     36F DFD2      RCALL	_Location_XY
(0142)   Write_String(string);
     370 810A      LDD	R16,Y+2
     371 811B      LDD	R17,Y+3
     372 DFB7      RCALL	_Write_String
     373 90C9      LD	R12,Y+
     374 90A9      LD	R10,Y+
     375 9508      RET
_Clear_Lcd:
  i                    --> R20
  j                    --> R22
     376 934A      ST	R20,-Y
     377 936A      ST	R22,-Y
(0143) }
(0144) 
(0145) //***********清屏******************************/
(0146) void Clear_Lcd( void )
(0147) {
(0148)          uchar i,j;
(0149)          Write_Command(0x34);
     378 E304      LDI	R16,0x34
     379 DF6B      RCALL	_Write_Command
(0150)          Write_Command(0x36);
     37A E306      LDI	R16,0x36
     37B DF69      RCALL	_Write_Command
(0151)          for(i=0;i<32;i++)
     37C 2744      CLR	R20

⌨️ 快捷键说明

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