注意事项: SPI时钟用的是Pclk1时钟,我主频是200MHz Pclk1 是100MHz ,SPI 8分频 后是12.5MHz,
和下面代码中的发送后硬件延时有很大关系.
#define LCD_WD(dat) SPI_SendData8(SPI_UNIT, dat);delay(50);
1
/**************头文件引用******************/
#include "inc.h"
//#include "DEV_LCDFONT.h"
//#include "DEV_PIC.h"
//模块名称
//管脚定义
/*
* LCD_RES PA07 //SPI1_MISO复位
* LCD_A0 PB00 //
* LCD_SI PB01 (MOSI) SPI1_MOSI
* LCD_SCL PB02 (SCLK) SPI1_SCK
* LCD_CS PB10 SPI1_SS0
1--2
SPI1_MOSI
SPI1_MISO
SPI1_SS0
SPI1_SCK
*/
//SPI1
#define LCD_SPI1_ON
//#define LCD_SPI1_OFF
//模块功能
#define USE_HORIZONTAL 2 //设置横屏或者竖屏显示 0或1为竖屏 2或3为横屏
#if USE_HORIZONTAL==0||USE_HORIZONTAL==1
#define LCD_W 128
#define LCD_H 160
#else
#define LCD_W 160
#define LCD_H 128
#endif
#ifdef LCD_SPI1_OFF
#define SPI_LCD_SCL PortB,Pin02
#define SPI_LCD_SI PortB,Pin01
#define SPI_LCD_CS PortB,Pin10
#define SPI_LCD_A0 PortB,Pin00
#define SPI_LCD_RES PortA,Pin07
typedef enum
{
LCD_RES,
LCD_A0,
LCD_SI,
LCD_SCL,
LCD_CS,
LCD_ALL
}LCD_TYPE;
GPIO_STRUCT LCD_GPIO[LCD_ALL]=
{
SPI_LCD_RES,Pin_Mode_Out,0,//LCD_RES
SPI_LCD_A0,Pin_Mode_Out,0,//LCD_A0
SPI_LCD_SI,Pin_Mode_Out,0,//LCD_SI
SPI_LCD_SCL,Pin_Mode_Out,0,//LCD_SCL
SPI_LCD_CS,Pin_Mode_Out,0 //LCD_CS
};
//-----------------LCD端口定义----------------
#define LCD_SCLK_Clr() PORT_ResetBits(SPI_LCD_SCL)//SCL=SCLK
#define LCD_SCLK_Set() PORT_SetBits(SPI_LCD_SCL)
#define LCD_MOSI_Clr() PORT_ResetBits(SPI_LCD_SI)//SDA=MOSI
#define LCD_MOSI_Set() PORT_SetBits(SPI_LCD_SI)
#define LCD_RES_Clr() PORT_ResetBits(SPI_LCD_RES)//RES
#define LCD_RES_Set() PORT_SetBits(SPI_LCD_RES)
#define LCD_DC_Clr() PORT_ResetBits(SPI_LCD_A0)//DC
#define LCD_DC_Set() PORT_SetBits(SPI_LCD_A0)
#define LCD_CS_Clr() PORT_ResetBits(SPI_LCD_CS)//CS
#define LCD_CS_Set() PORT_SetBits(SPI_LCD_CS)
#endif
#ifdef LCD_SPI1_ON
#define SPI_LCD_SCL PortB,Pin02
#define SPI_LCD_SI PortB,Pin01
#define SPI_LCD_CS PortB,Pin10
#define SPI_LCD_A0 PortB,Pin00
#define SPI_LCD_RES PortA,Pin07
#define SPI_SCK_PORT (PortB)//(PortB)
#define SPI_SCK_PIN (Pin02)//(Pin02)
#define SPI_SCK_FUNC (Func_Spi1_Sck)
/* SPI_MOSI Port/Pin definition */
#define SPI_MOSI_PORT (PortB)//(PortB)
#define SPI_MOSI_PIN (Pin01)//(Pin01)
#define SPI_MOSI_FUNC (Func_Spi1_Mosi)
#define SPI_UNIT (M4_SPI1)
#define SPI_UNIT_CLOCK (PWC_FCG1_PERIPH_SPI1)
#define SPI_MASTER_MODE
typedef enum
{
LCD_RES,
LCD_A0,
LCD_CS,
LCD_ALL
}LCD_TYPE;
GPIO_STRUCT LCD_GPIO[LCD_ALL]=
{
SPI_LCD_RES,Pin_Mode_Out,0,//LCD_RES
SPI_LCD_A0,Pin_Mode_Out,0,//LCD_A0
SPI_LCD_CS,Pin_Mode_Out,0 //LCD_CS
};
#define LCD_RES_Clr() PORT_ResetBits(SPI_LCD_RES)//RES
#define LCD_RES_Set() PORT_SetBits(SPI_LCD_RES)
#define LCD_DC_Clr() PORT_ResetBits(SPI_LCD_A0)//DC
#define LCD_DC_Set() PORT_SetBits(SPI_LCD_A0)
#define LCD_CS_Clr() PORT_ResetBits(SPI_LCD_CS)//CS
#define LCD_CS_Set() PORT_SetBits(SPI_LCD_CS)
static void Spi_Config(void)
{
stc_spi_init_t stcSpiInit;
/* configuration structure initialization */
MEM_ZERO_STRUCT(stcSpiInit);
/* Configuration peripheral clock */
PWC_Fcg1PeriphClockCmd(SPI_UNIT_CLOCK, Enable);
/* Configuration SPI pin */
PORT_SetFunc(SPI_SCK_PORT, SPI_SCK_PIN, SPI_SCK_FUNC, Disable);
PORT_SetFunc(SPI_MOSI_PORT, SPI_MOSI_PIN, SPI_MOSI_FUNC, Disable);
/* Configuration SPI structure */
stcSpiInit.enClkDiv = SpiClkDiv8;
stcSpiInit.enFrameNumber = SpiFrameNumber1;
stcSpiInit.enDataLength = SpiDataLengthBit8;
stcSpiInit.enFirstBitPosition = SpiFirstBitPositionMSB;
stcSpiInit.enSckPolarity = SpiSckIdleLevelHigh;//空闲时是高电平
stcSpiInit.enSckPhase = SpiSckOddChangeEvenSample;
stcSpiInit.enReadBufferObject = SpiReadReceiverBuffer;
stcSpiInit.enWorkMode = SpiWorkMode3Line;
stcSpiInit.enTransMode = SpiTransFullDuplex;
stcSpiInit.enCommAutoSuspendEn = Disable;
stcSpiInit.enModeFaultErrorDetectEn = Disable;
stcSpiInit.enParitySelfDetectEn = Disable;
stcSpiInit.enParityEn = Disable;
stcSpiInit.enParity = SpiParityEven;
#ifdef SPI_MASTER_MODE
stcSpiInit.enMasterSlaveMode = SpiModeMaster;
stcSpiInit.stcDelayConfig.enSsSetupDelayOption = SpiSsSetupDelayCustomValue;
stcSpiInit.stcDelayConfig.enSsSetupDelayTime = SpiSsSetupDelaySck1;
stcSpiInit.stcDelayConfig.enSsHoldDelayOption = SpiSsHoldDelayCustomValue;
stcSpiInit.stcDelayConfig.enSsHoldDelayTime = SpiSsHoldDelaySck1;
stcSpiInit.stcDelayConfig.enSsIntervalTimeOption = SpiSsIntervalCustomValue;
stcSpiInit.stcDelayConfig.enSsIntervalTime = SpiSsIntervalSck6PlusPck2;
#endif
#ifdef SPI_SLAVE_MODE
stcSpiInit.enMasterSlaveMode = SpiModeSlave;
#endif
SPI_Init(SPI_UNIT, &stcSpiInit);
SPI_Cmd(SPI_UNIT, Enable);
}
#endif
/******************************************************************************
函数说明:LCD串行数据写入函数
入口数据:dat 要写入的串行数据
返回值: 无
******************************************************************************/
#ifdef LCD_SPI1_OFF
void LCD_Writ_Bus(u8 dat)
{
u8 i;
LCD_CS_Clr();
for(i=0;i<8;i++)
{
LCD_SCLK_Clr();
if(dat&0x80)
{
LCD_MOSI_Set();
}
else
{
LCD_MOSI_Clr();
}
LCD_SCLK_Set();
dat<<=1;
}
LCD_CS_Set();
}
#endif
#ifdef LCD_SPI1_ON
void delay(int t)
{
while(t--);
}
#define LCD_WD(dat) SPI_SendData8(SPI_UNIT, dat);delay(50);
#endif
/******************************************************************************
函数说明:LCD写入数据
入口数据:dat 写入的数据
返回值: 无
******************************************************************************/
void LCD_WR_DATA8(u8 dat)
{
LCD_WD(dat);
}
/******************************************************************************
函数说明:LCD写入数据
入口数据:dat 写入的数据
返回值: 无
******************************************************************************/
void LCD_WR_DATA(u16 dat)
{
LCD_WD(dat>>8);
LCD_WD(dat);
}
//功能模块初始化
void DEV_LCD_Init(void)
{
for(int i =LCD_RES;i <= LCD_CS;i++)
{
rxm_w(DEV_GPIO,&LCD_GPIO[i],NULL);
}
}
/******************************************************************************
函数说明:LCD写入命令
入口数据:dat 写入的命令
返回值: 无
******************************************************************************/
void LCD_WR_REG(u8 dat)
{
LCD_DC_Clr();//写命令
LCD_WR_DATA8(dat);
LCD_DC_Set();//写数据
}
/******************************************************************************
函数说明:设置起始和结束地址
入口数据:x1,x2 设置列的起始和结束地址
y1,y2 设置行的起始和结束地址
返回值: 无
******************************************************************************/
void LCD_Address_Set(u16 x1,u16 y1,u16 x2,u16 y2)
{
if(USE_HORIZONTAL==0)
{
LCD_WR_REG(0x2a);//列地址设置
LCD_WR_DATA(x1+2);
LCD_WR_DATA(x2+2);
LCD_WR_REG(0x2b);//行地址设置
LCD_WR_DATA(y1+1);
LCD_WR_DATA(y2+1);
LCD_WR_REG(0x2c);//储存器写
}
else if(USE_HORIZONTAL==1)
{
LCD_WR_REG(0x2a);//列地址设置
LCD_WR_DATA(x1+2);
LCD_WR_DATA(x2+2);
LCD_WR_REG(0x2b);//行地址设置
LCD_WR_DATA(y1+1);
LCD_WR_DATA(y2+1);
LCD_WR_REG(0x2c);//储存器写
}
else if(USE_HORIZONTAL==2)
{
LCD_WR_REG(0x2a);//列地址设置
LCD_WR_DATA(x1+1);
LCD_WR_DATA(x2+1);
LCD_WR_REG(0x2b);//行地址设置
LCD_WR_DATA(y1+2);
LCD_WR_DATA(y2+2);
LCD_WR_REG(0x2c);//储存器写
}
else
{
LCD_WR_REG(0x2a);//列地址设置
LCD_WR_DATA(x1+1);
LCD_WR_DATA(x2+1);
LCD_WR_REG(0x2b);//行地址设置
LCD_WR_DATA(y1+2);
LCD_WR_DATA(y2+2);
LCD_WR_REG(0x2c);//储存器写
}
}
void delay_ms(u16 time)
{
Ddl_Delay1ms(time);
}
void LCD_BLK_Set(void)
{
rxm_io(DEV_OUTPUT,BLED,1);
}
void LCD_Init(void)
{
DEV_LCD_Init();//初始化GPIO
#ifdef LCD_SPI1_ON
Spi_Config(); //SPI初始化
#endif
LCD_RES_Clr();//复位
delay_ms(100);
LCD_RES_Set();
delay_ms(100);
LCD_BLK_Set(); //打开背光
delay_ms(100);
LCD_CS_Clr();
//************* Start Initial Sequence **********//
LCD_WR_REG(0x11); //Sleep out
delay_ms(120); //Delay 120ms
//------------------------------------ST7735S Frame Rate-----------------------------------------//
LCD_WR_REG(0xB1);
LCD_WR_DATA8(0x05);
LCD_WR_DATA8(0x3C);
LCD_WR_DATA8(0x3C);
LCD_WR_REG(0xB2);
LCD_WR_DATA8(0x05);
LCD_WR_DATA8(0x3C);
LCD_WR_DATA8(0x3C);
LCD_WR_REG(0xB3);
LCD_WR_DATA8(0x05);
LCD_WR_DATA8(0x3C);
LCD_WR_DATA8(0x3C);
LCD_WR_DATA8(0x05);
LCD_WR_DATA8(0x3C);
LCD_WR_DATA8(0x3C);
//------------------------------------End ST7735S Frame Rate---------------------------------//
LCD_WR_REG(0xB4); //Dot inversion
LCD_WR_DATA8(0x03);
//------------------------------------ST7735S Power Sequence---------------------------------//
LCD_WR_REG(0xC0);
LCD_WR_DATA8(0x28);
LCD_WR_DATA8(0x08);
LCD_WR_DATA8(0x04);
LCD_WR_REG(0xC1);
LCD_WR_DATA8(0XC0);
LCD_WR_REG(0xC2);
LCD_WR_DATA8(0x0D);
LCD_WR_DATA8(0x00);
LCD_WR_REG(0xC3);
LCD_WR_DATA8(0x8D);
LCD_WR_DATA8(0x2A);
LCD_WR_REG(0xC4);
LCD_WR_DATA8(0x8D);
LCD_WR_DATA8(0xEE);
//---------------------------------End ST7735S Power Sequence-------------------------------------//
LCD_WR_REG(0xC5); //VCOM
LCD_WR_DATA8(0x1A);
LCD_WR_REG(0x36); //MX, MY, RGB mode
if(USE_HORIZONTAL==0)LCD_WR_DATA8(0x00);
else if(USE_HORIZONTAL==1)LCD_WR_DATA8(0xC0);
else if(USE_HORIZONTAL==2)LCD_WR_DATA8(0x70);
else LCD_WR_DATA8(0xA0);
//------------------------------------ST7735S Gamma Sequence---------------------------------//
LCD_WR_REG(0xE0);
LCD_WR_DATA8(0x04);
LCD_WR_DATA8(0x22);
LCD_WR_DATA8(0x07);
LCD_WR_DATA8(0x0A);
LCD_WR_DATA8(0x2E);
LCD_WR_DATA8(0x30);
LCD_WR_DATA8(0x25);
LCD_WR_DATA8(0x2A);
LCD_WR_DATA8(0x28);
LCD_WR_DATA8(0x26);
LCD_WR_DATA8(0x2E);
LCD_WR_DATA8(0x3A);
LCD_WR_DATA8(0x00);
LCD_WR_DATA8(0x01);
LCD_WR_DATA8(0x03);
LCD_WR_DATA8(0x13);
LCD_WR_REG(0xE1);
LCD_WR_DATA8(0x04);
LCD_WR_DATA8(0x16);
LCD_WR_DATA8(0x06);
LCD_WR_DATA8(0x0D);
LCD_WR_DATA8(0x2D);
LCD_WR_DATA8(0x26);
LCD_WR_DATA8(0x23);
LCD_WR_DATA8(0x27);
LCD_WR_DATA8(0x27);
LCD_WR_DATA8(0x25);
LCD_WR_DATA8(0x2D);
LCD_WR_DATA8(0x3B);
LCD_WR_DATA8(0x00);
LCD_WR_DATA8(0x01);
LCD_WR_DATA8(0x04);
LCD_WR_DATA8(0x13);
//------------------------------------End ST7735S Gamma Sequence-----------------------------//
LCD_WR_REG(0x3A); //65k mode
LCD_WR_DATA8(0x05);
LCD_WR_REG(0x29); //Display on
}
///******************************************************************************
// 函数说明:在指定区域填充颜色
// 入口数据:xsta,ysta 起始坐标
// xend,yend 终止坐标
// color 要填充的颜色
// 返回值: 无
//******************************************************************************/
//void LCD_Fill(u16 xsta,u16 ysta,u16 xend,u16 yend,u16 color)
//{
// u16 i,j;
// LCD_Address_Set(xsta,ysta,xend-1,yend-1);//设置显示范围
// for(i=ysta;i<yend;i++)
// {
// for(j=xsta;j<xend;j++)
// {
// LCD_WR_DATA(color);
// }
// }
//}
///******************************************************************************
// 函数说明:在指定位置画点
// 入口数据:x,y 画点坐标
// color 点的颜色
// 返回值: 无
//******************************************************************************/
void LCD_DrawPoint(u16 x,u16 y,u16 color)
{
LCD_Address_Set(x,y,x,y);//设置光标位置
LCD_WR_DATA(color);
}
///******************************************************************************
// 函数说明:画线
// 入口数据:x1,y1 起始坐标
// x2,y2 终止坐标
// color 线的颜色
// 返回值: 无
//******************************************************************************/
//void LCD_DrawLine(u16 x1,u16 y1,u16 x2,u16 y2,u16 color)
//{
// u16 t;
// int xerr=0,yerr=0,delta_x,delta_y,distance;
// int incx,incy,uRow,uCol;
// delta_x=x2-x1; //计算坐标增量
// delta_y=y2-y1;
// uRow=x1;//画线起点坐标
// uCol=y1;
// 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++)
// {
// LCD_DrawPoint(uRow,uCol,color);//画点
// xerr+=delta_x;
// yerr+=delta_y;
// if(xerr>distance)
// {
// xerr-=distance;
// uRow+=incx;
// }
// if(yerr>distance)
// {
// yerr-=distance;
// uCol+=incy;
// }
// }
//}
///******************************************************************************
// 函数说明:画矩形
// 入口数据:x1,y1 起始坐标
// x2,y2 终止坐标
// color 矩形的颜色
// 返回值: 无
//******************************************************************************/
//void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2,u16 color)
//{
// LCD_DrawLine(x1,y1,x2,y1,color);
// LCD_DrawLine(x1,y1,x1,y2,color);
// LCD_DrawLine(x1,y2,x2,y2,color);
// LCD_DrawLine(x2,y1,x2,y2,color);
//}
///******************************************************************************
// 函数说明:画圆
// 入口数据:x0,y0 圆心坐标
// r 半径
// color 圆的颜色
// 返回值: 无
//******************************************************************************/
//void Draw_Circle(u16 x0,u16 y0,u8 r,u16 color)
//{
// int a,b;
// a=0;b=r;
// while(a<=b)
// {
// LCD_DrawPoint(x0-b,y0-a,color); //3
// LCD_DrawPoint(x0+b,y0-a,color); //0
// LCD_DrawPoint(x0-a,y0+b,color); //1
// LCD_DrawPoint(x0-a,y0-b,color); //2
// LCD_DrawPoint(x0+b,y0+a,color); //4
// LCD_DrawPoint(x0+a,y0-b,color); //5
// LCD_DrawPoint(x0+a,y0+b,color); //6
// LCD_DrawPoint(x0-b,y0+a,color); //7
// a++;
// if((a*a+b*b)>(r*r))//判断要画的点是否过远
// {
// b--;
// }
// }
//}
//void LCD_ShowChinese12x12(u16 x,u16 y,u8 *s,u16 fc,u16 bc,u8 sizey,u8 mode);//显示单个12x12汉字
//void LCD_ShowChinese16x16(u16 x,u16 y,u8 *s,u16 fc,u16 bc,u8 sizey,u8 mode);//显示单个16x16汉字
//void LCD_ShowChinese24x24(u16 x,u16 y,u8 *s,u16 fc,u16 bc,u8 sizey,u8 mode);//显示单个24x24汉字
//void LCD_ShowChinese32x32(u16 x,u16 y,u8 *s,u16 fc,u16 bc,u8 sizey,u8 mode);//显示单个32x32汉字
///******************************************************************************
// 函数说明:显示汉字串
// 入口数据:x,y显示坐标
// *s 要显示的汉字串
// fc 字的颜色
// bc 字的背景色
// sizey 字号 可选 16 24 32
// mode: 0非叠加模式 1叠加模式
// 返回值: 无
//******************************************************************************/
//void LCD_ShowChinese(u16 x,u16 y,u8 *s,u16 fc,u16 bc,u8 sizey,u8 mode)
//{
// while(*s!=0)
// {
// if(sizey==12) LCD_ShowChinese12x12(x,y,s,fc,bc,sizey,mode);
// else if(sizey==16) LCD_ShowChinese16x16(x,y,s,fc,bc,sizey,mode);
// else if(sizey==24) LCD_ShowChinese24x24(x,y,s,fc,bc,sizey,mode);
// else if(sizey==32) LCD_ShowChinese32x32(x,y,s,fc,bc,sizey,mode);
// else return;
// s+=2;
// x+=sizey;
// }
//}
///******************************************************************************
// 函数说明:显示单个12x12汉字
// 入口数据:x,y显示坐标
// *s 要显示的汉字
// fc 字的颜色
// bc 字的背景色
// sizey 字号
// mode: 0非叠加模式 1叠加模式
// 返回值: 无
//******************************************************************************/
//void LCD_ShowChinese12x12(u16 x,u16 y,u8 *s,u16 fc,u16 bc,u8 sizey,u8 mode)
//{
// u8 i,j,m=0;
// u16 k;
// u16 HZnum;//汉字数目
// u16 TypefaceNum;//一个字符所占字节大小
// u16 x0=x;
// TypefaceNum=(sizey/8+((sizey%8)?1:0))*sizey;
//
// HZnum=sizeof(tfont12)/sizeof(typFNT_GB12); //统计汉字数目
// for(k=0;k<HZnum;k++)
// {
// if((tfont12[k].Index[0]==*(s))&&(tfont12[k].Index[1]==*(s+1)))
// {
// LCD_Address_Set(x,y,x+sizey-1,y+sizey-1);
// for(i=0;i<TypefaceNum;i++)
// {
// for(j=0;j<8;j++)
// {
// if(!mode)//非叠加方式
// {
// if(tfont12[k].Msk[i]&(0x01<<j))LCD_WR_DATA(fc);
// else LCD_WR_DATA(bc);
// m++;
// if(m%sizey==0)
// {
// m=0;
// break;
// }
// }
// else//叠加方式
// {
// if(tfont12[k].Msk[i]&(0x01<<j)) LCD_DrawPoint(x,y,fc);//画一个点
// x++;
// if((x-x0)==sizey)
// {
// x=x0;
// y++;
// break;
// }
// }
// }
// }
// }
// continue; //查找到对应点阵字库立即退出,防止多个汉字重复取模带来影响
// }
//}
///******************************************************************************
// 函数说明:显示单个16x16汉字
// 入口数据:x,y显示坐标
// *s 要显示的汉字
// fc 字的颜色
// bc 字的背景色
// sizey 字号
// mode: 0非叠加模式 1叠加模式
// 返回值: 无
//******************************************************************************/
//void LCD_ShowChinese16x16(u16 x,u16 y,u8 *s,u16 fc,u16 bc,u8 sizey,u8 mode)
//{
// u8 i,j,m=0;
// u16 k;
// u16 HZnum;//汉字数目
// u16 TypefaceNum;//一个字符所占字节大小
// u16 x0=x;
// TypefaceNum=(sizey/8+((sizey%8)?1:0))*sizey;
// HZnum=sizeof(tfont16)/sizeof(typFNT_GB16); //统计汉字数目
// for(k=0;k<HZnum;k++)
// {
// if ((tfont16[k].Index[0]==*(s))&&(tfont16[k].Index[1]==*(s+1)))
// {
// LCD_Address_Set(x,y,x+sizey-1,y+sizey-1);
// for(i=0;i<TypefaceNum;i++)
// {
// for(j=0;j<8;j++)
// {
// if(!mode)//非叠加方式
// {
// if(tfont16[k].Msk[i]&(0x01<<j))LCD_WR_DATA(fc);
// else LCD_WR_DATA(bc);
// m++;
// if(m%sizey==0)
// {
// m=0;
// break;
// }
// }
// else//叠加方式
// {
// if(tfont16[k].Msk[i]&(0x01<<j)) LCD_DrawPoint(x,y,fc);//画一个点
// x++;
// if((x-x0)==sizey)
// {
// x=x0;
// y++;
// break;
// }
// }
// }
// }
// }
// continue; //查找到对应点阵字库立即退出,防止多个汉字重复取模带来影响
// }
//}
///******************************************************************************
// 函数说明:显示单个24x24汉字
// 入口数据:x,y显示坐标
// *s 要显示的汉字
// fc 字的颜色
// bc 字的背景色
// sizey 字号
// mode: 0非叠加模式 1叠加模式
// 返回值: 无
//******************************************************************************/
//void LCD_ShowChinese24x24(u16 x,u16 y,u8 *s,u16 fc,u16 bc,u8 sizey,u8 mode)
//{
// u8 i,j,m=0;
// u16 k;
// u16 HZnum;//汉字数目
// u16 TypefaceNum;//一个字符所占字节大小
// u16 x0=x;
// TypefaceNum=(sizey/8+((sizey%8)?1:0))*sizey;
// HZnum=sizeof(tfont24)/sizeof(typFNT_GB24); //统计汉字数目
// for(k=0;k<HZnum;k++)
// {
// if ((tfont24[k].Index[0]==*(s))&&(tfont24[k].Index[1]==*(s+1)))
// {
// LCD_Address_Set(x,y,x+sizey-1,y+sizey-1);
// for(i=0;i<TypefaceNum;i++)
// {
// for(j=0;j<8;j++)
// {
// if(!mode)//非叠加方式
// {
// if(tfont24[k].Msk[i]&(0x01<<j))LCD_WR_DATA(fc);
// else LCD_WR_DATA(bc);
// m++;
// if(m%sizey==0)
// {
// m=0;
// break;
// }
// }
// else//叠加方式
// {
// if(tfont24[k].Msk[i]&(0x01<<j)) LCD_DrawPoint(x,y,fc);//画一个点
// x++;
// if((x-x0)==sizey)
// {
// x=x0;
// y++;
// break;
// }
// }
// }
// }
// }
// continue; //查找到对应点阵字库立即退出,防止多个汉字重复取模带来影响
// }
//}
///******************************************************************************
// 函数说明:显示单个32x32汉字
// 入口数据:x,y显示坐标
// *s 要显示的汉字
// fc 字的颜色
// bc 字的背景色
// sizey 字号
// mode: 0非叠加模式 1叠加模式
// 返回值: 无
//******************************************************************************/
//void LCD_ShowChinese32x32(u16 x,u16 y,u8 *s,u16 fc,u16 bc,u8 sizey,u8 mode)
//{
// u8 i,j,m=0;
// u16 k;
// u16 HZnum;//汉字数目
// u16 TypefaceNum;//一个字符所占字节大小
// u16 x0=x;
// TypefaceNum=(sizey/8+((sizey%8)?1:0))*sizey;
// HZnum=sizeof(tfont32)/sizeof(typFNT_GB32); //统计汉字数目
// for(k=0;k<HZnum;k++)
// {
// if ((tfont32[k].Index[0]==*(s))&&(tfont32[k].Index[1]==*(s+1)))
// {
// LCD_Address_Set(x,y,x+sizey-1,y+sizey-1);
// for(i=0;i<TypefaceNum;i++)
// {
// for(j=0;j<8;j++)
// {
// if(!mode)//非叠加方式
// {
// if(tfont32[k].Msk[i]&(0x01<<j))LCD_WR_DATA(fc);
// else LCD_WR_DATA(bc);
// m++;
// if(m%sizey==0)
// {
// m=0;
// break;
// }
// }
// else//叠加方式
// {
// if(tfont32[k].Msk[i]&(0x01<<j)) LCD_DrawPoint(x,y,fc);//画一个点
// x++;
// if((x-x0)==sizey)
// {
// x=x0;
// y++;
// break;
// }
// }
// }
// }
// }
// continue; //查找到对应点阵字库立即退出,防止多个汉字重复取模带来影响
// }
//}
///******************************************************************************
// 函数说明:显示单个字符
// 入口数据:x,y显示坐标
// num 要显示的字符
// fc 字的颜色
// bc 字的背景色
// sizey 字号
// mode: 0非叠加模式 1叠加模式
// 返回值: 无
//******************************************************************************/
//void LCD_ShowChar(u16 x,u16 y,u8 num,u16 fc,u16 bc,u8 sizey,u8 mode)
//{
// u8 temp,sizex,t,m=0;
// u16 i,TypefaceNum;//一个字符所占字节大小
// u16 x0=x;
// sizex=sizey/2;
// TypefaceNum=(sizex/8+((sizex%8)?1:0))*sizey;
// num=num-' '; //得到偏移后的值
// LCD_Address_Set(x,y,x+sizex-1,y+sizey-1); //设置光标位置
// for(i=0;i<TypefaceNum;i++)
// {
// if(sizey==12)temp=ascii_1206[num][i]; //调用6x12字体
// else if(sizey==16)temp=ascii_1608[num][i]; //调用8x16字体
// else if(sizey==24)temp=ascii_2412[num][i]; //调用12x24字体
// else if(sizey==32)temp=ascii_3216[num][i]; //调用16x32字体
// else return;
// for(t=0;t<8;t++)
// {
// if(!mode)//非叠加模式
// {
// if(temp&(0x01<<t))LCD_WR_DATA(fc);
// else LCD_WR_DATA(bc);
// m++;
// if(m%sizex==0)
// {
// m=0;
// break;
// }
// }
// else//叠加模式
// {
// if(temp&(0x01<<t))LCD_DrawPoint(x,y,fc);//画一个点
// x++;
// if((x-x0)==sizex)
// {
// x=x0;
// y++;
// break;
// }
// }
// }
// }
//}
///******************************************************************************
// 函数说明:显示字符串
// 入口数据:x,y显示坐标
// *p 要显示的字符串
// fc 字的颜色
// bc 字的背景色
// sizey 字号
// mode: 0非叠加模式 1叠加模式
// 返回值: 无
//******************************************************************************/
//void LCD_ShowString(u16 x,u16 y,const u8 *p,u16 fc,u16 bc,u8 sizey,u8 mode)
//{
// while(*p!='\0')
// {
// LCD_ShowChar(x,y,*p,fc,bc,sizey,mode);
// x+=sizey/2;
// p++;
// }
//}
///******************************************************************************
// 函数说明:显示数字
// 入口数据:m底数,n指数
// 返回值: 无
//******************************************************************************/
//u32 mypow(u8 m,u8 n)
//{
// u32 result=1;
// while(n--)result*=m;
// return result;
//}
///******************************************************************************
// 函数说明:显示整数变量
// 入口数据:x,y显示坐标
// num 要显示整数变量
// len 要显示的位数
// fc 字的颜色
// bc 字的背景色
// sizey 字号
// 返回值: 无
//******************************************************************************/
//void LCD_ShowIntNum(u16 x,u16 y,u16 num,u8 len,u16 fc,u16 bc,u8 sizey)
//{
// u8 t,temp;
// u8 enshow=0;
// u8 sizex=sizey/2;
// for(t=0;t<len;t++)
// {
// temp=(num/mypow(10,len-t-1))%10;
// if(enshow==0&&t<(len-1))
// {
// if(temp==0)
// {
// LCD_ShowChar(x+t*sizex,y,' ',fc,bc,sizey,0);
// continue;
// }else enshow=1;
//
// }
// LCD_ShowChar(x+t*sizex,y,temp+48,fc,bc,sizey,0);
// }
//}
///******************************************************************************
// 函数说明:显示两位小数变量
// 入口数据:x,y显示坐标
// num 要显示小数变量
// len 要显示的位数
// fc 字的颜色
// bc 字的背景色
// sizey 字号
// 返回值: 无
//******************************************************************************/
//void LCD_ShowFloatNum1(u16 x,u16 y,float num,u8 len,u16 fc,u16 bc,u8 sizey)
//{
// u8 t,temp,sizex;
// u16 num1;
// sizex=sizey/2;
// num1=num*100;
// for(t=0;t<len;t++)
// {
// temp=(num1/mypow(10,len-t-1))%10;
// if(t==(len-2))
// {
// LCD_ShowChar(x+(len-2)*sizex,y,'.',fc,bc,sizey,0);
// t++;
// len+=1;
// }
// LCD_ShowChar(x+t*sizex,y,temp+48,fc,bc,sizey,0);
// }
//}
///******************************************************************************
// 函数说明:显示图片
// 入口数据:x,y起点坐标
// length 图片长度
// width 图片宽度
// pic[] 图片数组
// 返回值: 无
//******************************************************************************/
//void LCD_ShowPicture(u16 x,u16 y,u16 length,u16 width,const u8 pic[])
//{
// u16 i,j;
// u32 k=0;
// LCD_Address_Set(x,y,x+length-1,y+width-1);
// for(i=0;i<length;i++)
// {
// for(j=0;j<width;j++)
// {
// LCD_WR_DATA8(pic[k*2]);
// LCD_WR_DATA8(pic[k*2+1]);
// k++;
// }
// }
//}
//读一个字节
int DEV_LCD_r1(int fd)
{
return 0;
}
//写一个字节
int DEV_LCD_w1(int fd,int buf)
{
return 0;
}
//读数据
int DEV_LCD_r(int fd,void *buf,int len)
{
return 0;
}
//写数据
int DEV_LCD_w(int fd,void *buf,int len)
{
return 0;
}
//IO驱动
int DEV_LCD_io(int fd,int mode,int value)
{
return 0;
}
_DRV{
// DEV_LCD_Init();
LCD_Init();
// LCD_DrawPoint(10,10,BLACK);
// rxm_reg_r1(DEV_LCD,&DEV_LCD_r1); //注册读一个字节驱动
// rxm_reg_w1(DEV_LCD,&DEV_LCD_w1); //注册写一个字节驱动
// rxm_reg_r(DEV_LCD,&DEV_LCD_r); //注册读数据
// rxm_reg_w(DEV_LCD,&DEV_LCD_w); //注册写数据
// rxm_reg_io(DEV_LCD,&DEV_LCD_io); //注册IO驱动
// LCD_Fill(0,0,160,128,BLACK);
// LCD_ShowPicture(65,80,40,40,gImage_1);
};
|