是基于正点原子的TFTLCD显示和触摸屏的历程改的,在本篇就不再叙述TFTLCD屏的成像原理和触摸原理了。直接上应用,可能有些地方理解的不到位,欢迎各位大佬指正。
一.LCD显示函数
1.LCD_ShowNum()? ? ? //显示数字
//x,y:起点坐标 //num:要显示的数值(0~999999999);?? ?? //len:长度(即要显示的位数) //size:字体大小 //mode: //[7]:0,不填充;1,填充0.(不填充:和背景颜色不同,填充:和背景颜色相同)
void LCD_ShowNum(u16 x,u16 y,u32 num,u8 len,u8 size)
{
u8 t,temp;
u8 enshow=0;
for(t=0;t<len;t++)
{
temp=(num/LCD_Pow(10,len-t-1))%10;
if(enshow==0&&t<(len-1))
{
if(temp==0)
{
LCD_ShowChar(x+(size/2)*t,y,' ',size,0);
continue;
}else enshow=1;
}
LCD_ShowChar(x+(size/2)*t,y,temp+'0',size,0);
}
}
2.LCD_Clear()? ? //清屏函数
//color:要清屏的填充色
void LCD_Clear(u16 color)
{
u32 index=0;
u32 totalpoint=lcddev.width;
totalpoint*=lcddev.height; //得到总点数
if((lcddev.id==0X6804)&&(lcddev.dir==1))//6804横屏的时候特殊处理
{
lcddev.dir=0;
lcddev.setxcmd=0X2A;
lcddev.setycmd=0X2B;
LCD_SetCursor(0x00,0x0000); //设置光标位置
lcddev.dir=1;
lcddev.setxcmd=0X2B;
lcddev.setycmd=0X2A;
}else LCD_SetCursor(0x00,0x0000); //设置光标位置
LCD_WriteRAM_Prepare(); //开始写入GRAM
for(index=0;index<totalpoint;index++)
{
LCD->LCD_RAM=color;
}
}
3.LCD_ShowString()? ? ?//显示字符串
//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++;
}
}
4.POINT_COLOR=RED;? ? ?//设置字体颜色,设置字体为红色?
5.LCD_Init();? ? ? ? ? ? ? ? ? ? ? ?//LCD初始化
二.触摸判断
tp_dev.scan(0);
if(tp_dev.x[t]>20&&tp_dev.x[t]<265&&tp_dev.y[t]>200&&tp_dev.y[t]<265)
{
while(tp_dev.x[t]>20&&tp_dev.x[t]<265&&tp_dev.y[t]>200&&tp_dev.y[t]<265)
{
tp_dev.scan(0);
}
LCD_Clear(WHITE);
LCD_DrawRectangle(30,30,180,220);
LCD_ShowNum(40,40,1,1,24);
LCD_ShowNum(90,40,2,1,24);
LCD_ShowNum(140,40,3,1,24);
LCD_ShowNum(40,90,4,1,24);
LCD_ShowNum(90,90,5,1,24);
LCD_ShowNum(140,90,6,1,24);
LCD_ShowNum(40,140,7,1,24);
LCD_ShowNum(90,140,8,1,24);
LCD_ShowNum(140,140,9,1,24);
(1)tp_dev.scan(0);? ? //扫描屏幕
(2)tp_dev.x[t]>20&&tp_dev.x[t]<265&&tp_dev.y[t]>200&&tp_dev.y[t]<265
//用于判断屏幕的指定地方有没有被碰到
(3)? ? LCD_DrawRectangle(30,30,180,220); ? ? ? ? ? ? ? ?LCD_ShowNum(40,40,1,1,24); ? ? ? ? ? ? ? ?LCD_ShowNum(90,40,2,1,24); ? ? ? ? ? ? ? ?LCD_ShowNum(140,40,3,1,24); ? ? ? ? ? ? ? ?LCD_ShowNum(40,90,4,1,24); ? ? ? ? ? ? ? ?LCD_ShowNum(90,90,5,1,24); ? ? ? ? ? ? ? ?LCD_ShowNum(140,90,6,1,24); ? ? ? ? ? ? ? ?LCD_ShowNum(40,140,7,1,24); ? ? ? ? ? ? ? ?LCD_ShowNum(90,140,8,1,24); ? ? ? ? ? ? ? ?LCD_ShowNum(140,140,9,1,24);
//这十条语句用来在屏幕上画一个九格的矩阵键盘
|