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

📄 main.s

📁 AVR单片机mega8上的lcm_12832液晶驱动程序
💻 S
字号:
	.module main.c
	.area data(ram, con, rel)
_exampl::
	.blkb 5
	.area idata
	.byte 177,177,190,169,0
	.area data(ram, con, rel)
	.dbfile E:\programs\ICCAVR_program\LCD_lcm_12832k\main.c
	.dbsym e exampl _exampl A[5:5]c
_exampl2::
	.blkb 9
	.area idata
	.byte 'a,'b,'c,'d,'e,'f,'g,33,0
	.area data(ram, con, rel)
	.dbfile E:\programs\ICCAVR_program\LCD_lcm_12832k\main.c
	.dbsym e exampl2 _exampl2 A[9:9]c
	.area text(rom, con, rel)
	.dbfile E:\programs\ICCAVR_program\LCD_lcm_12832k\main.c
	.dbfunc e ledon _ledon fV
	.even
_ledon::
	.dbline -1
	.dbline 22
; /**********************************************************************
; //ICC-AVR application builder : 2006-6-27 15:04:57
; // Target : M8
; // Crystal: 3.6864Mhz
; //
; 
; ***********************************************************************/
; 
; #include <iom8v.h>
; #include <macros.h>
; 
; #define uchar unsigned char
; #define uint unsigned int
; 
; #define	setbit(x,y) (x|=(1<<y))      //set bit y in byte x
; #define	clrbit(x,y) (x&=(~(1<<y)))   //clear bit y in byte x
; 
; uchar exampl[]="北京";
; uchar exampl2[]="abcdefg!";
; 
; void ledon(void)
; {
	.dbline 23
;    DDRB = (1<<PB2);
	ldi R24,4
	out 0x17,R24
	.dbline 24
;    PORTB = (0<<PB2);
	clr R2
	out 0x18,R2
	.dbline -2
	.dbline 25
; }
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e ledoff _ledoff fV
	.even
_ledoff::
	.dbline -1
	.dbline 28
; 
; void ledoff(void)
; {
	.dbline 29
;    DDRB = (1<<PB2);
	ldi R24,4
	out 0x17,R24
	.dbline 30
;    PORTB = (1<<PB2);
	out 0x18,R24
	.dbline -2
	.dbline 31
; }
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e delay _delay fV
;              i -> R20,R21
;              n -> R16,R17
	.even
_delay::
	rcall push_gset1
	.dbline -1
	.dbline 36
; 
; //延时
; // Delay  n*(5ms)
; void delay(uint n)           
; {  
	rjmp L5
L4:
	.dbline 38
;      while(n--)
;     {
	.dbline 39
; 	    uint i = 5236;     //Delay 5ms
	ldi R20,5236
	ldi R21,20
L7:
	.dbline 40
L8:
	.dbline 40
	movw R2,R20
	subi R20,1
	sbci R21,0
	tst R2
	brne L7
	tst R3
	brne L7
X0:
	.dbline 41
L5:
	.dbline 37
	movw R2,R16
	subi R16,1
	sbci R17,0
	tst R2
	brne L4
	tst R3
	brne L4
X1:
	.dbline 41
; 	    while(i--);
; 	};	
	.dbline -2
	.dbline 42
; }
L3:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r n 16 i
	.dbend
	.dbfunc e delayms _delayms fV
;              j -> R20
;              i -> R16,R17
	.even
_delayms::
	rcall push_gset1
	.dbline -1
	.dbline 46
; 
; 
; void delayms(uint i)
; {
	rjmp L12
L11:
	.dbline 48
; 	while(i--)
; 	{
	.dbline 49
; 		uchar j = 125;//125;//250;
	ldi R20,125
L14:
	.dbline 50
L15:
	.dbline 50
	mov R2,R20
	clr R3
	subi R20,1
	tst R2
	brne L14
	.dbline 51
L12:
	.dbline 47
	movw R2,R16
	subi R16,1
	sbci R17,0
	tst R2
	brne L11
	tst R3
	brne L11
X2:
	.dbline -2
	.dbline 52
; 		while(j--);
; 	}
; }
L10:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r j 20 c
	.dbsym r i 16 i
	.dbend
	.dbfunc e delayus _delayus fV
;              i -> R16
	.even
_delayus::
	.dbline -1
	.dbline 55
; 
; void delayus(uchar i)
; {	
L18:
	.dbline 56
L19:
	.dbline 56
; 	while(i--);
	mov R2,R16
	clr R3
	subi R16,1
	tst R2
	brne L18
	.dbline -2
	.dbline 57
; }
L17:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 c
	.dbend
	.dbfunc e wait _wait fV
	.even
_wait::
	.dbline -1
	.dbline 61
; 
; 
; void wait(void)
; {
	.dbline 62
; 	DDRB = ((1<<PB0)|(1<<PB1));
	ldi R24,3
	out 0x17,R24
	.dbline 63
; 	DDRC = 1<<PC1;
	ldi R24,2
	out 0x14,R24
	.dbline 64
; 	DDRD = 0;
	clr R2
	out 0x11,R2
	.dbline 66
; 	//PORTD = 0xff;
; 	PORTB = ((1<<PB0)|(0<<PB1));			//RW = 1 WRITE	RS =0 INSTRUCTION	
	ldi R24,1
	out 0x18,R24
	.dbline 67
; 	PORTC = (1<<PC1);			//E = 1
	ldi R24,2
	out 0x15,R24
	.dbline 68
; 	DDRD = 0;
	out 0x11,R2
L22:
	.dbline 69
L23:
	.dbline 69
; 	while(PIND&0x80);
	sbic 0x10,7
	rjmp L22
	.dbline 70
; 	PORTB = ((0<<PB0)|(0<<PB1));			//RW = 0 WRITE	RS =0 INSTRUCTION
	clr R2
	out 0x18,R2
	.dbline -2
	.dbline 71
; }
L21:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e send_i _send_i fV
;              i -> R20
	.even
_send_i::
	rcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 74
; 
; void send_i(uchar i)
; {	
	.dbline 75
; 	DDRB = ((1<<PB0)|(1<<PB1));
	ldi R24,3
	out 0x17,R24
	.dbline 76
; 	DDRC = 1<<PC1;
	ldi R24,2
	out 0x14,R24
	.dbline 78
; 	
; 	wait();
	rcall _wait
	.dbline 79
;     PORTB = ((0<<PB0)|(0<<PB1));			//RW = 0 WRITE	RS =0 INSTRUCTION
	clr R2
	out 0x18,R2
	.dbline 80
;     DDRD = 0xff;
	ldi R24,255
	out 0x11,R24
	.dbline 81
; 	PORTD = i;
	out 0x12,R20
	.dbline 85
; 	//setbit(PORTC,PC1);
; 	//NOP();
; 	//clrbit(PORTC,PC1);
; 	PORTC = (1<<PC1);			//E = 1
	ldi R24,2
	out 0x15,R24
	.dbline 86
; 	NOP();
	nop
	.dbline 87
; 	PORTC = (0<<PC1);			//E = 0	
	out 0x15,R2
	.dbline -2
	.dbline 88
; }
L25:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbend
	.dbfunc e send_d _send_d fV
;              d -> R20
	.even
_send_d::
	rcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 91
; 
; void send_d(uchar d)
; {
	.dbline 92
;  	DDRB = ((1<<PB0)|(1<<PB1));
	ldi R24,3
	out 0x17,R24
	.dbline 93
; 	DDRC = 1<<PC1;
	ldi R24,2
	out 0x14,R24
	.dbline 95
; 	
; 	wait();
	rcall _wait
	.dbline 96
;     PORTB = ((0<<PB0)|(1<<PB1));			//RW = 0 WRITE	RS =1 DATA
	ldi R24,2
	out 0x18,R24
	.dbline 97
;     DDRD = 0xff;
	ldi R24,255
	out 0x11,R24
	.dbline 98
; 	PORTD = d;
	out 0x12,R20
	.dbline 99
; 	PORTC = (1<<PC1);			//E = 1
	ldi R24,2
	out 0x15,R24
	.dbline 100
; 	NOP();
	nop
	.dbline 101
; 	PORTC = (0<<PC1);			//E = 0	
	clr R2
	out 0x15,R2
	.dbline -2
	.dbline 105
; 	//setbit(PORTC,PC1);
; 	//NOP();
; 	//clrbit(PORTC,PC1);
; }
L26:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r d 20 c
	.dbend
	.dbfunc e lw _lw fV
;              d -> y+4
;              y -> R22
;              x -> R20
	.even
_lw::
	rcall push_gset2
	mov R22,R18
	mov R20,R16
	.dbline -1
	.dbline 108
; 
; void lw(uchar x,uchar y,uchar d)
; {
	.dbline 109
; 	send_i(0xB8|y);
	mov R16,R22
	ori R16,184
	rcall _send_i
	.dbline 110
; 	send_i(0x40|x);
	mov R16,R20
	ori R16,64
	rcall _send_i
	.dbline 111
; 	send_d(d);
	ldd R16,y+4
	rcall _send_d
	.dbline -2
	.dbline 113
; 	//PORTD = 0xff;
; }
L27:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym l d 4 c
	.dbsym r y 22 c
	.dbsym r x 20 c
	.dbend
	.dbfunc e lcd_init _lcd_init fV
;              y -> <dead>
;              x -> <dead>
	.even
_lcd_init::
	.dbline -1
	.dbline 116
; 
; void lcd_init(void)
; {
	.dbline 118
;  	uchar x,y;
; 	delay(100);		//>40ms  800
	ldi R16,100
	ldi R17,0
	rcall _delay
	.dbline 120
; 	
; 	send_i(0x30);		//select basic instruction
	ldi R16,48
	rcall _send_i
	.dbline 121
; 	delay(10);		//>100us
	ldi R16,10
	ldi R17,0
	rcall _delay
	.dbline 122
; 	send_i(0x30);		//set basic mode
	ldi R16,48
	rcall _send_i
	.dbline 123
; 	delay(10);		//>37us
	ldi R16,10
	ldi R17,0
	rcall _delay
	.dbline 124
; 	send_i(0x0c);		//turn on lcd  0c
	ldi R16,12
	rcall _send_i
	.dbline 125
; 	delay(10);		//>100us
	ldi R16,10
	ldi R17,0
	rcall _delay
	.dbline 126
; 	send_i(0x01);		//clr screen text
	ldi R16,1
	rcall _send_i
	.dbline 127
; 	delay(20);		//>10ms
	ldi R16,20
	ldi R17,0
	rcall _delay
	.dbline 128
; 	send_i(0x06);		//enter dot setup  06
	ldi R16,6
	.dbline -2
	.dbline 129
; }
L28:
	.dbline 0 ; func end
	rjmp _send_i
	.dbsym l y 1 c
	.dbsym l x 1 c
	.dbend
	.dbfunc e putstring _putstring fV
;              j -> R20
;            str -> R20,R21
;           addr -> R22
	.even
_putstring::
	rcall push_gset2
	movw R20,R18
	mov R22,R16
	.dbline -1
	.dbline 132
; 
; void putstring(uchar addr,uchar *str)
; {
	.dbline 134
; 	uchar j;
; 	send_i(addr|0x80);
	mov R16,R22
	ori R16,128
	rcall _send_i
	.dbline 135
; 	for(j=0;j<3;j++)
	clr R20
	rjmp L33
L30:
	.dbline 136
	.dbline 137
	ldi R24,<_exampl
	ldi R25,>_exampl
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	rcall _send_d
	.dbline 138
L31:
	.dbline 135
	inc R20
L33:
	.dbline 135
	cpi R20,3
	brlo L30
	.dbline -2
	.dbline 139
; 		{
; 			send_d(exampl[j]);	
; 		}
; }
L29:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r j 20 c
	.dbsym r str 20 pc
	.dbsym r addr 22 c
	.dbend
	.dbfunc e locateXY _locateXY fV
;           temp -> R20
;           posy -> R22
;           posx -> R20
	.even
_locateXY::
	rcall push_gset2
	mov R22,R18
	mov R20,R16
	.dbline -1
	.dbline 145
; 
; /*=======================================================
;  显示光标定位
; =======================================================*/
; 
; void locateXY( uchar posx,uchar posy) {
	.dbline 149
; 
;     uchar temp;
; 
; 	temp = posx & 0xf;
	andi R20,15
	.dbline 150
; 	posy &= 0x1;
	andi R22,1
	.dbline 151
; 	if ( posy )temp |= 0x40;
	breq L35
	.dbline 151
	ori R20,64
L35:
	.dbline 152
; 	temp |= 0x80;
	ori R20,128
	.dbline 153
; 	send_i(temp);
	mov R16,R20
	rcall _send_i
	.dbline -2
	.dbline 154
; }
L34:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r temp 20 c
	.dbsym r posy 22 c
	.dbsym r posx 20 c
	.dbend
	.dbfunc e disponechar _disponechar fV
;          wdata -> y+4
;              y -> R22
;              x -> R20
	.even
_disponechar::
	rcall push_gset2
	mov R22,R18
	mov R20,R16
	.dbline -1
	.dbline 159
; 
; /*=======================================================
;  按指定位置显示数出一个字符
; =======================================================*/
; void disponechar(uchar x,uchar y,uchar wdata) {
	.dbline 161
; 
; 	locateXY( x, y );				// 定位显示地址
	mov R18,R22
	mov R16,R20
	rcall _locateXY
	.dbline 162
; 	send_d( wdata );			// 写字符
	ldd R16,y+4
	rcall _send_d
	.dbline -2
	.dbline 163
; }
L37:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym l wdata 4 c
	.dbsym r y 22 c
	.dbsym r x 20 c
	.dbend
	.dbfunc e eputstr _eputstr fV
;              l -> R20
;              i -> R22
;            ptr -> R10,R11
;              y -> R12
;              x -> R14
	.even
_eputstr::
	rcall push_gset5
	mov R12,R18
	mov R14,R16
	sbiw R28,1
	ldd R10,y+11
	ldd R11,y+12
	.dbline -1
	.dbline 168
; 
; /*=======================================================
;  显示字符串
; =======================================================*/
; void eputstr(uchar x,uchar y, uchar *ptr) {
	.dbline 169
;     uchar i,l=0;
	clr R20
	rjmp L40
L39:
	.dbline 170
	.dbline 170
	inc R20
	.dbline 170
L40:
	.dbline 170
; 	while (ptr[l] >31){l++;};
	mov R30,R20
	clr R31
	add R30,R10
	adc R31,R11
	ldd R2,z+0
	ldi R24,31
	cp R24,R2
	brlo L39
	.dbline 170
	.dbline 171
	clr R22
	rjmp L45
L42:
	.dbline 171
; 	for (i=0;i<l;i++) {
	.dbline 172
; 		disponechar(x++,y,ptr[i]);
	mov R30,R22
	clr R31
	add R30,R10
	adc R31,R11
	ldd R2,z+0
	std y+0,R2
	mov R18,R12
	mov R2,R14
	mov R24,R2
	subi R24,255    ; addi 1
	mov R14,R24
	mov R16,R2
	rcall _disponechar
	.dbline 173
; 		if ( x == 16 ){
	mov R24,R14
	cpi R24,16
	brne L46
	.dbline 173
	.dbline 174
; 			x = 0; y ^= 1;
	clr R14
	.dbline 174
	ldi R24,1
	eor R12,R24
	.dbline 175
; 		}
L46:
	.dbline 176
L43:
	.dbline 171
	inc R22
L45:
	.dbline 171
	cp R22,R20
	brlo L42
	.dbline -2
	.dbline 177
; 	}
; }
L38:
	adiw R28,1
	rcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym r l 20 c
	.dbsym r i 22 c
	.dbsym r ptr 10 pc
	.dbsym r y 12 c
	.dbsym r x 14 c
	.dbend
	.dbfunc e main _main fV
	.even
_main::
	sbiw R28,2
	.dbline -1
	.dbline 180
; 
; void main(void)
; {
	.dbline 181
;    ledon();
	rcall _ledon
	.dbline 182
;    lcd_init();
	rcall _lcd_init
	.dbline 183
;    delay(50);
	ldi R16,50
	ldi R17,0
	rcall _delay
	.dbline 184
;    eputstr(0,0,exampl);		// 上面一行显示一个预定字符串
	ldi R24,<_exampl
	ldi R25,>_exampl
	std y+1,R25
	std y+0,R24
	clr R18
	clr R16
	rcall _eputstr
	.dbline 185
;    eputstr(0,0,exampl2);
	ldi R24,<_exampl2
	ldi R25,>_exampl2
	std y+1,R25
	std y+0,R24
	clr R18
	clr R16
	rcall _eputstr
	.dbline 187
;    //putstring(0x80,exampl);
;    delayus(500000);
	ldi R20,32
	ldi R21,161
	ldi R22,7
	ldi R23,0
	mov R16,R20
	rcall _delayus
	.dbline 188
;    delayus(500000);
	ldi R20,32
	ldi R21,161
	ldi R22,7
	ldi R23,0
	mov R16,R20
	rcall _delayus
	.dbline 189
;    delayus(500000);
	ldi R20,32
	ldi R21,161
	ldi R22,7
	ldi R23,0
	mov R16,R20
	rcall _delayus
	.dbline 190
;    delayus(500000);
	ldi R20,32
	ldi R21,161
	ldi R22,7
	ldi R23,0
	mov R16,R20
	rcall _delayus
	.dbline 191
;    delayus(500000);
	ldi R20,32
	ldi R21,161
	ldi R22,7
	ldi R23,0
	mov R16,R20
	rcall _delayus
	.dbline 192
;    delayus(500000);
	ldi R20,32
	ldi R21,161
	ldi R22,7
	ldi R23,0
	mov R16,R20
	rcall _delayus
	.dbline 193
;    delayus(500000);
	ldi R20,32
	ldi R21,161
	ldi R22,7
	ldi R23,0
	mov R16,R20
	rcall _delayus
	.dbline 194
;    delayus(500000);
	ldi R20,32
	ldi R21,161
	ldi R22,7
	ldi R23,0
	mov R16,R20
	rcall _delayus
	.dbline 196
; 
;    ledoff();
	rcall _ledoff
	.dbline 197
;    DDRD = 0xff;
	ldi R24,255
	out 0x11,R24
	.dbline 198
;    PORTD = 0;
	clr R2
	out 0x12,R2
	.dbline 199
;    wait();
	rcall _wait
L49:
	.dbline 200
L50:
	.dbline 200
	rjmp L49
X3:
	.dbline -2
	.dbline 201
;    while(1);
; }
L48:
	adiw R28,2
	.dbline 0 ; func end
	ret
	.dbend

⌨️ 快捷键说明

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