?? lcd_12864.h
字號:
uRow = fnGetRow();
uCol = fnGetCol();
for(j=0;j<ASC_CHR_HEIGHT;j++) //寫16行
{
fnPR12(LC_AUT_WR); // 寫數據(命令)
if (c1 >= 0x20)
{
fnPR13( ASC_MSK[(c1-0x20)*ASC_CHR_HEIGHT+j-(16-ASC_CHR_HEIGHT)] );
}
else
{
fnPR13(cData);
}
fnPR12(LC_AUT_OVR); //寫數據結束
fnSetPos(uRow+j+1,uCol);
}
if(c1 != BS) // 非退格
{
uCol++; // 列數加1
}
}
/**************************************************
函數名稱 Dispnumber(uint number,uchar j,uchar x,uchar y)
修改日期 :07.07.10日 11.20分
**************************************************/
void Dispnumber(uint number,uchar j,uchar x,uchar y)
//顯示一個INT型的數字,J為所要顯示的位數,X,Y為顯示的末坐標
{
unsigned char temp;
for(;(j>0)&(j<6);j--)
{
temp=number%10+0x30;
Disponechar(x--,y,temp);
number=number/10;
}
}
/**************************************************
函數名稱 dispnumber_long(uint number,uchar j,uchar x,uchar y)
修改日期 :07.07.10日 11.30分
**************************************************/
void Dispnumber_long(ulong number,uchar j,uchar x,uchar y)
//顯示一個LONG型的數字,J為所要顯示的位數,X,Y為顯示的末坐標
{
unsigned char i=0,digit;
ulong temp;
temp=number;
for(;j>0;j--)
{
i++;
digit=temp%10+0x30;
Disponechar(x--,y,digit);
temp=temp/10;
if(temp==0) break;
if(i==3){Disponechar(x--,y,',');i=0;}
}
}
/**************************************************
函數名稱 dispnumber_float(uint number,uchar i,uchar j,uchar x,uchar y)
修改日期:07.07.22日 21.33分
函數功能: 顯示小數,但原理與直接顯示float型的數不同,此函數是直接將小數點寫入,此處形參number為擴大一定倍數后的值.
備注: 此方式比顯示float型的數速度快,可在大多數情況下代替函數 dispnumber_float();
***************************************************/
void Dispnumber_float(uint number,uchar i,uchar j,uchar x,uchar y)
//顯示一個INT型的數字,i為所要顯示的總位數,j為小數部分的位數,X,Y為顯示的末坐標
{
unsigned char k=0,temp;
for(;(i>0)&(i<6);k++,i--)
{
temp=number%10+0x30;
if(k==j) Disponechar(x--,y,'.');
Disponechar(x--,y,temp);
number=number/10;
// if(number==0) break;
}
}
/********************************************************/
/* ASCII(8*16) 及 漢字(16*16) 顯示函數 */
/********************************************************/
unsigned char LcdPrintf(unsigned char x,unsigned char y, char *ptr)
{
unsigned char c1,c2,cData;
unsigned char i,j,uLen,uRow,uCol;
unsigned int k;
unsigned char temp,q;
uLen=0;
i=0;
uRow = y;
uCol = x;
fnSetPos(uRow*16,uCol); //起點定位
while (ptr[uLen]!=0) //探測字串長度
{
uLen++;
}
while(i<uLen)
{
c1 = ptr[i];
c2 = ptr[i+1];
//ascii字符與漢字內碼的區別在于128做分界,大于界線的為漢字碼
uRow = fnGetRow();
uCol = fnGetCol();
if(c1 <=128) // ASCII
{
for(j=0;j<ASC_CHR_HEIGHT;j++) //寫16行
{
fnPR12(LC_AUT_WR); // 寫數據(命令)
if (c1 >= 0x20)
{
fnPR13( ASC_MSK[(c1-0x20)*ASC_CHR_HEIGHT+j-(16-ASC_CHR_HEIGHT)] );
}
else
{
fnPR13(cData);
}
fnPR12(LC_AUT_OVR); //寫數據結束
fnSetPos(uRow+j+1,uCol);
}
if(c1 != BS) // 非退格
{
uCol++; // 列數加1
}
}
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])
{
break;
}
}
//for(k=0;k<sizeof(GB_16[0].Msk)/2;k++) //16行循環
for(k=0;k<CHAR_HEIGHT;k++) //CHAR_HEIGHT 行循環
{
fnSetPos(uRow+k,uCol);
fnPR12(LC_AUT_WR); // 寫數據
if(j < sizeof(GB_16)/sizeof(GB_16[0])) //第幾個漢字
{
//漢字大小為16*16
// fnPR13(GB_16[j].Msk[k*2]);
// fnPR13(GB_16[j].Msk[k*2+1]);
temp=CHAR_LONG/8;
for(q=0;q<temp;q++)
fnPR13(GB_16[j].Msk[k*temp+q]);
}
else // 未找到該字
{
if(k < sizeof(GB_16[0].Msk)/4)
{
fnPR13(0x00);
fnPR13(0x00);
}
else
{
fnPR13(0xff);
fnPR13(0xff);
}
}
fnPR12(LC_AUT_OVR);
}
//漢字大小為16*16
//uCol += 2;
//漢字大小為24*24
// uCol += 3;
//漢字大小為32*32
uCol += temp;
i++;
}
if(uCol >= LCD_XMAX/ASC_CHR_WIDTH)
{
uRow +=ASC_CHR_HEIGHT;
if(uRow < 0x40) //顯示到最后一個坐標處則從頭顯示a
{
uCol -= LCD_XMAX/ASC_CHR_WIDTH;
}
else
{
uRow = 0;
uCol = 0;
}
}
fnSetPos(uRow,uCol);
i++;
}
return uLen; //返回字串長度,漢字按2字節計算
}
/*************************/
/* 畫點*/
/*************************/
/*
void LCDPoint(unsigned char x,unsigned char y,unsigned char s)
{
unsigned char x1;
x1 = x >> 3; // 取Y方向分頁地址
fnSetPos(y,x1); // 起點定位
x1 = turnf[ x & 0x07 ];
x1 = 0xF0 | x1 | s; // 字節內位置計算
fnPR12(x1); // 畫上屏幕S顯示屬性8 畫點0 擦除點
}
*/
/************************************************/
/* 畫線任意方向的斜線,直線數學方程aX+bY=1 */
/************************************************/
/*
void LCDLinexy(unsigned char x0,unsigned char y0,unsigned char xt,unsigned char yt,unsigned char s)
{
register unsigned char t;
int xerr = 0,yerr = 0;
int delta_x,delta_y,distance;
int incx,incy,uRow,uCol;
delta_x = xt-x0; // 計算坐標增量
delta_y = yt-y0;
uRow = x0;
uCol = y0;
if(delta_x>0)
{
incx = 1; // 設置單步方向
}
else if( delta_x==0 )
{
incx=0; // 垂直線
}
else
{
incx = -1;
delta_x = -delta_x;
}
if(delta_y>0)
{
incy=1;
}
else if( delta_y==0 )
{
incy=0; // 水平線
}
else
{
incy=-1;
delta_y=-delta_y;
}
if( delta_x > delta_y )
{
distance=delta_x; // 選取基本增量坐標軸
}
else
{
distance=delta_y;
}
for( t=0;t<=distance+1; t++ ) // 畫線輸出
{
LCDPoint(uRow,uCol,s); // 畫點
xerr += delta_x;
yerr += delta_y;
if( xerr > distance )
{
xerr -= distance;
uRow += incx;
}
if( yerr > distance )
{
yerr -= distance;
uCol += incy;
}
}
}
*/
/********************************************/
/* 畫圓數學方程(X-Ox)^2+(Y-Oy)^2=Rx^2 */
/********************************************/
/*
void LCDCircle(unsigned char Ox,unsigned char Oy,unsigned char Rx,unsigned char s)
{
unsigned int xx,rr;
unsigned int xt,yt;
unsigned int rs,row,col;
yt = Rx;
rr = (unsigned int)Rx*Rx+1; // 補償1 修正方形
rs = (yt+(yt>>1))>>1; // (*0.75)分開1/8圓弧來畫
for (xt=0;xt<=rs;xt++)
{
xx = xt*xt;
while ((yt*yt)>(rr-xx))
{
yt--;
}
row = Ox+xt; // 第一象限
col = Oy-yt;
LCDPoint(row,col,s);
row = Ox-xt; // 第二象限
LCDPoint(row,col,s);
col = Oy+yt; // 第三象限
LCDPoint(row,col,s);
row = Ox+xt; // 第四象限
LCDPoint(row,col,s);
// 45度鏡象畫另一半
row = Ox+yt; // 第一象限
col = Oy-xt;
LCDPoint(row,col,s);
row = Ox-yt; // 第二象限
LCDPoint(row,col,s);
col = Oy+xt; // 第三象限
LCDPoint(row,col,s);
row = Ox+yt; // 第四象限
LCDPoint(row,col,s);
}
}
*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -