日韩中文字幕免费-日韩中文字幕免费在线观看-日韩中文字幕免费观看-日韩中文字幕免费版-国产精品自拍第一页-国产精品自在自线免费观看

當(dāng)前位置:主頁 > 資訊中心 > 技術(shù)知識 >

12864液晶串行如何顯示?

發(fā)布時(shí)間:2017-09-19


 
12864液晶串行顯示
 
 
這一篇只是簡單的介紹了 12864液晶 串行顯示一些文字不能顯示圖片,先看一下 12864 的引腳。
12864液晶引腳

 
     從上面的引腳說明我們可以看出,如果要想串行顯示只需要將 4、5、6 引腳接到單片機(jī)就行了,同時(shí)還需要將 1、15、20 引腳接地,17、19 引腳接電源,注意 17 號引腳所說的低電平有效,并不是將 17 號引腳接地復(fù)位功能就可以使用了,而是需要軟件置低,為了節(jié)省 IO 口要將 17 號引腳置高,置高說明 17 號引腳復(fù)位功能不使用。 3 號引腳接一 10k可調(diào)變阻以調(diào)節(jié)12864液晶 的 亮 度 。

具 體 接 法 可 參 考 下 圖 :

12864液晶接線
 
 
以下是程序:
 
/********************************************************************
 
串行12864液晶顯示
 
*引腳說明:
 
CS P1.0
 
SID P1.1
 
SCLK P1.2
 
PSB P1.3
 
RST P1.4
 
Ps:因?yàn)镻SB和RST我們已經(jīng)在電路中連接好了,所以這兩個(gè)引腳沒有使用 *********************************************************************** /
 
#include <msp430g2553.h>
 
#define uchar unsigned char
 
#define uint unsigned int
 
/********************************************************************
 
* 名稱 : delay()
 
* 功能 : 延時(shí),延時(shí)時(shí)間為 100us * t。這是通過軟件延時(shí),有一定誤差。
 
* 輸入 : 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;
 
}
 
}
 
這個(gè)函數(shù)的功能就是按照12864傳送數(shù)據(jù)的時(shí)序圖將數(shù)據(jù)一位一位的傳送給12864,這
 
部 分 程 序 需 要 參 照 12864 的 時(shí) 序 圖 來
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.

 
 
 

上一篇:TFT-LCD的漢字字符以及圖片的顯示說明效果

下一篇:工業(yè)LCD液晶顯示屏的運(yùn)作原理是怎么樣的?

杭州精顯科技有限公司
?
主站蜘蛛池模板: 国产在线毛片 | 久久久久久久久a免费 | 久久国产成人午夜aⅴ影院 久久国产成人亚洲精品影院老金 | 国产精品美女一级在线观看 | 91香蕉国产线观看免 | 国产成人精品区在线观看 | 高清不卡毛片 | 国产91成人 | 国产一区二区三区四区在线 | 久久久久久久久久久大尺度免费视频 | 韩国美女高清爽快一级毛片 | 大陆60老妇xxxxhd | 看真人视频一级毛片 | 国产dvd毛片在线视频 | 亚洲精品第一区二区在线 | 久久99精品这里精品3 | 国产一区不卡 | 欧美一级片免费看 | 亚洲一级视频在线观看 | 97国内免费久久久久久久久久 | 第一色区| 成人欧美一区在线视频在线观看 | 日韩一区二区中文字幕 | 久久精品久久精品 | 9191精品国产观看 | 中文一级国产特级毛片视频 | 国产成人最新毛片基地 | 手机毛片在线 | 免费观看毛片的网站 | 国产精品合集一区二区 | 成人a毛片在线看免费全部播放 | 正能量www正能量免费网站 | 精品 日韩 国产 欧美在线观看 | 亚洲综合无码一区二区 | 久久久这里只有精品加勒比 | 日韩国产三级 | 免费91最新地址永久入口 | 亚洲三级成人 | 加勒比一本大道香蕉在线视频 | 91精品一区二区三区在线 | 欧美区一区 |