#include "msp430x14x.h"
#define uint unsigned int
#define uchar unsigned char
#define RS_1P6OUT|=BIT3 //数据、命令选择选择端
#define RS_0P6OUT&=~BIT3
#define RW_1P6OUT|=BIT4//读写选择端
#define RW_0P6OUT&=~BIT4
#define E_1P6OUT|=BIT5//使能信号
#define E_0P6OUT&=~BIT5
#define P2P2OUT//数据,传输端口
unsigned char table[]=" !!!";
unsigned char table1[]=" !!!";
/*-----------------------------设置主时钟--------------------------------*/
void CLOCK_INIT()//设置主时钟MCLK=8M
{
unsigned int i;
BCSCTL1&=~XT2OFF;//开启TX2振荡器
do
{
IFG1 &=~ OFIFG;//清除振荡器失效标志位(晶体出错中断标志位。1时有中断产生、0没有)
for(i=0xff; i>0; i--);//至少等待 50 us
}
while((IFG1 & OFIFG) !=0 );//(IFG1 & OFIFG)==0时 中断位关闭 则表达式为假 为假则退出
BCSCTL2 |= SELM1;//使MCLK = XI2 8MHZ 0x80 最高主频8MHz
}
void delay(uint z)
{
uint x,y;
for (x=z;x>0;x--)
for (y=110;y>0;y--);
}
void write_com(uchar write_com) //写指令
{
RS_0;
RW_0;
P2=write_com; //P2口赋值
delay(5); //等待指令写入
E_1; //拉低 (送一次脉冲)
delay(5);
E_0;
}
void write_date(uchar write_date) //写数据
{
RS_1;
RW_0;
P2=write_date;
delay(5);
E_1;
delay(5);
E_0;
}
void init1602() //液晶初始化
{
P2DIR=0XFF;
P6DIR|=(BIT3+BIT4+BIT5);
E_0;
write_com(0x38); //设置显示方试16*2,5*7点阵,8位数据接口
write_com(0x0c); //设置开显示,显示光标,0c不现实光标
write_com(0x06); //写一字符光标+1 整屏不左移
write_com(0x01);//显示清屏数据指针清零,所有显示清零
}
void main()
{
unsigned int q,i;
WDTCTL = WDTPW + WDTHOLD;//关看门狗
CLOCK_INIT();//设置主时钟MCLK=8M
init1602();
write_com(0x80);//设置第一行指针
for (i=0;i<16;i++)
{
write_date(table[i]);
delay(5);
}
write_com(0x80+0x40); //设置第二行指针
for(q=0;q<15;q++)
{
write_date(table1[q]);
delay(5);
}
while(1);
}