打印

MSP430g2553驱动1602

[复制链接]
1315|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
聂志钧|  楼主 | 2015-10-7 16:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天初学了1602的使用于是编了一个程序但是下载到launchpad以后1602第一次时候显示了乱码,又更改后便没有显示了,基本确定是软件的问题,请大家帮忙解惑啊。下面贴程序
/*******P1.0~P1.7为D0~D7,RS—P2.0 R/W—P2.1 E—P2.2************/
#include "msp430g2553.h"

#define uchar unsigned char
#define uint unsigned int
#define RS_H P2OUT|=BIT0
#define RS_L P2OUT&=~BIT0
#define RW_H P2OUT|=BIT1
#define RW_L P2OUT&=~BIT1
#define E_H P2OUT|=BIT2
#define E_L P2OUT&=~BIT2
#define BUSY_OUT P1DIR|=BIT7
#define BUSY_IN P1DIR&=~BIT7
#define BUSY_DATA P1IN&BIT7
  uchar s[8]="hanxiao";
//端口初始化程序  使P1P2均为I/O端口且均为输出
//读忙子程序
void busy1()
{
  RS_L;
  RW_H;
  E_H;
  _NOP();
  _NOP();
  BUSY_IN;
  while(BUSY_DATA);
  E_L;_NOP();_NOP();
  BUSY_OUT;
}
void initP()
{
  P1SEL=0X00;
  P2SEL=0X00;
  P1DIR=0XFF;
  P2DIR=0XFF;
}
//时钟初始化程序
void initclk()
{
  BCSCTL1=CALBC1_8MHZ;
  DCOCTL=CALDCO_8MHZ;
}
//写指令程序
void write_cmd(uint cmd)
{
  busy1();
  RS_L;
  RW_L;
  E_H;_NOP();_NOP();
  P1DIR|=0XFF;
  P1OUT=cmd;_NOP();_NOP();
  E_L;
}
//写数据程序
void write_data(uint dat)
{
  busy1();
  RS_H;
  RW_L;
  E_H;  _NOP();_NOP();
  P1DIR|=0XFF;
  P1OUT=dat;_NOP();_NOP();
  E_L;
}

//延时程序
void delay(uint MS)
{
  uint j;
  while(MS--)
  {
    for(j=800;j>0;j--);
  }
   
}
//LCD初始化程序
void initlcd()
{
  write_cmd(0x38);
  delay(15);
  write_cmd(0x0c);
  delay(15);
  write_cmd(0x06);
  delay(15);
  write_cmd(0x01);
}

  
   

void main()
{
  int j;
  WDTCTL=WDTPW  + WDTHOLD ;
  initclk();
  initP();
  initlcd();

   
      write_cmd(0xc0);
      for(j=0;j>8;j++)
      {
        write_data(s[j]);
        
      }
  while(1);
   
}

相关帖子

沙发
dirtwillfly| | 2015-10-7 20:40 | 只看该作者
用逻辑分析仪看看时序

使用特权

评论回复
板凳
xyz549040622| | 2015-10-7 21:31 | 只看该作者
帮忙解惑什么呢?一般是延时的问题,以及初始化的问题。前者和MCU有关,要修改延时函数。后者也和MCU有关,要注意MCU的输入和输出模式的配置。

使用特权

评论回复
地板
聂志钧|  楼主 | 2015-10-7 22:05 | 只看该作者
xyz549040622 发表于 2015-10-7 21:31
帮忙解惑什么呢?一般是延时的问题,以及初始化的问题。前者和MCU有关,要修改延时函数。后者也和MCU有关, ...

但是我查到1602的时序参数都是ns级别的,我设置下的MCU执行一条指令的时间是us级别的,这样的话是不是延迟不加也没有问题呢?

使用特权

评论回复
5
聂志钧|  楼主 | 2015-10-7 22:30 | 只看该作者
dirtwillfly 发表于 2015-10-7 20:40
用逻辑分析仪看看时序

我是在寝室里自己鼓捣的初学者,没有这么专业的设备啊,手头就一个launchpad和一点电路零件

使用特权

评论回复
6
maochunlei| | 2015-10-7 23:32 | 只看该作者
延时函数必须要加入,时序很关键,要精准

使用特权

评论回复
7
xyz549040622| | 2015-10-8 08:53 | 只看该作者
聂志钧 发表于 2015-10-7 22:05
但是我查到1602的时序参数都是ns级别的,我设置下的MCU执行一条指令的时间是us级别的,这样的话是不是延 ...

是的。所以说,读写指令一般是不需要专门加延时函数的,前提是你从51移植过来的代码是正确的。IO的输入输出模式配置好,也就初始化的时候好像需要一点点延时的。还有,430应该是3.3供电的话,一般液晶是5V,还要注意这个问题。

使用特权

评论回复
8
聂志钧|  楼主 | 2015-10-8 16:13 | 只看该作者
xyz549040622 发表于 2015-10-8 08:53
是的。所以说,读写指令一般是不需要专门加延时函数的,前提是你从51移植过来的代码是正确的。IO的输入输 ...

我查了液晶是3.3和5V都有的,第一次上电时候液晶出了乱码所以应该是3.3的我觉得,原来我倒是没想到从51移植程序,找了几个430的也不知道对不对,自己改的也没有效果,这次我去找几个51的自己移植下。多谢指点

使用特权

评论回复
9
xyz549040622| | 2015-10-8 16:19 | 只看该作者
聂志钧 发表于 2015-10-8 16:13
我查了液晶是3.3和5V都有的,第一次上电时候液晶出了乱码所以应该是3.3的我觉得,原来我倒是没想到从51移 ...

对,找个51开发版的例程。然后自己移植,找个好点的例程,这个例程明显写的很不规范,移植起来很费劲。

使用特权

评论回复
10
dirtwillfly| | 2015-10-8 17:06 | 只看该作者
网上很多MSP430g2553驱动1602例程的,楼主可以选一个合适的

使用特权

评论回复
11
309030| | 2015-10-8 20:37 | 只看该作者
时序问题很重要的,延时函数要用的到位

使用特权

评论回复
12
lwsn| | 2015-10-9 10:53 | 只看该作者
MSP430g2553驱动1602例程网上并不缺,楼主可以找找看

使用特权

评论回复
13
王大熊| | 2015-10-30 09:23 | 只看该作者
我觉得是焊接和接口的问题造成的。

使用特权

评论回复
14
北方小榕树| | 2015-10-31 14:03 | 只看该作者
聂志钧 发表于 2015-10-7 22:30
我是在寝室里自己鼓捣的初学者,没有这么专业的设备啊,手头就一个launchpad和一点电路零件 ...

只能慢慢的移植别人的,对着时序图抠电路了。

使用特权

评论回复
15
jimmhu| | 2015-10-31 14:17 | 只看该作者
移位关闭了吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

7

帖子

1

粉丝