微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > MSP430F149与1602LCD模块程序

MSP430F149与1602LCD模块程序

时间:11-13 来源:互联网 点击:
/*****************MSP430F1491602LCD模块程序***********************/

/* ShangYu */

/**************************Pins defination***************************/

/* RS P4.4 寄存器选择信号 H-数据寄存器 L-指令寄存器 */

/* RW P4.5 读写信号    H-读     L-写   */

/* E P4.6 片选信号    下降沿触发        */

/* DB0-DB7 P5.0-P5.7 数据线 数据传输             */

/**************************over*************************************/

#include "msp430x14x.h"

#include "stdio.h"

#define uchar unsigned char

#define uint unsigned int

uchar dis1[]="ShangYu";

uchar dis2[]=" AnNa";

void int_clk()

{

uchar i;

BCSCTL1&=~XT2OFF; //打开XT振荡器

BCSCTL2|=SELM1+SELS; //MCLK为8MHz,SMCLK为8MHz

do

{

IFG1&=~OFIFG; //清除振荡错误标志

for(i=0;i<100;i++)

_NOP(); //延时等待

}

while((IFG1&OFIFG)!=0); //如果标志为1,则继续循环等待

IFG1&=~OFIFG;

}

void delay(int j)

{

int i;

while(j--)

{

for(i = 0; i< 2000; i++)

{

_NOP();

_NOP();

_NOP();

_NOP();

}

}

}

/******************* 检查LCD忙状态 *********************/

/************* lcd_busy为1时,忙,等待 *****************/

/************* lcd-busy为0时,闲,可写指令与数据 *********/

int lcd_busy()

{

int busy;

P5DIR=0x00;

P4OUT &=~ BIT4 ; // RS = 0

P4OUT |= BIT5 ; // RW = 1

P4OUT |= BIT6 ; // EN = 1

_NOP();

busy =P5IN&0x80;

_NOP();

P4OUT &=~ BIT6 ; // EN = 0

P4OUT &=~ BIT5 ; // RW = 0

P4OUT |= BIT4 ; // RS = 1

P5DIR=0XFF;

return busy;

}

//写指令数据到LCD RS=L,RW=L,E=高脉冲,D0-D7=指令码。

void lcd_wcmd(uchar cmd)

{

while(lcd_busy());

P4OUT &=~ (BIT4 + BIT5) ; // RS = 0 RW = 0

P5OUT = cmd;

_NOP();

P4OUT |= BIT6 ; // E = 1

_NOP();

P4OUT &=~ BIT6 ;

}

//写显示数据到LCD RS=H,RW=L,E=高脉冲,D0-D7=数据。

void lcd_wdat(uchar dat)

{

while(lcd_busy());

P4OUT |= BIT4 ; // RS = 1

P4OUT &=~ (BIT5 + BIT6) ; // RW = 0 E = 0

P5OUT = dat;

_NOP();

P4OUT |= BIT6 ; // E = 1

_NOP();

P4OUT &=~ BIT6 ; // E = 0

}

void lcd_pos(uchar pos)

{

lcd_wcmd(pos|0x80); //数据指针=80+地址变量

}

void lcd_clr()

{

lcd_wcmd(0x01); //清除LCD的显示内容

delay(1);

}

void lcd_init()

{

delay(10); //等待LCD电源稳定

lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据

delay(1);

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top