作为一款高端的CPU S3C2440(2013年的时候),自带LCD液晶屏的UI接口,
也就是外设,只需要对照对应的LCD手册设置寄存器即可
所用LCD是一款16BPP的320(宽)X240(高)的LCD显示屏
/******************************
*文件名:LCD.c *
*功能: 液晶显示程序 *
*创建者: 潘星宇 *
*最后修改:2013.02.27 *
*备注: *
* *
*******************************/
#include "LCD.h"
#if !BPP24
#define BPPMODE_TFT 12 //16位TFT型LCD
#else
#define BPPMODE_TFT 13 //24位TFT型LCD
#endif
#if !BPP24
#define HWSWP 1 //颜色数据半字交换
#else
#define HWSWP 0 //颜色数据半字不交换
#endif
//定义显示缓存区 320 240
//24BPP时应该为 U32LCD_BUFFER[LCD_HEIGHT][LCD_WIDTH];
volatile U16 LCD_BUFFER[LCD_HEIGHT][LCD_WIDTH];
/**************************************************************************
***** 函数名: LCD_Init(void)
***** 功能: LCD初始化
***** 参数: 无
***** 返回值: 无
***** 创建者: 潘星宇
***** 创建时间: 2013-03-7
***** 最后更新:2013-03-7
****************************************************************************/
void LCD_Init(void)
{
rGPCUP = 0x00000000;
rGPCCON = 0xaaaa02aa; //0x1010
rGPDUP = 0x00000000;
rGPDCON=0xaaaaaaaa; //Initialize VD[15:8]
rLCDCON1=rLCDCON1|((CLKVAL_TFT<<8)|(MVAL_USED<<7)|(PNRMODE_TFT<<5)|(BPPMODE_TFT<<1)|0); //1100
rLCDCON2=(VBPD<<24)|(LINEVAL<<14)|(VFPD<<6)|(VSPW);
rLCDCON3=(HBPD<<19)|(HOZVAL<<8)|(HFPD);
rLCDCON4=(HSPW);
rLCDCON5 = (1<<11) |(INVVCLK<<10) | (INVVLINE<<9) | (INVVFRAME<<8) | (0<<7) | (INVVDEN<<6) | (PWREN<<3) |(BSWP<<1) | (HWSWP);
rLCDSADDR1=(((U32)LCD_BUFFER>>22)<<21)|M5D((U32)LCD_BUFFER>>1);
//24BPP时应该是M5D( ((U32)LCD_BUFFER+(LCD_WIDTH*LCD_HEIGHT*4))>>1 );
rLCDSADDR2=M5D( ((U32)LCD_BUFFER+(LCD_WIDTH*LCD_HEIGHT*2))>>1 );
rLCDSADDR3=LCD_WIDTH*2/2; //24BPP时候应该是 LCD_WIDTH*4/2
rLCDINTMSK|=(3); // MASK LCD Sub Interrupt
rTCONSEL = 0; // Disable LPC3480
rGPGUP=rGPGUP&(~(1<<4))|(1<<4); // Pull-up disable
rGPGCON=rGPGCON&(~(3<<8))|(3<<8); //GPG4=LCD_PWREN把
rGPGDAT = rGPGDAT | (1<<4) ;
rLCDCON5=rLCDCON5&(~(1<<3))|(1<<3); // PWREN
rLCDCON5=rLCDCON5&(~(1<<5))|(0<<5); // INVPWREN电源脉冲信号不反转
rLCDCON1|=1; //开启LCD显示
}
/**************************************************************************
***** 函数名: PutPixel(void)
***** 功能: 绘制像素点
***** 参数: x:横坐标 y:纵坐标 c颜色
***** 返回值: 无
***** 创建者:
***** 创建时间: 2011-03-30
***** 最后更新:2011-03-30 int
****************************************************************************/
void PutPixel(U32 x,U32 y, U32 c )
{
LCD_BUFFER[y][x] = c;
}
/**************************************************************************
***** 函数名: Draw_Text16(void)
***** 功能:绘制宽X高大小为16×16的中文字符
***** 参数: x:横坐标 y:纵坐标 c颜色 ch:字模数组
***** 返回值: 无
***** 创建者:
***** 创建时间: 2011-03-30
***** 最后更新:2011-03-30
****************************************************************************/
void Draw_Text16(U32 x,U32 y,U32 color,U32 backColor,const unsigned char ch[])
{
unsigned short int i,j;
unsigned char mask,buffer;
for (i=0;i<16;i++)
{
/*汉字的左半边*/
mask=0x80; //掩码 0b1000 0000>>1---0b0000 1000
buffer=ch[i*2]; //提取一行的第一个字节0x08=0b0000 1000
for (j=0;j<8;j++)
{
if (buffer&mask)
{
PutPixel(x+j,y+i,color); //为笔画上色
}
else
{
PutPixel(x+j,y+i,backColor); //背景色
}
mask=mask>>1; //为判断下一位准备
}
/*汉字的右半边*/
mask=0x80; //掩码,从bit7开始判断
buffer=ch[i*2+1]; //提取一行的第二个字节
for (j=0;j<8;j++)
{
if (buffer&mask)
{
PutPixel(x+j+8,y+i,color); //为笔画上色
}
else
{
PutPixel(x+j+8,y+i,backColor);//背景色
}
mask=mask>>1; //为判断下一位准备
}
}
}
/**************************************************************************
***** 函数名: Draw_ASCII16x24(void)
***** 功能:绘制宽X高大小为16×24的字符
***** 参数: x:横坐标 y:纵坐标 c颜色 ch:字模数组
***** 返回值: 无
***** 创建者:
***** 创建时间: 2013-03-22
***** 最后更新:2013-03-22
****************************************************************************/
void Draw_ASCII16x24(U32 x,U32 y,U32 color,U32 backColor,const unsigned char ch[])
{
unsigned short int i,j;
unsigned char mask,buffer;
for (i=0;i<24;i++)
{
/*字符的左半边*/
mask=0x80; //掩码 0b1000 0000>>1---0b0000 1000
buffer=ch[i*2]; //提取一行的第一个字节0x08=0b0000 1000
for (j=0;j<8;j++)
{
if (buffer&mask)
{
PutPixel(x+j,y+i,color); //为笔画上色
}
else
{
PutPixel(x+j,y+i,backColor); //背景色
}
mask=mask>>1; //为判断下一位准备
}
/*字符的右半边*/
mask=0x80; //掩码,从bit7开始判断
buffer=ch[i*2+1]; //提取一行的第二个字节
for (j=0;j<8;j++)
{
if (buffer&mask)
{
PutPixel(x+j+8,y+i,color); //为笔画上色
}
else
{
PutPixel(x+j+8,y+i,backColor);//背景色
}
mask=mask>>1; //为判断下一位准备
}
}
}
/**************************************************************************
***** 函数名: Draw_ASCII(void)
***** 功能:绘制宽X高大小为8×16的字符
***** 参数: x:横坐标 y:纵坐标 color文字颜色
backColor 文字背景颜色 ch:字模数组
***** 返回值: 无
***** 创建者:
***** 创建时间: 2011-03-30
***** 最后更新:2011-03-30
****************************************************************************/
void Draw_ASCII(U32 x,U32 y,U32 color,U32 backColor,const unsigned char *ch)
{
unsigned short int i,j;
unsigned char mask,buffer;
for (i=0;i<16;i++)
{
mask=0x80; //掩码,从bit7开始判断
buffer=ch[i]; //提取一行的第一个字节
for (j=0;j<8;j++)
{
if (buffer&mask)
{
PutPixel(x+j,y+i,color);//为笔画上色
}
else
{
PutPixel(x+j,y+i,backColor); //背景色
}
mask=mask>>1; //为判断下一位准备
}
}
}
/**************************************************************************
***** 函数名: Draw_ASCII_N(void)
***** 功能: 绘制大小为16×8,16x16的字符串
***** 参数: x:横坐标 y:纵坐标 color文字颜色
backColor 文字背景颜色 ch:字模数组
***** 返回值: 无
***** 创建者:
***** 创建时间: 2011-03-30
***** 最后更新:2011-03-30
****************************************************************************/
void Draw_Text_8_16(U32 x,U32 y,U32 color,U32 backColor,const unsigned char *chs)
{
U32 i=0;
while (*chs != '\0')
{
if (*chs > 0xa0) //汉字内码都是大于0xa0
{
for (i=0 ;i < GB16_NUM();i++)
{ if(x>LCD_WIDTH-16){x=0;y=y+16;}
if ((*chs == hz_index[i]) && (*(chs+1) == hz_index[i+1]))
{
Draw_Text16(x,y,color,backColor,&hz[16*(i)]);
x +=16;
break;
}
}
chs+=2;
}
else //如果是字符执行以下
{ if(x>LCD_WIDTH-8){x=0;y=y+16;}
for (i=0 ;i < ASCII_NUM();i++)
{
if (*chs == zf_index[i])
{
Draw_ASCII(x,y,color,backColor,&zf[16*i]);
x += 8;
break;
}
}
chs++;
}
}
}
/**************************************************************************
***** 函数名: Draw_Text56(void)
***** 功能:绘制大小为56×56的中文字符
***** 参数: x:横坐标 y:纵坐标 c颜色 ch:字模数组
***** 返回值: 无
***** 创建者: 潘星宇
***** 创建时间: 2012-12-16
***** 最后更新:2012-12-16
****************************************************************************/
//Draw_Text16(50,10,0x0,0xf800,xin);
void Draw_Text56(U32 x,U32 y,U32 color,U32 backColor,const unsigned char ch[])
{
unsigned long int i,j;
unsigned char mask,buffer;
for (i=0;i<56;i++)
{
/*汉字的第一部分*/
mask=0x80; //掩码 0b1000 0000>>1---0b0000 1000
buffer=ch[i*7]; //提取一行的第一个字节0x08=0b0000 1000
for (j=0;j<8;j++)
{
if (buffer&mask)
{
PutPixel(x+j,y+i,color); //为笔画上色
}
else
{
PutPixel(x+j,y+i,backColor); //背景色
}
mask=mask>>1; //为判断下一位准备
}
/*汉字的第二部分*/
mask=0x80; //掩码,从bit7开始判断
buffer=ch[i*7+1]; //提取一行的第二个字节
for (j=0;j<8;j++)
{
if (buffer&mask)
{
PutPixel(x+j+8,y+i,color); //为笔画上色
}
else
{
PutPixel(x+j+8,y+i,backColor);//背景色
}
mask=mask>>1; //为判断下一位准备
}
/*汉字的第三部分*/
mask=0x80; //掩码,从bit7开始判断
buffer=ch[i*7+2]; //提取一行的第二个字节
for (j=0;j<8;j++)
{
if (buffer&mask)
{
PutPixel(x+j+16,y+i,color); //为笔画上色
}
else
{
PutPixel(x+j+16,y+i,backColor);//背景色
}
mask=mask>>1; //为判断下一位准备
}
/*汉字的第四部分*/
mask=0x80; //掩码,从bit7开始判断
buffer=ch[i*7+3]; //提取一行的第二个字节
for (j=0;j<8;j++)
{
if (buffer&mask)
{
PutPixel(x+j+24,y+i,color); //为笔画上色
}
else
{
PutPixel(x+j+24,y+i,backColor);//背景色
}
mask=mask>>1; //为判断下一位准备
}
/*汉字的第五部分*/
mask=0x80; //掩码,从bit7开始判断
buffer=ch[i*7+4]; //提取一行的第二个字节
for (j=0;j<8;j++)
{
if (buffer&mask)
{
PutPixel(x+j+32,y+i,color); //为笔画上色
}
else
{
PutPixel(x+j+32,y+i,backColor);//背景色
}
mask=mask>>1; //为判断下一位准备
}
/*汉字的第六部分*/
mask=0x80; //掩码,从bit7开始判断
buffer=ch[i*7+5]; //提取一行的第二个字节
for (j=0;j<8;j++)
{
if (buffer&mask)
{
PutPixel(x+j+40,y+i,color); //为笔画上色
}
else
{
PutPixel(x+j+40,y+i,backColor);//背景色
}
mask=mask>>1; //为判断下一位准备
}
/*汉字的第七部分*/
mask=0x80; //掩码,从bit7开始判断
buffer=ch[i*7+6]; //提取一行的第二个字节
for (j=0;j<8;j++)
{
if (buffer&mask)
{
PutPixel(x+j+48,y+i,color); //为笔画上色
}
else
{
PutPixel(x+j+48,y+i,backColor);//背景色
}
mask=mask>>1; //为判断下一位准备
}
}
}
/**************************************************************************
***** 函数名: Draw_ASCII_N(void)
***** 功能: 绘制N个大小为16×8的字符
***** 参数: x:横坐标 y:纵坐标 color颜色 ch:字符串
***** 返回值: 无
***** 创建者:
***** 创建时间: 2011-03-30
***** 最后更新:2011-03-30
****************************************************************************/
void Draw_ASCII_N(U32 x,U32 y,U32 color,U32 backColor,const unsigned char *chs)
{
U32 i=0;
while (*chs!= '\0')
{
for ( ;i < ASCII_NUM();i++)
{
if (*chs==zf_index[i])
{
Draw_ASCII(x,y+8,color,backColor,&zf[16*i]);
break;
}
}
}
}
/**************************************************************************
***** 函数名: Brush_Background()
***** 功能: 绘制屏幕背景颜色,颜色为c
***** 参数: c 颜色
***** 返回值: 无
***** 创建者:
***** 创建时间: 2011-03-30
***** 最后更新: 2011-03-30
****************************************************************************/
void Brush_Background( U32 c)
{
int x,y ;
for ( y = 0 ; y < LCD_HEIGHT ; y++ )
{
for ( x = 0 ; x < LCD_WIDTH ; x++ )
{
LCD_BUFFER[y][x] = c ;
}
}
}
/**************************************************************************
***** 函数名: one_point_to_another(unsigned int x1, unsigned int y1,
unsigned int length, double angle,
unsigned int color, unsigned int length_start,
unsigned int length_end)
***** 功能: 由一点,长度和角度做线
***** 参数: 已知点坐标x1,y1;长度length,角度angle,颜色color;起始点和结束点;
角度按照钟表原则,0点为0°,顺时针旋转,
函数内部将角度按照象限的原则转化,第一象限为0°的开始。
length_start_points:希望保留起始的点的个数
length_end_points:希望保留最后的点的个数
***** 返回值: 无
***** 创建者: 潘星宇
***** 创建时间:2012-12-25
***** 最后更新: 2012-12-28
****************************************************************************/
void one_point_to_another(unsigned int x1, //已知点横坐标x1
unsigned int y1, //已知点纵坐标y1
unsigned int length, //两点间距长度
float angle, //两点角度,按照钟表原则,0点为0°,顺时针旋转
unsigned int color, //颜色
unsigned int length_start_points, //希望保留起始的点的个数
unsigned int length_end_points) //希望保留最后的点的个数
{
unsigned int x2; //画线用横坐标寄存器
unsigned int y2; //画线用纵坐标寄存器
unsigned int length_i; //画线计数用
unsigned int length_end_i = 0; //画线取最后几个点计数用
float radian; //弧度
if ((angle >= 0) && (angle <= 90))
{
angle = 90 - angle;
}
else if ((angle >= 91) && (angle <= 180))
{
angle = 360 - (angle - 90);
}
else if ((angle >= 181) && (angle <=270))
{
angle = 270 - (angle - 180);
}
else if ((angle >= 271) && (angle <=359))
{
angle = 180 - (angle - 270);
}
radian = (angle / 180)*PIN; //角度与弧度的转换
if (length_start_points >= length) //如果希望保留前面的点超出了线的长度
{
length_start_points = length;
}
if (length_end_points >= length) //如果希望保留后面的点超出了线的长度
{
length_end_points = length;
}
for (length_i = 0; length_i <= length; length_i++)
{
if ((length_start_points > 0) || (length_end_i >= (length - length_end_points))) //希望保留起始点的个数
{
x2 = (unsigned int)(x1 + length_i*cos(radian) + 0.5); //加0.5为了防止大于5的小数被舍去
y2 = (unsigned int)(y1 - length_i*sin(radian) + 0.5); //由于液晶屏的坐标Y轴向下坐标大,与象限刚好相反,故在此是减去
PutPixel(x2,y2,color);
if (length_start_points > 0) //防止自减运算溢出,变成最大值
{
length_start_points--;
}
}
length_end_i++;
}
}
/**************************************************************************
***** 函数名: draw_circle(unsigned int x1, unsigned int y1,
unsigned int radius,unsigned int color)
***** 功能: 画一个圆
***** 参数: 已知点坐标x1,y1;半径radius,颜色color;
***** 返回值: 无
***** 创建者: 潘星宇
***** 创建时间:2012-12-30
***** 最后更新: 2012-12-30
****************************************************************************/
void draw_circle(unsigned int x1, //圆心横坐标
unsigned int y1, //圆心纵坐标
unsigned int radius, //半径
unsigned int color) //颜色
{
unsigned int i;
for (i=0; i <= 359; i++)
{
one_point_to_another (x1, y1, radius, i, color, 0, 1);
}
}
/**************************************************************************
***** 函数名: MidpointCircle(int x0,int y0,int r,int color)***** 功能:画个圆
***** 参数: 圆心x,y坐标,半径,颜色
***** 返回值: 无
***** 创建者: 潘星宇
***** 创建时间: 2012-12-23
***** 最后更新: 2012-12-23
****************************************************************************/
void MidpointCircle(int x0,int y0,int r,int color)
{
int x,y;
float d;
x=0;
y=r;
d=5.0/4-r;
while(x<=y)
{
PutPixel(x0+x,y0+y,color);
PutPixel(x0+x,y0-y,color);
PutPixel(x0-x,y0+y,color);
PutPixel(x0-x,y0-y,color);
PutPixel(x0+y,y0+x,color);
PutPixel(x0+y,y0-x,color);
PutPixel(x0-y,y0+x,color);
PutPixel(x0-y,y0-x,color);
if(d<0)
{
d+=x*2.0+3;
}
else
{
d+=2.0*(x-y)+5;
y--;
}
x++;
}
}
/**************************************************************************
***** 函数名: draw_square画个正方形
***** 参数: x:左上角顶点横坐标
y:左上角顶点纵坐标
l:边长
color:边的颜色
back_color:内部填充色
***** 返回值: 无
***** 创建者: 潘星宇
***** 创建时间: 2013-3-14
***** 最后更新: 2013-3-14
****************************************************************************/
void draw_square(U16 x, U16 y, U16 l, U32 color, U32 back_color)
{
U16 i,j,k;
for (i=0; i<=l; i++)
{
PutPixel(x+i,y,color); //上边
PutPixel(x+i,y+l,color); //下边
PutPixel(x,y+i,color); //左边
PutPixel(x+l,y+i,color); //右边
}
for (j=0; j<=l-2; j++)
{
for(k=0; k<=l-2; k++)
{
PutPixel(x+1+k,y+1+j,back_color); //填充内部,横着画
}
}
}
/**************************************************************************
***** 函数名: draw_rectangle画个矩形
***** 参数: x:起点横坐标
y:起点纵坐标
width:宽
height:高
color:颜色
***** 返回值: 无
***** 创建者: 潘星宇
***** 创建时间: 2013-3-24
***** 最后更新: 2013-3-24
****************************************************************************/
void draw_rectangle(U16 x, U16 y, U16 width, U16 height, U32 color)
{
U16 i,j;
for(i=0; i<height; i++)
{
for(j=0; j<width; j++)
{
PutPixel(x+j,y+i,color);
}
}
}
/**************************************************************************
***** 函数名: Paint_Bmp()
***** 功能: 显示指定大小图片
***** 参数: x0 开始位置,y0开始位置 ,h高度,l 宽度 ,bmp 图片数据数组
***** 返回值: 无
***** 创建者:
***** 创建时间: 2011-03-30
***** 最后更新:2017-04-22
****************************************************************************/
//l:480 h:272
void Paint_Bmp(int x0,int y0,int l,int h,const unsigned char bmp[])
{
int x,y;
U32 c;
int p = 0;
for( y = y0 ; y < y0+h ; y++ )
{
for( x = x0 ; x <x0+l ; x++ )
{
c = bmp[p+1] | (bmp[p]<<8) ; //16BPP 先放的是高8位然后是低8位
// if ( ( (x0+x) < LCD_WIDTH) && ( (y0+y) < LCD_HEIGHT) )
LCD_BUFFER[y][x] = c ;
p = p + 2 ; //16BPP储存一个颜色 故一次加2
}
}
}
有好几个头文件如下:
#ifndef LCD_H
#define LCD_H
#include "2440addr.h"
#include "def.h"
#include "zi.h"
#include "math.h"
/**************************************************************************
***** 函数名: LCD_Init(void)
***** 功能: LCD初始化
***** 参数: 无
***** 返回值: 无
***** 创建者:
***** 创建时间: 2011-03-30
***** 最后更新:2011-03-30
****************************************************************************/
extern void LCD_Init(void);
/**************************************************************************
***** 函数名: PutPixel(void)
***** 功能: 绘制像素点
***** 参数: x:横坐标 y:纵坐标 c颜色
***** 返回值: 无
***** 创建者:
***** 创建时间: 2011-03-30
***** 最后更新:2011-03-30 int
****************************************************************************/
extern void PutPixel(U32 x,U32 y, U32 c );
/**************************************************************************
***** 函数名: Draw_Text16(void)
***** 功能:绘制宽X高大小为16×16的中文字符
***** 参数: x:横坐标 y:纵坐标 c颜色 ch:字模数组
***** 返回值: 无
***** 创建者:
***** 创建时间: 2011-03-30
***** 最后更新:2011-03-30
****************************************************************************/
extern void Draw_Text16(U32 x,U32 y,U32 color,U32 backColor,const unsigned char ch[]);
/**************************************************************************
***** 函数名: Draw_Text56(void)
***** 功能:绘制大小为56×56的中文字符
***** 参数: x:横坐标 y:纵坐标 c颜色 ch:字模数组
***** 返回值: 无
***** 创建者: 潘星宇
***** 创建时间: 2012-12-16
***** 最后更新:2012-12-16
****************************************************************************/
//Draw_Text16(50,10,0x0,0xf800,xin);
extern void Draw_Text56(U32 x,U32 y,U32 color,U32 backColor,const unsigned char ch[]);
/**************************************************************************
***** 函数名: Draw_ASCII(void)
***** 功能:绘制宽X高大小为8×16的字符
***** 参数: x:横坐标 y:纵坐标 color文字颜色
backColor 文字背景颜色 ch:字模数组
***** 返回值: 无
***** 创建者:
***** 创建时间: 2011-03-30
***** 最后更新:2011-03-30
****************************************************************************/
extern void Draw_ASCII(U32 x,U32 y,U32 color,U32 backColor,const unsigned char *ch);
/**************************************************************************
***** 函数名: Draw_ASCII_N(void)
***** 功能: 绘制大小为16×8,16x16的字符串
***** 参数: x:横坐标 y:纵坐标 color文字颜色
backColor 文字背景颜色 ch:字模数组
***** 返回值: 无
***** 创建者:
***** 创建时间: 2011-03-30
***** 最后更新:2011-03-30
****************************************************************************/
extern void Draw_Text_8_16(U32 x,U32 y,U32 color,U32 backColor,const unsigned char *chs);
/**************************************************************************
***** 函数名: Draw_ASCII16x24(void)
***** 功能:绘制宽X高大小为16×24的字符
***** 参数: x:横坐标 y:纵坐标 c颜色 ch:字模数组
***** 返回值: 无
***** 创建者:
***** 创建时间: 2013-03-22
***** 最后更新:2013-03-22
****************************************************************************/
extern void Draw_ASCII16x24(U32 x,U32 y,U32 color,U32 backColor,const unsigned char ch[]);
/**************************************************************************
***** 函数名: Draw_ASCII_N(void)
***** 功能: 绘制N个大小为16×8的字符
***** 参数: x:横坐标 y:纵坐标 color颜色 ch:字符串
***** 返回值: 无
***** 创建者:
***** 创建时间: 2011-03-30
***** 最后更新:2011-03-30
****************************************************************************/
extern void Draw_ASCII_N(U32 x,U32 y,U32 color,U32 backColor,const unsigned char *chs);
/**************************************************************************
***** 函数名: Brush_Background()
***** 功能: 绘制屏幕背景颜色,颜色为c
***** 参数: c 颜色
***** 返回值: 无
***** 创建者:
***** 创建时间: 2011-03-30
***** 最后更新: 2011-03-30
****************************************************************************/
extern void Brush_Background( U32 c);
/**************************************************************************
***** 函数名: one_point_to_another(unsigned int x1, unsigned int y1,
unsigned int length, double angle,
unsigned int color, unsigned int length_start,
unsigned int length_end)
***** 功能: 由一点,长度和角度做线
***** 参数: 已知点坐标x1,y1;长度length,角度angle,颜色color;起始点和结束点;
角度按照钟表原则,0点为0°,顺时针旋转,
函数内部将角度按照象限的原则转化,第一象限为0°的开始。
length_start_points:希望保留起始的点的个数
length_end_points:希望保留最后的点的个数
***** 返回值: 无
***** 创建者: 潘星宇
***** 创建时间:2012-12-25
***** 最后更新: 2012-12-25 这个函数有个缺陷:圆心的横纵坐标都要大于半径,因为没有判断负值的数据类型,稍微改造下即可
****************************************************************************/
extern void one_point_to_another(unsigned int x1, //已知点横坐标x1
unsigned int y1, //已知点纵坐标y1
unsigned int length, //两点间距长度
float angle, //两点角度,按照钟表原则,0点为0°,顺时针旋转
unsigned int color, //颜色
unsigned int length_start_points, //希望保留起始的点的个数
unsigned int length_end_points); //希望保留最后的点的个数
/**************************************************************************
***** 函数名: draw_circle(unsigned int x1, unsigned int y1,
unsigned int radius,unsigned int color)
***** 功能: 画一个圆
***** 参数: 已知点坐标x1,y1;半径radius,颜色color;
***** 返回值: 无
***** 创建者: 潘星宇
***** 创建时间:2012-12-30
***** 最后更新: 2012-12-30
****************************************************************************/
extern void draw_circle(unsigned int x1, //圆心横坐标
unsigned int y1, //圆心纵坐标
unsigned int radius, //半径
unsigned int color); //颜色
/**************************************************************************
***** 函数名: MidpointCircle(int x0,int y0,int r,int color)***** 功能:画个圆
***** 参数: 圆心x,y坐标,半径,颜色
***** 返回值: 无
***** 创建者: 潘星宇
***** 创建时间: 2012-12-23
***** 最后更新: 2012-12-23
****************************************************************************/
extern void MidpointCircle(int x0,int y0,int r,int color);
/**************************************************************************
***** 函数名: draw_square画个正方形
***** 参数: x:左上角顶点横坐标
y:左上角顶点纵坐标
l:边长
color:边的颜色
back_color:内部填充色
***** 返回值: 无
***** 创建者: 潘星宇
***** 创建时间: 2013-3-14
***** 最后更新: 2013-3-14
****************************************************************************/
extern void draw_square(U16 x, U16 y, U16 l, U32 color, U32 back_color);
/**************************************************************************
***** 函数名: draw_rectangle画个矩形
***** 参数: x:起点横坐标
y:起点纵坐标
width:宽
height:高
color:颜色
***** 返回值: 无
***** 创建者: 潘星宇
***** 创建时间: 2013-3-24
***** 最后更新: 2013-3-24
****************************************************************************/
extern void draw_rectangle(U16 x, U16 y, U16 width, U16 height, U32 color);
/**************************************************************************
***** 函数名: Paint_Bmp()
***** 功能: 显示指定大小图片
***** 参数: x0 开始位置,y0开始位置 ,h高度,l 宽度 ,bmp 图片数据数组
***** 返回值: 无
***** 创建者:
***** 创建时间: 2011-03-30
***** 最后更新:2011-03-30
****************************************************************************/
//l:480 h:272
extern void Paint_Bmp(int x0,int y0,int h,int l,const unsigned char bmp[]);
#endif
#ifndef __DEF_H__
#define __DEF_H__
#define U32 unsigned int
#define U16 unsigned short
#define S32 int
#define S16 short int
#define U8 unsigned char
#define S8 char
#define BYTE char
#define WORD short
#define DWORD int
#define UINT U32
#define LPSTR U8 *
#define TRUE 1
#define FALSE 0
#define OK 1
#define FAIL 0
#define SIZE_1K 0x00000400
#define SIZE_2K 0x00000800
#define SIZE_4K 0x00001000
#define SIZE_8K 0x00002000
#define SIZE_16K 0x00004000
#define SIZE_32K 0x00008000
#define SIZE_64K 0x00010000
#define SIZE_128K 0x00020000
#define SIZE_256K 0x00040000
#define SIZE_512K 0x00080000
#define SIZE_1M 0x00100000
#define SIZE_2M 0x00200000
#define SIZE_4M 0x00400000
#define SIZE_8M 0x00800000
#define SIZE_16M 0x01000000
#define SIZE_32M 0x02000000
#define SIZE_64M 0x04000000
#define SIZE_128M 0x08000000
#define SIZE_256M 0x10000000
#define SIZE_512M 0x20000000
#define SIZE_1G 0x40000000
#define SIZE_2G 0x80000000
#define ENTER_KEY 0x0d
#define BACK_KEY 0x08
#define BEEP_KEY 0x07
#define UP_KEY 0x41
#define DOWN_KEY 0x42
#define RIGHT_KEY 0x43
#define LEFT_KEY 0x44
#define HOME_KEY 0x48
#define END_KEY 0x4b
#define ESC_KEY 0x1b
#define PIN 3.141592653
#define M5D(n) ((n) & 0x1fffff) //用于设置显示缓存区时,取低21位地址
/******************480X272*********************************/
#define BPP24 (0)
#define LCD_WIDTH 480 //屏幕的宽
#define LCD_HEIGHT 272 //屏幕的高
//垂直同步信号的脉宽、后肩和前肩
#define VSPW (8) //垂直同步信号的脉宽(X35屏只能是该值)
#define VBPD (2) //垂直同步信号的后肩
#define VFPD (4) //垂直同步信号的前肩
//水平同步信号的脉宽、后肩和前肩
#define HSPW (30) //水平同步信号的脉宽
#define HBPD (10) //水平同步信号的后肩
#define HFPD (19) //水平同步信号的前肩
#define FRM565 (1)
//for
#define CLKVAL_TFT 4 //设置时钟信号
#define MVAL_USED 0 // 当屏是TFT时设置为0,STN屏时设置为1
#define PNRMODE_TFT 3 //选择显示模式 TFT型LCD
//for LCDCON5
#define BPP24BL 0 //32位数据表示24位颜色值时,低位数据有效,高8位无效
#define INVVCLK 0 //像素值在VCLK下降沿有效
#define INVVLINE 1 //翻转HSYNC信号
#define INVVFRAME 1 //翻转VSYNC信号
#define INVVD 1 //翻转VD信号极性
#define INVVDEN 1 //1 //翻转VDEN信号极性
#define PWREN 1 //使能PWREN信号
#define BSWP 0 //颜色数据字节不交换
#define LINEVAL (LCD_HEIGHT-1)
#define HOZVAL (LCD_WIDTH-1)
#endif /*__DEF_H__*/