/****************************************************************************************
* 文件名:GUI_BASIC.C
* 功能:GUI基本绘图函数。进行基本绘图运算,并调用相应的刷新程序更新LCD显示。
* 作者:黄绍斌
* 日期:2004.02.26
* 备注:图形操作层,进行各种图形运算操作。
****************************************************************************************/
#include "config.h"
#include <math.h>
/****************************************************************************
* 名称:GUI_Rectangle()
* 功能:画矩形。
* 入口参数: x0 矩形左上角的x坐标值
* y0 矩形左上角的y坐标值
* x1 矩形右下角的x坐标值
* y1 矩形右下角的y坐标值
* color 显示颜色
* 出口参数:无
* 说明:操作失败原因是指定地址超出有效范围。
****************************************************************************/
void GUI_Rectangle(uint32 x0, uint32 y0, uint32 x1, uint32 y1, TCOLOR color)
{ GUI_HLine(x0, y0, x1, color);
GUI_HLine(x0, y1, x1, color);
GUI_RLine(x0, y0, y1, color);
GUI_RLine(x1, y0, y1, color);
}
/****************************************************************************
* 名称:GUI_RectangleFill()
* 功能:填充矩形。画一个填充的矩形,填充色与边框色一样。
* 入口参数: x0 矩形左上角的x坐标值
* y0 矩形左上角的y坐标值
* x1 矩形右下角的x坐标值
* y1 矩形右下角的y坐标值
* color 填充颜色
* 出口参数:无
* 说明:操作失败原因是指定地址超出有效范围。
****************************************************************************/
void GUI_RectangleFill(uint32 x0, uint32 y0, uint32 x1, uint32 y1, TCOLOR color)
{ uint32 i;
/* 先找出矩形左上角与右下角的两个点,保存在(x0,y0),(x1,y1) */
if(x0>x1) // 若x0>x1,则x0与x1交换
{ i = x0;
x0 = x1;
x1 = i;
}
if(y0>y1) // 若y0>y1,则y0与y1交换
{ i = y0;
y0 = y1;
y1 = i;
}
/* 判断是否只是直线 */
if(y0==y1)
{ GUI_HLine(x0, y0, x1, color);
return;
}
if(x0==x1)
{ GUI_RLine(x0, y0, y1, color);
return;
}
while(y0<=y1)
{ GUI_HLine(x0, y0, x1, color); // 当前画水平线
y0++; // 下一行
}
}
/****************************************************************************
* 名称:GUI_Square()
* 功能:画正方形。
* 入口参数: x0 正方形左上角的x坐标值
* y0 正方形左上角的y坐标值
* with 正方形的边长
* color 显示颜色
* 出口参数:无
* 说明:操作失败原因是指定地址超出有效范围。
****************************************************************************/
void GUI_Square(uint32 x0, uint32 y0, uint32 with, TCOLOR color)
{ if(with==0) return;
if( (x0+with) > GUI_LCM_XMAX ) return;
if( (y0+with) > GUI_LCM_YMAX ) return;
GUI_Rectangle(x0, y0, x0+with, y0+with, color);
}
/****************************************************************************
* 名称:GUI_Line()
* 功能:画任意两点之间的直线。
* 入口参数: x0 直线起点的x坐标值
* y0 直线起点的y坐标值
* x1 直线终点的x坐标值
* y1 直线终点的y坐标值
* color 显示颜色(对于黑白色LCM,为0时灭,为1时显示)
* 出口参数:无
* 说明:操作失败原因是指定地址超出有效范围。
****************************************************************************/
void GUI_Line(uint32 x0, uint32 y0, uint32 x1, uint32 y1, TCOLOR color)
{ int32 dx; // 直线x轴差值变量
int32 dy; // 直线y轴差值变量
int8 dx_sym; // x轴增长方向,为-1时减值方向,为1时增值方向
int8 dy_sym; // y轴增长方向,为-1时减值方向,为1时增值方向
int32 dx_x2; // dx*2值变量,用于加快运算速度
int32 dy_x2; // dy*2值变量,用于加快运算速度
int32 di; // 决策变量
dx = x1-x0; // 求取两点之间的差值
dy = y1-y0;
/* 判断增长方向,或是否为水平线、垂直线、点 */
if(dx>0) // 判断x轴方向
{ dx_sym = 1; // dx>0,设置dx_sym=1
}
else
{ if(dx<0)
{ dx_sym = -1; // dx<0,设置dx_sym=-1
}
else
{ // dx==0,画垂直线,或一点
GUI_RLine(x0, y0, y1, color);
return;
}
}
if(dy>0) // 判断y轴方向
{ dy_sym = 1; // dy>0,设置dy_sym=1
}
else
{ if(dy<0)
{ dy_sym = -1; // dy<0,设置dy_sym=-1
}
else
{ // dy==0,画水平线,或一点
GUI_HLine(x0, y0, x1, color);
return;
}
}
/* 将dx、dy取绝对值 */
dx = dx_sym * dx;
dy = dy_sym * dy;
/* 计算2倍的dx及dy值 */
dx_x2 = dx*2;
dy_x2 = dy*2;
/* 使用Bresenham法进行画直线 */
if(dx>=dy) // 对于dx>=dy,则使用x轴为基准
{ di = dy_x2 - dx;
while(x0!=x1)
{ GUI_Point(x0, y0, color);
x0 += dx_sym;
if(di<0)
{ di += dy_x2; // 计算出下一步的决策值
}
else
{ di += dy_x2 - dx_x2;
y0 += dy_sym;
}
}
GUI_Point(x0, y0, color); // 显示最后一点
}
else // 对于dx<dy,则使用y轴为基准
{ di = dx_x2 - dy;
while(y0!=y1)
{ GUI_Point(x0, y0, color);
y0 += dy_sym;
if(di<0)
{ di += dx_x2;
}
else
{ di += dx_x2 - dy_x2;
x0 += dx_sym;
}
}
GUI_Point(x0, y0, color); // 显示最后一点
}
}
#if GUI_LineWith_EN==1
/****************************************************************************
* 名称:GUI_LineWith()
* 功能:画任意两点之间的直线,并且可设置线的宽度。
* 入口参数: x0 直线起点的x坐标值
* y0 直线起点的y坐标值
* x1 直线终点的x坐标值
* y1 直线终点的y坐标值
* with 线宽(0-50)
* color 显示颜色
* 出口参数:无
* 说明:操作失败原因是指定地址超出有效范围。
****************************************************************************/
void GUI_LineWith(uint32 x0, uint32 y0, uint32 x1, uint32 y1, uint8 with, TCOLOR color)
{ int32 dx; // 直线x轴差值变量
int32 dy; // 直线y轴差值变量
int8 dx_sym; // x轴增长方向,为-1时减值方向,为1时增值方向
int8 dy_sym; // y轴增长方向,为-1时减值方向,为1时增值方向
int32 dx_x2; // dx*2值变量,用于加快运算速度
int32 dy_x2; // dy*2值变量,用于加快运算速度
int32 di; // 决策变量
int32 wx, wy; // 线宽变量
int32 draw_a, draw_b;
/* 参数过滤 */
if(with==0) return;
if(with>50) with = 50;
dx = x1-x0; // 求取两点之间的差值
dy = y1-y0;
wx = with/2;
wy = with-wx-1;
/* 判断增长方向,或是否为水平线、垂直线、点 */
if(dx>0) // 判断x轴方向
{ dx_sym = 1; // dx>0,设置dx_sym=1
}
else
{ if(dx<0)
{ dx_sym = -1; // dx<0,设置dx_sym=-1
}
else
{ /* dx==0,画垂直线,或一点 */
wx = x0-wx;
if(wx<0) wx = 0;
wy = x0+wy;
while(1)
{ x0 = wx;
GUI_RLine(x0, y0, y1, color);
if(wx>=wy) break;
wx++;
}
return;
}
}
if(dy>0) // 判断y轴方向
{ dy_sym = 1; // dy>0,设置dy_sym=1
}
else
{ if(dy<0)
{ dy_sym = -1; // dy<0,设置dy_sym=-1
}
else
{ /* dy==0,画水平线,或一点 */
wx = y0-wx;
if(wx<0) wx = 0;
wy = y0+wy;
while(1)
{ y0 = wx;
GUI_HLine(x0, y0, x1, color);
if(wx>=wy) break;
wx++;
}
return;
}
}
/* 将dx、dy取绝对值 */
dx = dx_sym * dx;
dy = dy_sym * dy;
/* 计算2倍的dx及dy值 */
dx_x2 = dx*2;
dy_x2 = dy*2;
/* 使用Bresenham法进行画直线 */
if(dx>=dy) // 对于dx>=dy,则使用x轴为基准
{ di = dy_x2 - dx;
while(x0!=
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
DATASHEET--相关芯片手册及ARM参考资料 examples--LPC2100系列ARM7微控制器功能部件相关实验程序及专用工程模板 easyarm_drive--EasyJTAG仿真器驱动程序 sofware --EasyARM软件及相关实验程序 lpc_can--LPC2000的CAN接口参考资料 LPC210x ISP--LPC210x的ISP软件 Ucosii 2.52 for lpc2100 --uC/OS-II移植程序及相关中间件 LPC2114 component library--LPC2114芯片SCH、PCB库 program file--开发板出厂时的编程文件 other ARM development board--其它ARM开发板简介
资源推荐
资源详情
资源评论
收起资源包目录
ZLG LPC2100新easyARM2100光盘 (1800个子文件)
easyARM.ami 63B
EX2_thumb.axf 152KB
EX2_arm.axf 134KB
EX1_ArmThumb.axf 126KB
EX3_thumb.axf 125KB
EX1_thumb.axf 125KB
EX3_arm.axf 111KB
EX1_arm.axf 109KB
Uart0.axf 109KB
Adc.axf 108KB
QUEUE.AXF 105KB
I2C.AXF 105KB
Spi.axf 104KB
Rtc.axf 104KB
Time1.axf 104KB
Modem.axf 101KB
Gpio.axf 90KB
Gpio.axf 89KB
PWM.AXF 89KB
Adc01.axf 20KB
WrEEPROM.axf 18KB
IAPTest.axf 18KB
IdleRun.axf 17KB
SendStr.axf 17KB
Adc0.axf 17KB
PwmOut.axf 17KB
LedDisp.axf 17KB
TimeOut.axf 17KB
TimeCiir.axf 17KB
WdtRun.axf 17KB
SpiDisp.axf 17KB
VICVect.axf 17KB
VICDef.axf 17KB
KeyIn.axf 17KB
LedCon.axf 17KB
disptimer1.axf 16KB
disptimer.axf 16KB
I2cInt.axf 16KB
SendRtc.axf 16KB
IAPTest.axf 15KB
disptimer2.axf 15KB
DataRet.axf 15KB
ReadKey.axf 14KB
LedDisp.axf 13KB
LedDisp.axf 13KB
LedHex.axf 13KB
PdRun.axf 13KB
LedHex.axf 13KB
LedHex.axf 13KB
SpiDisp.axf 13KB
SendStr.axf 13KB
WdtRun.axf 13KB
I2cSlave.axf 12KB
VICVect.axf 12KB
PwmDac.axf 12KB
VICDef.axf 12KB
LedCon.axf 12KB
KeyIn.axf 12KB
TimeOut.axf 11KB
TimeCiir.axf 11KB
TimeLed.axf 11KB
Test4.axf 2KB
TEST5.AXF 1KB
TEST8.AXF 1KB
Test6.axf 1KB
Test7.axf 1KB
TEST2.AXF 1KB
TEST1.AXF 1KB
TEST3.AXF 1KB
f7.bmp 166B
f1.bmp 166B
f6.bmp 166B
f4.bmp 166B
f2.bmp 166B
f3.bmp 166B
f5.bmp 166B
f8.bmp 166B
GUI_BASIC.C 53KB
GUI_BASIC.C 53KB
GUI_BASIC.C 53KB
GUI_BASIC.C 53KB
GUI_BASIC.C 53KB
PC.C 28KB
PC.C 28KB
TEST.C 25KB
TEST.C 25KB
TEST.C 22KB
TEST.C 22KB
FONT24_32.C 17KB
FONT24_32.C 17KB
FONT24_32.C 17KB
FONT24_32.C 17KB
FONT24_32.C 17KB
Os_cpu_c.c 16KB
Os_cpu_c.c 16KB
FONT8_8.C 15KB
FONT8_8.C 15KB
FONT8_8.C 15KB
FONT8_8.C 15KB
FONT8_8.C 15KB
共 1800 条
- 1
- 2
- 3
- 4
- 5
- 6
- 18
资源评论
- wjw198808042012-12-25不错的东西,对我们的项目也能有帮助,谢谢分享者
- jzt20062013-12-29谢谢分享,很不错的资料,比较完整!
- 佛舍利子2013-08-28够全的,谢谢!
- a7868685182013-03-01不错 里面的资料挺全的
yeshuguang
- 粉丝: 4
- 资源: 23
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功