msp430g2553:雙線(xiàn)12864庫(kù)程序
掃描二維碼
隨時(shí)隨地手機(jī)看文章
(Display)msp430g2553:雙線(xiàn)12864庫(kù)程序
**************************************************************************************************
LCD12864.H
****************************************************************
LCD12864 2線(xiàn)程序
rs (CS) 已經(jīng)外接高電平
rw (SID) P2.0
en (SCLK) P2.1
PSB 已經(jīng)外接低電平
RST 已經(jīng)外接高電平
硬件電路,3號(hào)引腳接的10K電阻與地間的阻值一般在8.8k-9.5k
(一個(gè)電源+,兩根共地線(xiàn))
****************************************************************
#ifndef __LCD12864_H__
#define __LCD12864_H__
#include"msp430g2553.h"
********************************
引腳定義
********************************
#define SID_0 P2OUT &= ~BIT0
#define SID_1 P2OUT |= BIT0
#define SCLK_0 P2OUT &= ~BIT1
#define SCLK_1 P2OUT |= BIT1
******************************
命令字符定義
******************************
#define First_Line 0x80
#define Second_Line 0x90
#define Third_Line 0x88
#define Fourth_Line 0x98
************************************************************
函數(shù)定義
************************************************************
extern void LCD12864_Port_Init(void);
extern void LCD12864_write_one_byte(unsigned int byte);
extern void LCD12864_write_command(unsigned int com);
extern void LCD12864_write_data(unsigned int dat);
extern void LCD12864_Init(void);
extern void LCD12864_write_string(char adress,char *str);
#endif
**************************************************************************************************
**************************************************************************************************
LCD12864.C
#include"LCD12864.H"
****************************
端口初始化
****************************
void LCD12864_Port_Init(void)
{
P2DIR=BIT0+BIT1;
}
****************************************
傳送字節(jié)函數(shù):
byte型數(shù)據(jù),1:SID傳送一個(gè)高電平
0:SID傳送一個(gè)低電平
****************************************
void LCD12864_write_one_byte(unsigned int byte)
{
unsigned int i;
for(i=0;i<8;i++)
{
if( byte & 0x80 )
SID_1;
else
SID_0;
SCLK_1;
__delay_cycles(10);
SCLK_0;
byte<<=1;
__delay_cycles(10);
}
}
********************************************************************************
2線(xiàn)128*64數(shù)據(jù)傳送:
先判斷是傳送命令還是傳送數(shù)據(jù)
1.第一個(gè)字節(jié):前五個(gè)必須是高電平,對(duì)12864進(jìn)行雙線(xiàn)傳送初始化,
第六個(gè)電平是RW,第七個(gè)是RS,第八個(gè)必須是低電平0。
( 1 1 1 11 RW RS 0 )
(這是為了與8跟線(xiàn)的命令對(duì)應(yīng),數(shù)據(jù)都是通過(guò)SID數(shù)據(jù)線(xiàn)進(jìn)行傳輸,
CS始終是高電平)。
RWRSbyte
寫(xiě)命令:000xf8
寫(xiě)數(shù)據(jù):010xfa
讀忙:100xfc
讀數(shù)據(jù):110xfe
然后開(kāi)始傳送數(shù)據(jù)
2.第二個(gè)字節(jié):高四位是要傳送數(shù)據(jù)的高四位,低四位全為0.(D7 D6 D5 D4 0 0 0 0)
3.第三個(gè)字節(jié):高四位是要傳送數(shù)據(jù)的低四位,低四位全是0.(D3 D2 D1 D0 0 0 0 0)
數(shù)據(jù)*命令傳送完畢
********************************************************************************
******************************
寫(xiě)命令函數(shù)
******************************
void LCD12864_write_command(unsigned int com)
{
unsigned int com_init=0xf8;
unsigned int com_h,com_l;
com_h = com & 0xf0;
com_l = (com<<4) & 0xf0;
LCD12864_write_one_byte(com_init);
LCD12864_write_one_byte(com_h);
LCD12864_write_one_byte(com_l);
}
*****************************
寫(xiě)數(shù)據(jù)函數(shù)
*****************************
void LCD12864_write_data(unsigned int dat)
{
unsigned int dat_init=0xfa;
unsigned int dat_h,dat_l;
dat_h = dat & 0xf0;
dat_l = (dat<<4) & 0xf0;
LCD12864_write_one_byte(dat_init);
LCD12864_write_one_byte(dat_h);
LCD12864_write_one_byte(dat_l);
}
********************************************************************************
初始化函數(shù)(一些必須要設(shè)置的地方)
commandfunction
0x30基本指令集
0x01清屏
0x06傳送一個(gè)字符,光標(biāo)右移,AC+1,顯示不移動(dòng)
0x0c顯示開(kāi)
0x0f顯示開(kāi),游標(biāo)開(kāi),游標(biāo)閃動(dòng)
********************************************************************************
void LCD12864_Init(void)
{
LCD12864_write_command(0x30);
LCD12864_write_command(0x01);
LCD12864_write_command(0x06);
LCD12864_write_command(0x0f);
}
**************************************************
字符串傳送函數(shù)
設(shè)定字符串的首位置,然后對(duì)寫(xiě)入的字符串進(jìn)行顯示
**************************************************
void LCD12864_write_string(char adress,char *str)
{
__delay_cycles(1000);
LCD12864_write_command(adress);
while(*str!='