AT89S51單片機驅動3.5寸TFT模塊

2020-11-25 電子工程專輯

前市場流行的3.5寸屏基本上都是只內置了驅動器,而不帶控制器,這樣給用戶的使用造成了一些難度。基本上很多朋友在用彩屏時選擇一些帶LCD控制器的ARM7或ARM9去開發,對於不會ARM開發的朋友來說,只使用普通MCU,這樣可以選擇的3.5寸TFT模塊,就很難找到了。

本文就是基於市場上一款比較使用的3.5寸TFT模塊編寫的,用戶只需要幫該TFT模塊當作普通的單色液晶的開發思路來使用,就可以很容易去編程。

一、 硬體選擇

1、 MCU:AT89S51

2、 開發編譯環境:KeilC51

3、 3.5寸TFT模塊型號:MzT35C1


二、 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

預留有ADS7846的SPI時鐘輸入


S_SDO

預留有ADS7846的SPI數據輸出


S_SDI

預留有ADS7846的SPI數據輸入


S_INT

預留有ADS7846的INT信號


S_BUSY

預留有ADS7846的BUSY信號


3、操作時序(8位並行Intel 8080總線)

MzT35C1模塊支持intel8080總線,總線的最高速度可達20MHz(當然總線的速度能否達到最高接口速度,還與用戶的總線布線、線長等有關),也就是說,如果控制MCU速度足夠快的話,是可以支持視頻的顯示的。

注意:MzT35C1模塊的總線接口是8位的,也就意味著對顯存的數據操作時,需要連續進行兩次操作方可完成,先傳高字節再傳低字節;但對於寄存器的操作(寫入寄存器地址,即A0為低時的寫入操作)8位的操作方可。


三、MzT35C1與51硬體接口連接圖

本例程使用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);


}

為了方便大家更好的學習,您還可以關注暢學電子和EDA的公眾號,每天推送相關知識,希望能對你的學習有所幫助!

相關焦點

  • AT89S51引腳圖,AT89S51單片機引腳說明及管腳定義
    AT89S51引腳圖,AT89S51單片機引腳說明及管腳定義AT89S51引腳圖AT89S51是一個低功耗,高性能CMOS 8位單片機,片內含4k Bytes ISP(In-system programmable)的可反覆擦寫1000次的Flash只讀程序存儲器,器件採用ATMEL公司的高密度、非易失性存儲技術製造
  • AT89S51單片機的復位操作及復位電路設計
    打開APP AT89S51單片機的復位操作及復位電路設計 發表於 2019-04-26 16:24:25 復位是單片機的初始化操作,只需給AT89S51的復位引腳RST加上大於2個機器周期(即24個時鐘振蕩周期)的高電平就可使AT89S51復位。
  • 基於51單片機的TFT液晶顯示設計
    用51單片機驅動液晶模塊通常都使用1602和12864等極為簡單的液晶模塊, 這裡介紹用51單片機驅動QVGA解析度的TFT液晶模塊, 以實現彩色和更為複雜的內容顯示的方法。同時, 本文還將使用DS1302晶片和DS18B20晶片來實現在液晶屏上顯示實時時鐘和溫度。
  • S12單片機模塊應用及程序下載調試
    常用接口模塊及外部應用     PWM(Pulse Width Modulate)模塊:PWM脈寬調製波是一種可用程序來控制波形佔空比、周期、相位的波形。它在電機驅動、D/A變換等場合有著廣泛的應用。本次大獎賽使用的電機驅動晶片為MC33886,其輸入信號即為一路PWM信號。MC33886根據PWM信號的周期和佔空比來控制電機的轉向和速度。
  • 51單片機的無線供電模塊設計
    打開APP 51單片機的無線供電模塊設計 發表於 2019-04-22 15:01:04 (2)功率輸出電路 由於輸出驅動信號電壓、電流、頻率較大,需要一定輸出功率驅動線圈,因此,最後需要功率輸出電路。可以採用分立大功率電晶體搭建輸出電路,也可以使用電機驅動橋式電路集成模塊。選擇時需要注意電路的頻率響應應該大於20kHz,輸出功率大於2W。
  • 基於AT89S52單片機的簡易數字示波器設計
    輸入信號先經阻抗變換電路後進入程控放大電路,根據需要對信號進行放大(衰減)處理,然後信號再進入信號調理電路進行電平調整成為符合A/D轉換要求的0~5 V電壓。之後輸出的模擬信號經過高速A/D轉換器AD0809實時採樣變成數位訊號,經過AT89S52單片機後儲存在半導體存儲器E2PROM中。單片機從存儲器中讀出信號  進行運算處理,將波形顯示在LCD液晶屏上。
  • 嵌入式開發:STM32 FSMC接口驅動TFT-LCD設計
    本文提出了一種能直接驅動數字液晶屏的設計方案,方案先介紹了TFT數字彩屏的工作原理,利用STM32處理器的FSMC接口設計的硬體電路和軟體程序均能對顯示控制晶片進行有效的控制。在實際應用中顯示清晰流暢,並且CPU有足夠的時間來處理用戶程序。該方案能成功應用在電腦橫機的人機界面顯示中,且其硬體電路結構簡單、控制方式靈活、對於其他型號的接口晶片也能提供參考。
  • STM32 FSMC接口驅動TFT-LCD設計
    目前驅動TFT彩屏的方案有很多,可以用底端單片機驅動一個終端類型的液晶模組,這種模組價格比較貴,當然用起來還是很方便的。  只要單片機通過串口或並行口向TFT發送幾個字節的命令,就能在屏幕上顯示你需要的效果。本設計利用STM32 的FSMC 總線直接驅動TFT 數字彩屏。
  • 2.3寸1位7段數碼管公司
    2.3寸1位7段數碼管公司              if (t0==60)              { {{if data.vipType==4}} {{/if}} 2、數碼管動態顯示接口是單片機中應用為廣泛的一種顯示方式之一,動態驅動是將所有數碼管的8個顯示筆劃"a,b,c,d,e,f,g,dp"的同名端連在一起,另外為每個數碼管的公共極COM增加位選通控制電路,位選通由各自獨立的I/O線控制,當單片機輸出字形碼時,所有數碼管都接收到相同的字形碼,但究竟是那個數碼管會顯示出字形,取決於單片機對位選通COM
  • 基於AT89S32單片機的高精度稱重系統的研製
    利用單片機和傳感器實現對重量的高精度測量,提高了生產的自動化程度,成本低廉,應用十分廣泛。  1 系統組成  系統由單片機系統、稱重傳感器、A/D轉換、通信接口和語音提示模塊組成,硬體結構框圖如圖1。  1.3 高精度A/D轉換  稱重傳感器的輸出為mV級的微弱信號,傳統的測量方法是在A/D轉換之前加一級高精度的放大器,電路複雜。AD7714是美國Analog Devices(AD)公司推出的24-位ADC家族AD771X系列中的新品,適用於低頻、高精度工業級轉換。
  • 單片機驅動電機電路
    打開APP 單片機驅動電機電路 發表於 2019-10-25 14:10:21
  • 用51單片機實現5英寸TFT-LCD的遙控系統
    在這些產品中,應用單片機能大大地提高其智能性、易用性,給人們的生活帶來舒適和方便。本文採用美國Atmel公司的單片機AT89C2051和AT89C51,為5英寸的TFT-LCD設計了遙控系統。該系統主要由遙控發射、遙控接受、TFT-LCD驅動電路3部分組成,可以遙控TFT-LCD的電源開關、亮度、色飽和度、對比度和音量,並具有擴展功能。1 硬體設計硬體總體設計框圖如圖1所示。
  • stm32開發板開發筆記(5)-2.4寸26萬色TFT觸控螢幕模塊
    因為產品要用到顯示屏和觸摸,就買了一個2.4寸的彩色觸控螢幕模塊。大概的意思就是ILI9325是一顆26萬色片上soc的TFT液晶屏驅動晶片,支持的解析度為240RGB*320,172800個字節的顯存。下面來說說說這幾個數字 的含義。
  • 數顯溫度計設計電路圖大全(DS18B20/89S51單片機/液晶)
    根據LM35的輸出特性可知,當溫度在0—150℃之間變換時,其輸出端對應的電壓為0—150V,此電壓經電位器W3分壓後送到3位半數字顯示表頭的檢測信號輸入端.在輸入端輸入的電壓為150V時,通過調節電位器使顯示的數值為150.0,經調整後數顯表頭顯示的數值就是實測的溫度值。
  • 51單片機精確控制步進電機(有TB6600驅動)
    設備:51單片機開發板、TB6600驅動器、57BYG250B步進電機(二相)、直流開關電源。直流電源給驅動器供電,單片機給驅動器輸入脈衝,驅動器驅動步進電機。程序使用定時器中斷精確控制電機轉動(不考慮失步)。比如我採用16倍細分,則需給驅動輸入3200個脈衝,驅動才會使電機轉一圈,下面程序中1秒發送200個脈衝,則相應的電機16秒轉一圈。
  • tft屏幕優缺點_tft屏幕傷眼嗎
    tft屏幕優缺點   tft(thin film transistor)即薄膜場效應電晶體,屬於有源矩陣液晶顯示器中的一種。一般tft的反應時間比較快,約80毫秒,而且可視角度大,一般可達到130度左右,主要運用在高端產品。所謂薄膜場效應電晶體,是指液晶顯示器上的每一液晶象素點都是由集成在其後的薄膜電晶體來驅動。從而可以做 到高速度、高亮度、高對比度顯示屏幕信息。
  • 美國微芯科技推出首款可驅動192段LCD的80引腳可編程單片機
    新款LCD PIC單片機系列包括全球首款28引腳LCD單片機,適用於需要嵌入式控制的簡單、成本效益高的顯示應用,以及首款可驅動192段LCD的80引腳可編程單片機,適用於觸控螢幕和分段式LCD顯示屏應用。這批Microchip LCD PIC系列單片機的新成員在該系列原有的引腳數目和性能水平選擇廣泛的基礎上,增加了產品功能,能滿足多種LCD段顯示屏的不同需求。
  • STM32之光敏電阻傳感器模塊的使用
    本實驗配合2.2寸TFT液晶屏顯示,當光弱的時候顯示「昏暗」,光強時顯示「明亮」。本文引用地址:http://www.eepw.com.cn/article/201807/384517.htm實驗使用的是下圖所示的3線光敏電阻傳感器模塊,用途:光線亮度檢測,光線亮度傳感器,智能小車尋光模塊。
  • 單片機控制繼電器驅動電路圖原理分析
    首先看看繼電器的驅動這是典型的繼電器驅動電路圖,這樣的圖在網絡上隨處可以搜到,並且標準教科書上一般也是這樣的電路圖為什麼要明白這個圖的原理?單片機是一個弱電器件,一般情況下它們大都工作在5V甚至更低.驅動電流在mA級以下.而要把它用於一些大功率場合,比如控制電動機,顯然是不行的.所以,就要有一個環節來銜接,這個環節就是所謂的"功率驅動".繼電器驅動就是一個典型的、簡單的功率驅動環節.在這裡,繼電器驅動含有兩個意思:一是對繼電器進行驅動,因為繼電器本身對於單片機來說就是一個功率器件;還有就是繼電器去驅動其他負載