4463|15

30

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

MSP430F5438A无法取代12864液晶显示,求教一下,下面程序有问题吗?我是51过渡到43... [复制链接]

#include

//#define CPU_F ((double)8000000)//默认MCLK=1MHz

#define uint unsigned int
#define uchar unsigned char

/*******************************************************************************
p90=cs(RS);p91=sid(RW);p92=clk(EN);p93=psb(低电平选串口);p94=rst;(接高电平)
********************************************************************************/
#define        LCD_RS                        BIT0                //LCD_RS(DI) -> P9.0
#define LCD_RS_DIR                P9DIR
#define LCD_RS_LO                P9OUT &= ~LCD_RS
#define LCD_RS_HI                P9OUT |= LCD_RS

#define        LCD_RW                        BIT1                        //LCD_RW -> P9.1
#define LCD_RW_DIR                P9DIR
#define LCD_RW_LO                P9OUT &= ~LCD_RW
#define LCD_RW_HI                P9OUT |= LCD_RW

#define        LCD_EN                        BIT2                        //LCD_EN -> P9.2
#define LCD_EN_DIR                P9DIR
#define LCD_EN_LO                P9OUT &= ~LCD_EN
#define LCD_EN_HI                P9OUT |= LCD_EN

#define        LCD_PSB                        BIT3                        //LCD_CS1(PSB) -> P9.3
#define LCD_PSB_DIR                P9DIR
#define LCD_PSB_LO                P9OUT &= ~LCD_PSB
#define LCD_PSB_HI                P9OUT |= LCD_PSB

#define        LCD_RST                        BIT4                        //LCD_RST -> P9.4
#define LCD_RST_DIR                P9DIR
#define LCD_RST_LO                P9OUT &= ~LCD_RST
#define LCD_RST_HI                P9OUT |= LCD_RST

#define LCD_DATA_IN                P8IN                 //并行数据输出/入口
#define LCD_DATA_OUT                P8OUT
#define LCD_DATA_DIR                P8DIR

void LCD_Delayt(uint t)      //毫秒级延时子程序
{
  uint i;
  while(t--)           
  {
    for(i=0;i<800;i++);
  }
}


void LCD_CheckBusy(void)     //忙检测
{
  uchar Flag;  
  LCD_RS_LO;
  LCD_RW_HI;
  LCD_DATA_DIR = 0x00;
  do
  {
    LCD_EN_HI;
    Flag = LCD_DATA_IN;
    LCD_EN_LO;
  }
  while(Flag & 0x80);
  LCD_DATA_DIR = 0xFF;
}


void LCD_WriteComm(uchar wdata)// 写命令
{
  LCD_CheckBusy();//忙检测
  
  LCD_RS_LO;
  LCD_RW_LO;
  LCD_EN_LO;
  LCD_EN_HI;  
  LCD_DATA_OUT = wdata;
  LCD_EN_LO;
}

void LCD_WriteByte(uchar wdata)//写数据
{
  LCD_CheckBusy();             //忙检测
  
  LCD_RS_HI;
  LCD_RW_LO;
  LCD_EN_LO;
  LCD_EN_HI;  
  LCD_DATA_OUT = wdata;       //P8输出数据
  LCD_EN_LO;
}


void LCD_SetXY(uchar X, uchar Y)//写坐标X、Y地址
{
  switch(Y)
  {
    case 0:
            LCD_WriteComm(0x80 + X);
            break;
    case 1:
            LCD_WriteComm(0x90 + X);
            break;
    case 2:
            LCD_WriteComm(0x88 + X);
            break;
    case 3:
            LCD_WriteComm(0x98 + X);
  }
}
/*
void LCD_WriteDEC(uchar X, uchar Y, uchar wdata) //第一种、要显示数据的位置和数据
{
  LCD_SetXY(X,Y);    //写坐标X、Y地址
  LCD_WriteByte(wdata);   //写数据wdata
}*/

void LCD_WriteString(uchar X, uchar Y, uchar *String)//第二种、要显示数据的位置和数据
{
  uchar temp;
  LCD_SetXY(X,Y);
  temp = *String;
  while(temp!=0)
  {
    LCD_WriteByte(temp);
    temp = *(++String);
  }  
}
void LCD_Init(void) //LCD12864初始化
{          
    LCD_PSB_HI;       //PSB=1 -> 并行模式
    LCD_RST_HI;
   
    LCD_Delayt(2);
    LCD_RS_LO;
    LCD_RW_LO;
    LCD_EN_LO;  
    LCD_Delayt(2);
    //正常状态
    LCD_WriteComm(0x30);  //基本指令操作
    LCD_WriteComm(0x0c);  //显示开,关光标
    LCD_WriteComm(0x01);  //清除LCD12864的显示内容
    LCD_WriteComm(0x02);  //地址归位
    LCD_WriteComm(0x06);  //游标加1
}
void diaply()//数据显示
{
        LCD_WriteString(0,0,"   msp430f5438  ");//第一行显示aaa的数据
        LCD_Delayt(1);
        LCD_WriteString(0,1,"LCD12864并口液晶");//第二行第1个位置显示数据"这是第一行的!"
        LCD_Delayt(1);
        LCD_WriteString(0,2,"    测试显示!  ");//第三行第1个位置显示数据"这是第一行的!"
        LCD_Delayt(1);
        LCD_WriteString(0,3,"!!!!!!!!");//第四行第1个位置显示数据"这是第一行的!"
        LCD_Delayt(1);
  
}

void main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  
  P9DIR |=0xff;
  P9OUT =0xff;
  
  P8DIR |=0xff;
  P8OUT =0xff;
  
  LCD_Init();    //LCD12864初始化
  diaply();      //数据显示
  
  while(1);   
}

最新回复

话说你的12864是多少V驱动的  详情 回复 发表于 2012-11-11 18:34
 
点赞 关注

回复
举报

30

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
自己做的430板,每排管脚测试都能用,但是驱动12864液晶,液晶显示毫无反应?求大神指导下
 
 

回复

30

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
自己做的430板,每排管脚测试都能用,但是驱动12864液晶,液晶显示毫无反应?求大神指导下

IMG_20121110_140303.jpg (1.06 MB, 下载次数: 1)

IMG_20121110_140303.jpg
 
 
 

回复

30

帖子

0

TA的资源

一粒金砂(中级)

4
 
 
 
 

回复

173

帖子

0

TA的资源

一粒金砂(高级)

5
 
你看看是不是硬件连接是否真确   我看了下软件部分好像没什么错误。
 
 
 

回复

30

帖子

0

TA的资源

一粒金砂(中级)

6
 
硬件是板自己设定了P9.0~P9.4分别控制RS,RW,EN,PSB,RST,p8作为信号输出,像上面的图那样,不用接线
 
 
 

回复

940

帖子

0

TA的资源

纯净的硅(高级)

7
 
void LCD_Init(void) //LCD12864初始化

把LCD初始化程序中的延时弄长一些试试

因为你51时候的晶振是M级的
而MSP430默认使用的DCO晶振,是K级的
所以你没有配置外部晶振的时候延时不够快的,LCD来不及反应

试一下,好了也告诉我一下

以上只是个人猜测,接触MSP430才2天

[ 本帖最后由 wgsxsm 于 2012-11-10 14:42 编辑 ]
 
 
 

回复

30

帖子

0

TA的资源

一粒金砂(中级)

8
 
测试过了,加到25都没反应,根据资料默认的MCLK不是有1M吗?
 
 
 

回复

30

帖子

0

TA的资源

一粒金砂(中级)

9
 

看图

这个资料

AQ%(1{T31I99H3PV~3ZTH@Y.jpg (56.23 KB, 下载次数: 3)

AQ%(1{T31I99H3PV~3ZTH@Y.jpg
 
 
 

回复

940

帖子

0

TA的资源

纯净的硅(高级)

10
 
你初始化的时候将复位pin拉低延时一下再拉高试试
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(初级)

11
 
接上仿真器,设置断点一步步的测每个步骤引脚的输出是否是对的
 
 
 

回复

30

帖子

0

TA的资源

一粒金砂(中级)

12
 
正在检查中.......................
 
 
 

回复

199

帖子

0

TA的资源

纯净的硅(初级)

13
 
话说你的12864是多少V驱动的
 
 
 

回复

30

帖子

0

TA的资源

一粒金砂(中级)

14
 
用的是5V外电源供电,如前面板子的接法所示,电源头介入,通过AMS11173.3V转电压给430
 
 
 

回复

30

帖子

0

TA的资源

一粒金砂(中级)

15
 
经过测试,应该是板子的问题,做板不够细心,芯片那块要非常,准备换一块板了
 
 
 

回复

30

帖子

0

TA的资源

一粒金砂(中级)

16
 
已经测试成功,程序没有问题,要加强 学习了
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表