?? show.c
字號:
/*********************************************************************************************************
* 函數名稱: LcdDrawDot
*
* 功能描述: 在位置(bx,by)處畫點或消點
*
* 入口參數: bx, 行坐標,取值范圍為0~239
* by, 列坐標,取值范圍為0~159
* Attr, 圖形顯示的屬性,"1"-畫點; "0"-消點
*
* 出口參數: 無
*
* 全局變量: 無
*
* 調用模塊: LcdWriteCmd(),
* LcdWriteData(),
* LcdRead()
*
* 作 者: Aoker
* 創建時間: 2004年12月7日
********************************************************************************************************/
/*
void LcdDrawDot(BYTE bx, BYTE by, bit Attr) //描點
{
BYTE tt=0, uu=0; //ap 修改 P7, 行字符個數
WORD l=0;
tt = (BYTE)(bx%8);
bx = bx/8;
l = by*ap + bx;
bx = (BYTE)(l&0xff);
by = (BYTE)((l>>8)&0xff);
LcdWriteCmd(0x4C); //"光標右移"
LcdWriteCmd(0x46); // 光標指針設置
LcdWriteData(bx); // 光標地址16位
LcdWriteData(by);
LcdWriteCmd(0x43);
uu = LcdRead();
if(Attr)
uu |= 1<<(7-tt);
else
uu &= ~(1<<(7-tt));
LcdWriteCmd(0x4D);
LcdWriteCmd(0x43);
LcdRead();
LcdWriteCmd(0x4C);
LcdWriteCmd(0x42); // 送數據兩個
LcdWriteData(uu);
}
*/
/*********************************************************************************************************
* 函數名稱: LcdDrawLine
*
* 功能描述: 在位置(bx1,by1)處和(bx2,by2)處畫直線
* 使用時,必須滿足條件: bx1 <= bx2
*
* 入口參數: bx1, 直線起點行坐標,取值范圍為0~239
* by1, 直線起點列坐標,取值范圍為0~159
* bx2, 直線終點行坐標,取值范圍為0~239
* by2, 直線終點列坐標,取值范圍為0~159
* Attr,圖形顯示的屬性,"1"-畫線; "0"-消線
*
* 出口參數: 無
*
* 全局變量: 無
*
* 調用模塊: LcdWriteCmd(),
* LcdWriteData(),
* LcdRead()
*
* 作 者: Aoker
* 創建時間: 2004年12月7日
********************************************************************************************************/
/*
void LcdDrawLine(BYTE bx1, BYTE by1, BYTE bx2, BYTE by2, bit Attr) //畫線必須x1<=x2
{
BYTE tt=0, uu=0, i, y, t; //ap 修改 P7, 行字符個數
WORD l=0, x;
if(bx1>bx2)
return;
if(bx1 == bx2) //豎線
{
tt = (BYTE)(bx1%8);
x = bx1/8;
l = by1*ap + x;
x = (BYTE)(l&0xff);
y = (BYTE)((l>>8)&0xff);
LcdWriteCmd(0x4F); //"光標下移"
LcdWriteCmd(0x46); // 光標指針設置
LcdWriteData(x); // 光標地址16位
LcdWriteData(y);
LcdWriteCmd(0x43);
uu = LcdRead();
LcdWriteCmd(0x4E); //"光標上移"
LcdWriteCmd(0x43);
LcdRead();
for(i=by1; i<=by2; i++)
{
if(Attr)
uu |= 1<<(7-tt);
else
uu &= ~(1<<(7-tt));
LcdWriteCmd(0x4F); //"光標下移"
LcdWriteCmd(0x42); // 送數據兩個
LcdWriteData(uu);
LcdWriteCmd(0x43);
uu = LcdRead();
LcdWriteCmd(0x4E); //"光標上移"
LcdWriteCmd(0x43);
LcdRead();
}
return;
}
else if(by1 == by2) //橫線
{
t = bx1/8;
for(x=bx1; x<(t+1)*8; x++)
{
LcdDrawDot(x, by1, Attr);
}
l = by1*ap + t+1;
x = (BYTE)(l&0xff);
y = (BYTE)((l>>8)&0xff);
LcdWriteCmd(0x4C); // 右
LcdWriteCmd(0x46); // 光標指針設置
LcdWriteData(x); // 光標地址16位
LcdWriteData(y);
LcdWriteCmd(0x42); // 送數據兩個
for(i=(t+1); i<(bx2-bx2%8)/8; i++)
{
if(Attr)
LcdWriteData(0xFF);
else
LcdWriteData(0x00);
}
for(x=bx2-bx2%8; x<=bx2; x++)
{
LcdDrawDot(x, by1, Attr);
}
return;
}
}
*/
/*********************************************************************************************************
* 函數名稱: DispStr
*
* 功能描述: 在位置(bSx, bSy)處顯示一個字符
*
* 入口參數: bSx, 行坐標,取值范圍為0~239
* bSy, 列坐標,取值范圍為0~159
* Attr, 圖形顯示的屬性,"1"-反白顯示; "0"-正常顯示
* ptr, 指向圖形的字模數據
*
* 出口參數: 無
*
* 全局變量: 無
*
* 調用模塊: LcdDraw(),
*
* 作 者: Aoker
* 創建時間: 2004年12月7日
********************************************************************************************************/
void DispStr(BYTE bSx, BYTE bSy, bit Attr, BYTE *ptr)
{
BYTE i=0;
do
{
LcdDraw(bSx+i*8, bSy, 8, 16, Attr, ASCII[(*ptr++)-0x20]);
i++;
}while(*ptr != '\0');
}
/*********************************************************************************************************
* 函數名稱: DispNum
*
* 功能描述: 在位置(bSx, bSy)處顯示一個數字
*
* 入口參數: bSx, 行坐標,取值范圍為0~239
* bSy, 列坐標,取值范圍為0~159
* Attr, 圖形顯示的屬性,"1"-反白顯示; "0"-正常顯示
* bNumber, 待顯示的數字
*
* 出口參數: 無
*
* 全局變量: 無
*
* 調用模塊: LcdDraw(),
*
* 作 者: Aoker
* 創建時間: 2004年12月7日
********************************************************************************************************/
void DispNum(BYTE bSx, BYTE bSy, bit Attr, BYTE bNumber)
{
if( (bNumber<0) || (bNumber>9) ) return;
LcdDraw(bSx, bSy, 8, 16, Attr, ASCII[bNumber+0x10]);//0x10為數字0~9在ASCII碼中的偏移地址
}
/*********************************************************************************************************
* 函數名稱: ClearXByte
*
* 功能描述: 刪除從位置(bSx, bSy)起的x個字節
*
* 入口參數: bSx, 行坐標,取值范圍為0~239
* bSy, 列坐標,取值范圍為0~159
*
* 出口參數: 無
*
* 全局變量: 無
*
* 調用模塊: DispChar(),
*
* 作 者: Aoker
* 創建時間: 2004年12月7日
********************************************************************************************************/
void ClearXByte(BYTE bSx, BYTE bSy, BYTE x)
{
BYTE i;
for(i=0; i<x; i++)
{
DispStr(bSx+i*8, bSy, 0, " ");
}
}
/*********************************************************************************************************
* 函數名稱: KLine
*
* 功能描述: 畫粗線
*
* 入口參數: bWidth,線的長度
*
* 出口參數: 無
*
* 全局變量: 無
*
* 調用模塊: 無
*
* 作 者: Aoker
* 創建時間: 2004年12月8日
********************************************************************************************************/
/*
void KLine(BYTE bSx, BYTE bSy, BYTE bWidth)
{
LcdDrawLine(bSx, bSy, bSx+bWidth, bSy, 1);
LcdDrawLine(bSx, bSy+1, bSx+bWidth, bSy+1, 1);
}
*/
/*********************************************************************************************************
* 函數名稱: myprintf
*
* 功能描述: 自編簡單printf函數,只限于浮點數處理顯示
*
* 入口參數: dotx=0,無小數顯示; dotx=1,1位小數顯示; =2,2位小數顯示; =3,3位小數顯示;
* Attr, 0-正顯; 1-反顯
*
* 出口參數: 返回輸出數據所占的字節數
*
* 全局變量: 無
*
* 調用模塊: 無
*
* 作 者: Aoker
* 創建時間: 2004年12月20日
********************************************************************************************************/
/*
BYTE myprintf(BYTE bSx, bSy, BYTE dotx, bit Attr, float fp)
{
DWORD mulnum;
BYTE shiwan,wan,qian,bai,shi,ge;
BYTE NumByte;
if(dotx == 0)
mulnum = (DWORD)(floor(fp * 1));
if(dotx == 1)
mulnum = (DWORD)(floor(fp * 10));
if(dotx == 2)
mulnum = (DWORD)(floor(fp * 100));
if(dotx == 3)
mulnum = (DWORD)(floor(fp * 1000));
if(mulnum > 999999)
{
DispStr(76, 64, 0, "data error!");
DispStr(76, 80, 0, "Please restart!");
return 0;
}
shiwan = mulnum/100000; //十萬位
wan = mulnum/10000%10; //萬位
qian = mulnum/1000%10; //千位
bai = mulnum/100%10; //百位
shi = mulnum/10%10; //十位
ge = mulnum%10; //個位
if(shiwan != 0)
{
DispNum(bSx, bSy, Attr, shiwan);
DispNum(bSx+8, bSy, Attr, wan);
DispNum(bSx+16, bSy, Attr, qian);
if(dotx == 3)
{
DispStr(bSx+24, bSy, Attr, ".");
DispNum(bSx+32, bSy, Attr, bai);
DispNum(bSx+40, bSy, Attr, shi);
DispNum(bSx+48, bSy, Attr, ge);
NumByte = 56;
}
if(dotx == 2)
{
DispNum(bSx+24, bSy, Attr, bai);
DispStr(bSx+32, bSy, Attr, ".");
DispNum(bSx+40, bSy, Attr, shi);
DispNum(bSx+48, bSy, Attr, ge);
NumByte = 56;
}
if(dotx == 1)
{
DispNum(bSx+24, bSy, Attr, bai);
DispNum(bSx+32, bSy, Attr, shi);
DispStr(bSx+40, bSy, Attr, ".");
DispNum(bSx+48, bSy, Attr, ge);
NumByte = 56;
}
if(dotx == 0)
{
DispNum(bSx+24, bSy, Attr, bai);
DispNum(bSx+32, bSy, Attr, shi);
DispNum(bSx+40, bSy, Attr, ge);
NumByte = 48;
}
return(NumByte);
}
if(wan != 0)
{
DispNum(bSx, bSy, Attr, wan);
DispNum(bSx+8, bSy, Attr, qian);
if(dotx == 3)
{
DispStr(bSx+16, bSy, Attr, ".");
DispNum(bSx+24, bSy, Attr, bai);
DispNum(bSx+32, bSy, Attr, shi);
DispNum(bSx+40, bSy, Attr, ge);
NumByte = 48;
}
if(dotx == 2)
{
DispNum(bSx+16, bSy, Attr, bai);
DispStr(bSx+24, bSy, Attr, ".");
DispNum(bSx+32, bSy, Attr, shi);
DispNum(bSx+40, bSy, Attr, ge);
NumByte = 48;
}
if(dotx == 1)
{
DispNum(bSx+16, bSy, Attr, bai);
DispNum(bSx+24, bSy, Attr, shi);
DispStr(bSx+32, bSy, Attr, ".");
DispNum(bSx+40, bSy, Attr, ge);
NumByte = 48;
}
if(dotx == 0)
{
DispNum(bSx+16, bSy, Attr, bai);
DispNum(bSx+24, bSy, Attr, shi);
DispNum(bSx+32, bSy, Attr, ge);
NumByte = 40;
}
return(NumByte);
}
if(dotx == 3)
{
DispNum(bSx, bSy, Attr, qian);
DispStr(bSx+8, bSy, Attr, ".");
DispNum(bSx+16, bSy, Attr, bai);
DispNum(bSx+24, bSy, Attr, shi);
DispNum(bSx+32, bSy, Attr, ge);
NumByte = 40;
return(NumByte);
}
if(dotx == 2)
{
if(qian != 0)
{
DispNum(bSx, bSy, Attr, qian);
DispNum(bSx+8, bSy, Attr, bai);
DispStr(bSx+16, bSy, Attr, ".");
DispNum(bSx+24, bSy, Attr, shi);
DispNum(bSx+32, bSy, Attr, ge);
NumByte = 40;
}else{
DispNum(bSx, bSy, Attr, bai);
DispStr(bSx+8, bSy, Attr, ".");
DispNum(bSx+16, bSy, Attr, shi);
DispNum(bSx+24, bSy, Attr, ge);
NumByte = 32;
}
return(NumByte);
}
if(dotx == 1)
{
if(qian != 0)
{
DispNum(bSx, bSy, Attr, qian);
DispNum(bSx+8, bSy, Attr, bai);
DispNum(bSx+16, bSy, Attr, shi);
DispStr(bSx+24, bSy, Attr, ".");
DispNum(bSx+32, bSy, Attr, ge);
NumByte = 40;
}else if(bai != 0)
{
DispNum(bSx, bSy, Attr, bai);
DispNum(bSx+8, bSy, Attr, shi);
DispStr(bSx+16, bSy, Attr, ".");
DispNum(bSx+24, bSy, Attr, ge);
NumByte = 32;
}else{
DispNum(bSx, bSy, Attr, shi);
DispStr(bSx+8, bSy, Attr, ".");
DispNum(bSx+16, bSy, Attr, ge);
NumByte = 24;
}
return(NumByte);
}
if(dotx == 0)
{
if(qian != 0)
{
DispNum(bSx, bSy, Attr, qian);
DispNum(bSx+8, bSy, Attr, bai);
DispNum(bSx+16, bSy, Attr, shi);
DispNum(bSx+24, bSy, Attr, ge);
NumByte = 32;
return(NumByte);
}
if(bai != 0)
{
DispNum(bSx, bSy, Attr, bai);
DispNum(bSx+8, bSy, Attr, shi);
DispNum(bSx+16, bSy, Attr, ge);
NumByte = 24;
return(NumByte);
}
if(shi != 0)
{
DispNum(bSx, bSy, Attr, shi);
DispNum(bSx+8, bSy, Attr, ge);
NumByte = 16;
return(NumByte);
}
DispNum(bSx, bSy, Attr, ge);
NumByte = 8;
return(NumByte);
}
}
*/
/*****************************************
創建矩形框
******************************************/
/*
void SetRectangle(BYTE bStartX, BYTE bStartY, BYTE bWidth, BYTE bHeight)
{
BYTE i, t;
if(bHeight>20)
t = 2;
else
t = 1;
for(i=0; i<t; i++)
{
LcdDrawLine(bStartX, bStartY-i, bStartX+bWidth, bStartY-i, 1);
LcdDrawLine(bStartX, bStartY+bHeight-i, bStartX+bWidth, bStartY+bHeight-i, 1);
LcdDrawLine(bStartX+i, bStartY, bStartX+i, bStartY+bHeight, 1);
LcdDrawLine(bStartX+bWidth-i, bStartY, bStartX+bWidth-i, bStartY+bHeight, 1);
}
for(i=1; i<bHeight/20; i++)
LcdDrawLine(bStartX, bStartY+i*20, bStartX+bWidth, bStartY+i*20, 1);
}
*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -