📄 sed1330.h
字号:
LCDORDER=0X42;
for(counter=0;counter<16;counter++)
LCDDATA=buff[counter];
/*以下写字符的右部*/
curadd.add=curadd.add+1; /*地址加1,移到右部*/
LCDORDER=0X4F; /*确定光标移动方向为向下*/
LCDORDER=0X46; /*确定光标地址*/
LCDDATA=curadd.addhalf.addlo;
LCDDATA=curadd.addhalf.addhi;
flag1=(0XFF)>>offset;
flag2=~flag1;
flag1=0XFF>>offset;
LCDORDER=0X43; /*由光标处开始,向下读入16个数据*/
for(counter=0;counter<16;counter++)
buff[counter]=(LCDORDER&flag1)|(GB_16[chatnum].Msk[counter]<<(8-offset));
LCDORDER=0X46; /*再次确定光标地址*/
LCDDATA=curadd.addhalf.addlo;
LCDDATA=curadd.addhalf.addhi;
LCDORDER=0X42;
for(counter=0;counter<16;counter++)
LCDDATA=buff[counter];
////////////////////////////////////////////////
LCDORDER=0X46; /*确定光标地址*/
LCDDATA=curadd.addhalf.addlo;
LCDDATA=curadd.addhalf.addhi;
/*以下写字符的左部*/
LCDORDER=0X4F; /*确定光标移动方向为向下*/
flag1=(0XFF)<<(8-offset);
flag2=~flag1;
LCDORDER=0X43; /*由光标处开始,向下读入16个数据*/
for(counter=0;counter<16;counter++)
buff[counter]=(LCDORDER&flag1)|(GB_16[chatnum].Msk[counter+16]>>offset);
LCDORDER=0X46; /*再次确定光标地址*/
LCDDATA=curadd.addhalf.addlo;
LCDDATA=curadd.addhalf.addhi;
LCDORDER=0X42;
for(counter=0;counter<16;counter++)
LCDDATA=buff[counter];
curadd.add=curadd.add+1; /*地址加1,移到右部*/
LCDORDER=0X4F; /*确定光标移动方向为向下*/
LCDORDER=0X46; /*确定光标地址*/
LCDDATA=curadd.addhalf.addlo;
LCDDATA=curadd.addhalf.addhi;
flag1=(0XFF)>>offset;
flag2=~flag1;
flag1=0XFF>>offset;
LCDORDER=0X43; /*由光标处开始,向下读入10个数据*/
for(counter=0;counter<16;counter++)
buff[counter]=(LCDORDER&flag1)|(GB_16[chatnum].Msk[counter+16]<<(8-offset));
LCDORDER=0X46; /*再次确定光标地址*/
LCDDATA=curadd.addhalf.addlo;
LCDDATA=curadd.addhalf.addhi;
LCDORDER=0X42;
for(counter=0;counter<16;counter++)
LCDDATA=buff[counter];
}
void myprintf(unsigned int sad,unsigned char bcenter,unsigned int hnum,unsigned char vnum,unsigned char *fmt, ...)
{
va_list arg_ptr;
unsigned char tmpBuf[64]; // LCD显示数据缓冲区
unsigned char i,uLen,j;
unsigned char c1,c2;
va_start(arg_ptr,fmt);
uLen=(unsigned char)vsprintf(tmpBuf,fmt,arg_ptr);
va_end(arg_ptr);
if(bcenter)
hnum=hnum-(uLen*4);
i=0;
while(i<uLen)
{
c1 = tmpBuf[i];
c2 = tmpBuf[i+1];
if(c1<128)//ASCII
{
if(c1<31)
{
if(c1==13||c1==10)
{
i++;
if(vnum<224)
vnum+=16;
else
vnum=0;
hnum=0;
continue;
}
c1=31;
}
wrchatasc(sad,hnum,vnum,(c1-31));
hnum+=8;
}
else
{ // 中文
for(j=0;j<sizeof(GB_16)/sizeof(GB_16[0]);j++)
{
if(c1==GB_16[j].Index[0]&&c2==GB_16[j].Index[1])
{
wrchat(sad,hnum,vnum,j);
break;
}
}
hnum+=16;
i++;
}
i++;
if(hnum>312)
{
hnum=0;
if(vnum<224)
vnum+=17;
else
vnum=0;
}
}
}
#if Number361
void wrnumber(unsigned int sad,unsigned char hnum,unsigned char vnum,unsigned char chatnum)
{
unsigned char counter;
union {unsigned int add;
struct {unsigned char addhi;unsigned char addlo;}addhalf;
}curadd;
curadd.add=vnum*(APL)+hnum+sad; /*计算出首址*/
LCDORDER=0X46; /*确定光标地址*/
LCDDATA=curadd.addhalf.addlo;
LCDDATA=curadd.addhalf.addhi;
LCDORDER=0X4F; /*确定光标移动方向为向下*/
LCDORDER=0X42;
for(counter=0;counter<36;counter++)
LCDDATA=mynumbermsk[chatnum][counter];
//以下写字符的右部
curadd.add++;
LCDORDER=0X46;
LCDDATA=curadd.addhalf.addlo;
LCDDATA=curadd.addhalf.addhi;
LCDORDER=0X42;
for(counter=0;counter<36;counter++)
LCDDATA=mynumbermsk[chatnum][counter+36];
curadd.add++;
LCDORDER=0X46;
LCDDATA=curadd.addhalf.addlo;
LCDDATA=curadd.addhalf.addhi;
LCDORDER=0X42;
for(counter=0;counter<36;counter++)
LCDDATA=mynumbermsk[chatnum][counter+72];
}
void mynuprintf(unsigned int sad,unsigned char hnum,unsigned char vnum,unsigned char *fmt, ...)
{
va_list arg_ptr;
unsigned char tmpBuf[16]; // LCD显示数据缓冲区
unsigned char i,uLen;
va_start(arg_ptr,fmt);
uLen=(unsigned char)vsprintf(tmpBuf,fmt,arg_ptr);
va_end(arg_ptr);
i=0;
hnum=hnum-(uLen*3);
while(i<uLen)
{
if(tmpBuf[i]<58&&tmpBuf[i]>47)
{
wrnumber(sad,hnum,vnum,(tmpBuf[i]-47));
hnum+=3;
}
else
{
if(tmpBuf[i]=='.')
{
wrnumber(sad,hnum,vnum,0);
hnum+=1;
}
else
{
if(tmpBuf[i]=='-')
wrnumber(sad,hnum,vnum,12);
else
wrnumber(sad,hnum,vnum,11);
hnum+=3;
}
}
i++;
}
}
#endif
/*void rectangl(unsigned int sad,unsigned int strhnum,unsigned char strvnum,unsigned int endhnum,unsigned char endvnum)
{
linex(sad,strvnum,strhnum,endhnum);
linex(sad,endvnum,strhnum,endhnum);
liney(sad,strhnum,strvnum,endvnum);
liney(sad,endhnum,strvnum,endvnum);
}*/
/***********************************************************
* 程序名称: RECTANGLE() *
* 程序用途: 在指定层的指定位置填充矩形 *
* 输入参数: sad 指定层的内存起始地址 *
* strhnum 起始点横坐标 *
* strvnum 起始点纵坐标 *
* endrhnum 结束点横坐标 *
* endvnum 结束点纵坐标 *
* fill 填充类型(1:填充1;0填充0) *
***********************************************************/
void rectangle(unsigned int sad,unsigned int strhnum,unsigned char strvnum,unsigned int endhnum,unsigned char endvnum,unsigned char fill)
{
xdata unsigned char count1;
xdata unsigned char count2;
xdata LCD_BUFF[240]; /*屏幕一列的缓冲*/
xdata unsigned char stroffset;
xdata unsigned char endoffset;
xdata unsigned char flag_str; /*用于屏蔽起始列的数值*/
xdata unsigned char flag_end; /*用于屏蔽结束列的数值*/
xdata union {unsigned int add;
struct {unsigned char addhi;unsigned char addlo;}addhalf;
}stradd,endadd;
if(fill==0){fill=0;} /*根据要写1或者写1*/
else{fill=0XFF;}
stradd.add=strvnum*(APL)+strhnum/8+sad; /*计算出水平起始点的地址*/
endadd.add=strvnum*(APL)+endhnum/8+sad; /*计算出水平结束点的地址*/
stroffset=strhnum-(strhnum/8)*8; /*计算出水平起始点字符内的偏移量*/
endoffset=endhnum-(endhnum/8)*8; /*计算出水平结束点字符内的偏移量*/
flag_str=0XFF<<(8-stroffset);
flag_end=0XFF>>(endoffset+1);
if(stradd.add==endadd.add) /*如果水平的起始点的地址和结束点的地址相同*/
{
flag_str=flag_str|flag_end;
} /*起始结束在同一字节内,头部尾部不能改写*/
/*+++++++++++++++读写起始列的屏幕数据+++++++++++++++*/
LCDORDER=0X46; /*设定光标地址*/
LCDDATA=stradd.addhalf.addlo;
LCDDATA=stradd.addhalf.addhi; /*确定光标地址*/
LCDORDER=0X4F; /*确定光标移动方向为向下*/
LCDORDER=0X43; /*准备读*/
for(count1=0;count1<=(endvnum-strvnum);count1++)
{LCD_BUFF[count1]=LCDORDER;}
/*+++++++++++++++处理起始列的屏幕数据+++++++++++++++*/
for(count1=0;count1<=(endvnum-strvnum);count1++)
{LCD_BUFF[count1]=( LCD_BUFF[count1] & flag_str ) | ( fill & (~flag_str) );}
/*++++++++++++++++++++++++++++++++++++++++++++++++++*/
/*+++++++++++++++返回起始列的屏幕数据+++++++++++++++*/
LCDORDER=0X46; /*设定光标地址*/
LCDDATA=stradd.addhalf.addlo;
LCDDATA=stradd.addhalf.addhi; /*确定光标地址*/
LCDORDER=0X4F; /*确定光标移动方向为向下*/
LCDORDER=0X42; /*准备写*/
for(count1=0;count1<=(endvnum-strvnum);count1++)
{LCDDATA=LCD_BUFF[count1];}
/*+++++++++++++++结束列的屏幕数据改写+++++++++++++++*/
if(stradd.add<endadd.add) /*如果水平的起始点的地址和结束点的地址不相同*/
{
/*+++++++++++++++读写结束列的屏幕数据+++++++++++++++*/
LCDORDER=0X46; /*设定光标地址*/
LCDDATA=endadd.addhalf.addlo;
LCDDATA=endadd.addhalf.addhi; /*确定光标地址*/
LCDORDER=0X4F; /*确定光标移动方向为向下*/
LCDORDER=0X43; /*准备读*/
for(count1=0;count1<=(endvnum-strvnum);count1++)
{LCD_BUFF[count1]=LCDORDER;}
/*+++++++++++++++处理结束列的屏幕数据+++++++++++++++*/
for(count1=0;count1<=(endvnum-strvnum);count1++)
{LCD_BUFF[count1]=( LCD_BUFF[count1] & flag_end ) | ( fill & (~flag_end) );}
/*+++++++++++++++返回结束列的屏幕数据+++++++++++++++*/
LCDORDER=0X46; /*设定光标地址*/
LCDDATA=endadd.addhalf.addlo;
LCDDATA=endadd.addhalf.addhi; /*确定光标地址*/
LCDORDER=0X4F; /*确定光标移动方向为向下*/
LCDORDER=0X42; /*准备写*/
for(count1=0;count1<=(endvnum-strvnum);count1++)
{LCDDATA=LCD_BUFF[count1];}
}
/*+++++++++++++++中间列的屏幕数据改写+++++++++++++++*/
if((endadd.add-stradd.add)>=2 ) /*结束地址大于起始地址2个以上,说明有中间列*/
{
stradd.add=stradd.add+1; /*水平起始地址加1*/
for(count2=( (strhnum/8)+1);count2<=((endhnum/8)-1);count2++)
{
/*+++++++++++++++处理中间列的屏幕数据+++++++++++++++*/
for(count1=0;count1<=(endvnum-strvnum);count1++)
{LCD_BUFF[count1]=fill;}
/*+++++++++++++++返回中间列的屏幕数据+++++++++++++++*/
LCDORDER=0X46; /*设定光标地址*/
LCDDATA=stradd.addhalf.addlo;
LCDDATA=stradd.addhalf.addhi; /*确定光标地址*/
LCDORDER=0X4F; /*确定光标移动方向为向下*/
LCDORDER=0X42; /*准备写*/
for(count1=0;count1<=(endvnum-strvnum);count1++)
{
LCDDATA=LCD_BUFF[count1];
}
stradd.add=stradd.add+1; /*水平起始地址加1*/
}
}
}
//////////////////////////////ENDSED1330//////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -