⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tftlcd.h~

📁 TFTLCD(驱动加资料) TFTLCD(驱动加资料)大大的好
💻 H~
字号:
#ifndef _TFTLCD_INCLUDED_
#define _TFTLCD_INCLUDED_  

#include<mega8.h>
#include <delay.h> 
#include <math.h> 
#include "font.h"

//#include "font.h" 
           
#define LCD_CS PORTC.4
#define LCD_WR PORTC.2
#define LCD_RS PORTC.3
#define LCD_RD PORTC.0
#define LCD_RST PORTC.1 

#define DATAOUT PORTD 
#define DATAIN  PIND
#define DATADDR DDRD
                     
uint POINT_COLOR=0XF800;//默认红色    

/*------------------------液晶说明------------------------------
液晶型号位置
大小:320*240
像素:65K色
VCC   3.3V
VCCIO 2.7~3.3V
数据线操作电压:3.3V
颜色排列:以一个十六位的数存放一个点的颜色 RGB:565 即:最高五位为红色
灰阶.中间六位为绿色灰阶.最低五位为蓝色灰阶.
例如:0XF800 纯红色 
     0X07E0 纯绿色
     0X001F 纯蓝色
----------------------------------------------------------------*/

 
//写入8位数据
void LCD_WDATA(uchar data)
{   
	LCD_CS = 0; 
	DATAOUT = data; 
	LCD_WR = 0; 
	LCD_WR = 1; 
	LCD_CS = 1; 
	LCD_RS = 0;
}  
//写8位数据函数
void LCD_WR_DATA(uchar data)
{ 
	LCD_RS = 1;//写数据  
	LCD_WDATA(data);
} 
//写寄存器地址函数
void LCD_WR_REG(uchar data)
{ 
	LCD_RS = 0;//写地址  
	LCD_WDATA(data);
}  
//写寄存器数据函数   
//dbw:数据位数,1为16位,0为8位。
//index:寄存器编号
//val:值
//输入:dbw 数据位数,1为16位,0为8位。
void LCD_WR_CMD(uchar dbw,uchar index,uint val)
{
	LCD_WR_REG(index);  
	if(dbw)
	{
		LCD_WR_DATA(val>>8);
	} 
	LCD_WR_DATA(val&0xff);
}  
/*
//有误!!!!!!  (读不出数据)
//读16位寄存器数据函数
//输入:index 寄存器地址 
unsigned int LCD_RD_REG16(uchar index)
{
	unsigned int pd;
    LCD_WR_REG(index);  
	LCD_RS = 1;//数据 
	LCD_CS = 0;//片选有效
	DATADDR=0X00;//输入
	DATAOUT = 0xFF;
	LCD_RD = 0; 
	delay_us(2);
	LCD_RD = 1;
	pd = DATAIN;//读取高8位数据  
	pd = pd<<8;  
	LCD_CS = 1;//片选有效
	LCD_RS = 0;//数据  
	
	LCD_RS = 1;
	LCD_CS = 0;  
	LCD_RD = 0; 
	delay_us(2);
	LCD_RD = 1;
	pd = pd + DATAIN;//读取低8位数据
	LCD_CS = 1;
	LCD_RS = 0;
	DATADDR=0Xff;//PORTD输出
	return pd;
}   
*/
//写16位数据函数
void LCD_WR_Data16(uint val)
{  
	LCD_WR_DATA(val>>8);  
    LCD_WR_DATA(val&0xff);
}  
//清屏函数    
//x,y:起始坐标
//len,wid:长宽
void LCD_CLEAR(uchar x,uint y,uchar len,uint wid)
{                    
    ulong n,temp;
	LCD_WR_CMD(0,0x2,x);//设置到原点
	LCD_WR_CMD(1,0x3,y);    
	 
	LCD_WR_CMD(0,0x04,x+len-1);	//结束列数(0~239)	
	LCD_WR_CMD(1,0x05,y+wid-1);//结束行数(0~319)   
	
	LCD_WR_REG(0x0E);
	temp=(ulong)len*wid;    
	for(n=0;n<temp;n++)LCD_WR_Data16(0xffff);//显示白色 
}   
//画点
//x:0~239
//y:0~319
//POINT_COLOR:此点的颜色
void LCD_DrawPoint(uchar x,uint y)
{
	LCD_WR_CMD(0,0x2,x);//设置到原点
	LCD_WR_CMD(1,0x3,y);
	LCD_WR_REG(0x0E);
	LCD_WR_Data16(POINT_COLOR); 
}   
//画线
//x1,y1:起点坐标
//x2,y2:终点坐标  
void LCD_DrawLine(uchar x1, uint y1, uchar x2, uint y2)
{
    uint x, y, t;
	if((x1==x2)&&(y1==y2))LCD_DrawPoint(x1, y1);
	else if(abs(y2-y1)>abs(x2-x1))//斜率大于1 
	{
		if(y1>y2) 
		{
			t=y1;
			y1=y2;
			y2=t; 
			t=x1;
			x1=x2;
			x2=t; 
		}
		for(y=y1;y<y2;y++)//以y轴为基准 
		{
			x=(ulong)(y-y1)*(x2-x1)/(y2-y1)+x1;
			LCD_DrawPoint(x, y);  
		}
	}
	else     //斜率小于等于1 
	{
		if(x1>x2)
		{
			t=y1;
			y1=y2;
			y2=t;
			t=x1;
			x1=x2;
			x2=t;
		}   
		for(x=x1;x<x2;x++)//以x轴为基准 
		{
			y =(ulong)(x-x1)*(y2-y1)/(x2-x1)+y1;
			LCD_DrawPoint(x,y); 
		}
	} 
}
//在指定位置显示一个字符
//x:0~234
//y:0~308
//num:要显示的字符:" "--->"~"
void LCD_ShowChar(uchar x,uint y,uchar num)
{       
#define MAX_CHAR_POSX 234
#define MAX_CHAR_POSY 308 
    uchar temp;
    uchar pos,t;      
    if(x>MAX_CHAR_POSX||y>MAX_CHAR_POSY)return;
    //设定一个字符所占的大小 
    //开辟空间
	LCD_WR_CMD(0,0x2,x);//
	LCD_WR_CMD(1,0x3,y); 
	LCD_WR_CMD(0,0x04,x+5);	//结束列数(0~239)	
	LCD_WR_CMD(1,0x05,y+11);//结束行数(0~319)   
	LCD_WR_REG(0x0E);          
	
	num=num-' ';//得到偏移后的值
	for(pos=0;pos<12;pos++)
	{
	    temp=asc2[num][pos];
	    for(t=0;t<6;t++)
	    {                 
	        if(temp&0x01)LCD_WR_Data16(POINT_COLOR);
	        else LCD_WR_Data16(0xffff);//白色    
	        temp>>=1; 
	    }
	}
}  
//显示一个数字
//x,y:起点坐标
//num:数值(0~255);
void LCD_ShowNum(uchar x,uint y,uchar num)
{         
    LCD_ShowChar(x,y,num/100+'0');
    LCD_ShowChar(x+6,y,(num/10)%10+'0'); 
    LCD_ShowChar(x+12,y,num%10+'0');   
} 
//显示字符串
//x,y:起点坐标  
//*p:字符串起始地址
void LCD_ShowString(uchar x,uint y,flash uchar *p)
{         
    while(*p!='\0')
    {       
        if(x>MAX_CHAR_POSX){x=0;y+=12;}
        if(y>MAX_CHAR_POSY){y=x=0;LCD_CLEAR(0,0,240,320);}
        LCD_ShowChar(x,y,*p);
        x+=6;
        p++;
    }  
}
//显示一副图片
//x,y:图片起始位置
//lenth:图片的宽度(0~240)  
//wide: 图片高度(0~320)
//*p:图片首地址        
//不带范围判断
void LCD_ShowBmp(uchar x,uint y,uchar lenth,uint wide,flash uchar *p)
{      
    ulong size,temp; 
    //开辟窗口
	LCD_WR_CMD(0,0x2,x);//起始坐标
	LCD_WR_CMD(1,0x3,y); 
	LCD_WR_CMD(0,0x04,x+lenth-1);	//结束列数(0~239)	
	LCD_WR_CMD(1,0x05,y+wide-1);    //结束行数(0~319)   
	LCD_WR_REG(0x0E);       
	temp=(ulong)lenth*wide*2;
	for(size=0;size<temp;size++)LCD_WR_DATA(p[size]); 
}         

//初始化函数
void LCD_Init()
{       
    //液晶接口初始化    
    DDRC=0XFF;
    DDRD=0XFF;
    PORTC=0XFF;
    PORTD=0XFF;  
    
	LCD_RST = 0;//硬件复位
	delay_ms(200);
	LCD_RST = 1;
	delay_ms(200); 
	//initializing funciton 1 
	LCD_WR_REG(0xA1);  
	LCD_WR_DATA(0x00);
	delay_us(90); 
	LCD_WR_REG(0xA0); 
	LCD_WR_DATA(0x00); 
	delay_us(90); 
	LCD_WR_CMD(0,0x70,0xc8);//对亮度有影响 
	delay_ms(20); 
	LCD_WR_CMD(0,0x72,0xA3); 
	LCD_WR_CMD(0,0x73,0x04); 
	LCD_WR_CMD(0,0x75,0x45); 
	LCD_WR_CMD(0,0x76,0x23); 
	LCD_WR_CMD(0,0x77,0x08); 
	LCD_WR_CMD(0,0x78,0x08); 
	LCD_WR_CMD(0,0x79,0x00); 
	LCD_WR_CMD(0,0x7F,0xF0);  
	LCD_WR_CMD(0,0x71,0x81);	  
	delay_ms(2); 
	LCD_WR_CMD(0,0x0D,0x23); 
	LCD_WR_CMD(0,0x11,0x00); 
	LCD_WR_CMD(0,0x12,0x00); 
	LCD_WR_CMD(0,0x21,0x37); 
	LCD_WR_CMD(0,0x22,0x02); 
	LCD_WR_CMD(0,0x23,0x24);  
	LCD_WR_CMD(0,0x24,0x13); 
	LCD_WR_CMD(0,0x25,0x0A); 
	LCD_WR_CMD(0,0x26,0x82); 
	LCD_WR_CMD(0,0x27,0x01); 
	LCD_WR_CMD(0,0x1E,0x25); 
	LCD_WR_CMD(0,0x1F,0x59);//有影响  
	//GAMMA设置
	LCD_WR_CMD(1,0x30,0x0777); 
	LCD_WR_CMD(1,0x31,0x0444); 
	LCD_WR_CMD(1,0x32,0x0555); 
	LCD_WR_CMD(1,0x33,0x0444); 
	LCD_WR_CMD(1,0x34,0x0333); 
	LCD_WR_CMD(1,0x35,0x0333); 
	LCD_WR_CMD(1,0x36,0x0333); 
	LCD_WR_CMD(1,0x37,0x0333); 
	LCD_WR_CMD(1,0x38,0x0444); 
	LCD_WR_CMD(1,0x39,0x0555); 
	LCD_WR_CMD(1,0x3A,0x0666); 
	LCD_WR_CMD(1,0x3B,0x0666); 
	LCD_WR_CMD(1,0x3C,0x0777); 
	LCD_WR_CMD(1,0x3D,0x0777); 
	LCD_WR_CMD(1,0x3E,0x0777); 
	LCD_WR_CMD(1,0x3F,0x0777); 
	LCD_WR_CMD(1,0x40,0x0777); 
	LCD_WR_CMD(1,0x41,0x0777); 
	LCD_WR_CMD(1,0x42,0x0777); 
	LCD_WR_CMD(1,0x43,0x0777); 
	LCD_WR_CMD(1,0x44,0x0777); 
	LCD_WR_CMD(1,0x45,0x0777); 
	LCD_WR_CMD(1,0x46,0x0777); 
	LCD_WR_CMD(1,0x47,0x0777); 
	LCD_WR_CMD(1,0x48,0x0777); 
	LCD_WR_CMD(1,0x49,0x0777); 
	LCD_WR_CMD(1,0x4A,0x0777); 
	LCD_WR_CMD(1,0x4B,0x0777); 
	LCD_WR_CMD(1,0x4C,0x0777); 
	LCD_WR_CMD(1,0x4D,0x0666); 
	LCD_WR_CMD(1,0x4E,0x0666); 
	LCD_WR_CMD(1,0x4F,0x0666);  
	
	LCD_WR_CMD(0,0x00,0x04);	//扫描方向控制 
	LCD_WR_CMD(0,0x01,0x07);	//扫描方向控制  
	
	LCD_WR_CMD(0,0x02,0x00);	//设置X坐标点
	LCD_WR_CMD(1,0x03,0x0000);	//设置Y坐标点 
	//面板大小设置
	LCD_WR_CMD(0,0x04,0xEF);	//结束列数(0~239)	
	LCD_WR_CMD(1,0x05,0x013F);	//结束行数(0~319) 
	//窗口设置
	LCD_WR_CMD(0,0x06,0x00);	//水平起始位置
	LCD_WR_CMD(1,0x07,0x0000);	//垂直起始位置
	LCD_WR_CMD(0,0x08,0xEF);	//水平结束位置
	LCD_WR_CMD(1,0x09,0x013F);	//垂直结束位置   
	
	LCD_WR_CMD(0,0x0A,0x00); 
	LCD_WR_CMD(0,0x0B,0x00); 
	LCD_WR_CMD(0,0x0C,0x00); 
	LCD_WR_CMD(0,0x14,0x00); 
	LCD_WR_CMD(0,0x15,0x00); 
	LCD_WR_CMD(0,0x16,0x00); 
	LCD_WR_CMD(1,0x17,0x01FF); 
	LCD_WR_CMD(1,0x18,0x01FF); 
	LCD_WR_CMD(0,0x13,0x00); 
	LCD_WR_CMD(1,0x19,0x01FF); 
	LCD_WR_CMD(1,0x1B,0x01FF); 
	LCD_WR_CMD(1,0x1C,0x01FF); 
	LCD_WR_CMD(1,0x1A,0x01FF);	 
	LCD_WR_CMD(0,0x1D,0x0E);//无影响 
	LCD_WR_CMD(0,0x10,0x06);//开显示
	LCD_WR_REG(0x0E); 
	LCD_CLEAR(0,0,240,320);//清屏 
} 
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -