產(chǎn)品動態(tài)
- 群創(chuàng)12.1寸 G121ICE-LM2 對比度1000:1 常黑
- G270QAN01.4 友達(dá)27寸 400 cd/m2 分辨率25
- G190ETT01.1 友達(dá)19寸 分辨率1280*1024 常白
- 18.5寸G185HAT01.1 友達(dá) 對比度1000:1 分辨
- 友達(dá)G101EAT02.6 10.1寸 分辨率1280*800 對比
- G156HAN02.303 友達(dá)15.6寸 對比度1000:1 霧面
- G057QAN01.1 友達(dá)5.7寸 常黑顯示 1000:1 分
- G238HAN04.0 友達(dá)23.8寸 常黑顯示 分辨率
- 友達(dá)8.4寸 G084SAN01.0 常黑顯示 分辨率
- G057QAN01.0 友達(dá) 5.7寸 500 cd/m2 常黑顯示

全國統(tǒng)一服務(wù)熱線:
15382323032
客服QQ:3234659108
手機(jī):15382323032
地址:浙江省杭州市余杭區(qū)五常街道西溪軟件園金牛座B2座4層4118-4119
12864液晶串行如何顯示?
文章出處:原創(chuàng) 人氣:發(fā)表時間:2017-09-19
從上面的引腳說明我們可以看出,如果要想串行顯示只需要將 4、5、6 引腳接到單片機(jī)就行了,同時還需要將 1、15、20 引腳接地,17、19 引腳接電源,注意 17 號引腳所說的低電平有效,并不是將 17 號引腳接地復(fù)位功能就可以使用了,而是需要軟件置低,為了節(jié)省 IO 口要將 17 號引腳置高,置高說明 17 號引腳復(fù)位功能不使用。 3 號引腳接一 10k可調(diào)變阻以調(diào)節(jié)12864液晶 的 亮 度 。
具 體 接 法 可 參 考 下 圖 :

以下是程序:
/********************************************************************
串行12864液晶顯示
*引腳說明:
CS P1.0
SID P1.1
SCLK P1.2
PSB P1.3
RST P1.4
Ps:因?yàn)镻SB和RST我們已經(jīng)在電路中連接好了,所以這兩個引腳沒有使用 *********************************************************************** /
#include <msp430g2553.h>
#define uchar unsigned char
#define uint unsigned int
/********************************************************************
* 名稱 : delay()
* 功能 : 延時,延時時間為 100us * t。這是通過軟件延時,有一定誤差。
* 輸入 : t
* 輸出 : 無
***********************************************************************
/
void delay(unsigned int t)
{
unsigned int i,j;
for(i=0; i<t; i++)
for(j=0; j<10; j++);
}
/********************************************************************
* 名稱 : sendbyte()
* 功能 : 按照液晶的串口通信協(xié)議,發(fā)送數(shù)據(jù)
* 輸入 : zdata
* 輸出 : 無
***********************************************************************
/
void sendbyte(unsigned char zdata)
{
unsigned int i; for(i=0; i<8; i++)
{
if((zdata << i) & 0x80)
{
P1OUT |= BIT1; //SID = 1;
}
else
{
P1OUT &= ~BIT1;//SID = 0;
}
P1OUT &= ~BIT2;//SCLK = 0; P1OUT |= BIT2;//SCLK = 1;
}
}
/********************************************************************
* 名稱 : write_com()
* 功能 : 寫串口指令
* 輸入 : cmdcode
* 輸出 : 無
**********************************************************************/
void write_com(unsigned char cmdcode)
{
P1OUT |= BIT0;//CS = 1;
sendbyte(0xf8); //告訴12864接下來傳送指令 sendbyte(cmdcode & 0xf0); sendbyte((cmdcode << 4) & 0xf0);
delay(2);
}
/********************************************************************
* 名稱 : write_data()
* 功能 : 寫串口指令
* 輸入 : cmdcode
* 輸出 : 無
***********************************************************************
/
void write_data(unsigned char Dispdata)
{
P1OUT |= BIT0;//CS = 1;
sendbyte(0xfa); //告訴12864接下來傳送數(shù)據(jù) sendbyte(Dispdata & 0xf0); sendbyte((Dispdata << 4) & 0xf0); delay(2);
}
/********************************************************************
* 名稱 : lcdinit()
* 功能 : 初始化函數(shù)
* 輸入 : cmdcode
* 輸出 : 無
***********************************************************************
/
void lcdinit()
{
/* P1OUT &= ~BIT4;//RST = 0; delay(100);
P1OUT |= BIT4;//RST = 1; 這一部分是LCD復(fù)位功能,我們已經(jīng)將復(fù)位引腳置高,所以復(fù)位功能不能使用了,如果要使用復(fù)位功能就將其接到單片機(jī)IO口再加上這段函數(shù)就行*/
delay(20000);
write_com(0x30); //基本指令操作
delay(50);
write_com(0x0c); //顯示開 關(guān)閉光標(biāo)
delay(50);
}
/********************************************************************
* 名稱 : hzkdis()
* 功能 : 顯示字符串
* 輸入 : *s
* 輸出 : 無
***********************************************************************
/
void hzkdis( char *s)
{
while(*s > 0)
{
write_data(*s);
s++;
delay(50);
}
}
/********************************************************************
* 名稱 : Test()
* 功能 : 顯示子函數(shù)
* 輸入 : 無
* 輸出 : 無
***********************************************************************
/
void Test()
{
write_com(0x03); //地址歸為 delay(50);
write_com(0x81); //顯示第一行hzkdis("二院科協(xié)");
write_com(0x91); //顯示第二行hzkdis("劉渠");
}
/********************************************************************
* 名稱 : Main()
* 功能 : 主函數(shù)
* 輸入 : 無
* 輸出 : 無
***********************************************************************
/
void main()
{
P1DIR |= BIT0 + BIT1 + BIT2 +BIT3 + BIT4; WDTCTL = WDTPW + WDTHOLD; //關(guān)閉看門狗
/* P1OUT &= ~BIT3; PSB = 0; 串并行選擇,如果要使用并行方式,只要置高
就行,我們已將PSB接地選擇了串行這句可以不要*/
delay(1);
lcdinit();
delay(10);
while(1)
{
Test();
delay(5000);
}
}
12864 程序的詳細(xì)分析:
void sendbyte(unsigned char zdata)
{
unsigned int i;
for(i=0; i<8; i++)
{
if((zdata << i) & 0x80)
{
P1OUT |= BIT1; //SID = 1;
}
else
{
P1OUT &= ~BIT1;//SID = 0;
}
P1OUT &= ~BIT2;//SCLK = 0;
P1OUT |= BIT2;//SCLK = 1;
}
}
這個函數(shù)的功能就是按照12864傳送數(shù)據(jù)的時序圖將數(shù)據(jù)一位一位的傳送給12864,這
部 分 程 序 需 要 參 照 12864 的 時 序 圖 來

if((zdata << i) & 0x80) 這是在判斷傳送過來的數(shù)據(jù) zdata 的每一位數(shù)據(jù)是 0
還是 1, 假設(shè) zadata 是 10101111 來分析一下, 那么就是 zdata 先左進(jìn) 0 還是
10101111 不變,然后與 0x80 進(jìn)行“與”運(yùn)算,0x80 就是 10000000, 10101111
& 10000000
————
10000000
“與”完之后為 1000000,為非 0,所以 P1OUT 輸出 1,然后 i++等于 1;zdata
左進(jìn) 1 為 01011110;再與 0x80 進(jìn)行“與”運(yùn)算,結(jié)果為 00000000,所以 P1OUT 輸
出為 0;與 0x80 進(jìn)行“與”運(yùn)算,因?yàn)?0x80 只有第一位是 1,其他都是 0,所以這樣就
可以不改變 zdata 的第一位數(shù)據(jù)而使其他位為 0,如果 zdata 第一位為 1“與”后結(jié)果
就是非零,就輸出 1,反之相反。
void write_com(unsigned char cmdcode)
{
P1OUT |= BIT0;//CS = 1;
sendbyte(0xf8); //告訴12864接下來傳送指令 sendbyte(cmdcode & 0xf0); sendbyte((cmdcode << 4) & 0xf0); delay(2);
}
傳送指令的函數(shù),P1OUT |= BIT0; 先使片選信號為高,接下來才能開始傳送數(shù)據(jù),
sendbyte(0xf8);0xf8可以從12864的使用手冊中查出來他是告訴12864接下來傳送的
是指令。然后把數(shù)據(jù)分兩次傳送過去。
Ps:本程序所使用單片機(jī)為 MSP430.
最新資訊
- 2025-05-27 寬溫型工業(yè)液晶屏的特點(diǎn)與適用環(huán)境
- 2025-05-22 觸摸與非觸摸長條屏的實(shí)用性能比較
- 2025-05-20 工業(yè)長條屏的基本結(jié)構(gòu)與技術(shù)特點(diǎn)解
- 2025-05-19 如何根據(jù)環(huán)境光照選擇工業(yè)液晶屏亮
- 2025-05-16 工業(yè)液晶屏接口技術(shù)解析:LVDS與HDM
- 2025-05-15 工業(yè)液晶屏在醫(yī)療設(shè)備中的應(yīng)用:手
- 2025-05-12 工業(yè)液晶屏的高分辨率與色彩還原能
- 2025-05-09 工業(yè)觸控屏在陽光環(huán)境下的可視性解
- 2025-05-08 工業(yè)液晶屏寬溫特性的應(yīng)用場景分析
- 2025-05-08 工業(yè)液晶屏寬溫特性的應(yīng)用場景分析