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

📄 lcddriver.s

📁 采用Mega16+VS1011B+SD卡制作的Mp3
💻 S
📖 第 1 页 / 共 3 页
字号:
	ldi R16,162
	xcall _send_cmd
	.dbline 97
;   send_cmd(LCD_POWER_CONTROL+4);
	ldi R16,44
	xcall _send_cmd
	.dbline 98
;   send_cmd(LCD_POWER_CONTROL+6); 
	ldi R16,46
	xcall _send_cmd
	.dbline 99
;   send_cmd(LCD_POWER_CONTROL+7);
	ldi R16,47
	xcall _send_cmd
	.dbline 100
;   send_cmd(LCD_RESISTOR_RATIO+5);
	ldi R16,37
	xcall _send_cmd
	.dbline 101
;   send_cmd(LCD_ELEC_VOLUME_SET);
	ldi R16,129
	xcall _send_cmd
	.dbline 102
;   send_cmd(0x14); //0X14
	ldi R16,20
	xcall _send_cmd
	.dbline 103
;   send_cmd(LCD_ON);
	ldi R16,175
	xcall _send_cmd
	.dbline 104
;   send_cmd(LCD_RMW);
	ldi R16,224
	xcall _send_cmd
	.dbline 105
;   send_cmd(LCD_START_LINE_SET);
	ldi R16,64
	xcall _send_cmd
	.dbline -2
L24:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e Set_Page_Address _Set_Page_Address fV
;            dat -> R20
	.even
_Set_Page_Address::
	st -y,R20
	mov R20,R16
	.dbline -1
	.dbline 109
; }
; //=======写页地址==============
; void Set_Page_Address(unsigned char dat)
; {
	.dbline 110
;     send_cmd(LCD_PAGE_SET|dat);
	mov R16,R20
	ori R16,176
	xcall _send_cmd
	.dbline -2
L25:
	.dbline 0 ; func end
	ld R20,y+
	ret
	.dbsym r dat 20 c
	.dbend
	.dbfunc e Set_Colume_Address _Set_Colume_Address fV
;            tmp -> R20
;            dat -> R22
	.even
_Set_Colume_Address::
	st -y,R20
	st -y,R22
	mov R22,R16
	.dbline -1
	.dbline 114
; }
; //=======写列地址==============
; void Set_Colume_Address(unsigned char dat)
; {
	.dbline 116
;     unsigned char tmp;
; 	tmp=dat>>4;
	mov R20,R22
	swap R20
	andi R20,#0x0F
	.dbline 117
;     send_cmd(LCD_COLUME_SET_H|tmp);  //送列地址高三位
	mov R16,R20
	ori R16,16
	xcall _send_cmd
	.dbline 118
; 	tmp=0x0f&dat; 
	mov R20,R22
	andi R20,15
	.dbline 119
;     send_cmd(tmp);       //送列地址低四位
	mov R16,R20
	xcall _send_cmd
	.dbline -2
L26:
	.dbline 0 ; func end
	ld R22,y+
	ld R20,y+
	ret
	.dbsym r tmp 20 c
	.dbsym r dat 22 c
	.dbend
	.dbfunc e PrintOneASCII _PrintOneASCII fV
;            Tmp -> R22
;              j -> R20
;            Asc -> R20
;              l -> R10
;              h -> R12
	.even
_PrintOneASCII::
	xcall push_xgsetF03C
	mov R10,R18
	mov R12,R16
	ldd R20,y+8
	.dbline -1
	.dbline 126
; }
; 
; //在指定的位置显示1个ASCII码字符
; //h,l:行位置与列位置
; //Asc:字符的ASC值,注意ASC字符为可显示字符(ASCII>=0x20)
; void PrintOneASCII(uchar h,uchar l,uchar Asc)
; {
	.dbline 128
;   uchar Tmp,j;
;   Set_Page_Address(h);
	mov R16,R12
	xcall _Set_Page_Address
	.dbline 129
;   Set_Colume_Address(l);
	mov R16,R10
	xcall _Set_Colume_Address
	.dbline 130
;   if (Asc>=0x20)  Tmp=Asc-0x20;else Tmp=0;
	cpi R20,32
	brlo L28
X5:
	.dbline 130
	mov R22,R20
	subi R22,32
	xjmp L29
L28:
	.dbline 130
	clr R22
L29:
	.dbline 131
;   for(j=0;j<8;j++)
	clr R20
	xjmp L33
L30:
	.dbline 132
;   {
	.dbline 133
;     send_dat(Ascii[Tmp][j]);
	ldi R24,<_Ascii
	ldi R25,>_Ascii
	mov R2,R22
	clr R3
	lsl R2
	rol R3
	lsl R2
	rol R3
	lsl R2
	rol R3
	add R2,R24
	adc R3,R25
	mov R30,R20
	clr R31
	add R30,R2
	adc R31,R3
	lpm R16,Z
	xcall _send_dat
	.dbline 134
;   }
L31:
	.dbline 131
	inc R20
L33:
	.dbline 131
	cpi R20,8
	brlo L30
X6:
	.dbline -2
L27:
	.dbline 0 ; func end
	xjmp pop_xgsetF03C
	.dbsym r Tmp 22 c
	.dbsym r j 20 c
	.dbsym r Asc 20 c
	.dbsym r l 10 c
	.dbsym r h 12 c
	.dbend
	.dbfunc e ClearLCD _ClearLCD fV
;              i -> R20
;              j -> R22
	.even
_ClearLCD::
	st -y,R20
	st -y,R22
	.dbline -1
	.dbline 138
; }
; 
; void ClearLCD(void)	 //LCD清屏
; {
	.dbline 140
;   uchar i,j;
;   for(i=0; i<9; i++)       //clear page 0~8
	clr R20
	xjmp L38
L35:
	.dbline 141
;   {
	.dbline 142
;      Set_Page_Address(i);
	mov R16,R20
	xcall _Set_Page_Address
	.dbline 143
;   	 Set_Colume_Address(0);
	clr R16
	xcall _Set_Colume_Address
	.dbline 144
;   	 for(j=0; j<132; j++)     //clear colum
	clr R22
	xjmp L42
L39:
	.dbline 145
;   	 {      
	.dbline 146
;    	    send_dat(0);     
	clr R16
	xcall _send_dat
	.dbline 147
;   	 }
L40:
	.dbline 144
	inc R22
L42:
	.dbline 144
	cpi R22,132
	brlo L39
X7:
	.dbline 148
;    }
L36:
	.dbline 140
	inc R20
L38:
	.dbline 140
	cpi R20,9
	brlo L35
X8:
	.dbline -2
L34:
	.dbline 0 ; func end
	ld R22,y+
	ld R20,y+
	ret
	.dbsym r i 20 c
	.dbsym r j 22 c
	.dbend
	.dbfunc e Display_BattVol _Display_BattVol fV
;              j -> R20
;            Vol -> R10
;            pic -> R12,R13
	.even
_Display_BattVol::
	xcall push_xgset303C
	mov R10,R18
	movw R12,R16
	.dbline -1
	.dbline 153
; }
; 
; //=======显示电池电量============
; void Display_BattVol(uchar const *pic,uchar Vol)
; {
	.dbline 155
;   unsigned char j;
;   Set_Page_Address(7);	   	   //LCD的左下角显示电池电量
	ldi R16,7
	xcall _Set_Page_Address
	.dbline 156
;   Set_Colume_Address(0x00);
	clr R16
	xcall _Set_Colume_Address
	.dbline 157
;   for(j=0;j<0x10;j++)	   	   //16列
	clr R20
	xjmp L47
L44:
	.dbline 158
;   {
	.dbline 159
;      send_dat(*(pic+0x10*Vol+j));
	ldi R24,16
	mul R24,R10
	movw R2,R0
	add R2,R12
	adc R3,R13
	mov R30,R20
	clr R31
	add R30,R2
	adc R31,R3
	lpm R16,Z
	xcall _send_dat
	.dbline 160
;   }
L45:
	.dbline 157
	inc R20
L47:
	.dbline 157
	cpi R20,16
	brlo L44
X9:
	.dbline -2
L43:
	.dbline 0 ; func end
	xjmp pop_xgset303C
	.dbsym r j 20 c
	.dbsym r Vol 10 c
	.dbsym r pic 12 pkc
	.dbend
	.dbfunc e Display_Picture _Display_Picture fV
;              i -> R20
;              j -> R22
;            pic -> R10,R11
	.even
_Display_Picture::
	xcall push_xgsetF00C
	movw R10,R16
	.dbline -1
	.dbline 165
; }
; 
; //=======显示图形===============
; void Display_Picture(uchar const *pic)
; {
	.dbline 167
;   unsigned char i,j;
;   for(i=0;i<8;i++)
	clr R20
	xjmp L52
L49:
	.dbline 168
;   {
	.dbline 169
; 	Set_Page_Address(i);
	mov R16,R20
	xcall _Set_Page_Address
	.dbline 170
;     Set_Colume_Address(0x00);
	clr R16
	xcall _Set_Colume_Address
	.dbline 171
;     for(j=0;j<0x80;j++)
	clr R22
	xjmp L56
L53:
	.dbline 172
;     {
	.dbline 173
;        send_dat(*(pic+0x80*i+j));
	ldi R24,128
	mul R24,R20
	movw R2,R0
	add R2,R10
	adc R3,R11
	mov R30,R22
	clr R31
	add R30,R2
	adc R31,R3
	lpm R16,Z
	xcall _send_dat
	.dbline 174
; 	}
L54:
	.dbline 171
	inc R22
L56:
	.dbline 171
	cpi R22,128
	brlo L53
X10:
	.dbline 175
;   }
L50:
	.dbline 167
	inc R20
L52:
	.dbline 167
	cpi R20,8
	brlo L49
X11:
	.dbline -2
L48:
	.dbline 0 ; func end
	xjmp pop_xgsetF00C
	.dbsym r i 20 c
	.dbsym r j 22 c
	.dbsym r pic 10 pkc
	.dbend
	.dbfunc e PrintConstAscStr _PrintConstAscStr fV
;             Ty -> R22
;              i -> R10
;             Tx -> R20
;            Len -> y+11
;            str -> y+9
;              l -> R10
;              h -> R12
	.even
_PrintConstAscStr::
	xcall push_xgsetF03C
	mov R10,R18
	mov R12,R16
	sbiw R28,1
	.dbline -1
	.dbline 183
; }
; 
; //在指定位置显示指定长度的ASCII字符串
; //h,l:行位置与列位置
; //str:字符串
; //Len:字符串长度,以字节为单位
; void PrintConstAscStr(uchar h,uchar l,uchar const *str,uchar Len)	
; {
	.dbline 185
;     uchar i,Tx,Ty;
; 	Ty=h;Tx=l;
	mov R22,R12
	.dbline 185
	mov R20,R10
	.dbline 186
; 	for(i=0;i<Len;i++)
	clr R10
	xjmp L61
L58:
	.dbline 187
; 	{
	.dbline 188
; 	 	PrintOneASCII(Ty,Tx,str[i]);
	mov R30,R10
	clr R31
	ldd R0,y+9
	ldd R1,y+10
	add R30,R0
	adc R31,R1
	lpm R2,Z
	std y+0,R2
	mov R18,R20
	mov R16,R22
	xcall _PrintOneASCII
	.dbline 189
; 		Tx+=8;
	subi R20,248    ; addi 8
	.dbline 190
; 		if (Tx>=128) { Ty=(Ty+1)&0x07;Tx=0; }
	cpi R20,128
	brlo L62
X12:
	.dbline 190
	.dbline 190
	mov R24,R22
	subi R24,255    ; addi 1
	andi R24,7
	mov R22,R24
	.dbline 190
	clr R20
	.dbline 190
L62:
	.dbline 191
; 	}
L59:
	.dbline 186
	inc R10
L61:
	.dbline 186
	ldd R0,y+11
	cp R10,R0
	brlo L58
X13:
	.dbline -2
L57:
	.dbline 0 ; func end
	adiw R28,1
	xjmp pop_xgsetF03C
	.dbsym r Ty 22 c
	.dbsym r i 10 c
	.dbsym r Tx 20 c
	.dbsym l Len 11 c
	.dbsym l str 9 pkc
	.dbsym r l 10 c
	.dbsym r h 12 c
	.dbend
	.dbfunc e PrintAscStr _PrintAscStr fV
;             Ty -> R22
;              i -> R10
;             Tx -> R20
;            Len -> y+11
;            str -> y+9
;              l -> R10
;              h -> R12
	.even
_PrintAscStr::
	xcall push_xgsetF03C
	mov R10,R18
	mov R12,R16
	sbiw R28,1
	.dbline -1
	.dbline 199
; }
; 
; //在指定位置显示指定长度的ASCII字符串
; //h,l:行位置与列位置
; //str:字符串
; //Len:字符串长度,以字节为单位
; void PrintAscStr(uchar h,uchar l,uchar *str,uchar Len)	
; {
	.dbline 201
;     uchar i,Tx,Ty;
; 	Ty=h;Tx=l;
	mov R22,R12
	.dbline 201
	mov R20,R10
	.dbline 202
; 	for(i=0;i<Len;i++)
	clr R10
	xjmp L68
L65:
	.dbline 203
; 	{
	.dbline 204
; 	 	PrintOneASCII(Ty,Tx,str[i]);
	mov R30,R10
	clr R31
	ldd R0,y+9
	ldd R1,y+10
	add R30,R0
	adc R31,R1
	ldd R2,z+0
	std y+0,R2
	mov R18,R20
	mov R16,R22
	xcall _PrintOneASCII
	.dbline 205
; 		Tx+=8;
	subi R20,248    ; addi 8
	.dbline 206
; 		if (Tx>=128) { Ty=(Ty+1)&0x07;Tx=0; }
	cpi R20,128
	brlo L69
X14:
	.dbline 206
	.dbline 206
	mov R24,R22
	subi R24,255    ; addi 1
	andi R24,7
	mov R22,R24
	.dbline 206
	clr R20
	.dbline 206
L69:
	.dbline 207
; 	}
L66:
	.dbline 202
	inc R10
L68:
	.dbline 202
	ldd R0,y+11
	cp R10,R0
	brlo L65
X15:
	.dbline -2
L64:
	.dbline 0 ; func end
	adiw R28,1
	xjmp pop_xgsetF03C
	.dbsym r Ty 22 c
	.dbsym r i 10 c
	.dbsym r Tx 20 c
	.dbsym l Len 11 c
	.dbsym l str 9 pc
	.dbsym r l 10 c
	.dbsym r h 12 c
	.dbend
	.dbfunc e PrintOneHZ _PrintOneHZ fV
;        LCD_DAT -> <dead>
;          Tmp_y -> <dead>
;          Tmp_x -> <dead>
;              i -> R20
;            hzm -> R22,R23
;              l -> R10
;              h -> R12
	.even
_PrintOneHZ::
	xcall push_xgsetF03C
	mov R10,R18
	mov R12,R16
	ldd R22,y+8
	ldd R23,y+9
	.dbline -1
	.dbline 214
; }
; 
; //在指定的位置显示1个16*16中文字符
; //h,l:行位置与列位置
; //hzm:指向汉字字型数据的指针
; void PrintOneHZ(uchar h,uchar l,unsigned char *hzm)
; {
	.dbline 216
;   uchar i,Tmp_x,Tmp_y,LCD_DAT;
;   if(h<=6 && h>=0 && l>=0 && l<=112)  //检查汉字能否正常显示出来
	ldi R24,6
	cp R24,R12
	brsh X24
	xjmp L72
X24:
X16:
	mov R24,R12
	cpi R24,0
	brsh X25
	xjmp L72
X25:
X17:
	mov R24,R10
	cpi R24,0
	brsh X26
	xjmp L72
X26:
X18:
	ldi R24,112
	cp R24,R10
	brsh X27
	xjmp L72
X27:
X19:
	.dbline 217
;   {
	.dbline 230
;     /*	for(i=0;i<16;i++)	//竖字
; 	{
; 		Tmp_x=h;Tmp_y=l+i;
; 		Set_Page_Address(Tmp_x);
;         Set_Colume_Address(Tmp_y);
; 		LCD_DAT=*(hzm+(i<<1));
; 		send_dat(LCD_DAT);
; 		Set_Page_Address(Tmp_x-1);
;         Set_Colume_Address(Tmp_y);
; 		LCD_DAT=*(hzm+(i<<1)+1);
; 		send_dat(LCD_DAT);
; 	}	*/
; 	Set_Page_Address(h);
	mov R16,R12
	xcall _Set_Page_Address
	.dbline 231
;     Set_Colume_Address(l);
	mov R16,R10
	xcall _Set_Colume_Address
	.dbline 233
; 	/*先显示汉字上半部分*/
; 	for(i=0;i<8;i++) send_dat(*(hzm+0+i));
	clr R20
	xjmp L77
L74:
	.dbline 233
	mov R30,R20
	clr R31
	add R30,R22
	adc R31,R23
	ldd R16,z+0
	xcall _send_dat
L75:
	.dbline 233
	inc R20
L77:
	.dbline 233
	cpi R20,8
	brlo L74
X20:
	.dbline 234
; 	for(i=0;i<8;i++) send_dat(*(hzm+8+i));
	clr R20
	xjmp L81
L78:
	.dbline 234
	movw R24,R22
	adiw R24,8
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	xcall _send_dat
L79:
	.dbline 234
	inc R20
L81:
	.dbline 234
	cpi R20,8
	brlo L78
X21:
	.dbline 236
; 	/*再显示汉字下半部分*/
; 	Set_Page_Address(h+1);
	mov R16,R12
	subi R16,255    ; addi 1
	xcall _Set_Page_Address
	.dbline 237
;     Set_Colume_Address(l);
	mov R16,R10
	xcall _Set_Colume_Address
	.dbline 238
; 	for(i=0;i<8;i++) send_dat(*(hzm+16+i));
	clr R20
	xjmp L85
L82:
	.dbline 238
	movw R24,R22
	adiw R24,16
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	xcall _send_dat
L83:
	.dbline 238
	inc R20
L85:
	.dbline 238
	cpi R20,8
	brlo L82
X22:
	.dbline 239
; 	for(i=0;i<8;i++) send_dat(*(hzm+24+i));
	clr R20
	xjmp L89
L86:
	.dbline 239
	movw R24,R22
	adiw R24,24
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	xcall _send_dat
L87:
	.dbline 239
	inc R20
L89:
	.dbline 239
	cpi R20,8
	brlo L86
X23:
	.dbline 240
;   }
L72:
	.dbline -2
L71:
	.dbline 0 ; func end
	xjmp pop_xgsetF03C
	.dbsym l LCD_DAT 1 c
	.dbsym l Tmp_y 1 c
	.dbsym l Tmp_x 1 c
	.dbsym r i 20 c
	.dbsym r hzm 22 pc
	.dbsym r l 10 c
	.dbsym r h 12 c
	.dbend
; }

⌨️ 快捷键说明

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