原创 普通51单片机驱动3.5寸TFT的应用实例

2008-12-26 10:49 2639 2 3 分类: MCU/ 嵌入式
目前市场流行的3.5寸屏基本上都是只内置了驱动器,而不带控制器,这样给用户的使用造成了一些难度。基本上很多朋友在用彩屏时选择一些带LCD控制器的ARM7ARM9去开发,对于不会ARM开发的朋友来说,只使用普通MCU,这样可以选择的3.5TFT模块,就很难找到了。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


     本文就是基于市场上一款比较使用的3.5TFT模块编写的,用户只需要帮该TFT模块当作普通的单色液晶的开发思路来使用,就可以很容易去编程。


一、 硬件选择


1、   MCUAT89S51


2、   开发编译环境:Keil C51


3、   3.5TFT模块型号:MzT<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />35C1


二、 TFT模块基本性能:


1、基本参数


模块结构:  内置控制器


屏幕大小:  3.5英寸


屏幕分辩率:320*240


屏幕颜色数:65536色(16位真彩色)


工作电压:  3.3V/5V可选


总线结构:  Intel8080


总线宽度:  8Bit


背光形式:  LED;可指令控制,0-127可调


连接方式:  排针插座


触摸屏:标准配置不带触摸屏;模组留有触摸屏芯片焊盘和触摸屏接口


2、接口引脚说明




接口引脚



VCC


模块供电电源输入(一般无特殊要求为5V


D0~D7


8位数据总线


CS


片选(低电平有效)


RST


Reset复位(低电平复位)


A0


控制寄存器/数据寄存器选择(低电平选择控制寄存器)


WE


写信号(低电平有效)


RD


读信号(低电平有效)


GND


接地


S_CS


预留有ADS7846的片选


S_SCK


预留有ADS7846SPI时钟输入


S_SDO


预留有ADS7846SPI数据输出


S_SDI


预留有ADS7846SPI数据输入


S_INT


预留有ADS7846INT信号


S_BUSY


预留有ADS7846BUSY信号


3、操作时序(8位并行Intel 8080总线)


      MzT35C1模块支持intel8080总线,总线的最高速度可达20MHz(当然总线的速度能否达到最高接口速度,还与用户的总线布线、线长等有关),也就是说,如果控制MCU速度足够快的话,是可以支持视频的显示的。


点击看大图


注意MzT35C1模块的总线接口是8位的,也就意味着对显存的数据操作时,需要连续进行两次操作方可完成,先传高字节再传低字节;但对于寄存器的操作(写入寄存器地址,即A0为低时的写入操作)8位的操作方可。


三、MzT35C151硬件接口连接图


     本例程使用GPIO来模拟总线时序。上图的模块供电为5V的模块,而模块的端口电平为3.3V的,所以在所有的51端口与模块间的连接串入了一个100欧的电阻,有关MCS51的其它电路不在图中画出,请用户具体参考其它的开发板文档进行了解。而图中的MzT35C1模块的相关引脚请以实物为准,图中仅示意对应的名称的端口,请用户在参考使用时注意。


点击看大图


三、 底层驱动代码编写方法


1、   端口配置


#i nclude "REG52.h"


#i nclude "intrins.h"                         //包含此头文件可直接操作内核的寄存器以及一些定义好的宏


#define LCD_Ctrl_GPIO()             //无定义


#define LCD_Ctrl_Out()                LCD_CS_SET();LCD_RD_SET();LCD_RW_SET();


#define LCD_Ctrl_Set(n)               //无定义


#define LCD_Ctrl_Clr(n)               //无定义


sbit LCD_CS = P2^6;


#define LCD_CS_SET()                 LCD_CS = 1


#define LCD_CS_CLR()                LCD_CS = 0


sbit LCD_RE = P3^5;


#define LCD_RE_SET()                 LCD_RE = 1


#define LCD_RE_CLR()                LCD_RE = 0


sbit LCD_A0 = P2^5;


#define LCD_A0_SET()                 LCD_A0 = 1


#define LCD_A0_CLR()                LCD_A0 = 0


sbit LCD_RW = P3^6;


#define LCD_RW_SET()                LCD_RW = 1


#define LCD_RW_CLR()               LCD_RW = 0


sbit LCD_RD = P3^7;


#define LCD_RD_SET()                LCD_RD = 1


#define LCD_RD_CLR()               LCD_RD = 0


#define LCD_Data_GPIO()           //51的端口是双向的,无需特意规定方向,故无定义                 


#define LCD_Data_Out()               //51的端口是双向的,无需特意规定方向,故无定义


#define LCD_Data_In()                  P0 = 0xff            //51的端口要读数据前需要先输出0xff


#define LCD_Data_BUS_Clr()      //无定义


#define LCD_Data_BUS_Set(n)    P0 = n


#define LCD_Data_Read()             P0    


2、写数据和指令操作


//==============================================


// 函数: void LCD_DataWrite(unsigned int Data)


// 描述: 写一个字(16bit)的显示数据至LCD中的显示缓冲RAM当中


// 参数: Data 写入的数据


//=============================================


#defineLCD_DataWrite(n) LCD_A0_SET();LCD_CS_CLR();LCD_Data_BUS_Clr();LCD_Data_BUS_Set((unsigned char)(n>>8));\


LCD_RW_CLR();LCD_RW_SET();LCD_Data_BUS_Clr();LCD_Data_BUS_Set((unsigned char)n);LCD_RW_CLR();\ LCD_RW_SET();LCD_CS_SET()        


//=====================================================


// 函数: void LCD_RegWrite(unsigned char Addr,unsigned int Command)


// 描述: 写一个字节的数据至LCD中的控制寄存器当中


// 参数: Addr                         要写入的寄存器的地址,低八位有效(byte


//         Command                  写入的数据


//=====================================================


#define LCD_RegWrite(n)   


LCD_A0_CLR();LCD_CS_CLR();LCD_Data_BUS_Clr();LCD_Data_BUS_Set(n);\


LCD_RW_CLR();LCD_RW_SET();LCD_CS_SET()


2、   读数据操作


//=============================================


// 函数: LCDBYTE LCD_DataRead(void)


// 描述: LCD中的显示缓冲RAM当中读一个字节的显示数据


// 参数:  


// 返回: 读出的数据,


// 备注: Mz 通用版LCD驱动程序 标准子函数


//===========================================


LCDBYTE LCD_DataRead(void)


{


    LCDBYTE Read_Data;


         LCD_Data_In();


         LCD_A0_SET();


         LCD_CS_CLR();


         LCD_RD_CLR();


         LCD_RD_SET();


         LCD_RD_CLR();


         LCD_RD_SET();             //前面的操作是要完成一次完整的空读操作后方能读取到数据


                                                  //如果用户需要连续读取显存,侧仅需要在第一次读数据时作一


                                                  //次空读操作即可


         LCD_RD_CLR();


         Read_Data = LCD_Data_Read();


         Read_Data = Read_Data<<8;


         LCD_RD_SET();


         LCD_RD_CLR();


         Read_Data |= LCD_Data_Read();


         LCD_RD_SET();


         LCD_CS_SET();


         LCD_Data_Out();


         return Read_Data;


}


3、   初始化TFT操作


void LCD_Init(void)


{


//       FLASH *Init_String;


         //LCD驱动所使用到的端口的初始化


         LCD_PortInit();


         //根据LCD显示的配置,设置LCD的数据地址指针自动增加特性


         //end


         LCD_RE_CLR();


         TimeDelay(5);


         LCD_RE_SET();


         LCD_RegWrite(0x03);


         LCD_DataWrite((1<<7)| (0x60<<0));    //设置背光控制使能、背光亮度等级为60(0~127)


         LCD_RegWrite(0x04);                                      //写系统寄存器


//       LCD_DataWrite((0<<7)|                                   //当前显示页


//                                   (0<<6)       |                                     //当前读写页设置


//                                   (1<<0));                                 //显示开关


         LCD_DataWrite(MzT35_Ctrl_Reg);


/*      Init_String = Initial_Tab;


         while(Init_String!=0xffff)


         {


                   LCD_RegWrite(0x05);LCD_DataWrite(*Init_String++);


                   LCD_RegWrite(0x06);LCD_DataWrite(*Init_String++);


         }*/


         LCD_Fill(LCD_INITIAL_COLOR);


}


       本文章只列出底层主要的函数,其中涉及的相关函数没有一一列出,请用户查看附件中的编程说明和驱动例程代码(附详细的注释)。


附件下载: 《MzT35C1 TFT模块51驱动程序源代码》

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户519273 2008-12-27 22:36

好东西 学习
相关推荐阅读
用户179236 2009-07-23 10:47
[产品推荐]加强型串行中文字库液晶模块--MzLH03-12864
■特色功能:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />1、自带6X10、8X1...
用户179236 2009-03-09 13:02
[原创]《铭正同创TFT液晶彩色图像显示方法 V1.0》
                                       --版权声明--    本书版权归北京铭正同创科技有限公司所有,并保留对此文件修改的权利且不另行通知。    北京铭正同创...
用户179236 2009-03-09 13:01
[原创书籍]《点阵LCD驱动显控原理 V2.0》
点阵LCD驱动显控原理 V2.0》                                                   --版权声明--    本书版权归北京铭正同创科技有限公司所有,...
用户179236 2009-03-05 15:01
[新品速递]--仅售40元的串行SPI带字库LCD模块
MzLH04-12864 串行SPI字库LCD模块价格政策:零售、批量一律仅售40元优惠时间:2009年2月11日~2009年4月30日购买方式:1)登录北京铭正同创网站 http://www.mzd...
用户179236 2008-12-25 11:55
普通单片机IO口就可驱动的内置控制器3.5寸TFT模块
特色功能:· 模块内置TFT控制器和驱动器;· 提供外部8位Intel 8080总线接口,方便MCU连接控制,易编程和移植扩展;· 内部控制器包含显示缓存,无需外部显示缓存;· 模块预留触摸屏接口,同...
EE直播间
更多
我要评论
1
2
关闭 站长推荐上一条 /3 下一条