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

📄 lcd.s

📁 ICC LCD波形显示子程序,采用MEGA128单片机
💻 S
📖 第 1 页 / 共 5 页
字号:
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile D:\icc_work\LCD波形显示/pic.h
	.dbsym e data_buffer _data_buffer A[1184:1184]c
_data::
	.blkb 2
	.area idata
	.byte 128,64
	.area data(ram, con, rel)
	.dbfile D:\icc_work\LCD波形显示/pic.h
	.blkb 2
	.area idata
	.byte 32,16
	.area data(ram, con, rel)
	.dbfile D:\icc_work\LCD波形显示/pic.h
	.blkb 2
	.area idata
	.byte 8,4
	.area data(ram, con, rel)
	.dbfile D:\icc_work\LCD波形显示/pic.h
	.blkb 2
	.area idata
	.byte 2,1
	.area data(ram, con, rel)
	.dbfile D:\icc_work\LCD波形显示/pic.h
	.dbfile D:\icc_work\LCD波形显示\Lcd.c
	.dbsym e data _data A[8:8]c
_data2::
	.blkb 2
	.area idata
	.byte 127,191
	.area data(ram, con, rel)
	.dbfile D:\icc_work\LCD波形显示\Lcd.c
	.blkb 2
	.area idata
	.byte 223,239
	.area data(ram, con, rel)
	.dbfile D:\icc_work\LCD波形显示\Lcd.c
	.blkb 2
	.area idata
	.byte 247,251
	.area data(ram, con, rel)
	.dbfile D:\icc_work\LCD波形显示\Lcd.c
	.blkb 2
	.area idata
	.byte 253,254
	.area data(ram, con, rel)
	.dbfile D:\icc_work\LCD波形显示\Lcd.c
	.dbsym e data2 _data2 A[8:8]c
	.area text(rom, con, rel)
	.dbfile D:\icc_work\LCD波形显示\Lcd.c
	.dbfunc e delay _delay fV
;              j -> R20,R21
;              i -> R22
;              x -> R16,R17
	.even
_delay::
	xcall push_gset2
	.dbline -1
	.dbline 19
; //ICC-AVR application builder : 2007-5-23 20:55:56
; // Target : M128
; // Crystal: 16.000Mhz
; #include <iom128v.h>
; #include <macros.h>
; #include "all.h"
; #include "pic.h"
; #define uchar unsigned char 
; #define uint unsigned int 
; 
; unsigned char data[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
; unsigned char data2[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
; char *line1;
; char *line2;
; char *line3;
; char *line4;
; //延时程序
; void delay(uint x)
;      {
	.dbline 21
; 	  uint j; uchar i;
; 	  for(j=0;j<x;j++)
	clr R20
	clr R21
	xjmp L5
L2:
	.dbline 22
; 	     {
	.dbline 23
	clr R22
	xjmp L9
L6:
	.dbline 23
L7:
	.dbline 23
	inc R22
L9:
	.dbline 23
	cpi R22,110
	brlo L6
	.dbline 24
L3:
	.dbline 21
	subi R20,255  ; offset = 1
	sbci R21,255
L5:
	.dbline 21
	cp R20,R16
	cpc R21,R17
	brlo L2
	.dbline -2
L1:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r j 20 i
	.dbsym r i 22 c
	.dbsym r x 16 i
	.dbend
	.dbfunc e lcm_out _lcm_out fV
;              d -> R20
;              i -> R22
;              a -> R16
	.even
_lcm_out::
	xcall push_gset2
	.dbline -1
	.dbline 34
; 		  for(i=0;i<110;i++);
; 		  }
; 	  }
; /**********************************************/
; /*液晶发送子程序(串口)
; 输入数据:要发送的8位数据
; 输出:无
; 作者:李怀前
; 修改时间:2006-05-26
; /*********************************************/
; void lcm_out(char a)
;      {
	.dbline 36
; 	  char i,d;
; 	  for(i=0;i<8;i++)
	clr R22
	xjmp L14
L11:
	.dbline 37
; 	     {
	.dbline 38
; 		  PORTB&=~BIT(PB1);//E=0
	cbi 0x18,1
	.dbline 39
; 		  d=a&0x80;
	mov R20,R16
	andi R20,128
	.dbline 40
; 		  if(d)
	breq L15
	.dbline 41
; 		      PORTB|=BIT(PB0); //R/W=1
	sbi 0x18,0
	xjmp L16
L15:
	.dbline 43
; 		  else
; 		      PORTB&=~BIT(PB0);//R/W=0
	cbi 0x18,0
L16:
	.dbline 44
	lsl R16
	.dbline 45
	sbi 0x18,1
	.dbline 46
L12:
	.dbline 36
	inc R22
L14:
	.dbline 36
	cpi R22,8
	brlo L11
	.dbline -2
L10:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r d 20 c
	.dbsym r i 22 c
	.dbsym r a 16 c
	.dbend
	.dbfunc e wr_com _wr_com fV
;              s -> R20
;              i -> R20
;              a -> R22
	.even
_wr_com::
	xcall push_gset2
	mov R22,R16
	.dbline -1
	.dbline 55
; 		  a<<=1;
; 		  PORTB|=BIT(PB1);	//E=1  	  
; 		  }
; 	  }
; /***********************************************/
; /*液晶写控制字程序
; 输入数据:要写入的8位数据
; 输出:无
; 修改时间:2007-5-26
; /**********************************************/
; void wr_com(uchar a)
;      {
	.dbline 57
; 	  uchar s,i;
; 	  s=a&0xf0;
	mov R20,R22
	andi R20,240
	.dbline 58
; 	  lcm_out(0xf8);
	ldi R16,248
	xcall _lcm_out
	.dbline 59
; 	  lcm_out(s);
	mov R16,R20
	xcall _lcm_out
	.dbline 60
; 	  s=a&0x0f;
	mov R20,R22
	andi R20,15
	.dbline 61
; 	  s<<=4;
	mov R24,R20
	andi R24,#0x0F
	swap R24
	.dbline 62
; 	  lcm_out(s);
	mov R16,R24
	xcall _lcm_out
	.dbline 63
; 	  for(i=0;i<250;i++)//延时
	clr R20
	xjmp L21
L18:
	.dbline 64
	.dbline 65
	nop
	.dbline 66
L19:
	.dbline 63
	inc R20
L21:
	.dbline 63
	cpi R20,250
	brlo L18
	.dbline -2
L17:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r s 20 c
	.dbsym r i 20 c
	.dbsym r a 22 c
	.dbend
	.dbfunc e wr_date _wr_date fV
;              s -> R20
;              i -> R20
;              a -> R22
	.even
_wr_date::
	xcall push_gset2
	mov R22,R16
	.dbline -1
	.dbline 75
; 	     {
; 		  asm("nop");
; 		  }
; 	  }	
; /***********************************************/
; /*液晶写数据字程序
; 输入数据:要写入的8位数据
; 输出:无
; 修改时间:2007-5-26
; /**********************************************/
; void wr_date(uchar a)
;      {
	.dbline 77
; 	  uchar s,i;
; 	  s=a&0xf0;
	mov R20,R22
	andi R20,240
	.dbline 78
; 	  lcm_out(0xfa);
	ldi R16,250
	xcall _lcm_out
	.dbline 79
; 	  lcm_out(s);
	mov R16,R20
	xcall _lcm_out
	.dbline 80
; 	  s=a&0x0f;
	mov R20,R22
	andi R20,15
	.dbline 81
; 	  s<<=4;
	mov R24,R20
	andi R24,#0x0F
	swap R24
	.dbline 82
; 	  lcm_out(s);
	mov R16,R24
	xcall _lcm_out
	.dbline 83
; 	  for(i=0;i<250;i++)//延时
	clr R20
	xjmp L26
L23:
	.dbline 84
	.dbline 85
	nop
	.dbline 86
L24:
	.dbline 83
	inc R20
L26:
	.dbline 83
	cpi R20,250
	brlo L23
	.dbline -2
L22:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r s 20 c
	.dbsym r i 20 c
	.dbsym r a 22 c
	.dbend
	.dbfunc e pic_display _pic_display fV
;             d4 -> <dead>
;              i -> R20,R21
;             d1 -> R20
;          LCD_X -> y+0
;             d2 -> R14
;          LCD_Y -> R10
;             qq -> R12,R13
;             d3 -> R22
	.even
_pic_display::
	xcall push_gset5
	sbiw R28,1
	.dbline -1
	.dbline 95
; 	     {
; 		  asm("nop");
; 		  }
; 	  }
; /***********************************************/
; /*液晶图形显示子程序
; 输入数据:要写入的8位数据
; 输出:无
; 修改时间:2007-5-26
; /**********************************************/
; void pic_display(void)
; {
	.dbline 97
;  unsigned char *qq;
;  unsigned char d1,d2,d3,d4,LCD_X=0x80,LCD_Y=0;
	ldi R24,128
	std y+0,R24
	.dbline 97
	clr R10
	.dbline 98
;  unsigned int i=0;
	clr R20
	clr R21
	.dbline 99
;  qq=data_buffer;
	ldi R24,<_data_buffer
	ldi R25,>_data_buffer
	movw R12,R24
	.dbline 100
;  for( d1=0; d1<2; d1++ )
	xjmp L31
L28:
	.dbline 101
;  {
	.dbline 102
;     LCD_Y=0x80;
	ldi R24,128
	mov R10,R24
	.dbline 103
;   	for( d2=0; d2<32; d2++)
	clr R14
	xjmp L35
L32:
	.dbline 104
; 	{
	.dbline 105
; 	 wr_com(0x34);
	ldi R16,52
	xcall _wr_com
	.dbline 106
;  	 wr_com(LCD_Y);
	mov R16,R10
	xcall _wr_com
	.dbline 107
;  	 wr_com(LCD_X);
	ldd R16,y+0
	xcall _wr_com
	.dbline 108
;  	 wr_com(0X30);
	ldi R16,48
	xcall _wr_com
	.dbline 109
; 	 for( d3=0; d3<16; d3++ )
	clr R22
	xjmp L39
L36:
	.dbline 110
	.dbline 111
	movw R30,R12
	ld R16,Z+
	movw R12,R30
	xcall _wr_date
	.dbline 112
L37:
	.dbline 109
	inc R22
L39:
	.dbline 109
	cpi R22,16
	brlo L36
	.dbline 113
	inc R10
	.dbline 114
L33:
	.dbline 103
	inc R14
L35:
	.dbline 103
	mov R24,R14
	cpi R24,32
	brlo L32
	.dbline 115
	ldi R24,136
	std y+0,R24
	.dbline 116
L29:
	.dbline 100
	inc R20
L31:
	.dbline 100
	cpi R20,2
	brlo L28
	.dbline 117
; 	 {
; 	 wr_date(*qq++);
; 	 }
; 	 LCD_Y+=1;
; 	}
; 	LCD_X=0x88;
;  }
;   wr_com(0x36);
	ldi R16,54
	xcall _wr_com
	.dbline 118
;   delay(80);
	ldi R16,80
	ldi R17,0
	xcall _delay
	.dbline 119
;  wr_com(0x30);
	ldi R16,48
	xcall _wr_com
	.dbline 120
;  delay(80);
	ldi R16,80
	ldi R17,0
	xcall _delay
	.dbline -2
L27:
	adiw R28,1
	xcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym l d4 1 c
	.dbsym r i 20 i
	.dbsym r d1 20 c
	.dbsym l LCD_X 0 c
	.dbsym r d2 14 c
	.dbsym r LCD_Y 10 c
	.dbsym r qq 12 pc
	.dbsym r d3 22 c
	.dbend
	.dbfunc e draw_point _draw_point fV
;       byte_adr -> R22,R23
;          LCD_Y -> R14
;          LCD_X -> R10
;     X_Position -> R12,R13
;         X_Temp -> R20,R21
;          State -> R6
;              Y -> R18
;              X -> R16
	.even
_draw_point::
	xcall push_gset5
	ldd R6,y+10
	.dbline -1
	.dbline 129
; }
; /***********************************************/
; /*液晶画线子程序
; 输入数据:要写入的8位数据
; 输出:无
; 修改时间:2007-5-26
; /**********************************************/
; void draw_point(unsigned char X,unsigned char Y,char State) 
; { 
	.dbline 130
;        unsigned char LCD_X=0,LCD_Y=0; 
	clr R10
	.dbline 130
	clr R14
	.dbline 131
;        unsigned int X_Temp  = 0; 
	clr R20
	clr R21
	.dbline 132
;         unsigned int X_Position = 0; 
	clr R12
	clr R13
	.dbline 134
; 		unsigned int byte_adr;
;         X_Temp = X; 
	mov R20,R16
	clr R21
	xjmp L42
L41:
	.dbline 136
	.dbline 137
	movw R24,R12
	adiw R24,1
	movw R12,R24
	.dbline 138
	subi R20,8
	sbci R21,0
	.dbline 139
L42:
	.dbline 135
;         while (X_Temp>7) 
	ldi R24,7
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brlo L41
	.dbline 141
;         { 
;                 X_Position++; 
;                 X_Temp = X_Temp-8; 
;         } 
;          
;         if (X_Temp<=7) 
	cp R24,R20
	cpc R25,R21
	brsh X0
	xjmp L44
X0:
	.dbline 142
;         { 
	.dbline 144
; 			
; 		   LCD_X=X_Position;
	mov R10,R12
	.dbline 145
; 		   LCD_Y=Y;   
	mov R14,R18
	.dbline 146
; 		   byte_adr=LCD_Y*16+LCD_X;
	ldi R24,16
	mul R24,R14
	movw R22,R0
	mov R2,R10
	clr R3
	add R22,R2
	adc R23,R3
	.dbline 148
; 		   
; 		   if(State==0)
	tst R6
	brne L46
	.dbline 149
; 		  {   		   
	.dbline 150
; 		  data_buffer[byte_adr]&=data2[X_Temp];
	ldi R24,<_data_buffer
	ldi R25,>_data_buffer
	movw R2,R22
	add R2,R24
	adc R3,R25
	ldi R24,<_data2
	ldi R25,>_data2
	movw R30,R20
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	movw R30,R2
	ldd R5,z+0
	and R5,R4
	std z+0,R5
	.dbline 151
; 		   } 
	xjmp L47
L46:
	.dbline 153
; 		   else
; 		   { 
	.dbline 154
; 		    data_buffer[byte_adr]|=data[X_Temp];
	ldi R24,<_data_buffer
	ldi R25,>_data_buffer
	movw R2,R22
	add R2,R24
	adc R3,R25
	ldi R24,<_data
	ldi R25,>_data
	movw R30,R20
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	movw R30,R2
	ldd R5,z+0
	or R5,R4
	std z+0,R5
	.dbline 155
; 		    }
L47:
	.dbline 157
L44:
	.dbline -2
L40:
	xcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym r byte_adr 22 i
	.dbsym r LCD_Y 14 c
	.dbsym r LCD_X 10 c
	.dbsym r X_Position 12 i
	.dbsym r X_Temp 20 i
	.dbsym r State 6 c
	.dbsym r Y 18 c
	.dbsym r X 16 c
	.dbend
	.dbfunc e draw_line _draw_line fV
;           temp -> R20
;            d_x -> R22,R23
;            d_y -> R10,R11
;            err -> R6,R7
;              y -> R14,R15
;              x -> R12,R13
;             y2 -> y+17
;             x2 -> y+15
;             y1 -> y+13
;             x1 -> y+11
	.even
_draw_line::
	xcall push_arg4
	xcall push_gset5
	sbiw R28,1
	.dbline -1
	.dbline 161
; 						
; 		  } 
; 		  }
; 	  
; void draw_line(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2)
; {
	.dbline 164
;     unsigned int x,y; 
;     unsigned int d_x,d_y;     //d_x=x2-x1;d_y=y2-y1;
;     int err=0;
	clr R6
	clr R7
	.dbline 165
;     unsigned char temp=0;
	clr R20
	.dbline 166
;     if(y2<y1){x=x1;y=y1;x1=x2;y1=y2;x2=x;y2=y;}
	ldd R0,y+17
	ldd R1,y+18
	ldd R16,y+13
	ldd R17,y+14
	cp R0,R16
	cpc R1,R17
	brsh L49
	.dbline 166
	.dbline 166
	ldd R12,y+11
	ldd R13,y+12
	.dbline 166
	movw R14,R16
	.dbline 166
	ldd R0,y+15
	ldd R1,y+16
	std y+12,R1
	std y+11,R0
	.dbline 166
	ldd R0,y+17
	ldd R1,y+18
	std y+14,R1
	std y+13,R0
	.dbline 166
	std y+16,R13
	std y+15,R12
	.dbline 166
	std y+18,R15
	std y+17,R14
	.dbline 166
L49:
	.dbline 167
;     d_y=y2-y1;
	ldd R10,y+17
	ldd R11,y+18
	ldd R0,y+13
	ldd R1,y+14
	sub R10,R0
	sbc R11,R1
	.dbline 168
;     if (d_y==0)
	brne L51
X1:
	.dbline 169
;         {
	.dbline 170
;         if(x1>x2) 
	ldd R0,y+15
	ldd R1,y+16
	ldd R16,y+11

⌨️ 快捷键说明

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