?? 12864ymy.c
字號:
#include <msp430x14x.h>
#define LCD12864DIR P1DIR
#define LCD12864OUT P1OUT
#define LCD12864IN P1IN
#define LCD12864_CS BIT0
#define LCD12864_SID BIT2
#define LCD12864_SCLK BIT4
#define LCD12864_CS_LOW LCD12864OUT &= ~LCD12864_CS
#define LCD12864_CS_HIGH LCD12864OUT |= LCD12864_CS
#define LCD12864_SCLK_LOW LCD12864OUT &= ~LCD12864_SCLK
#define LCD12864_SCLK_HIGH LCD12864OUT |= LCD12864_SCLK
#define LCD12864_SID_LOW LCD12864OUT &= ~LCD12864_SID
#define LCD12864_SID_HIGH LCD12864OUT |= LCD12864_SID
#define LCD12864_SID_READ (12864IN & 12864_SID)
#define uchar unsigned char
#define uint unsigned int
//====================================================================
//函數(shù)聲明
void Delay(uint ms); //延時子程序
//void Write_cmd(cmd); //寫指令子程序
//void Write_data(uchar _data); //寫數(shù)據(jù)子程序
//void Position(uchar pos); //定位函數(shù)
//void Display(uchar address); //
//void Init_12864();
//void LcdSetXY(uchar x, uchar y, uchar *pt);
void W_1byte(uchar RW, uchar RS, uchar W_data);
void Write_8bits(uint W_bits);
void LCD_Init(void);
//====================================================================
//常量字符數(shù)組
uchar mynew1[]={"7920_3wires_demo"};
uchar mynew2[]={"Create by:朱江"};
uchar mynew3[]={"E_mail:ntzhf100@"};
uchar mynew4[]={"163.com"};
/********************************************************************
********************************************************************/
void main(void)
{
unsigned int itemp;
WDTCTL = WDTPW + WDTHOLD; //停止系統(tǒng)軟件看門狗
P5DIR |= BIT4; //P54為輸出
P5SEL |= BIT4; //P54第二功能:MCLK輸出
BCSCTL1 &= ~XT2OFF; //XT2 = HF-XTAL
do {
IFG1 &= ~OFIFG; //清除OSCFault標志位
for (itemp=0xFF;itemp>0;itemp--); //延時等待晶振
} while ((IFG1 & OFIFG)); //OSCFault標志位始終有效?
BCSCTL2 |= SELM_2 ;//+DIVM_3; //MCLK = XT2
uchar i = 0;
LCD12864DIR = 0XFF;
LCD12864_CS_LOW; //CS = 0;
LCD12864_SCLK_LOW; //SCLK = 0;
LCD12864_SID_LOW; //SID = 0;
LCD_Init();
while(1)
{
_NOP();//nop;
_NOP();//nop;
W_1byte(0,0,0x80);
_NOP();//nop;
for(i=0;mynew1[i]!='\0';i++)
{
W_1byte(0,1,mynew1[i]);
}
W_1byte(0,0,0x90);
for(i=0;mynew2[i]!='\0';i++)
{
W_1byte(0,1,mynew2[i]);
}
W_1byte(0,0,0x88);
for(i=0;mynew3[i]!='\0';i++)
{
W_1byte(0,1,mynew3[i]);
}
W_1byte(0,0,0x98);
for(i=0;mynew4[i]!='\0';i++)
{
W_1byte(0,1,mynew4[i]);
}
_NOP();//nop;
}
}
/******************************************************************/
void LCD_Init(void)
{
uchar cmd;
cmd=0x30; //功能設(shè)置 8位數(shù)據(jù),基本指令
W_1byte(0,0,cmd);
Delay(16);
cmd=0x0C; //顯示狀態(tài) ON,游標OFF,反白OFF
W_1byte(0,0,cmd); //寫指令
Delay(16);
cmd=0x01; //清除顯示
W_1byte(0,0,cmd); //寫指令
Delay(16);
cmd=0x02; //地址歸位
W_1byte(0,0,cmd); //寫指令
Delay(16);
cmd=0x80; //設(shè)置DDRAM地址
W_1byte(0,0,cmd); //寫指令
Delay(16); //延時
}
/*******************************************************************
函 數(shù) 名:W_1byte
入口參數(shù):RW、RS、W_data
出口參數(shù):無
建立日期:2007年3月3日
修改日期:
函數(shù)作用:寫一個字節(jié)的數(shù)據(jù)到12864液晶,包括指令和數(shù)據(jù)
說 明:RW=1,從液晶讀數(shù)據(jù)到MCU;RW=0,寫一個數(shù)據(jù)到液晶;
(一般RW都設(shè)為0,即只向液晶寫數(shù)據(jù),不讀數(shù)據(jù))
RS=1,寫入的是數(shù)據(jù);RS=0,寫入的是指令;
一般模式:RW=0,RS=1;寫數(shù)據(jù)
RW=0,RS=0;寫指令
********************************************************************/
void W_1byte(uchar RW, uchar RS, uchar W_data)
{
uint H_data,L_data,S_ID = 0xf8; //11111RWRS0
if(RW == 0)
{
S_ID &= ~0x04;
}
else //if(RW==1)
{
S_ID |= 0X04;
}
if(RS == 0)
{
S_ID &= ~0x02;
}
else //if(RS==1)
{
S_ID |= 0X02;
}
H_data = W_data;
H_data &= 0xf0; //屏蔽低4位的數(shù)據(jù)
L_data = W_data; //xxxx0000格式
L_data &= 0x0f; //屏蔽高4位的數(shù)據(jù)
L_data <<= 4; //xxxx0000格式
LCD12864_CS_HIGH; //CS = 1;
Write_8bits(S_ID); //發(fā)送S_ID
Write_8bits(H_data); //發(fā)送H_data
Write_8bits(L_data); //發(fā)送L_data
LCD12864_CS_LOW; //CS = 0;
}
/********************************************************************
函 數(shù) 名:Write_8bits
入口參數(shù):W_bits
出口參數(shù):無
建立日期:2007年3月3日
修改日期:
函數(shù)作用:負責(zé)串行輸出8個bit位
說 明:
********************************************************************/
void Write_8bits(uint W_bits)
{
uint i,Temp_data;
for(i=0; i<8; i++)
{
Temp_data = W_bits;
Temp_data <<= i;
if((Temp_data&0x80)==0) //bit7 is zero
{
LCD12864_SID_LOW; //SID = 0;
_NOP(); //nop;
LCD12864_SCLK_HIGH; //SCLK = 1;
_NOP(); //nop;
_NOP(); //nop;
LCD12864_SCLK_LOW; //SCLK = 0;
_NOP(); //nop;
LCD12864_SID_LOW; //SID = 0;
}
else //bit7 is one
{
LCD12864_SID_HIGH; //SID = 1;
_NOP(); //nop;
LCD12864_SCLK_HIGH; //SCLK = 1;
_NOP(); //nop;
_NOP(); //nop;
LCD12864_SCLK_LOW; //SCLK = 0;
_NOP(); //nop;
LCD12864_SID_LOW; //SID = 0;
}
}
}
/********************************************************************
函 數(shù) 名:Delay
入口參數(shù):ms
出口參數(shù):無
建立日期:2007年3月3日
修改日期:
函數(shù)作用:毫秒級的延時程序,當(dāng)晶振為12Mhz時,xtal=12;
說 明:
********************************************************************/
void Delay(uint ms)
{
uint i;
while(ms--)
{
for(i=1;i<(uint)(8*143-2);i++)
;
}
}
//===================================================================*/
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -