?? 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 + -