|
msp430f149控制1602不能正常显示,求助大神!!!!
[复制链接]
连接电路,下载程序后,显示屏第一行亮,但不显示想要的数据,只有小黑方格一闪一闪的,求大神指点
#include "includes.h"
#include "sys.h"
#include "lcd1602.h"
void main()
{
uchar i,*p;
WDTInit(); //看门狗设置
ClockInit(); //系统时钟设置
LCD1602PortInit(); //端口初始化,用于控制IO口输入或输出
LCD1602Init(); //液晶参数初始化设置
while(1)
{
i = 4;
p = "MSP430F149"; //字符串输出显示
LCD1602ClrScreen(); //清屏
LCD1602WriteStr(1,1,"Welcome to 502");
DelayMs(250);
while(*p)
{
LCD1602WriteChar(i,2,*p++); //单个字符输出显示
i++;
DelayMs(250); //延时250ms
}
DelayMs(250);
}
}
#include "includes.h"
#define DataPort P4OUT //P4口为数据口
#define LCD1602Port P5OUT //P5为控制口
#define RS_CLR LCD1602Port &=~BIT0 //RS置低
#define RS_SET LCD1602Port |= BIT0 //RS置高
#define RW_CLR LCD1602Port &=~BIT1 //RW置低
#define RW_SET LCD1602Port |= BIT1 //RW置高
#define EN_CLR LCD1602Port &=~BIT2 //EN置低
#define EN_SET LCD1602Port |= BIT2 //EN置高
/*
**************************************************************************
* LCD1602PortInit()
* 功能说明: 初始化IO口子程序
* 参数 : 无
* 返回值 : 无
*************************************************************************
*/
void LCD1602PortInit()
{
P4SEL = 0x00;
P4DIR = 0xFF;
P5SEL = 0x00;
P5DIR|= BIT0 + BIT1 + BIT2; //控制口设置为输出模式
}
/*
**************************************************************************
* LCD1602WriteCom(uchar com)
* 功能说明: 显示屏写入命令函数
* 参数 : 写入的命令
* 返回值 : 无
*************************************************************************
*/
void LCD1602WriteCom(uchar com)
{
RS_CLR;
RW_CLR;
EN_SET;
DataPort = com; //命令写入端口
DelayMs(5);
EN_CLR;
}
/*
**************************************************************************
* LCD1602WriteData(uchar data)
* 功能说明: 显示屏数据写入函数
* 参数 : 写入的数据
* 返回值 : 无
*************************************************************************
*/
void LCD1602WriteData(uchar data)
{
RS_SET;
RW_CLR;
EN_SET;
DataPort = data; //数据写入端口
DelayMs(5);
EN_CLR;
}
/*
**************************************************************************
* LCD1602Clear(void)
* 功能说明: 清屏函数
* 参数 : 无
* 返回值 : 无
*************************************************************************
*/
void LCD1602ClrScreen(void)
{
LCD1602WriteCom(0x01); //清屏幕显示
DelayMs(5);
}
/*
**************************************************************************
* LCD1602WriteStr(uchar x,uchar y,uchar *s)
* 功能说明: 显示屏字符串写入函数
* 参数 : x:横坐标(1~16)
y:纵坐标(1~2)
*s:写入的字符串
* 返回值 : 无
*************************************************************************
*/
void LCD1602WriteStr(uchar x,uchar y,uchar *s)
{
if(y == 1)
{
LCD1602WriteCom(0x80+x-1); //第一行显示
}
else if(y==2)
{
LCD1602WriteCom(0xC0+x-1); //第二行显示
}
while(*s)
{
LCD1602WriteData(*s);
s++;
}
}
/*
**************************************************************************
* LCD1602WriteChar(uchar x,uchar y,uchar data)
* 功能说明: 显示屏单字符写入函数
* 参数 : x :横坐标(1~16)
y :纵坐标(1~2)
data:写入的字符
* 返回值 : 无
*************************************************************************
*/
void LCD1602WriteChar(uchar x,uchar y,uchar data)
{
if(y==1)
{
LCD1602WriteCom(0x80+x-1); //第一行显示
}
else if(y==2)
{
LCD1602WriteCom(0xC0+x-1); //第二行显示
}
LCD1602WriteData(data);
}
/*
**************************************************************************
* LCD1602Init(void)
* 功能说明: 显显示屏初始化函数
* 参数 : 无
* 返回值 : 无
*************************************************************************
*/
void LCD1602Init(void)
{
LCD1602WriteCom(0x38); //显示模式设置
DelayMs(5);
LCD1602WriteCom(0x08); //显示关闭
DelayMs(5);
LCD1602WriteCom(0x01); //显示清屏
DelayMs(5);
LCD1602WriteCom(0x06); //显示光标移动设置
DelayMs(5);
LCD1602WriteCom(0x0C); //显示开及光标设置
DelayMs(5);
}
|
|