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

📄 lcd_lat.lst

📁 ICC LCD波形显示子程序,采用MEGA128单片机
💻 LST
📖 第 1 页 / 共 3 页
字号:
__text_start:
__start:
    029F EFCF      LDI	R28,0xFF
    02A0 E1D0      LDI	R29,0x10
    02A1 BFCD      OUT	0x3D,R28
    02A2 BFDE      OUT	0x3E,R29
    02A3 51C0      SUBI	R28,0x10
    02A4 40D0      SBCI	R29,0
    02A5 EA0A      LDI	R16,0xAA
    02A6 8308      STD	Y+0,R16
    02A7 2400      CLR	R0
    02A8 EBE1      LDI	R30,0xB1
    02A9 E0F5      LDI	R31,5
    02AA E015      LDI	R17,5
    02AB 3BEA      CPI	R30,0xBA
    02AC 07F1      CPC	R31,R17
    02AD F011      BEQ	0x02B0
    02AE 9201      ST	R0,Z+
    02AF CFFB      RJMP	0x02AB
    02B0 8300      STD	Z+0,R16
    02B1 E8EC      LDI	R30,0x8C
    02B2 E0F0      LDI	R31,0
    02B3 E0A0      LDI	R26,0
    02B4 E0B1      LDI	R27,1
    02B5 E015      LDI	R17,5
    02B6 33ED      CPI	R30,0x3D
    02B7 07F1      CPC	R31,R17
    02B8 F021      BEQ	0x02BD
    02B9 95C8      LPM
    02BA 9631      ADIW	R30,1
    02BB 920D      ST	R0,X+
    02BC CFF9      RJMP	0x02B6
    02BD 940E02C0  CALL	_main
_exit:
    02BF CFFF      RJMP	_exit
_main:
  i                    --> R20
    02C0 9724      SBIW	R28,4
FILE: D:\icc_work\LCD波形显示\main.c
(0001) //ICC-AVR application builder : 2007-5-23 20:55:56
(0002) // Target : M128
(0003) // Crystal: 16.000Mhz
(0004) #include <iom128v.h>
(0005) #include <macros.h>
(0006) #include "all.h"
(0007) #define uchar unsigned char 
(0008) #define uint unsigned int 
(0009) void main()
(0010)       {
(0011) 	   init_devices();
    02C1 940E05DA  CALL	_init_devices
(0012) 	   draw_line( 34,25,56,100);
    02C3 E684      LDI	R24,0x64
    02C4 E090      LDI	R25,0
    02C5 839B      STD	Y+3,R25
    02C6 838A      STD	Y+2,R24
    02C7 E388      LDI	R24,0x38
    02C8 8399      STD	Y+1,R25
    02C9 8388      STD	Y+0,R24
    02CA E129      LDI	R18,0x19
    02CB E030      LDI	R19,0
    02CC E202      LDI	R16,0x22
    02CD E010      LDI	R17,0
    02CE 940E03B7  CALL	_draw_line
(0013) 	   	pic_display();
    02D0 940E0337  CALL	_pic_display
    02D2 C00A      RJMP	0x02DD
(0014) 	   while(1)
(0015) 	       {
(0016) 		   uint i;
(0017) 		   for(i=0;i<5000;i++)
    02D3 2744      CLR	R20
    02D4 2755      CLR	R21
    02D5 C003      RJMP	0x02D9
(0018) 		   {
(0019)            asm("nop");
    02D6 0000      NOP
    02D7 5F4F      SUBI	R20,0xFF
    02D8 4F5F      SBCI	R21,0xFF
    02D9 3848      CPI	R20,0x88
    02DA E1E3      LDI	R30,0x13
    02DB 075E      CPC	R21,R30
    02DC F3C8      BCS	0x02D6
    02DD CFF5      RJMP	0x02D3
    02DE 9624      ADIW	R28,4
    02DF 9508      RET
_delay:
  j                    --> R20
  i                    --> R22
  x                    --> R16
    02E0 940E05FE  CALL	push_gset2
FILE: D:\icc_work\LCD波形显示\Lcd.c
(0001) //ICC-AVR application builder : 2007-5-23 20:55:56
(0002) // Target : M128
(0003) // Crystal: 16.000Mhz
(0004) #include <iom128v.h>
(0005) #include <macros.h>
(0006) #include "all.h"
(0007) #include "pic.h"
(0008) #define uchar unsigned char 
(0009) #define uint unsigned int 
(0010) 
(0011) unsigned char data[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
(0012) unsigned char data2[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
(0013) char *line1;
(0014) char *line2;
(0015) char *line3;
(0016) char *line4;
(0017) //延时程序
(0018) void delay(uint x)
(0019)      {
(0020) 	  uint j; uchar i;
(0021) 	  for(j=0;j<x;j++)
    02E2 2744      CLR	R20
    02E3 2755      CLR	R21
    02E4 C007      RJMP	0x02EC
(0022) 	     {
(0023) 		  for(i=0;i<110;i++);
    02E5 2766      CLR	R22
    02E6 C001      RJMP	0x02E8
    02E7 9563      INC	R22
    02E8 366E      CPI	R22,0x6E
    02E9 F3E8      BCS	0x02E7
    02EA 5F4F      SUBI	R20,0xFF
    02EB 4F5F      SBCI	R21,0xFF
    02EC 1740      CP	R20,R16
    02ED 0751      CPC	R21,R17
    02EE F3B0      BCS	0x02E5
    02EF 940E05F2  CALL	pop_gset2
    02F1 9508      RET
_lcm_out:
  d                    --> R20
  i                    --> R22
  a                    --> R16
    02F2 940E05FE  CALL	push_gset2
(0024) 		  }
(0025) 	  }
(0026) /**********************************************/
(0027) /*液晶发送子程序(串口)
(0028) 输入数据:要发送的8位数据
(0029) 输出:无
(0030) 作者:李怀前
(0031) 修改时间:2006-05-26
(0032) /*********************************************/
(0033) void lcm_out(char a)
(0034)      {
(0035) 	  char i,d;
(0036) 	  for(i=0;i<8;i++)
    02F4 2766      CLR	R22
    02F5 C00A      RJMP	0x0300
(0037) 	     {
(0038) 		  PORTB&=~BIT(PB1);//E=0
    02F6 98C1      CBI	0x18,1
(0039) 		  d=a&0x80;
    02F7 2F40      MOV	R20,R16
    02F8 7840      ANDI	R20,0x80
(0040) 		  if(d)
    02F9 F011      BEQ	0x02FC
(0041) 		      PORTB|=BIT(PB0); //R/W=1
    02FA 9AC0      SBI	0x18,0
    02FB C001      RJMP	0x02FD
(0042) 		  else
(0043) 		      PORTB&=~BIT(PB0);//R/W=0
    02FC 98C0      CBI	0x18,0
(0044) 		  a<<=1;
    02FD 0F00      LSL	R16
(0045) 		  PORTB|=BIT(PB1);	//E=1  	  
    02FE 9AC1      SBI	0x18,1
    02FF 9563      INC	R22
    0300 3068      CPI	R22,0x8
    0301 F3A0      BCS	0x02F6
    0302 940E05F2  CALL	pop_gset2
    0304 9508      RET
_wr_com:
  s                    --> R20
  i                    --> R20
  a                    --> R22
    0305 940E05FE  CALL	push_gset2
    0307 2F60      MOV	R22,R16
(0046) 		  }
(0047) 	  }
(0048) /***********************************************/
(0049) /*液晶写控制字程序
(0050) 输入数据:要写入的8位数据
(0051) 输出:无
(0052) 修改时间:2007-5-26
(0053) /**********************************************/
(0054) void wr_com(uchar a)
(0055)      {
(0056) 	  uchar s,i;
(0057) 	  s=a&0xf0;
    0308 2F46      MOV	R20,R22
    0309 7F40      ANDI	R20,0xF0
(0058) 	  lcm_out(0xf8);
    030A EF08      LDI	R16,0xF8
    030B DFE6      RCALL	_lcm_out
(0059) 	  lcm_out(s);
    030C 2F04      MOV	R16,R20
    030D DFE4      RCALL	_lcm_out
(0060) 	  s=a&0x0f;
    030E 2F46      MOV	R20,R22
    030F 704F      ANDI	R20,0xF
(0061) 	  s<<=4;
    0310 2F84      MOV	R24,R20
    0311 708F      ANDI	R24,0xF
    0312 9582      SWAP	R24
(0062) 	  lcm_out(s);
    0313 2F08      MOV	R16,R24
    0314 DFDD      RCALL	_lcm_out
(0063) 	  for(i=0;i<250;i++)//延时
    0315 2744      CLR	R20
    0316 C002      RJMP	0x0319
(0064) 	     {
(0065) 		  asm("nop");
    0317 0000      NOP
    0318 9543      INC	R20
    0319 3F4A      CPI	R20,0xFA
    031A F3E0      BCS	0x0317
    031B 940E05F2  CALL	pop_gset2
    031D 9508      RET
_wr_date:
  s                    --> R20
  i                    --> R20
  a                    --> R22
    031E 940E05FE  CALL	push_gset2
    0320 2F60      MOV	R22,R16
(0066) 		  }
(0067) 	  }	
(0068) /***********************************************/
(0069) /*液晶写数据字程序
(0070) 输入数据:要写入的8位数据
(0071) 输出:无
(0072) 修改时间:2007-5-26
(0073) /**********************************************/
(0074) void wr_date(uchar a)
(0075)      {
(0076) 	  uchar s,i;
(0077) 	  s=a&0xf0;
    0321 2F46      MOV	R20,R22
    0322 7F40      ANDI	R20,0xF0
(0078) 	  lcm_out(0xfa);
    0323 EF0A      LDI	R16,0xFA
    0324 DFCD      RCALL	_lcm_out
(0079) 	  lcm_out(s);
    0325 2F04      MOV	R16,R20
    0326 DFCB      RCALL	_lcm_out
(0080) 	  s=a&0x0f;
    0327 2F46      MOV	R20,R22
    0328 704F      ANDI	R20,0xF
(0081) 	  s<<=4;
    0329 2F84      MOV	R24,R20
    032A 708F      ANDI	R24,0xF
    032B 9582      SWAP	R24
(0082) 	  lcm_out(s);
    032C 2F08      MOV	R16,R24
    032D DFC4      RCALL	_lcm_out
(0083) 	  for(i=0;i<250;i++)//延时
    032E 2744      CLR	R20
    032F C002      RJMP	0x0332
(0084) 	     {
(0085) 		  asm("nop");
    0330 0000      NOP
    0331 9543      INC	R20
    0332 3F4A      CPI	R20,0xFA
    0333 F3E0      BCS	0x0330
    0334 940E05F2  CALL	pop_gset2
    0336 9508      RET
_pic_display:
  d4                   --> Y+1
  i                    --> R20
  d1                   --> R20
  LCD_X                --> Y+0
  d2                   --> R14
  LCD_Y                --> R10
  qq                   --> R12
  d3                   --> R22
    0337 940E05F8  CALL	push_gset5
    0339 9721      SBIW	R28,1
(0086) 		  }
(0087) 	  }
(0088) /***********************************************/
(0089) /*液晶图形显示子程序
(0090) 输入数据:要写入的8位数据
(0091) 输出:无
(0092) 修改时间:2007-5-26
(0093) /**********************************************/
(0094) void pic_display(void)
(0095) {
(0096)  unsigned char *qq;
(0097)  unsigned char d1,d2,d3,d4,LCD_X=0x80,LCD_Y=0;
    033A E880      LDI	R24,0x80
    033B 8388      STD	Y+0,R24
    033C 24AA      CLR	R10
(0098)  unsigned int i=0;
    033D 2744      CLR	R20
    033E 2755      CLR	R21
(0099)  qq=data_buffer;
    033F E080      LDI	R24,0
    0340 E091      LDI	R25,1
    0341 016C      MOVW	R12,R24
(0100)  for( d1=0; d1<2; d1++ )
    0342 C01D      RJMP	0x0360
(0101)  {
(0102)     LCD_Y=0x80;
    0343 E880      LDI	R24,0x80
    0344 2EA8      MOV	R10,R24
(0103)   	for( d2=0; d2<32; d2++)
    0345 24EE      CLR	R14
    0346 C013      RJMP	0x035A
(0104) 	{
(0105) 	 wr_com(0x34);
    0347 E304      LDI	R16,0x34
    0348 DFBC      RCALL	_wr_com
(0106)  	 wr_com(LCD_Y);
    0349 2D0A      MOV	R16,R10
    034A DFBA      RCALL	_wr_com
(0107)  	 wr_com(LCD_X);
    034B 8108      LDD	R16,Y+0
    034C DFB8      RCALL	_wr_com
(0108)  	 wr_com(0X30);
    034D E300      LDI	R16,0x30
    034E DFB6      RCALL	_wr_com
(0109) 	 for( d3=0; d3<16; d3++ )
    034F 2766      CLR	R22
    0350 C005      RJMP	0x0356
(0110) 	 {
(0111) 	 wr_date(*qq++);
    0351 01F6      MOVW	R30,R12
    0352 9101      LD	R16,Z+
    0353 016F      MOVW	R12,R30
    0354 DFC9      RCALL	_wr_date
    0355 9563      INC	R22
    0356 3160      CPI	R22,0x10
    0357 F3C8      BCS	0x0351
(0112) 	 }
(0113) 	 LCD_Y+=1;
    0358 94A3      INC	R10
    0359 94E3      INC	R14
    035A 2D8E      MOV	R24,R14
    035B 3280      CPI	R24,0x20
    035C F350      BCS	0x0347
(0114) 	}
(0115) 	LCD_X=0x88;
    035D E888      LDI	R24,0x88
    035E 8388      STD	Y+0,R24
    035F 9543      INC	R20
    0360 3042      CPI	R20,2
    0361 F308      BCS	0x0343
(0116)  }
(0117)   wr_com(0x36);
    0362 E306      LDI	R16,0x36
    0363 DFA1      RCALL	_wr_com
(0118)   delay(80);
    0364 E500      LDI	R16,0x50
    0365 E010      LDI	R17,0
    0366 DF79      RCALL	_delay
(0119)  wr_com(0x30);
    0367 E300      LDI	R16,0x30
    0368 DF9C      RCALL	_wr_com
(0120)  delay(80);
    0369 E500      LDI	R16,0x50
    036A E010      LDI	R17,0
    036B DF74      RCALL	_delay
    036C 9621      ADIW	R28,1
    036D 940E05F5  CALL	pop_gset5
    036F 9508      RET
_draw_point:
  byte_adr             --> R22
  LCD_Y                --> R14
  LCD_X                --> R10
  X_Position           --> R12
  X_Temp               --> R20
  State                --> R6
  Y                    --> R18
  X                    --> R16
    0370 940E05F8  CALL	push_gset5
    0372 846A      LDD	R6,Y+10
(0121) }
(0122) /***********************************************/
(0123) /*液晶画线子程序
(0124) 输入数据:要写入的8位数据
(0125) 输出:无
(0126) 修改时间:2007-5-26
(0127) /**********************************************/
(0128) void draw_point(unsigned char X,unsigned char Y,char State) 
(0129) { 
(0130)        unsigned char LCD_X=0,LCD_Y=0; 
    0373 24AA      CLR	R10
    0374 24EE      CLR	R14
(0131)        unsigned int X_Temp  = 0; 
    0375 2744      CLR	R20
    0376 2755      CLR	R21
(0132)         unsigned int X_Position = 0; 
    0377 24CC      CLR	R12
    0378 24DD      CLR	R13
(0133) 		unsigned int byte_adr;
(0134)         X_Temp = X; 
    0379 2F40      MOV	R20,R16
    037A 2755      CLR	R21
    037B C005      RJMP	0x0381
(0135)         while (X_Temp>7) 
(0136)         { 
(0137)                 X_Position++; 
    037C 01C6      MOVW	R24,R12
    037D 9601      ADIW	R24,1
    037E 016C      MOVW	R12,R24
(0138)                 X_Temp = X_Temp-8; 
    037F 5048      SUBI	R20,0x8
    0380 4050      SBCI	R21,0
    0381 E087      LDI	R24,7
    0382 E090      LDI	R25,0
    0383 1784      CP	R24,R20
    0384 0795      CPC	R25,R21
    0385 F3B0      BCS	0x037C
(0139)         } 
(0140)          
(0141)         if (X_Temp<=7) 
    0386 1784      CP	R24,R20
    0387 0795      CPC	R25,R21

⌨️ 快捷键说明

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