LCD_DrawPoint(x0+b,y0+a); //4 LCD_DrawPoint(x0+a,y0+b); //6 LCD_DrawPoint(x0-a,y0+b); //1 LCD_DrawPoint(x0-b,y0+a); LCD_DrawPoint(x0-a,y0-b); //2 LCD_DrawPoint(x0-b,y0-a); //7 a++; //使用Bresenham算法画圆 if(di<0)di +=4*a+6; else { di+=10+4*(a-b); b--; } } } //在指定位置显示一个字符 //x,y:起始坐标
//num:要显示的字符:\//size:字体大小 12/16
//mode:叠加方式(1)还是非叠加方式(0)
void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode) { u8 temp,t1,t; u16 y0=y; u16 colortemp=POINT_COLOR; //设置窗口 num=num-' ';//得到偏移后的值 if(!mode) //非叠加方式 { for(t=0;t
y=y0; x++; if(x>=lcddev.width){POINT_COLOR=colortemp;return;}//超区域了 break; } } } }else//叠加方式 { for(t=0;t
//m^n函数
//返回值:m^n次方.
u32 LCD_Pow(u8 m,u8 n) { u32 result=1; while(n--)result*=m; return result; }
//显示数字,高位为0,则不显示 //x,y :起点坐标 //len :数字的位数 //size:字体大小 //color:颜色
//num:数值(0~4294967295);
void LCD_ShowNum(u16 x,u16 y,u32 num,u8 len,u8 size) { u8 t,temp; u8 enshow=0; for(t=0;t //显示数字,高位为0,还是显示 //x,y:起点坐标 //num:数值(0~999999999); //len:长度(即要显示的位数) //size:字体大小 //mode: //[7]:0,不填充;1,填充0. //[6:1]:保留 //[0]:0,非叠加显示;1,叠加显示. void LCD_ShowxNum(u16 x,u16 y,u32 num,u8 len,u8 size,u8 mode) { u8 t,temp; u8 enshow=0; for(t=0;t } LCD_ShowChar(x+(size/2)*t,y,temp+'0',size,mode&0X01); } } //显示字符串 //x,y:起点坐标 //width,height:区域大小 //size:字体大小 //*p:字符串起始地址 void LCD_ShowString(u16 x,u16 y,u16 width,u16 height,u8 size,u8 *p) { u8 x0=x; width+=x; height+=y; while((*p<='~')&&(*p>=' '))//判断是不是非法字符! { if(x>=width){x=x0;y+=size;} if(y>=height)break;//退出 LCD_ShowChar(x,y,*p,size,0); x+=size/2; p++; } } #ifndef __LCD_H #define __LCD_H #include \ #include \ ////////////////////////////////////////////////////////////////////////////////// //本程序只供学习使用,未经作者许可,不得用于其它任何用途 //ALIENTEK战舰STM32开发板 //2.4/2.8寸TFT液晶驱动 //支持驱动IC型号包括:ILI9341/ILI9325/RM68021/ILI9320/ILI9328/LGDP4531/LGDP4535/SPFD5408/SSD1289/1505/B505/C505等 //正点原子@ALIENTEK //技术论坛:www.openedv.com //修改日期:2012/9/11 //版本:V1.9 //版权所有,盗版必究。 //Copyright(C) 广州市星翼电子科技有限公司 2009-2019 //All rights reserved //******************************************************************************** //V1.2修改说明 //支持了SPFD5408的驱动,另外把液晶ID直接打印成HEX格式.方便查看LCD驱动IC. //V1.3 //加入了快速IO的支持 //修改了背光控制的极性(适用于V1.8及以后的开发板版本) //对于1.8版本之前(不包括1.8)的液晶模块,请修改LCD_Init函数的LCD_LED=1;为LCD_LED=1; //V1.4 //修改了LCD_ShowChar函数,使用画点功能画字符。 //加入了横竖屏显示的支持 //V1.5 20110730 //1,修改了B505液晶读颜色有误的bug. //2,修改了快速IO及横竖屏的设置方式. //V1.6 20111116 //1,加入对LGDP4535液晶的驱动支持 //V1.7 20120713 //1,增加LCD_RD_DATA函数 //2,增加对ILI9341的支持 //3,增加ILI9325的独立驱动代码 //4,增加LCD_Scan_Dir函数(慎重使用) //6,另外修改了部分原来的函数,以适应9341的操作 //V1.8 20120905 //1,加入LCD重要参数设置结构体lcddev //2,加入LCD_Display_Dir函数,支持在线横竖屏切换 //V1.9 20120911 //1,新增RM68042驱动(ID:6804),但是6804不支持横屏显示!!原因:改变扫描方式, //导致6804坐标设置失效,试过很多方法都不行,暂时无解。 ////////////////////////////////////////////////////////////////////////////////// //LCD重要参数集 typedef struct { u16 width; //LCD 宽度 u16 height; //LCD 高度 u16 id; //LCD ID u8 dir; //横屏还是竖屏控制:0,竖屏;1,横屏。 u8 wramcmd; //开始写gram指令