标题:
430单片机-1602液晶显示
[打印本页]
作者:
wang哈哈
时间:
2018-7-17 15:50
标题:
430单片机-1602液晶显示
/* 1602液晶程序 */
#include<msp430x14x.h>
#define RS_1 P6OUT|=BIT3 //数据、命令选择选择端
#define RS_0 P6OUT&=~BIT3
#define RW_1 P6OUT|=BIT4 //读写选择端
#define RW_0 P6OUT&=~BIT4
#define E_1 P6OUT|=BIT5 //使能信号
#define E_0 P6OUT&=~BIT5
#define P2 P2OUT //数据,传输端口
unsigned char zi[]="ok";
/*-----------------------------设置主时钟--------------------------------------------*/
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()
{
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) //写数据
{
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); //设置显示方试16*2,5*7点阵,8位数据接口
zhil(0x0c); //设置开显示,显示光标,0c不现实光标
zhil(0x06); //写一字符光标+1 整屏不左移
zhil(0x01); //显示清屏数据指针清零,所有显示清零
// zhil(0x80); //设置第一行指针
zhil(0x80+0x40); //设置第二行指针
for(q=0;q<2;q++)
shuj(zi[q]);
zhil(0x80);
}
void main()
{
WDTCTL = WDTPW + WDTHOLD;//关看门狗
CLOCK_INIT();//设置主时钟 MCLK=8M
init1602();
while(1);
}
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1