msp430f149控制1602不能正常显示,求助大神!!!!

2019-03-24 10:24发布

连接电路,下载程序后,显示屏第一行亮,但不显示想要的数据,只有小黑方格一闪一闪的,求大神指点
#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);
} 此帖出自小平头技术问答
0条回答

一周热门 更多>

相关问题

    相关文章