/**********************************************************
* *
* 彩屏驱动程序 *
* *
**********************************************************/
#include <reg52.h>
#include <intrins.h>
#include "LCD.h"
#include "picture.h"
#include "char.h"
#include "chinese.h"
uint colors[]=
{
0xf800,0x07e0,0x001f,0xffe0,0x0000,0x07ff,0x8010,0xffff
};
#define MAIN_Fosc 12118400L //定义主时钟, 模拟串口和和延时会自动适应。5~35MHZ
/**********************************************************
延时子函数
**********************************************************/
void delay_ms(uint ms)
{
unsigned int i;
do{
i = MAIN_Fosc / 14000;
while(--i) ; //14T per loop
}while(--ms);
}
/**********************************************************
写8位数据子函数
**********************************************************/
void WriteDAT(uchar value) // color data
{
// LCD_CS = 0;
LCD_RS = 1;
LCD_DATA_L = value;
LCD_WR = 0;
LCD_WR = 1;
// LCD_CS = 1;
}
/**********************************************************
写8位命令子函数
**********************************************************/
void WriteCOM(uchar value) // color data
{
// LCD_CS = 0;
LCD_RS = 0;
LCD_DATA_L = value;
LCD_WR = 0;
LCD_WR = 1;
// LCD_CS = 1;
}
/**********************************************************
设置显示窗口子函数
**********************************************************/
void LCD_SetRamAddr(uint xStart, uint xEnd, uint yStart, uint yEnd)
{
WriteCOM(0x2a); //行
WriteDAT(xStart>>8); //XS15-XS8
WriteDAT(xStart); //XS7-XS0 (X start address)
WriteDAT(xEnd>>8); //XE15-XE8
WriteDAT(xEnd); //XE7-XE0 (X end address)
WriteCOM(0x2b); //列 row address set (RASET)
WriteDAT(yStart>>8); //YS15-YS8
WriteDAT(yStart); //YS7-YS0 (Y start address)
WriteDAT(yEnd>>8); //YE15-YE8
WriteDAT(yEnd); //YE7-YE0 (Y end address)
WriteCOM(0x29);
WriteCOM(0x2c); //display on 显示打开命令
}
/**********************************************************/
void LCD_init(void)
{ //请看数据手册的命令部分 了解其个命令的功能
LCD_RST=1;
delay_ms(50);
LCD_RST=0;
delay_ms(50);
LCD_RST=1;
delay_ms(100);
LCD_CS=0; //
WriteCOM(0x11);
delay_ms(120);
WriteCOM(0xF0); //software reset软件复位
WriteDAT(0x5A);
WriteDAT(0x5A);
WriteCOM(0xFC); //software reset软件复位
WriteDAT(0x5A);
WriteDAT(0x5A);
WriteCOM(0x35);
WriteCOM(0x36);
WriteDAT(0x48);
WriteCOM(0x3A);
WriteDAT(0x55);
WriteCOM(0x53);
WriteDAT(0x00);
WriteCOM(0x55);
WriteDAT(0x00);
WriteCOM(0xF2);
WriteDAT(0x28);
WriteDAT(0x59);
WriteDAT(0x7f);
WriteDAT(0x08);
WriteDAT(0x00);
WriteDAT(0x00);
WriteDAT(0x48);
WriteDAT(0x04);
WriteDAT(0x07);
WriteDAT(0x01);
WriteDAT(0x00);
WriteDAT(0x00);
WriteDAT(0x59);
WriteDAT(0x08);
WriteDAT(0x08);
WriteCOM(0xF7);
WriteDAT(0x00);
WriteDAT(0x00);
WriteDAT(0x00);
WriteDAT(0x00);
WriteCOM(0xF8);
WriteDAT(0x33);
WriteDAT(0x00);
WriteCOM(0xF6);
WriteDAT(0x01);
WriteDAT(0x01);
WriteDAT(0x07);
WriteDAT(0x00);
WriteDAT(0x01);
WriteDAT(0x0c);
WriteDAT(0x01);
WriteDAT(0x0c);
WriteDAT(0x03);
WriteCOM(0xF5);
WriteDAT(0x00);
WriteDAT(0x22);
WriteDAT(0x47);
WriteDAT(0x00);
WriteDAT(0x00);
WriteDAT(0x00);
WriteDAT(0x00);
WriteDAT(0x00);
WriteDAT(0x0d);
WriteDAT(0x0d);
WriteCOM(0xF4);
WriteDAT(0x07);
WriteDAT(0x00);
WriteDAT(0x00);
WriteDAT(0x00);
WriteDAT(0x22);
WriteDAT(0x64);
WriteDAT(0x01);
WriteDAT(0x02);
WriteDAT(0x2a);
WriteDAT(0x00);
WriteDAT(0x06);
delay_ms(10);
//gama
WriteCOM(0xF9);
WriteDAT(0x04);
WriteCOM(0xFA);
WriteDAT(0x14);
WriteDAT(0x16);
WriteDAT(0x02);
WriteDAT(0x1b);
WriteDAT(0x30);
WriteDAT(0x39);
WriteDAT(0x2e);
WriteDAT(0x29);
WriteDAT(0x22);
WriteDAT(0x1f);
WriteDAT(0x25);
WriteCOM(0xFB);
WriteDAT(0x0a);
WriteDAT(0x00);
WriteDAT(0x2b);
WriteDAT(0x26);
WriteDAT(0x25);
WriteDAT(0x25);
WriteDAT(0x19);
WriteDAT(0x3a);
WriteDAT(0x29);
WriteDAT(0x1a);
WriteDAT(0x02);
WriteCOM(0xF9);
WriteDAT(0x02);
WriteCOM(0xFA);
WriteDAT(0x14);
WriteDAT(0x16);
WriteDAT(0x02);
WriteDAT(0x1b);
WriteDAT(0x30);
WriteDAT(0x39);
WriteDAT(0x2e);
WriteDAT(0x29);
WriteDAT(0x22);
WriteDAT(0x1f);
WriteDAT(0x25);
WriteCOM(0xFB);
WriteDAT(0x0a);
WriteDAT(0x00);
WriteDAT(0x2b);
WriteDAT(0x26);
WriteDAT(0x25);
WriteDAT(0x25);
WriteDAT(0x19);
WriteDAT(0x3a);
WriteDAT(0x29);
WriteDAT(0x1a);
WriteDAT(0x02);
WriteCOM(0xF9);
WriteDAT(0x01);
WriteCOM(0xFA);
WriteDAT(0x14);
WriteDAT(0x16);
WriteDAT(0x02);
WriteDAT(0x1b);
WriteDAT(0x30);
WriteDAT(0x39);
WriteDAT(0x2e);
WriteDAT(0x29);
WriteDAT(0x22);
WriteDAT(0x1f);
WriteDAT(0x25);
WriteCOM(0xFB);
WriteDAT(0x0a);
WriteDAT(0x00);
WriteDAT(0x2b);
WriteDAT(0x26);
WriteDAT(0x25);
WriteDAT(0x25);
WriteDAT(0x19);
WriteDAT(0x3a);
WriteDAT(0x29);
WriteDAT(0x1a);
WriteDAT(0x02);
WriteCOM(0xFC);
WriteDAT(0xa5);
WriteDAT(0xa5);
delay_ms(120);
WriteCOM(0x29); // display on
WriteCOM(0x2c);
//LCD_CS=1;
}
void LCD_Writer_Bus(char VH,char VL)
{
LCD_DATA_H=VH;
LCD_DATA_L = VL;
LCD_WR=0;
LCD_WR=1;
}
void LCD_Writer_DATA(char VH,char VL)
{
LCD_RS=1;
LCD_Writer_Bus(VH,VL);
LCD_RS = 0;
}
/**********************************************************
清屏子函数
**********************************************************/
void LCD_clear(uchar n)
{
Paint(colors[n]>>8,colors[n]);
}
void Paint(char VH,char VL)
{
int i,j;
//LCD_CS=0;
LCD_SetRamAddr(0,239,0,319);
for(i=0;i<320;i++){
for(j=0;j<240;j++){
LCD_Writer_DATA(VH,VL);
}
}
//LCD_CS=1;
}
/**********************************************************
图片显示子函数
**********************************************************/
void pic_play(uint Start_X, uint End_X,uint Start_Y,uint End_Y)
{
uint m;
// LCD_CS = 0;
LCD_SetRamAddr(Start_X,End_X-1,Start_Y,End_Y-1) ; //设置地址
for(m=0; m<(7128/2); m++)
{
LCD_Writer_DATA(Image_pic[m*2+1],Image_pic[m*2]);
}
//LCD_CS = 1;
}
#define LCD_SIZE_X 240
#define LCD_SIZE_Y 320
/**********************************************************
字符显示子函数
**********************************************************/
void LCD_ShowChar(uchar x,uchar y,uint For_color,uint Bk_color, char ch)
{
uchar temp;
uchar pos,t;
uchar CHAR_W,CHAR_H;
CHAR_W = 8; //8*16
CHAR_H = 16;
if(x>(LCD_SIZE_X-CHAR_W)||y>(LCD_SIZE_Y-CHAR_H))
return;
LCD_SetRamAddr(x, x+CHAR_W-1, y,y+CHAR_H-1); //设置显示的坐标
ch = ch-32; //按照ASCII编码顺序的到相应字母的编码
for(pos=0;pos<CHAR_H;pos++)
{
temp= Font8x16[ch][pos];
for(t=0;t<CHAR_W;t++)
{
if(temp&0x80)
{
LCD_Writer_DATA(For_color>>8,For_color);
} //textcolor //字体颜色
else
{
LCD_Writer_DATA(Bk_color>>8,Bk_color) ;
}
temp<<=1;
}
}
}
/**********************************************************
显示字符串子函数
x,y:起点坐标
*p:字符串起始地址
**********************************************************/
void LCD_ShowString(uchar x,uchar y,uint For_color,uint Bk_color,char *p)
{
while(*p!='\0')
{
LCD_ShowChar(x,y,F
2.4寸16位tft S6D04H0 三星LMS241GF31
需积分: 9 138 浏览量
2022-11-03
22:34:58
上传
评论
收藏 600KB ZIP 举报
yaoboy
- 粉丝: 4
- 资源: 7
最新资源
- STM32F429单片机DCMI驱动OV5640摄像头拍摄图像直接显示在5.0英寸LCD屏上软件例程源码.zip
- halcon多种条码识别例子
- 基于python+stk11的多智能体强化学习卫星调度实验
- 识别和读取盲文上的文字
- 基于 python的强化学习算法-多智能体强化学习(离散化动作)
- 利用python深度强化学习的方法实现多智能体间离散无交流的障碍避免
- 分布式锁与信号量分布式锁与信号量.txt
- 自然语言处理大作业基于词典的分词方法的Python实现源码+文档说明+实验报告.zip
- black-vue-guidebook-main.zip
- snap7 PLC 通信库的 Python 包装器
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈