導航:首頁 > 操作系統 > 單片機顯示屏顯示純色

單片機顯示屏顯示純色

發布時間:2023-05-22 02:06:52

1. 普中科技的單片機開發箱,插上12864液晶只顯示白色背光,什麼原因啊,如何解決

試驗箱的單片機里要下載相應的程序,否則液晶什麼都不會顯示

2. 單片機用串口液晶顯示屏(漢顯)

一、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]

3. 51單片機控制LED顯示屏的問題

亮度很低是什麼意思?是指所有字都顯示出來了,但是所有字都看不清且屏幕很亮,還是屏幕很暗導致所有字看不清?前者很有可能是單片機輸出電壓的問題,在電阻上找原因,可以在針腳處增加上拉電阻試一下;後者則可能是整塊板子的電壓分配不均,試著將其它地方的大電阻適當減小試一下。如果還是解決不了問題,請拍照片或者把電路圖發我看一下~這種情況程序出問題的可能性很小~就這些

4. 51單片機從TFT彩屏上讀取某一點顏色的函數方法

這和TFT液晶屏型號有關,還和你採用何種接線方式有關
如以下是ILI9341控制的單片機讀方法,它採用16位數據線,所以一次讀出16位,一個點本來要讀3次,但時序要求讀4次
R = *(__IO uint16_t *)Bank1_LCD_D實際上就是 給液晶屏一個讀信號,然後單片機從匯流排上獲得數據,這是STM32單片機以8088匯流排的時序操作方式,因此只是一條指令,由於51單片機是8位數據線,因此這一句要分好多語句才能完成
uint16_t LCD_RD_data(void) //連續讀4次
{
uint16_t R=0, G=0, B=0 ;
R = *(__IO uint16_t *)Bank1_LCD_D; /*FIRST READ OUT DUMMY DATA*/
R = *(__IO uint16_t *)Bank1_LCD_D; /*READ OUT RED DATA */
B = *(__IO uint16_t *)Bank1_LCD_D; /*READ OUT BLACK DATA*/
G = *(__IO uint16_t *)Bank1_LCD_D; /*READ OUT GREEN DATA*/
return (((R>>11)<<11) | ((G>>10)<<5) | (B>>11));
}
uint16_t LCD_GetPoint(uint16_t x , uint16_t y)//完整的讀程序
{
uint16_t temp;
LCD_SetCursor(x, y);
LCD_ILI9341_CMD(0x2e); /* 讀數據 的命令*/
temp=LCD_RD_data();
return (temp);
}

5. 關於STC51單片機對3.2寸彩屏的驅動疑問

1,16位色圖片有好幾種規格。比如RGB565 556等,是不是搞錯了?可以通過顯示幾種純色判斷一下;
2,我覺得是轉換規則演算法的問題,轉換之後不能適配你的屏;
3,4,我覺得都印證了以上一點,打開轉換後的數據仔細分析一下,換一種演算法看看。可以推薦你看一下ucGUI顏色轉換部分的代碼

6. 單片機控制液晶屏顯示

解決方法:1.單片機更換為5V的單片機;2.液晶更換為3.3V的液晶;3.將單片機管腳高電平抬高至5V。
原因說明:我們現在所用的絕大多數的可編程晶元(這裡麵包含了你的單片機和液晶驅動晶元)均為CMOS晶元。5V供電的液晶屏,內部搭載了5V的CMOS驅動晶元來讓液晶屏顯示東西。CMOS器件有這樣一個規定:高電平,即數字信號「1」的電壓范圍是3.5V-5V,低電平,即數字信號「0」的電壓范圍是0-1.5V。在這兩個電壓范圍之外的,CMOS晶元將無法判別是高電平還是低電平。
所以,3.3V的單片機在輸出低電平時可以被液晶CMOS晶元識別,而輸出高電平時,單片機管腳為3.3V(單片機的工作電壓3.3V,無法輸出更高的電壓)這不在CMOS期間的電平識別范圍內,無法判別信號是0還是1。所以,液晶工作不正常。

閱讀全文

與單片機顯示屏顯示純色相關的資料

熱點內容
程序員的工作是重復性的嗎 瀏覽:63
照片怎麼轉換成pdf 瀏覽:131
女生學編程好嗎 瀏覽:240
目前絕地求生怎麼看伺服器地址大全 瀏覽:825
論人類不平等的起源pdf 瀏覽:436
壓縮機螺桿加工 瀏覽:368
怎麼把網站伺服器設置在境外 瀏覽:162
單片機編程取反 瀏覽:897
51單片機課程設計課題 瀏覽:900
手機淘寶登錄怎麼加密碼 瀏覽:486
linux快捷方式圖標 瀏覽:38
陽光車險的app叫什麼名字 瀏覽:462
購買單片機的器件時需要給商家啥 瀏覽:535
並行編譯技術的發展 瀏覽:550
阿里雲伺服器安裝管理 瀏覽:551
java手機開發教程 瀏覽:675
我的世界怎麼刪除伺服器數據 瀏覽:672
linux內存子系統 瀏覽:973
加密思維幣 瀏覽:691
魅族訪客文件夾 瀏覽:53