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

📄 main.s

📁 采用Mega16+VS1011B+SD卡制作的Mp3
💻 S
📖 第 1 页 / 共 5 页
字号:
	.module Main.C
	.area text(rom, con, rel)
	.dbfile D:\学习\AVRpro\Mega16程序\TestLCD\Main.C
	.area lit(rom, con, rel)
_ScreenStr12::
	.byte 'S,'D,'C,'a,'r,'d,32,'E,'r,'r,'o,'r,33,32,32,32
	.byte 'R,'e,'a,'d,'i,'n,'g,32,'S,'D,'C,'a,'r,'d,32,32
	.byte 'F,'A,'T,32,'E,'R,'R,'O,'R,33,32,32,32,32,32,32
	.byte 'N,'o,32,'F,'O,'N,'T,32,'F,'i,'l,'e,33,32,32,32
	.byte 32,32,32,'F,'A,'T,32,'E,'R,'R,'O,'R,33,32,32,32
	.byte 'S,'D,'C,'a,'r,'d,32,'r,'e,'a,'d,32,'o,'v,'e,'r
	.byte 'O,'p,'e,'n,32,'M,'P,51,32,'F,'i,'l,'e,58,32,32
	.byte 'P,'l,'a,'y,'i,'n,'g,32,'M,'p,51,'F,'i,'l,'e,58
	.byte 'V,'S,49,48,49,49,32,'I,'n,'i,45,'F,'a,'i,'l,33
	.byte 'M,'a,'i,'n,'U,'I,32,'D,'i,'s,'p,'l,'a,'y,33,32
	.byte 187,182,211,173,202,185,211,195,163,205,163,208,163,179,163,161
	.byte 32,'V,'o,'l,'u,'m,'e,32,'C,'o,'n,'t,'r,'o,'l,32
	.byte 'M,'a,'x,58,50,53,53,60,61,61,62,'M,'i,'n,58,48
	.byte 'K,'e,'y,50,58,45,60,61,61,62,'K,'e,'y,51,58,43
	.byte 'V,'o,'l,'u,'m,'e,58,32,32,32,32,32,32,32,32,32
	.byte 'V,'o,'l,'u,'m,'e,32,'S,'e,'t,32,'E,'r,'r,'o,'r
	.byte 32,49,46,'B,'A,'S,'S,32,'V,'o,'l,'u,'m,'e,32,32
	.byte 32,50,46,'L,'o,'w,32,'P,'a,'s,'s,32,'F,'r,'e,'q
	.byte 'K,'e,'y,50,58,45,60,61,61,62,'K,'e,'y,51,58,43
	.byte 32,'B,'A,'S,'S,32,'S,'e,'t,32,'E,'r,'r,'o,'r,32
	.byte 49,58,32,32,32,32,32,32,32,32,32,32,32,32,32,32
	.byte 50,58,32,32,32,32,32,32,32,32,32,32,32,32,32,32
	.byte 32,'B,'a,'c,'k,32,'L,'i,'g,'h,'t,32,'O,'n,46,32
	.byte 32,'B,'a,'c,'k,32,'L,'i,'g,'h,'t,32,'O,'f,'f,46
	.byte 32,'S,'h,'o,'w,32,'T,'i,'m,'e,32,'O,'n,46,32,32
	.byte 32,'S,'h,'o,'w,32,'T,'i,'m,'e,32,'O,'f,'f,46,32
	.byte 32,'S,'p,'e,'a,'k,'e,'r,32,'O,'n,46,32,32,32,32
	.byte 32,'S,'p,'e,'a,'k,'e,'r,32,'O,'f,'f,46,32,32,32
	.byte 'S,'e,'t,32,'P,'l,'a,'y,'P,'o,'s,'i,'t,'i,'o,'n
	.dbfile D:\学习\AVRpro\Mega16程序\TestLCD\ProString.h
	.dbsym e ScreenStr12 _ScreenStr12 A[464:29:16]kc
_Menustr6::
	.byte 49,46,'B,'a,'c,'k,32,'L,'i,'g,'h,'t,32
	.byte 50,46,'T,'i,'m,'e,32,'S,'h,'o,'w,32,32
	.byte 51,46,'V,'o,'l,'u,'m,'e,32,'S,'e,'t,32
	.byte 52,46,'B,'a,'s,'s,32,'S,'e,'t,32,32,32
	.byte 53,46,'S,'p,'e,'a,'k,'e,'r,32,'S,'e,'t
	.byte 54,46,'g,'o,'t,'o,32,'x,32,'f,'i,'l,'e
	.byte 'r,'e,'c,'h,'a,'r,'g,'e,32,'B,'a,'t,33
	.dbsym e Menustr6 _Menustr6 A[91:7:13]kc
	.area data(ram, con, rel)
	.dbfile D:\学习\AVRpro\Mega16程序\TestLCD\ProString.h
_Lcdak::
	.blkb 1
	.area idata
	.byte 1
	.area data(ram, con, rel)
	.dbfile D:\学习\AVRpro\Mega16程序\TestLCD\ProString.h
	.dbfile D:\学习\AVRpro\Mega16程序\TestLCD\Main.C
	.dbsym e Lcdak _Lcdak c
_UsrSel::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\学习\AVRpro\Mega16程序\TestLCD\Main.C
	.dbsym e UsrSel _UsrSel c
_SWPlayTime::
	.blkb 1
	.area idata
	.byte 1
	.area data(ram, con, rel)
	.dbfile D:\学习\AVRpro\Mega16程序\TestLCD\Main.C
	.dbsym e SWPlayTime _SWPlayTime c
_SWSpeaker::
	.blkb 1
	.area idata
	.byte 1
	.area data(ram, con, rel)
	.dbfile D:\学习\AVRpro\Mega16程序\TestLCD\Main.C
	.dbsym e SWSpeaker _SWSpeaker c
_SWIRRemoteMode::
	.blkb 1
	.area idata
	.byte 1
	.area data(ram, con, rel)
	.dbfile D:\学习\AVRpro\Mega16程序\TestLCD\Main.C
	.dbsym e SWIRRemoteMode _SWIRRemoteMode c
_CurStatus::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\学习\AVRpro\Mega16程序\TestLCD\Main.C
	.dbsym e CurStatus _CurStatus c
_DEF_MAX_SONGS::
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile D:\学习\AVRpro\Mega16程序\TestLCD\Main.C
	.dbsym e DEF_MAX_SONGS _DEF_MAX_SONGS i
	.area text(rom, con, rel)
	.dbfile D:\学习\AVRpro\Mega16程序\TestLCD\Main.C
	.dbfunc e IniData_From_EEPROM _IniData_From_EEPROM fV
;              k -> <dead>
;              j -> <dead>
;              i -> <dead>
	.even
_IniData_From_EEPROM::
	.dbline -1
	.dbline 65
; //*********************************************
;  //主程序Main.C
;  //MCU:AVR_MEGA16L ,晶振频率:8.0 MHz
;  //制作人:平顶山工学院计算机系,郭猛
; //**********************************************
; # include "stdlib.h"
; # include "iom16v.h"
; # include "macros.h"
; # include "LCDFun.h"
; # include "fat.h"
; # include "ProString.h"
; # include "MMC.h"
; # include "VS1011B.h"
; 
; #ifndef uchar
; 	#define uchar unsigned char
; #endif
; 
; #define uint8 unsigned char
; #define uint16 unsigned int
; #define uint32 unsigned long
; 
; //4个控制按键接口:
; #define KEY01  		0	//PB0    前进
; #define KEY02 		1	//PB1
; #define KEY03		2	//PB2
; #define KEY04       3   //PB3
; //KEY01,KEY02,KEY03,KEY04输入
; # define KeyOutput() DDRB|=(BIT(KEY01)|BIT(KEY02)|BIT(KEY03)|BIT(KEY04))
; # define KeyIni()    PORTB|=(BIT(KEY01)|BIT(KEY02)|BIT(KEY03)|BIT(KEY04))
; # define KeyInput()  DDRB&=~(BIT(KEY01)|BIT(KEY02)|BIT(KEY03)|BIT(KEY04))
; # define KeySt01    (PINB&=BIT(KEY01))  //获取KEY01状态
; # define KeySt02    (PINB&=BIT(KEY02))  //获取KEY02状态
; # define KeySt03    (PINB&=BIT(KEY03))  //获取KEY03状态
; # define KeySt04    (PINB&=BIT(KEY04))  //获取KEY04状态
; 
; //外部函数、变量的引用声明
; extern unsigned char SecPerClus;	//每个簇占用的扇区数目,1GB的SD卡应为8
; extern unsigned long data_offset;	//数据区的起始扇区数,FAT32的根目录区和数据区重合:
; 
; extern unsigned char ShowText_main;
; extern unsigned char *pointer_FDT; //用于指向找到指定文件的文件名
; extern unsigned long old_pos_blk,FirstRootDirSecNum;
; 
; extern unsigned char CurSongTim[3];		//当前歌曲的播放时间 分:秒:百秒
; extern unsigned char TotalSongTim[4];	//当前歌曲的播放时间 时:分:秒:百秒
; 
; extern void E2PROM_Write(unsigned int IAddress,unsigned char *Data,unsigned char Cnt);
; extern unsigned char E2PROM_Read_OneChar(unsigned int IAddress);
; extern void ADC_Init(void);
; extern unsigned char ADC_Convert(void);
; extern void MCUMode(uchar iMode);
; 
; unsigned char buff[512];				//用于暂存读取一扇区的数据缓冲
; unsigned char Mp3FileName[8];			//用于保存Mp3歌曲文件名,8字节短名格式
; unsigned char CurVol,CurBass;	//当前音量,低音量
; unsigned char Lcdak=1,UsrSel=0;			//背光开关,用户选择菜单项
; unsigned char SWPlayTime=1; 			//时间开关
; unsigned char SWSpeaker=1,SWIRRemoteMode=1; //扬声器开关,遥控制式
; unsigned char CurStatus=0;				//播放器当前状态
; unsigned long FONT_ClusterVar;	   		//找到字库文件的起始簇号
; unsigned int DEF_MAX_SONGS=0;           //SD卡根目录下歌曲数目.
; 
; void IniData_From_EEPROM(void)			//从E2PROM中读取音量、低音信息
; { unsigned char i,j,k;
	.dbline 66
;   CurVol=E2PROM_Read_OneChar(0);
	clr R16
	clr R17
	xcall _E2PROM_Read_OneChar
	sts _CurVol,R16
	.dbline 67
;   CurBass=E2PROM_Read_OneChar(1);
	ldi R16,1
	ldi R17,0
	xcall _E2PROM_Read_OneChar
	sts _CurBass,R16
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbsym l k 1 c
	.dbsym l j 1 c
	.dbsym l i 1 c
	.dbend
	.dbfunc e DisplayNumChar _DisplayNumChar fV
;          srnum -> R22
;          tnnum -> R12
;          hunum -> R10
;        ShowBit -> R14
;             ll -> R12
;              l -> R20
;              h -> y+11
	.even
_DisplayNumChar::
	xcall push_arg4
	xcall push_xgsetF0FC
	mov R20,R18
	sbiw R28,1
	ldd R12,y+15
	ldd R14,y+17
	.dbline -1
	.dbline 75
; }
; 
; //DisplayNumChar用于显示百、十、个的数字值
; //l,h: 行、列位置
; //ll:要显示的数值
; //ShowBit:3,显示百,十,个,位;2,显示十,个,位
; void DisplayNumChar(unsigned char h,unsigned char l,unsigned char ll,unsigned char ShowBit)
; {
	.dbline 77
;   unsigned char hunum,tnnum,srnum;  //百、十、个位
;   hunum=ll/100; 	//百位
	ldi R17,100
	mov R16,R12
	xcall div8u
	mov R10,R16
	.dbline 78
;   srnum=ll%10;		//个位
	ldi R17,10
	mov R16,R12
	xcall mod8u
	mov R22,R16
	.dbline 79
;   tnnum=(ll-hunum*100)/10; //十位
	ldi R24,100
	mul R24,R10
	mov R16,R12
	sub R16,R0
	ldi R17,10
	xcall div8u
	mov R12,R16
	.dbline 81
;   
;   hunum+=0x30;srnum+=0x30;tnnum+=0x30;
	mov R24,R10
	subi R24,208    ; addi 48
	mov R10,R24
	.dbline 81
	subi R22,208    ; addi 48
	.dbline 81
	mov R24,R12
	subi R24,208    ; addi 48
	mov R12,R24
	.dbline 82
;   if(ShowBit==3)		//显示百,十,个,位
	mov R24,R14
	cpi R24,3
	brne L3
X0:
	.dbline 83
;   {
	.dbline 84
;      PrintOneASCII(h,l,hunum);PrintOneASCII(h,l+8,tnnum);
	std y+0,R10
	mov R18,R20
	ldd R16,y+11
	xcall _PrintOneASCII
	.dbline 84
	std y+0,R12
	mov R18,R20
	subi R18,248    ; addi 8
	ldd R16,y+11
	xcall _PrintOneASCII
	.dbline 85
; 	 PrintOneASCII(h,l+16,srnum);
	std y+0,R22
	mov R18,R20
	subi R18,240    ; addi 16
	ldd R16,y+11
	xcall _PrintOneASCII
	.dbline 86
;   }
	xjmp L4
L3:
	.dbline 87
;   else if(ShowBit==2)	//显示十,个,位
	mov R24,R14
	cpi R24,2
	brne L5
X1:
	.dbline 88
;   {
	.dbline 89
; 	 PrintOneASCII(h,l,tnnum);PrintOneASCII(h,l+8,srnum);
	std y+0,R12
	mov R18,R20
	ldd R16,y+11
	xcall _PrintOneASCII
	.dbline 89
	std y+0,R22
	mov R18,R20
	subi R18,248    ; addi 8
	ldd R16,y+11
	xcall _PrintOneASCII
	.dbline 90
;   }
L5:
L4:
	.dbline -2
L2:
	.dbline 0 ; func end
	adiw R28,1
	xcall pop_xgsetF0FC
	adiw R28,4
	ret
	.dbsym r srnum 22 c
	.dbsym r tnnum 12 c
	.dbsym r hunum 10 c
	.dbsym r ShowBit 14 c
	.dbsym r ll 12 c
	.dbsym r l 20 c
	.dbsym l h 11 c
	.dbend
	.dbfunc e DisplayNumInt _DisplayNumInt fV
;          srnum -> R22
;          tnnum -> R12
;          hunum -> R10
;        ShowBit -> R14
;             ll -> R12,R13
;              l -> R20
;              h -> y+11
	.even
_DisplayNumInt::
	xcall push_arg4
	xcall push_xgsetF0FC
	mov R20,R18
	sbiw R28,1
	ldd R12,y+15
	ldd R13,y+16
	ldd R14,y+17
	.dbline -1
	.dbline 95
; }
; 
; //DisplayNumInt该函数主要用于测试显示中间变量
; void DisplayNumInt(unsigned char h,unsigned char l,unsigned int ll,unsigned char ShowBit)
; {
	.dbline 97
;   unsigned char hunum,tnnum,srnum;  //百、十、个位
;   hunum=ll/100; 	//百位
	ldi R18,100
	ldi R19,0
	movw R16,R12
	xcall div16u
	mov R10,R16
	.dbline 98
;   srnum=ll%10;		//个位
	ldi R18,10
	ldi R19,0
	movw R16,R12
	xcall mod16u
	mov R22,R16
	.dbline 99
;   tnnum=(ll-hunum*100)/10; //十位
	ldi R24,100
	mul R24,R10
	movw R16,R12
	sub R16,R0
	sbc R17,R1
	ldi R18,10
	ldi R19,0
	xcall div16u
	mov R12,R16
	.dbline 101
;   
;   hunum+=0x30;srnum+=0x30;tnnum+=0x30;
	mov R24,R10
	subi R24,208    ; addi 48
	mov R10,R24
	.dbline 101
	subi R22,208    ; addi 48
	.dbline 101
	mov R24,R12
	subi R24,208    ; addi 48
	mov R12,R24
	.dbline 102
;   if(ShowBit==3)		//显示百,十,个,位
	mov R24,R14
	cpi R24,3
	brne L8
X2:
	.dbline 103
;   {
	.dbline 104
;      PrintOneASCII(h,l,hunum);PrintOneASCII(h,l+8,tnnum);
	std y+0,R10
	mov R18,R20
	ldd R16,y+11
	xcall _PrintOneASCII
	.dbline 104
	std y+0,R12
	mov R18,R20
	subi R18,248    ; addi 8
	ldd R16,y+11
	xcall _PrintOneASCII
	.dbline 105
; 	 PrintOneASCII(h,l+16,srnum);
	std y+0,R22
	mov R18,R20
	subi R18,240    ; addi 16
	ldd R16,y+11
	xcall _PrintOneASCII
	.dbline 106
;   }
	xjmp L9
L8:
	.dbline 107
;   else if(ShowBit==2)	//显示十,个,位
	mov R24,R14
	cpi R24,2
	brne L10
X3:
	.dbline 108
;   {
	.dbline 109
; 	 PrintOneASCII(h,l,tnnum);PrintOneASCII(h,l+8,srnum);
	std y+0,R12
	mov R18,R20
	ldd R16,y+11
	xcall _PrintOneASCII
	.dbline 109
	std y+0,R22
	mov R18,R20
	subi R18,248    ; addi 8
	ldd R16,y+11
	xcall _PrintOneASCII
	.dbline 110
;   }
L10:
L9:
	.dbline -2
L7:
	.dbline 0 ; func end
	adiw R28,1
	xcall pop_xgsetF0FC
	adiw R28,4
	ret
	.dbsym r srnum 22 c
	.dbsym r tnnum 12 c
	.dbsym r hunum 10 c
	.dbsym r ShowBit 14 c
	.dbsym r ll 12 i
	.dbsym r l 20 c
	.dbsym l h 11 c
	.dbend
	.dbfunc e MMCFntHZ _MMCFntHZ fpc
;        flgover -> <dead>
;    FntStartBlk -> y+10
;     Dir_Attrib -> R14
;          HzNmL -> R12
;          HzNmH -> R14
;            Blk -> y+6
;       InOffset -> R12,R13
;           Hzpt -> y+2
;          HzChr -> R12,R13
;          buffp -> R10,R11
	.even
_MMCFntHZ::
	xcall push_xgsetF0FC
	movw R12,R18
	movw R10,R16
	sbiw R28,14
	.dbline -1
	.dbline 115
; }
; 
; //从SD卡上读取汉字字型信息,输入汉字的内码号(常指针),返回汉字的字型指针
; unsigned char * MMCFntHZ(unsigned char *buffp,unsigned char *HzChr)	
; {
	.dbline 120
;     unsigned int  InOffset;
; 	unsigned long Blk,Hzpt,FntStartBlk;		//字库文件的起始扇区
; 	unsigned char HzNmH,HzNmL;
; 	unsigned char flgover;
; 	unsigned char Dir_Attrib = 0;
	.dbline 122
; 	//汉字在汉字库中的位置=汉字点阵数*[(区码-A0h-1)*94+(位码-A0h-1)]
; 	HzNmH=HzChr[0];HzNmL=HzChr[1];
	movw R30,R12
	ldd R14,z+0
	.dbline 122
	adiw R30,1
	ldd R12,z+0
	.dbline 127
; 	//显示内码:
; 	//DisplayLong(HzNmH*65536+HzNmL,3);
; 	//Delay(500);
; 	/////
; 	Hzpt=32*((HzNmH-0xA0-1)*(unsigned long)94+(HzNmL-0xA0-1));
	mov R24,R14
	clr R25
	subi R24,160
	sbci R25,0
	sbiw R24,1
	movw R2,R24
	clr R4
	sbrc R3,7
	com R4
	clr R5
	sbrc R4,7
	com R5
	ldi R20,94
	ldi R21,0
	ldi R22,0
	ldi R23,0
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R16,R20
	movw R18,R22
	xcall empy32u
	movw R2,R16
	movw R4,R18
	mov R24,R12
	clr R25
	subi R24,160
	sbci R25,0
	sbiw R24,1
	movw R6,R24
	clr R8
	sbrc R7,7
	com R8
	clr R9
	sbrc R8,7
	com R9
	add R2,R6
	adc R3,R7
	adc R4,R8
	adc R5,R9
	ldi R20,32
	ldi R21,0
	ldi R22,0
	ldi R23,0
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R16,R20
	movw R18,R22
	xcall empy32u
	std y+2,R16
	std y+3,R17
	std y+4,R18
	std y+5,R19
	.dbline 133
; 	//显示汉字字型在字库中的位置:
; 	//DisplayLong(Hzpt,1);
; 	//Delay(500);
; 	/////
; 	//由汉字内码,计算它所在的扇区号和偏移位置
; 	Blk=Hzpt/512;InOffset=Hzpt%512;  //512是每个扇区的大小
	ldi R24,9
	ldi R25,0
	ldd R16,y+2
	ldd R17,y+3
	ldd R18,y+4
	ldd R19,y+5
	st -y,R24
	xcall lsr32
	std y+6,R16
	std y+7,R17
	std y+8,R18
	std y+9,R19
	.dbline 133
	ldi R20,255
	ldi R21,1
	ldi R22,0
	ldi R23,0
	ldd R2,y+2
	ldd R3,y+3
	ldd R4,y+4
	ldd R5,y+5
	and R2,R20
	and R3,R21
	and R4,R22
	and R5,R23
	movw R12,R2
	.dbline 139
; 	//显示汉字字型在字库中的位置(扇区为单位):	
; 	//DisplayLong(Blk*65536+InOffset,2);
; 	//Delay(500);
; 	//////////////////
; 	//读取该文件:
; 	MMC_SD_ReadSingleBlock((FONT_ClusterVar-2)*SecPerClus+data_offset+Blk,buffp);
	std y+1,R11
	std y+0,R10
	ldi R20,2
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R18,_FONT_ClusterVar+2
	lds R19,_FONT_ClusterVar+2+1
	lds R16,_FONT_ClusterVar
	lds R17,_FONT_ClusterVar+1
	sub R16,R20
	sbc R17,R21
	sbc R18,R22
	sbc R19,R23
	lds R2,_SecPerClus
	clr R3
	clr R4
	clr R5
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	xcall empy32u
	movw R2,R16
	movw R4,R18
	lds R8,_data_offset+2
	lds R9,_data_offset+2+1
	lds R6,_data_offset
	lds R7,_data_offset+1
	add R2,R6
	adc R3,R7
	adc R4,R8
	adc R5,R9
	ldd R6,y+6
	ldd R7,y+7
	ldd R8,y+8
	ldd R9,y+9
	add R2,R6
	adc R3,R7
	adc R4,R8
	adc R5,R9
	movw R16,R2
	movw R18,R4
	xcall _MMC_SD_ReadSingleBlock
	.dbline 142
; 	//flgover = fat_read_file(FONT_ClusterVar,buffp,Blk,&Dir_Attrib);						
; 	//返回汉字字型信息指针:
; 	return (buffp+InOffset);
	movw R16,R12
	add R16,R10
	adc R17,R11
	.dbline -2
L12:
	.dbline 0 ; func end
	adiw R28,14
	xjmp pop_xgsetF0FC
	.dbsym l flgover 3 c
	.dbsym l FntStartBlk 10 l
	.dbsym r Dir_Attrib 14 c
	.dbsym r HzNmL 12 c
	.dbsym r HzNmH 14 c
	.dbsym l Blk 6 l
	.dbsym r InOffset 12 i
	.dbsym l Hzpt 2 l
	.dbsym r HzChr 12 pc
	.dbsym r buffp 10 pc
	.dbend
	.dbfunc e PrintHZ16 _PrintHZ16 fV
;           HzPt -> R12,R13
;              x -> R10
;              y -> R20
;              i -> R22
;           Lens -> y+21
;             y0 -> y+19
;             x0 -> y+17
;          buffp -> R14,R15
;             Hz -> y+13
	.even
_PrintHZ16::
	xcall push_arg4
	xcall push_xgsetF0FC
	movw R14,R18
	sbiw R28,3
	.dbline -1
	.dbline 149
; }
; 
; //在指定位置,打印指定长度的16*16汉字字符串
; //Hz:汉字字符串指针(常指针),buffp:用于存放汉字字型信息的Buf,
; //(x0,y0):字符串在LCD上的起始位置,Lens:字符串长度
; void PrintHZ16(unsigned char *Hz,unsigned char *buffp,unsigned char x0,unsigned char y0,unsigned char Lens)
; {
	.dbline 152
; 	unsigned char i,*HzPt;
; 	unsigned char x,y;
; 	x=x0;y=y0;
	ldd R10,y+17
	.dbline 152
	ldd R20,y+19
	.dbline 153
; 	for(i=0;i<Lens;i+=2)
	clr R22
	xjmp L17
L14:
	.dbline 154
; 	{
	.dbline 158
; 	 	//测试使用,显示内码:
; 		//DisplayLong(Hz[i]*65536+Hz[i+1],3);
; 	    //Delay(500);
; 	    if(Hz[i]>127 && Hz[i+1]>127)		  //均是汉字
	mov R2,R22
	clr R3
	ldd R0,y+13
	ldd R1,y+14
	add R2,R0
	adc R3,R1
	movw R4,R2
	ldi R24,127
	movw R30,R2
	ldd R2,z+0
	cp R24,R2
	brsh L18
X4:
	ldd R2,z+1
	cp R24,R2
	brsh L18
X5:
	.dbline 159
; 		{
	.dbline 160
; 			HzPt=MMCFntHZ(buffp,Hz+i);
	mov R18,R22
	clr R19
	add R18,R0
	adc R19,R1

⌨️ 快捷键说明

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