|
|
/* 1602液晶程序 */
#include<msp430x14x.h>
#define RS_1 P6OUT|=BIT3 //數(shù)據(jù)、命令選擇選擇端
#define RS_0 P6OUT&=~BIT3
#define RW_1 P6OUT|=BIT4 //讀寫選擇端
#define RW_0 P6OUT&=~BIT4
#define E_1 P6OUT|=BIT5 //使能信號(hào)
#define E_0 P6OUT&=~BIT5
#define P2 P2OUT //數(shù)據(jù),傳輸端口
unsigned char zi[]="ok";
/*-----------------------------設(shè)置主時(shí)鐘--------------------------------------------*/
void CLOCK_INIT()//設(shè)置主時(shí)鐘 MCLK=8M
{
unsigned int i;
BCSCTL1&=~XT2OFF;//開啟TX2振蕩器
do
{
IFG1 &=~ OFIFG;//清除振蕩器失效標(biāo)志位(晶體出錯(cuò)中斷標(biāo)志位。1時(shí)有中斷產(chǎn)生、0沒有)
for(i=0xff; i>0; i--);//至少等待 50 us
}
while((IFG1 & OFIFG) !=0 );//(IFG1 & OFIFG)==0時(shí) 中斷位關(guān)閉 則表達(dá)式為假 為假則退出
BCSCTL2 |= SELM1;//使MCLK = XI2 8MHZ 0x80 最高主頻8MHz
}
void delay()
{
unsigned int x;
for(x=0;x<4000;x++)
_NOP();
}
void zhil(unsigned char zhil) //寫指令
{
RS_0;
RW_0;
P2=zhil; //P2口賦值
delay(); //等待指令寫入
E_1; //拉低 (送一次脈沖)
delay();
E_0;
}
void shuj(unsigned char shuj) //寫數(shù)據(jù)
{
RS_1;
RW_0;
P2=shuj;
delay();
E_1;
delay();
E_0;
}
void init1602() //液晶初始化
{
unsigned int q;
P2DIR=0XFF;
P6DIR|=(BIT3+BIT4+BIT5);
E_0;
zhil(0x38); //設(shè)置顯示方試16*2,5*7點(diǎn)陣,8位數(shù)據(jù)接口
zhil(0x0c); //設(shè)置開顯示,顯示光標(biāo),0c不現(xiàn)實(shí)光標(biāo)
zhil(0x06); //寫一字符光標(biāo)+1 整屏不左移
zhil(0x01); //顯示清屏數(shù)據(jù)指針清零,所有顯示清零
// zhil(0x80); //設(shè)置第一行指針
zhil(0x80+0x40); //設(shè)置第二行指針
for(q=0;q<2;q++)
shuj(zi[q]);
zhil(0x80);
}
void main()
{
WDTCTL = WDTPW + WDTHOLD;//關(guān)看門狗
CLOCK_INIT();//設(shè)置主時(shí)鐘 MCLK=8M
init1602();
while(1);
}
|
評(píng)分
-
查看全部評(píng)分
|