① 51單片機LCD顯示
你說的是那類液晶!1602?這類基於HD44780液晶晶元,操作上都大同小異
都是通過寫入命令,讀出數據,界面數據變化時通過不斷的刷新變化,忙閑查詢可以用命令,也可以用延時函數5ms就可以了,下面是個簡單的例子
想要復雜點的可以去我網路空間裡面找
#include<AT89X51.H>
sbit lcden=P3^4;
sbit lcdrs=P3^5;
unsigned char code tab[]="libinQQ490251568";
unsigned char code tab1[]="51binyf.com" ;
void delay(unsigned char z);
void into();
void xie_com(unsigned char com);
void xie_date(unsigned char date);
void main()
{ unsigned char num;
into();
for(num=0;num<16;num++)
{
xie_date(tab[num]);
delay(20);
}
xie_com(0x40+0x80+0x03); //使數據指針指到第二行 起始,+1----16可以使它在屏幕的任意位置顯示,
for(num=0;num<11;num++)
{
xie_date(tab1[num]);
delay(20);
}
while(1);
}
void delay(unsigned char z)
{unsigned i,k;
for(i=z;i>0;i--)
for(k=110;k>0;k--);
}
void into()// 此函數中寫入一些顯示前的准備數據
{
lcden=0;//寫指令之前為E為低電平,
xie_com(0x38);//8為數據傳送,顯示2行,5x7點陣顯示字元
xie_com(0x0f);//開顯示,有游標且閃動 0f游標閃爍,0e游標不閃爍
xie_com(0x06);//寫入一個字元後游標+1,指針也+1。字元整屏不移動
xie_com(0x80);//數據指針初始化即在第一行最左邊,後面每個字元地址就加一,第二行首地址是C0
xie_com(0x01);//清屏指令
}
void xie_com(unsigned char com) //寫指令函數
{
lcdrs=0; //RS=0寫指令
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void xie_date(unsigned char date) //寫數據 函數
{
lcdrs=1;//RS=1寫數據
P0=date;
delay(5);
lcden=1;//資料上說E端有一個高脈沖時候執行一次指令,實際應用中他內部
delay(5);//檢測到E端有一個電平跳變就可以執行指令
lcden=0;
}
② 8051單片機怎麼驅動TFT液晶屏
8051不能直接驅動TFT液晶屏,需要增加一塊TFT驅動晶元,當然也可以用FPGA或CPLD自己設計一塊TFT驅動晶元。
③ 單片機用串口液晶顯示屏(漢顯)
一、OCM12864液晶顯示模塊概述
1. OCM12864液晶顯示模塊是128×64點陣型液晶顯示模塊,可顯示各種字元及圖形,可與CPU直接介面,具有8位標准數據匯流排、6條控制線及電源線。採用KS0107控制IC。
2. 外觀尺寸:113×65×11mm(ocm12864-1), 93×70×10mm(ocm12864-2)
78×70×10mm(ocm12864-3),
3. 視域尺寸:73.4×38.8mm(ocm12864-1) 70.7×38mm(ocm12864-2),
64×44mm(ocm12864-3)
4. 重量:大約 g
l 補充說明:外觀尺寸可根據用戶的要求進行適度調整。
二、最大工作范圍
1、邏輯工作電壓(Vcc):4.5~5.5V
2、電源地(GND):0V
3、LCD驅動電壓(Vee):0~-10V
4、輸入電壓:Vee~Vdd
5、工作溫度(Ta):0~55℃(常溫) / -20~70℃(寬溫)
6、保存溫度(Tstg):-10~65℃
三、電氣特性(測試條件 Ta=25,Vdd=5.0+/-0.25V)
1、輸入高電平(Vih):3.5Vmin
2、輸入低電平(Vil):0.55Vmax
3、輸出高電平(Voh):3.75Vmin
4、輸出低電平(Vol):1.0Vmax
5、工作電流:2.0mAmax
四、介面說明
1. 12864-1,12864-2介面說明表
管腳號 管腳 電平 說明
1 VSS 0V 邏輯電源地。
2 VDD 5.0V 邏輯電源正。
3 V0 LCD驅動電壓,應用時在VEE與V0之間加一2K可調電阻。
4 D/I H/L 數據\指令選擇:高電平:數據D0-D7將送入顯示RAM;
低電平:數據D0-D7將送入指令寄存器執行。
5 R/W H/L 讀\寫選擇: 高電平:讀數據;低電平:寫數據。
6 E H.H/L 讀寫使能,高電平有效,下降沿鎖定數據。
7 DB0 H/L 數據輸入輸出引腳。
8 DB1 H/L 數據輸入輸出引腳。
9 DB2 H/L 數據輸入輸出引腳。
10 DB3 H/L 數據輸入輸出引腳。
11 DB4 H/L 數據輸入輸出引腳。
12 DB5 H/L 數據輸入輸出引腳。
13 DB6 H/L 數據輸入輸出引腳。
14 DB7 H/L 數據輸入輸出引腳。
15 CS1 H/L 片選擇信號,低電平時選擇前64列。
16 CS2 H 片選擇信號,低電平時選擇後64列。
17 RET L 復位信號,低電平有效。
18 VEE -10V LCD驅動電源。
19 BL AC 背光電源,LED+。
20 BL AC 背光電源,LED-。
2. 12864-3A介面說明表
管腳號 管腳 電平 說明
1 CSA H/L 片選擇信號,低電平時選擇前64列。
2 CSB H 片選擇信號,低電平時選擇後64列。
3 GND 0V 邏輯電源地。
4 VCC 5V 邏輯電源。
5 VEE -10V LCD驅動電源。
6 D/I H/L 數據\指令選擇,高電平:數據D0-D7將送入顯示RAM;
低電平:數據D0-D7將送入指令寄存器執行。
7 R/W H/L 讀\寫選擇,高電平:讀數據;低電平:寫數據。
8 E H.H/L 讀寫使能,高電平有效,下降沿鎖定數據。
9 DB0 H/L 數據輸入輸出引腳。
10 DB1 H/L 數據輸入輸出引腳。
11 DB2 H/L 數據輸入輸出引腳。
12 DB3 H/L 數據輸入輸出引腳。
13 DB4 H/L 數據輸入輸出引腳。
14 DB5 H/L 數據輸入輸出引腳。
15 DB6 H/L 數據輸入輸出引腳。
16 DB7 H/L 數據輸入輸出引腳。
3. 12864-3B介面說明表
管腳號 管腳 電平 說明
1 CSA H/L 片選擇信號,低電平時選擇前64列。
2 CSB H 片選擇信號,低電平時選擇後64列。
3 GND 0V 邏輯電源地。
4 VCC 5V 邏輯電源。
5 V0 -10V LCD驅動電源。
6 D/I H/L 數據\指令選擇,高電平:數據D0-D7將送入顯示RAM;
低電平:數據D0-D7將送入指令寄存器執行。
7 R/W H/L 讀\寫選擇,高電平:讀數據;低電平:寫數據。
8 E H.H/L 讀寫使能,高電平有效,下降沿鎖定數據。
9 DB0 H/L 數據輸入輸出引腳。
10 DB1 H/L 數據輸入輸出引腳。
11 DB2 H/L 數據輸入輸出引腳。
12 DB3 H/L 數據輸入輸出引腳。
13 DB4 H/L 數據輸入輸出引腳。
14 DB5 H/L 數據輸入輸出引腳。
15 DB6 H/L 數據輸入輸出引腳。
16 DB7 H/L 數據輸入輸出引腳。
17 RET L 復位信號,低電平有效。
18 VEE -10V LCD驅動電源。
19 BL AC 背光電源,LED+。
20 BL AC 背光電源,LED-。
五、指令描述
1、顯示開/關設置
CODE: R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
L L L L H H H H H H/L
功能:設置屏幕顯示開/關。
DB0=H,開顯示;DB0=L,關顯示。不影響顯示RAM(DD RAM)中的內容。
2、設置顯示起始行
CODE: R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
L L H H 行地址(0~63)
功能:執行該命令後,所設置的行將顯示在屏幕的第一行。顯示起始行是由Z地址計數器控制的,該命令自動將A0-A5位地址送入Z地址計數器,起始地址可以是0-63范圍內任意一行。Z地址計數器具有循環計數功能,用於顯示行掃描同步,當掃描完一行後自動加一。
3、設置頁地址
CODE: R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
L L H L H H H 頁地址(0~7)
功能:執行本指令後,下面的讀寫操作將在指定頁內,直到重新設置。頁地址就是DD RAM 的行地址,頁地址存儲在X地址計數器中,A2-A0可表示8頁,讀寫數據對頁地址沒有影響,除本指令可改變頁地址外,復位信號(RST)可把頁地址計數器內容清零。
DD RAM地址映像表
Y 地址
0 1 2 ……………………… 61 62 63
DB0
∫ PAGE0
DB7 X=0
DB0
∫ PAGE1
DB7 X=1
∷
∷
∷
∷
DB0
∫ PAGE6
DB7 X=7
DB0
∫ PAGE7
DB7 X=8
4、設置列地址
CODE: R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
L L L H 列地址(0~63)
功能: DD RAM 的列地址存儲在Y地址計數器中,讀寫數據對列地址有影響,在對DD RAM進行讀寫操作後,Y地址自動加一。
5、狀態檢測
CODE: R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
H L BF L ON/OFF RST L L L L
功能:讀忙信號標志位(BF)、復位標志位(RST)以及顯示狀態位(ON/OFF)。
BF=H:內部正在執行操作; BF=L:空閑狀態。
RST=H:正處於復位初始化狀態; RST=L:正常狀態。
ON/OFF=H:表示顯示關閉; ON/OFF=L:表示顯示開。
6、寫顯示數據
CODE: R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
L H D7 D6 D5 D4 D3 D2 D1 D0
功能:寫數據到DD RAM,DD RAM是存儲圖形顯示數據的,寫指令執行後Y地址計數器自動加1。D7-D0位數據為1表示顯示,數據為0表示不顯示。寫數據到DD RAM前,要先執行「設置頁地址」及「設置列地址」命令。
7、讀顯示數據
CODE: RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
H H D7 D6 D5 D4 D3 D2 D1 D0
功能:從DD RAM讀數據,讀指令執行後Y地址計數器自動加1。從DD RAM讀數據前要先執行「設置頁地址」 及「設置列地址」命令。
六、介面時序
1.寫操作時序
時序1
4. 讀操作時序
************************************************************
串列連接操作程序
新勢力單片機網站:[url]www.xinshili.net[/url]
對外函數列表:
void LCD_Init( void ); //初始化
void LCD_PutStr(unsigned char row,unsigned char col,unsigned char *puts); //寫入文本
void LCD_PutBMP(unsigned char *puts); //寫入圖片
void LCD_ClearTXT( void ); //清除文本
void LCD_ClearBMP( void ); //清除圖片
***********************************************************/
#define LCDNOP() NOP();NOP()
//以下配置IO管腳
//=========================================================
#define LCDSIDPORT PORTE //SID PORT
#define LCDSIDDDR DDRE //SID DDR
#define LCDSIDPIN PINE //SID PINE
#define LCDSIDIO 2 //SID IO
#define LCDSCLKPORT PORTE
#define LCDSCLKDDR DDRE
#define LCDSCLKPIN PINE
#define LCDSCLKIO 3
#define LCDRSTPORT PORTE
#define LCDRSTDDR DDRE
#define LCDRSTPIN PINE
#define LCDRSTIO 4
//========================================================
#define OUTLCDSCLK() LCDSCLKDDR |= 1 << LCDSCLKIO //設置輸出
#define SETLCDSCLK() LCDSCLKPORT |= 1 << LCDSCLKIO //拉高
#define CLRLCDSCLK() LCDSCLKPORT &= ~(1 << LCDSCLKIO) //拉低
#define OUTLCDSID() LCDSIDDDR |= 1 << LCDSIDIO //設置輸出
#define INLCDSID() LCDSIDDDR &= ~(1 << LCDSIDIO); LCDSIDPORT |= 1 << LCDSIDIO //設置輸入
#define SETLCDSID() LCDSIDPORT |= 1 << LCDSIDIO //拉高
#define CLRLCDSID() LCDSIDPORT &= ~(1 << LCDSIDIO) //拉低
#define GETLCDSID() ((LCDSIDPIN & (1 << LCDSIDIO)) >> LCDSIDIO) //讀IO值
const unsigned char AC_TABLE[]={
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87, //第一行漢字位置
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97, //第二行漢字位置
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, //第三行漢字位置
0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f, //第四行漢字位置
};
//串口發送一個位元組
void LCD_WriteByte(unsigned char Dbyte)
{
unsigned char i;
OUTLCDSCLK();
OUTLCDSID();
for(i=0;i<8;i++)
{
CLRLCDSCLK();
Dbyte=Dbyte<<1; //左移一位
if (SREG & 1)
SETLCDSID();
else
CLRLCDSID();
SETLCDSCLK();
LCDNOP();
CLRLCDSCLK();
}
return;
}
//串口接收一個位元組
//僅在讀取數據的時候用到
//而讀出的數據是一次只能讀出4bit的
unsigned char LCD_ReadByte(void)
{
unsigned char i,temp1,temp2;
temp1=temp2=0;
OUTLCDSCLK();
INLCDSID();
for(i=0;i<8;i++)
{
temp1=temp1<<1;
CLRLCDSCLK();
LCDNOP();
SETLCDSCLK();
LCDNOP();
CLRLCDSCLK();
if(GETLCDSID()) temp1++;
}
for(i=0;i<8;i++)
{
temp2=temp2<<1;
CLRLCDSCLK();
LCDNOP();
SETLCDSCLK();
LCDNOP();
CLRLCDSCLK();
if(GETLCDSID()) temp2++;
}
return ((0xf0&temp1)+(0x0f&temp2));
}
void LCD_CheckBusy( void )
{
LCDNOP();
return;
do LCD_WriteByte(0xfc); //11111,RW(1),RS(0),0
while(0x80&LCD_ReadByte()); //BF(.7)=1 Busy
}
void LCD_WriteCmd( unsigned char Cbyte )
{
//LCD_CS = 1;
LCD_CheckBusy();
LCD_WriteByte(0xf8); //11111,RW(0),RS(0),0
LCD_WriteByte(0xf0&Cbyte); //高四位
LCD_WriteByte(0xf0&Cbyte<<4);//低四位(先執行<<)
//LCD_CS = 0;
}
void LCD_WriteData( unsigned char Dbyte )
{
//LCD_CS = 1;
LCD_CheckBusy();
LCD_WriteByte(0xfa); //11111,RW(0),RS(1),0
LCD_WriteByte(0xf0&Dbyte); //高四位
LCD_WriteByte(0xf0&Dbyte<<4);//低四位(先執行<<)
//LCD_CS = 0;
}
unsigned char LCD_ReadData( void )
{
LCD_CheckBusy();
LCD_WriteByte(0xfe); //11111,RW(1),RS(1),0
return LCD_ReadByte();
}
void LCD_Init( void )
{
LCD_WriteCmd(0x30); //8BitMCU,基本指令集合
LCD_WriteCmd(0x03); //AC歸0,不改變DDRAM內容
LCD_WriteCmd(0x0C); //顯示ON,游標OFF,游標位反白OFF
LCD_WriteCmd(0x01); //清屏,AC歸0
LCD_WriteCmd(0x06); //寫入時,游標右移動
}
//文本區清RAM函數
void LCD_ClearTXT( void )
{
unsigned char i;
LCD_WriteCmd(0x30); //8BitMCU,基本指令集合
LCD_WriteCmd(0x80); //AC歸起始位
for(i=0;i<64;i++)
LCD_WriteData(0x20);
}
//圖形區和文本區顯示在兩個不同的RAM區
//圖形區清RAM函數
void LCD_ClearBMP( void )
{
unsigned char i,j;
LCD_WriteCmd(0x34); //8Bit擴充指令集,即使是36H也要寫兩次
LCD_WriteCmd(0x36); //繪圖ON,基本指令集裡面36H不能開繪圖
for(i=0;i<32;i++) //12864實際為256x32
{
LCD_WriteCmd(0x80|i); //行位置
LCD_WriteCmd(0x80); //列位置
for(j=0;j<32;j++) //256/8=32 byte
LCD_WriteData(0);
}
}
void LCD_PutStr(unsigned char row,unsigned char col,unsigned char *puts)
{
LCD_WriteCmd(0x30); //8BitMCU,基本指令集合
LCD_WriteCmd(AC_TABLE[8*row+col]); //起始位置
while(*puts != '\0') //判斷字元串是否顯示完畢
{
if(col==8) //判斷換行
{ //若不判斷,則自動從第一行到第三行
col=0;
row++;
}
if(row==4) row=0; //一屏顯示完,回到屏左上角
LCD_WriteCmd(AC_TABLE[8*row+col]);
LCD_WriteData(*puts); //一個漢字要寫兩次
puts++;
if (*puts != '\0')
{
LCD_WriteData(*puts);
puts++;
}else{break;}
col++;
}
}
void LCD_PutBMP(unsigned char *puts)
{
unsigned int x=0;
unsigned char i,j;
LCD_WriteCmd(0x34); //8Bit擴充指令集,即使是36H也要寫兩次
LCD_WriteCmd(0x36); //繪圖ON,基本指令集裡面36H不能開繪圖
for(i=0;i<32;i++) //12864實際為256x32
{
LCD_WriteCmd(0x80|i); //行位置
LCD_WriteCmd(0x80); //列位置
for(j=0;j<32;j++) //256/8=32 byte
{ //列位置每行自動增加
LCD_WriteData(puts[x]);
x++;
}
}
}
本文轉自:新勢力單片機 [url]http://www.XinShiLi.net[/url]
④ 51單片機能是2.4寸的TFT彩屏整屏顯示嗎
完全可以的,理論上可以驅動任何尺寸的彩屏,只是速度很慢,越大越慢。
點陣液晶屏是用一個位元組驅動8個像素點,一個點是一位,所以只有亮和滅,兩種狀態。
彩色液晶屏是用兩個位元組驅動一個像素點,所以一個點可以有65536種顏色。
彩色液晶屏大都是16位的位寬,你用51單片機8位驅動必須要買帶鎖存器的液晶屏。
一般來講用51單片機從SD卡中讀出一張彩圖,寫到TFT彩屏裡面需要接近十秒的時間。
所以說驅動彩屏,還是用ARM7這個級別的MCU比較靠譜。
⑤ 基於51系列單片機的LED顯示屏開發技術的內容簡介
在簡要講述普通51單片機和C51編程的基礎上,《基於51系列單片機的LED顯示屏開發技術》還對具有40MHz工作頻率、單指令周期的增強型51單片機——VRS51L3074及其在LED顯示屏控制系統中的應用做了詳細介紹。《基於51系列單片機的LED顯示屏開發技術》是國內第一本針對鐵電單片機的書籍,為初學鐵電單片機或是希望了解該單片機的讀者提供了較為全面的資料和開發常式。此外還對通用LED顯示屏上位機控制軟體設計、LED顯示屏控制系統常用時鍾晶元DS1302、溫度感測器DS18B20、二極體等模塊控製程序和硬體電路進行分析和講解。這些內容是作者近幾年來部分開發工作的實踐總結,有些是根據實際生產產品的提煉和推廣。
《基於51系列單片機的LED顯示屏開發技術》內容豐富實用,圖文並茂,適用於從事單片機開發和應用以及從事LED控制系統的研發人員和工程技術人員使用,也可以作為單片機愛好者、鐵電單片機初學者,以及使用C51編程的研究生、本科生、專科生畢業設計的參考用書。
⑥ 本人想用51單片機做一個電子相冊不知道用什麼顯示屏
可以選用帶驅動的彩色LCD屏,解析度寬判擾至少320X240。由沖虛於圖像數據較多,單片機慎旦至少需要擴展32kB外部存儲器。
⑦ 單片機顯示器都有哪些
nokia5110,2.4寸TFT彩屏,12864,1602,數碼管,我就用過這么幾個,都是 51單片機用的。
不過一般用的都是都三個。做一個項目要看成本的,用於顯示什麼,用什麼顯示器最省錢來決定選用的顯示器
⑧ 你好,我是看你的回答所以來請教你的,stc51單片機都能驅動什麼液晶,彩色的可以嗎
你好,STC51單片機是可以驅動彩色液晶的。
是要是MPU(CPU)接族襪雹口的液晶 都可以用單片機來驅動,包括I80並口8BIT 和16BIT ,或是SPI 串口 3線串口和4線串口,這中介面都是可以驅動的。
其他需要控制器的LCD 和一些高速接兆帆口的液晶 單片機是好喚驅動不了的,比如RGB介面 MIPI 介面 EDP介面 等等
網上有很多案例常式可以參考,可以上wlklcd.1688.com,會有提供