原创 TFT6448-256彩色液晶驱动程序

2009-1-27 20:43 2980 5 5 分类: MCU/ 嵌入式

/*TFT6448-256彩色液晶显示 接线说明
1~2  3~4  5 ~ 12   13(RD) 14(WR)  
VCC  GND  P1.0~7   P3.7    P3.6
15(CS) 16(A0)  17(A1) 18(A0) 19~20
 P3.5   P3.4    P3.3   P3.2  悬空
单片机控制大型彩色液晶程序


转载:姬瑞江


原出处:河南科技大学 陈仲库
*/



/*  清屏子程序 速度比较快*/


void clear(char color) //清屏子程序
{
 int x_i,y_i;
 int xx="0";
 LCD_CS=0;
 A2=A0=1;//写背景
 A1=0;
 P1=color;
 LCD_WR=0;
 LCD_WR=1;
 A1=A0=0;//写前景
 A2=1;
 P1=color;
 LCD_WR=0;
 LCD_WR=1;
 LCD_CS=1;


 LCD_WriteCommand(0x44);   //0x44 8点写,写完后Y坐标自动加8
 for(x_i=0;x_i<321;x_i++)
 { 
  LCD_PointPos(x_i,0);
  for(y_i=0;y_i<60;y_i++) 
  {
   LCD_WriteData(color);
  }
  LCD_PointPos(640-x_i,0);
  for(y_i=0;y_i<60;y_i++) 
  {
   LCD_WriteData(color);
  }


  }
 LCD_WriteCommand(0x00);         //复原单点写入


/*汉字显示子程序 一次性写入*/


/**********汉字显示模块
参数说明:LCD_hz(汉字显示的坐标,第几个字,点阵大小,字的颜色,背景颜色);//点阵大小 必须为16的倍数
调用实例:
for(i=0 ;i<16;i++) LCD_hz(200+16*i,50,i,16,25,0x03);
LCD_hz(200,200,0,64,25,125);
LCD_hz(300,200,1,64,25,125);
LCD_hz(400,200,2,64,25,125);
*/
#include<hanziku.c>          //字库名称
void LCD_hz(uint h_x,uint h_y,char n,int stl,char fcolor,char bcolor)
{
 uint x_i,y_i;
 int *tab,h_k=0;
 switch(stl)
 {
  case 16 :tab=&tab_16[0];break;
  case 32 :tab=&tab_32[0];break;
  case 48 :tab=&tab_48[0];break;
  case 64 :tab=&tab_64[0];break;
  case 128 :tab=&tab_128[0];break;
 }


 LCD_CS=0;
 A2=A0=1;//A2=1 A1=0 A0=1写背景
 A1=0;
 P1=bcolor;
 LCD_WR=0;
 LCD_WR=1;
 A1=A0=0;//A2=1 A1=0 A0=0写前景
 A2=1;
 P1=fcolor;
 LCD_WR=0;
 LCD_WR=1;
 LCD_CS=1;
 h_k=h_k+n*stl/8*stl;  //确定每种模式的字 有多少字节
 LCD_WriteCommand(0x44);   //0x44 8点写,写完后Y坐标自动加8
 for(x_i=0;x_i<stl;x_i++)         //Y*stl 既有stl列
 {
  LCD_PointPos(h_x+x_i,h_y);
  for(y_i=0;y_i<(stl/8);y_i++)      //stl*x 既有stl行 一次写入8个
  { 
   LCD_WriteData(tab[h_k++]);
  }
 }
LCD_WriteCommand(0x00);   //0x00  释放8点写
}


}


 


/***头函数包含函数**********************************************
zhengxian(颜色);
juxing(起始坐标,颜色)引用:juxing(20,30,50,100,0xe0);
zuobiao(原点坐标,颜色)引用:zuobiao(50,200,0xe0);
LCD_circle(圆心坐标,半径,颜色)引用:LCD_circle(200,200,100,0xe0);
LCD_line(线的起始点坐标,颜色)引用:LCD_line(20,40,100,200,0xe0);
*****************************************************************/


/*juxing()函数意义*****************************
juxing(起始坐标,颜色)
引用:juxing(20,30,50,100,0xe0);
引用说明:起点坐标(20,30)终点(50,100)颜色0xe0红色
************************************************/
void juxing(uint x_1,uint y_1,uint x_2,uint y_2,char color)
{
 int i,j;
 for (i=x_1;i<x_2; i++)
 {
  for (j=y_1;j<y_2;j++)
  {
   LCD_PointPos(i,j);
   LCD_WriteData(color);
  }
 }
}


/*zuobiao()函数意义*****************************
zuobiao(原点坐标,颜色)
引用:zuobiao(50,200,0xe0);
引用说明:坐标中心(50,200)颜色0xe0红色
************************************************/
void zuobiao(uint x,uint y,char color)  //参数为坐标原点
{
 uint _xx;
 for(_xx=x-20;_xx<600;_xx++)//建立坐标中心点绝对坐标如(50,200)宽度2pix
 {
  LCD_PointPos(_xx,y);//建立坐标  水平线
  LCD_WriteData(color);  //坐标颜色
  LCD_PointPos(_xx,y+1);//建立坐标
  LCD_WriteData(color);
 }
 for(_xx=x;_xx<320;_xx++)
 {
  LCD_PointPos(x,_xx);//建立坐标  垂直线
  LCD_WriteData(color);
  LCD_PointPos(x+1,_xx);//建立坐标
  LCD_WriteData(color);
 }
}


/*LCD_circle()函数意义*****************************
LCD_circle(圆心坐标,半径,颜色)
引用:LCD_circle(200,200,100,0xe0);
引用说明:
***************************************************/
void LCD_circle(uint c_x,uint c_y,uint r,char color)//参数依次 圆心坐标 半径 颜色
{
 int c_tx,c_ty;
 for(c_tx=c_x-r;c_tx<c_x+r;c_tx++)
 { 
  c_ty=(int)(c_y-sqrt(r*r-(c_tx-c_x)*(c_tx-c_x)));//上半园
  LCD_PointPos(c_tx,c_ty);
  LCD_WriteData(color);
  c_ty=(int)(c_y+sqrt(r*r-(c_tx-c_x)*(c_tx-c_x)));//下半圆
  LCD_PointPos(c_tx,c_ty);
  LCD_WriteData(color);
 }


 for(c_tx=c_x-r/2;c_tx<c_x+r/2;c_tx++)
 { 
  c_ty=(int)(c_y-sqrt(r*r-(c_tx-c_x)*(c_tx-c_x)));//zuo半园
  LCD_PointPos(c_ty,c_tx);
  LCD_WriteData(color);
  c_ty=(int)(c_y+sqrt(r*r-(c_tx-c_x)*(c_tx-c_x)));//右半圆
  LCD_PointPos(c_ty,c_tx);
  LCD_WriteData(color);
 }
}


/*LCD_line()函数意义*****************************
LCD_line(线的起始点坐标,颜色)
引用:LCD_line(20,40,100,200,0xe0);
引用说明:
************************************************/
void LCD_line(uint l_x1,uint l_y1,uint l_x2,uint l_y2,char color)//参数起点(l_x1,l_y1)终点(l_x2,l_y2)
{
 uint l_xi,l_ty;
 float l_k;
 if(l_x1!=l_x2)
 { 
  l_k=(float)(l_y2-l_y1)*(-1.0)/(l_x2-l_x1); //斜率
  for(l_xi=l_x1;l_xi<=l_x2;l_xi++)
  {
   l_ty=(uint)(l_y1-(l_xi-l_x1)*l_k);
   LCD_PointPos(l_xi,l_ty);//建立坐标
   LCD_WriteData(color);
  }
 }
 else
 {
  for(l_xi=l_y1;l_xi<=l_y2;l_xi++)
  {
   LCD_PointPos(l_x1,l_xi);
   LCD_WriteData(color);
  }
 }
}


/*zhengxian()函数意义*****************************
zhengxian(颜色)
引用:zhengxian(0xe0);
引用说明:
************************************************/
void zhengxian(char color)         //sin正弦波
{
 uint _xx;
 zuobiao(50,200,color);//坐标原点为(50,200)
 for(_xx=50;_xx<500;_xx++)
 {
   LCD_PointPos(_xx,(uint)(100*sin((_xx-50)*0.0419)*200));//2*3.14/(200-50)
   LCD_WriteData(color); //波形颜色
 }
}

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
5
关闭 站长推荐上一条 /3 下一条