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