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

📄 lcdexper.s

📁 AVR智能车灯控制系统,实现一些车灯的自动控制,还是多功能性,大家参考一下.
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module lcdexper.c
	.area text(rom, con, rel)
	.dbfile E:\example\icc\lcd_exper\lcdexper.c
	.area lit(rom, con, rel)
_Chanping1::
	.byte 188,242,210,215,208,197,186,197,178,201,188,175,207,181,205,179
	.byte 0
	.dbsym e Chanping1 _Chanping1 A[17:17]kc
_jieguo_1::
	.byte 196,207,183,189,210,189,191,198,180,243,209,167,0
	.dbsym e jieguo_1 _jieguo_1 A[13:13]kc
_jieguo_2::
	.byte 201,250,206,239,210,189,209,167,185,164,179,204,209,167,212,186
	.byte 0
	.dbsym e jieguo_2 _jieguo_2 A[17:17]kc
_jieguo_3::
	.byte 50,48,48,53,188,182,211,176,207,241,185,164,179,204,0
	.dbsym e jieguo_3 _jieguo_3 A[15:15]kc
_jieguo_4::
	.byte 197,183,209,244,177,243,0
	.dbsym e jieguo_4 _jieguo_4 A[7:7]kc
	.area text(rom, con, rel)
	.dbfile E:\example\icc\lcd_exper\lcdexper.c
	.dbfunc e Delay _Delay fV
;              i -> R20,R21
;              t -> R16,R17
	.even
_Delay::
	st -y,R20
	st -y,R21
	.dbline -1
	.dbline 27
; #include <iom16v.h>
; #include <macros.h>
; 
; #define uchar unsigned char
; #define uint unsigned int
; 
; #define DB PORTA
; /******************************************************************** */
; #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
; #define	CHKBIT(x,y) (x&(1<<y))       //check bit y in byte x
; /******************************************************************** */
; #define	RS	 0
; #define	RW	 1
; #define	E	 2
; #define	PSB	 3
; #define	RST	 4
; 
; unsigned flash char Chanping1[]={"简易信号采集系统"};
; unsigned flash char jieguo_1[]={"南方医科大学"};
; unsigned flash char jieguo_2[]={"生物医学工程学院"};
; unsigned flash char jieguo_3[]={"2005级影像工程"};
; unsigned flash char jieguo_4[]={"欧阳斌"};
; 
; //***************延时*********************************/
; void Delay(uint t)
; {
	.dbline 28
;   uint i=0;
	clr R20
	clr R21
	.dbline 29
;   for(i=0;i<=t;i++);
	xjmp L5
L2:
	.dbline 29
L3:
	.dbline 29
	subi R20,255  ; offset = 1
	sbci R21,255
L5:
	.dbline 29
	cp R16,R20
	cpc R17,R21
	brsh L2
X0:
	.dbline -2
L1:
	.dbline 0 ; func end
	ld R21,y+
	ld R20,y+
	ret
	.dbsym r i 20 i
	.dbsym r t 16 i
	.dbend
	.dbfunc e delay_ms _delay_ms fV
;             t2 -> R20
;              t -> R16,R17
	.even
_delay_ms::
	st -y,R20
	.dbline -1
	.dbline 33
; }
; 
; void  delay_ms(unsigned int t)
; {
	.dbline 34
;     unsigned char t2=200;
	ldi R20,200
	xjmp L8
L10:
	.dbline 35
; 	while(t--)while(t2--);   
L11:
	.dbline 35
	mov R2,R20
	clr R3
	subi R20,1
	tst R2
	brne L10
X1:
L8:
	.dbline 35
	movw R2,R16
	subi R16,1
	sbci R17,0
	tst R2
	brne L11
	tst R3
	brne L11
X2:
	.dbline -2
L6:
	.dbline 0 ; func end
	ld R20,y+
	ret
	.dbsym r t2 20 c
	.dbsym r t 16 i
	.dbend
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 39
; }  
; 
; void port_init(void)
; {
	.dbline 40
;  	PORTA = 0xFF;
	ldi R24,255
	out 0x1b,R24
	.dbline 41
;  	DDRA  = 0xFF;
	out 0x1a,R24
	.dbline 42
;  	PORTB = 0xFF;
	out 0x18,R24
	.dbline 43
;  	DDRB  = 0xFF; 	
	out 0x17,R24
	.dbline -2
L13:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e Check_Busy _Check_Busy fV
;            dat -> <dead>
	.even
_Check_Busy::
	.dbline -1
	.dbline 50
; }
; 
; /*-----------------------------------------------------
;   状态检查函数,判断是否处于忙状态
; -------------------------------------------------------*/
; void  Check_Busy(void)
; {
	.dbline 52
;  	unsigned char dat;
;  	CLRBIT(PORTB,RS);  //RS=0
	cbi 0x18,0
	.dbline 53
;  	SETBIT(PORTB,RW);  //RW=1
	sbi 0x18,1
	.dbline 54
;  	DDRA=0x00;			// portA as input
	clr R2
	out 0x1a,R2
L15:
	.dbline 56
;  	do
;  	{
	.dbline 57
;  	   	SETBIT(PORTB,E);
	sbi 0x18,2
	.dbline 58
; 		CLRBIT(PORTB,E);
	cbi 0x18,2
	.dbline 59
;     }
L16:
	.dbline 60
;  	while (PINA&0x80);
	sbic 0x19,7
	rjmp L15
X3:
	.dbline -2
L14:
	.dbline 0 ; func end
	ret
	.dbsym l dat 1 c
	.dbend
	.dbfunc e Write_Command _Write_Command fV
;        cmdcode -> R10
	.even
_Write_Command::
	st -y,R10
	mov R10,R16
	.dbline -1
	.dbline 65
; }
; //**********************写命令到LCD***************************/
; 
; void Write_Command(uchar cmdcode)
; {
	.dbline 66
;   Check_Busy();
	xcall _Check_Busy
	.dbline 67
;   DDRB=0xff;
	ldi R24,255
	out 0x17,R24
	.dbline 68
;   CLRBIT(PORTB,RS);//RS=0;
	cbi 0x18,0
	.dbline 69
;   CLRBIT(PORTB,RW);//RW=0;
	cbi 0x18,1
	.dbline 70
;   DDRA=0xff;
	out 0x1a,R24
	.dbline 71
;   DB=cmdcode;
	out 0x1b,R10
	.dbline 72
;   Delay(1);//Delay(1);
	ldi R16,1
	ldi R17,0
	xcall _Delay
	.dbline 73
;   SETBIT(PORTB,E);//E=1;
	sbi 0x18,2
	.dbline 74
;   Delay(1);//Delay(1);Delay(1);
	ldi R16,1
	ldi R17,0
	xcall _Delay
	.dbline 75
;   CLRBIT(PORTB,E);//E=0;
	cbi 0x18,2
	.dbline -2
L18:
	.dbline 0 ; func end
	ld R10,y+
	ret
	.dbsym r cmdcode 10 c
	.dbend
	.dbfunc e Write_Data _Write_Data fV
;       datacode -> R10
	.even
_Write_Data::
	st -y,R10
	mov R10,R16
	.dbline -1
	.dbline 79
; }
; //**************************写数据到LCD*************************/
; void Write_Data(uchar datacode)
; {
	.dbline 80
;   Check_Busy();
	xcall _Check_Busy
	.dbline 81
;   DDRB=0xff;
	ldi R24,255
	out 0x17,R24
	.dbline 82
;   SETBIT(PORTB,RS);//RS=1;
	sbi 0x18,0
	.dbline 83
;   CLRBIT(PORTB,RW);//RW=0;
	cbi 0x18,1
	.dbline 84
;   DDRA=0xff;
	out 0x1a,R24
	.dbline 85
;   DB=datacode;
	out 0x1b,R10
	.dbline 86
;   Delay(1);//Delay(1);
	ldi R16,1
	ldi R17,0
	xcall _Delay
	.dbline 87
;   SETBIT(PORTB,E);//E=1;
	sbi 0x18,2
	.dbline 88
;   Delay(1);//Delay(1);Delay(1);
	ldi R16,1
	ldi R17,0
	xcall _Delay
	.dbline 89
;   CLRBIT(PORTB,E);//E=0;
	cbi 0x18,2
	.dbline -2
L19:
	.dbline 0 ; func end
	ld R10,y+
	ret
	.dbsym r datacode 10 c
	.dbend
	.dbfunc e Initial_LCD _Initial_LCD fV
	.even
_Initial_LCD::
	.dbline -1
	.dbline 93
; }
; //**************************初始化LCD***********************/
; void Initial_LCD(void) 
; {    
	.dbline 94
;   Delay(10);
	ldi R16,10
	ldi R17,0
	xcall _Delay
	.dbline 95
;   Write_Command(0x30);//30H--基本指令操作 
	ldi R16,48
	xcall _Write_Command
	.dbline 96
;   Delay(5);
	ldi R16,5
	ldi R17,0
	xcall _Delay
	.dbline 97
;   Write_Command(0x0c);//开显示,关光标,不闪烁.
	ldi R16,12
	xcall _Write_Command
	.dbline 98
;   Delay(10);
	ldi R16,10
	ldi R17,0
	xcall _Delay
	.dbline 99
;   Write_Command(0x02);
	ldi R16,2
	xcall _Write_Command
	.dbline 100
;   Delay(10);
	ldi R16,10
	ldi R17,0
	xcall _Delay
	.dbline 101
;   Write_Command(0x06);//指定在资料写入或读取时,光标的移动方向,DDRAM的地址计数器(AC)加1。
	ldi R16,6
	xcall _Write_Command
	.dbline 102
;   Delay(10);
	ldi R16,10
	ldi R17,0
	xcall _Delay
	.dbline 103
;   Write_Command(0x01);//清除显示
	ldi R16,1
	xcall _Write_Command
	.dbline 104
;   Delay(10);
	ldi R16,10
	ldi R17,0
	xcall _Delay
	.dbline 105
;   Write_Command(0x80);//光标复位
	ldi R16,128
	xcall _Write_Command
	.dbline -2
L20:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e Write_String _Write_String fV
;              i -> R20
;       datacode -> R10,R11
	.even
_Write_String::
	xcall push_xgset300C
	movw R10,R16
	.dbline -1
	.dbline 110
; } 
; 
; //*************************写一串字符到LCM**************************/
; void Write_String(unsigned flash char datacode[])
; {
	.dbline 111
;   uchar i=0;
	clr R20
	xjmp L23
L22:
	.dbline 113
;   while(datacode[i])
;   {
	.dbline 114
;     Write_Data(datacode[i]);
	mov R30,R20
	clr R31
	add R30,R10
	adc R31,R11
	elpm R16,Z
	xcall _Write_Data
	.dbline 115
;     i++;
	inc R20
	.dbline 116
;     if(i==0xff)break;
	cpi R20,255
	brne L25
X4:
	.dbline 116
	xjmp L24
L25:
	.dbline 117
;   }
L23:
	.dbline 112
	mov R30,R20
	clr R31
	add R30,R10
	adc R31,R11
	elpm R2,Z
	tst R2
	brne L22
X5:
L24:
	.dbline -2
L21:
	.dbline 0 ; func end
	xjmp pop_xgset300C
	.dbsym r i 20 c
	.dbsym r datacode 10 pkc
	.dbend
	.dbfunc e Location_XY _Location_XY fV
;              y -> R20
;              x -> R22
	.even
_Location_XY::
	xcall push_xgsetF00C
	mov R20,R18
	mov R22,R16
	.dbline -1
	.dbline 121
; }
; /**********************设置坐标*****************/
; void Location_XY(uchar x,uchar y)
; {
	.dbline 122
;   switch(y)
	mov R10,R20
	clr R11
	tst R10
	brne X6
	tst R11
	breq L31
X6:
	movw R24,R10
	cpi R24,1
	ldi R30,0
	cpc R25,R30
	breq L32
X7:
	cpi R24,2
	ldi R30,0
	cpc R25,R30
	breq L33
X8:
	cpi R24,3
	ldi R30,0
	cpc R25,R30
	breq L34
X9:
	xjmp L28
L31:
	.dbline 125
;   {
;     case 0:
;       y=0x80;break;
	ldi R20,128
	.dbline 125
	xjmp L29
L32:
	.dbline 127
;     case 1:
;       y=0x90;break;
	ldi R20,144
	.dbline 127
	xjmp L29
L33:
	.dbline 129
;     case 2:
;      y=0x88;break;
	ldi R20,136
	.dbline 129
	xjmp L29
L34:
	.dbline 131
;     case 3:
;       y=0x98;break;
	ldi R20,152
	.dbline 131
	xjmp L29
L28:
	.dbline 133
;     default:
;       y=0x80;
	ldi R20,128
	.dbline 134
;   }
L29:
	.dbline 135
;   x=x&0x07;
	andi R22,7
	.dbline 136
;   Write_Command(x+y);
	mov R16,R22
	add R16,R20
	xcall _Write_Command
	.dbline -2
L27:
	.dbline 0 ; func end
	xjmp pop_xgsetF00C
	.dbsym r y 20 c
	.dbsym r x 22 c
	.dbend
	.dbfunc e Write_String_atXY _Write_String_atXY fV
;         string -> y+2
;              y -> R12
;              x -> R10
	.even
_Write_String_atXY::
	st -y,R10
	st -y,R12
	mov R12,R18
	mov R10,R16
	.dbline -1
	.dbline 140
; }
; //************************在(x,y)处显示字符串string*************/
; void Write_String_atXY(uchar x,uchar y,unsigned flash char string[])
; {
	.dbline 141
;   Location_XY(x,y);
	mov R18,R12
	mov R16,R10
	xcall _Location_XY
	.dbline 142
;   Write_String(string);
	ldd R16,y+2
	ldd R17,y+3
	xcall _Write_String
	.dbline -2
L35:
	.dbline 0 ; func end
	ld R12,y+
	ld R10,y+
	ret
	.dbsym l string 2 pkc
	.dbsym r y 12 c
	.dbsym r x 10 c
	.dbend
	.dbfunc e Clear_Lcd _Clear_Lcd fV
;              i -> R20
;              j -> R22
	.even
_Clear_Lcd::
	st -y,R20
	st -y,R22
	.dbline -1
	.dbline 147
; }
; 
; //***********清屏******************************/
; void Clear_Lcd( void )
; {
	.dbline 149
;          uchar i,j;
;          Write_Command(0x34);
	ldi R16,52
	xcall _Write_Command
	.dbline 150
;          Write_Command(0x36);
	ldi R16,54
	xcall _Write_Command
	.dbline 151
;          for(i=0;i<32;i++)
	clr R20
	xjmp L40
L37:
	.dbline 152
;          {
	.dbline 153
;                  Write_Command(0x80|i);
	mov R16,R20
	ori R16,128
	xcall _Write_Command
	.dbline 154
;                  Write_Command(0x80);
	ldi R16,128
	xcall _Write_Command
	.dbline 155
;                  for(j=0;j<32;j++)
	clr R22
	xjmp L44
L41:
	.dbline 156
;                     Write_Data(0);
	clr R16
	xcall _Write_Data
L42:
	.dbline 155
	inc R22
L44:
	.dbline 155
	cpi R22,32
	brlo L41
X10:
	.dbline 157
;          }
L38:
	.dbline 151
	inc R20
L40:
	.dbline 151
	cpi R20,32
	brlo L37
X11:
	.dbline -2
L36:
	.dbline 0 ; func end
	ld R22,y+
	ld R20,y+
	ret
	.dbsym r i 20 c
	.dbsym r j 22 c
	.dbend
	.dbfunc e LcmClearTXT _LcmClearTXT fV
;              i -> R20
	.even
_LcmClearTXT::
	st -y,R20
	.dbline -1
	.dbline 162
; }
; 
; //***************清除“文字”函数**********************/
; void LcmClearTXT( void )
; {
	.dbline 164
;          unsigned char i;
;          Write_Command(0x30);
	ldi R16,48
	xcall _Write_Command
	.dbline 165
;          Write_Command(0x80);
	ldi R16,128
	xcall _Write_Command
	.dbline 166
;          for(i=0;i<64;i++)
	clr R20
	xjmp L49
L46:
	.dbline 167
;          Write_Data(0x20);
	ldi R16,32
	xcall _Write_Data
L47:
	.dbline 166
	inc R20
L49:
	.dbline 166
	cpi R20,64
	brlo L46
X12:
	.dbline -2
L45:
	.dbline 0 ; func end
	ld R20,y+
	ret
	.dbsym r i 20 c
	.dbend
	.dbfunc e LcmClearBMP _LcmClearBMP fV
;              i -> R20
;              j -> R22
	.even
_LcmClearBMP::
	st -y,R20
	st -y,R22
	.dbline -1
	.dbline 171
; }
; 
; void LcmClearBMP( void )
; {
	.dbline 173
; 	unsigned char i,j;
; 	Write_Command(0x34);
	ldi R16,52
	xcall _Write_Command
	.dbline 174
; 	Write_Command(0x36);
	ldi R16,54
	xcall _Write_Command
	.dbline 175
; 	for(i=0;i<32;i++)
	clr R20
	xjmp L54
L51:
	.dbline 176
; 	{
	.dbline 177
; 		Write_Command(0x80|i);
	mov R16,R20
	ori R16,128
	xcall _Write_Command
	.dbline 178
; 		Write_Command(0x80);
	ldi R16,128
	xcall _Write_Command
	.dbline 179
; 		for(j=0;j<32;j++)
	clr R22
	xjmp L58
L55:
	.dbline 180
; 		Write_Data(0);
	clr R16
	xcall _Write_Data
L56:
	.dbline 179
	inc R22
L58:
	.dbline 179
	cpi R22,32
	brlo L55
X13:
	.dbline 181
; 	}
L52:
	.dbline 175
	inc R20
L54:
	.dbline 175
	cpi R20,32
	brlo L51
X14:
	.dbline -2
L50:
	.dbline 0 ; func end
	ld R22,y+
	ld R20,y+
	ret
	.dbsym r i 20 c
	.dbsym r j 22 c
	.dbend
	.dbfunc e PutBMP _PutBMP fV
;              i -> R22
;              y -> R14,R15
;              x -> R20,R21
;              j -> R12
;           puts -> R10,R11
	.even
_PutBMP::
	xcall push_xgsetF0FC
	movw R10,R16
	.dbline -1
	.dbline 184
; }
; void PutBMP(unsigned flash char *puts)
; {          
	.dbline 185
; 	unsigned int x=0,y=0;
	clr R20
	clr R21
	.dbline 185
	clr R14
	clr R15
	.dbline 187
; 	unsigned char i,j;
; 	Write_Command(0x34);
	ldi R16,52
	xcall _Write_Command
	.dbline 188
; 	Write_Command(0x36);
	ldi R16,54
	xcall _Write_Command
	.dbline 189
; 	for(i=0;i<32;i++)  
	clr R22
	xjmp L63
L60:
	.dbline 190
; 	{
	.dbline 191
; 		Write_Command(0x80|i);
	mov R16,R22
	ori R16,128
	xcall _Write_Command
	.dbline 192
; 		Write_Command(0x80);  
	ldi R16,128
	xcall _Write_Command
	.dbline 193
; 		for(j=0;j<16;j++)    
	clr R12
	xjmp L67
L64:
	.dbline 194

⌨️ 快捷键说明

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