标题:
TFT144液晶屏单片机源程序(驱动程序)
[打印本页]
作者:
WANGXL
时间:
2020-4-29 22:13
标题:
TFT144液晶屏单片机源程序(驱动程序)
TFT144液晶屏源程序(驱动程序)
单片机源程序如下:
//********************************************************************************
#include "STC15.H"
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#include "delay.h"
#include "tft128128spi.h"
//---------------------------液晶屏接线说明-------------------------------------//
//接线前请参考液晶屏说明书第10页引脚定义
sbit scl =P2^7;//接模块CLK引脚,接裸屏Pin9_SCL
sbit sda =P2^6;//接模块DIN/MOSI引脚,接裸屏Pin8_SDA
sbit reset =P2^5;//接模块dcT引脚,接裸屏Pin6_RES
sbit dc =P2^4;//接模块D/C引脚,接裸屏Pin7_A0
sbit cs =P2^3;//接模块CE引脚,接裸屏Pin12_CS
sbit bl =P2^2;//接模块BL引脚,背光可以采用IO控制或者PWM控制,也可以直接接到高电平常亮
//---------------------------End of液晶屏接线---------------------------------//
bit USE_LANDSCAPE;//程序横竖屏切换
//向液晶屏写一个8位指令
void LCD_WrCmd(uchar cmd)
{
uchar i;
cs=0;dc=0;
for(i=0;i<8;i++)
{
scl=0;
if(cmd&0x80)sda=1;else sda=0;
scl=1;
cmd<<=1;
}
cs=1;
}
//向液晶屏写一个8位数据
void LCD_WrDat(uchar dat)
{
uchar i;
cs=0;dc=1;
for(i=0;i<8;i++)
{
scl=0;
if(dat&0x80)sda=1;else sda=0;
scl=1;
dat<<=1;
}
cs=1;
}
//向液晶屏写一个16位数据
void LCD_WrDat_16Bit(uint dat)
{
LCD_WrDat(dat>>8); //写入高8位数据
LCD_WrDat(dat); //写入低8位数据
}
void Reset()
{
reset=0;
delayms(100);
reset=1;
delayms(100);
}
//////////////////////////////////////////////////////////////////////////////////////////////
//液晶屏初始化 for S6D02A1
void lcd_initial()
{ Reset();//Reset before LCD Init.
//LCD Init For 1.44Inch LCD Panel with ST7735R.
LCD_WrCmd(0x11);//Sleep exit
delayms (120);
//ST7735R Frame Rate
LCD_WrCmd(0xB1);
LCD_WrDat(0x01);
LCD_WrDat(0x2C);
LCD_WrDat(0x2D);
LCD_WrCmd(0xB2);
LCD_WrDat(0x01);
LCD_WrDat(0x2C);
LCD_WrDat(0x2D);
LCD_WrCmd(0xB3);
LCD_WrDat(0x01);
LCD_WrDat(0x2C);
LCD_WrDat(0x2D);
LCD_WrDat(0x01);
LCD_WrDat(0x2C);
LCD_WrDat(0x2D);
LCD_WrCmd(0xB4); //Column invedcion
LCD_WrDat(0x07);
//ST7735R Power Sequence
LCD_WrCmd(0xC0);
LCD_WrDat(0xA2);
LCD_WrDat(0x02);
LCD_WrDat(0x84);
LCD_WrCmd(0xC1);
LCD_WrDat(0xC5);
LCD_WrCmd(0xC2);
LCD_WrDat(0x0A);
LCD_WrDat(0x00);
LCD_WrCmd(0xC3);
LCD_WrDat(0x8A);
LCD_WrDat(0x2A);
LCD_WrCmd(0xC4);
LCD_WrDat(0x8A);
LCD_WrDat(0xEE);
LCD_WrCmd(0xC5); //VCOM
LCD_WrDat(0x0E);
LCD_WrCmd(0x36); //MX, MY, RGB mode
if(USE_LANDSCAPE)
LCD_WrDat(0xA8); //竖屏C8 横屏08 A8
else
LCD_WrDat(0xC8); //竖屏C8 横屏08 A8
//ST7735R Gamma Sequence
LCD_WrCmd(0xe0);
LCD_WrDat(0x0f);
LCD_WrDat(0x1a);
LCD_WrDat(0x0f);
LCD_WrDat(0x18);
LCD_WrDat(0x2f);
LCD_WrDat(0x28);
LCD_WrDat(0x20);
LCD_WrDat(0x22);
LCD_WrDat(0x1f);
LCD_WrDat(0x1b);
LCD_WrDat(0x23);
LCD_WrDat(0x37);
LCD_WrDat(0x00);
LCD_WrDat(0x07);
LCD_WrDat(0x02);
LCD_WrDat(0x10);
LCD_WrCmd(0xe1);
LCD_WrDat(0x0f);
LCD_WrDat(0x1b);
LCD_WrDat(0x0f);
LCD_WrDat(0x17);
LCD_WrDat(0x33);
LCD_WrDat(0x2c);
LCD_WrDat(0x29);
LCD_WrDat(0x2e);
LCD_WrDat(0x30);
LCD_WrDat(0x30);
LCD_WrDat(0x39);
LCD_WrDat(0x3f);
LCD_WrDat(0x00);
LCD_WrDat(0x07);
LCD_WrDat(0x03);
LCD_WrDat(0x10);
LCD_WrCmd(0x2a);
LCD_WrDat(0x00);
LCD_WrDat(0x00+2);
LCD_WrDat(0x00);
LCD_WrDat(0x80+2);
LCD_WrCmd(0x2b);
LCD_WrDat(0x00);
LCD_WrDat(0x00+3);
LCD_WrDat(0x00);
LCD_WrDat(0x80+3);
LCD_WrCmd(0xF0); //Enable test command
LCD_WrDat(0x01);
LCD_WrCmd(0xF6); //Disable ram power save mode
LCD_WrDat(0x00);
LCD_WrCmd(0x3A); //65k mode
LCD_WrDat(0x05);
LCD_WrCmd(0x29);//Display on
bl=1; //背光
}
/*************************************************
函数名:LCD_Set_Region
功能:设置lcd显示区域,在此区域写点数据自动换行
入口参数:xy起点和终点
返回值:无
*************************************************/
void Lcd_SetRegion(uint x_start,uint y_start,uint x_end,uint y_end)reentrant
{
if(USE_LANDSCAPE)//使用横屏模式
{
LCD_WrCmd(0x2a);
LCD_WrDat(0x00);
LCD_WrDat(x_start+3);
LCD_WrDat(0x00);
LCD_WrDat(x_end+3);
LCD_WrCmd(0x2b);
LCD_WrDat(0x00);
LCD_WrDat(y_start+2);
LCD_WrDat(0x00);
LCD_WrDat(y_end+2);
}
else//竖屏模式
{
LCD_WrCmd(0x2a);
LCD_WrDat(0x00);
LCD_WrDat(x_start+2);
LCD_WrDat(0x00);
LCD_WrDat(x_end+2);
LCD_WrCmd(0x2b);
LCD_WrDat(0x00);
LCD_WrDat(y_start+3);
LCD_WrDat(0x00);
LCD_WrDat(y_end+3);
}
LCD_WrCmd(0x2c);
}
void LCD_Clear(int color)
{
uchar i,j;
Lcd_SetRegion(0,0,128-1,128-1);
for (i=0;i<128;i++)
for (j=0;j<128;j++)
LCD_WrDat_16Bit(color);
}
void LCD_A_Char8X16(uint x, uint y, uint fc, uint bc, uchar *s)reentrant
{
uchar i,j,temp;
Lcd_SetRegion(x,y,x+8-1,y+16-1);
for(i=0;i<16;i++)
{
temp=s[i];
for(j=0;j<8;j++)
{
if(temp&0x80)LCD_WrDat_16Bit(fc);
else if (fc!=bc) LCD_WrDat_16Bit(bc);
temp<<=1;
}
}
}
void LCD_Char8X16_String(uint x,uint y,uint fc,uint bc,uchar *s,uchar c)reentrant
{
uchar i;
for(i=0;i<c;i++) LCD_A_Char8X16(x+i*8,y,fc,bc,s+i*16);
}
void LCD_CHN16X16(uint x, uint y, uint fc, uint bc, uchar *s)reentrant //显示一个汉字
{
uchar i,j,temp;
Lcd_SetRegion(x,y,x+16-1,y+16-1);
for(i=0;i<32;i++)
{
temp=s[i];
for(j=0;j<8;j++)
{
if(temp&0x80)LCD_WrDat_16Bit(fc);
else if (fc!=bc) LCD_WrDat_16Bit(bc);
temp<<=1;
}
}
}
void LCD_CHN16X16_String(uint x,uint y,uint fc,uint bc,uchar *s,uchar c)
{
uchar i;
for(i=0;i<c;i++)LCD_CHN16X16(x+i*16,y,fc,bc,s+i*32);
}
//void LCD_A_Char16X32(uint x, uint y, uint fc, uint bc, uchar *s)
//{
// uchar i,j,temp;
// Lcd_SetRegion(x,y,x+16-1,y+32-1);
// for(i=0;i<64;i++) //16*32西文字符点阵64个8位字节
// {
// temp=s[i];
// for(j=0;j<8;j++)
// {
// if(temp&0x80)LCD_WrDat_16Bit(fc);
// else if (fc!=bc) LCD_WrDat_16Bit(bc);
// temp<<=1;
// }
// }
//
//}
/*
void LCD_A_Char24X48(uint x, uint y, uint fc, uint bc, uchar *s)
{
uchar i,j,temp;
Lcd_SetRegion(x,y,x+24-1,y+48-1);
for(i=0;i<144;i++) //24*48西文字符点阵144个8位字节
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
tft144.png
(67.52 KB, 下载次数: 90)
下载附件
2020-4-29 22:12 上传
所有资料51hei提供下载:
TFT144液晶屏.zip
(2.56 KB, 下载次数: 26)
2020-4-29 22:11 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1