/*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); //波形颜色
}
}
文章评论(0条评论)
登录后参与讨论