MSP430g2553驱动1602

2019-07-25 14:29发布

今天初学了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);
   
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
14条回答
xyz549040622
2019-07-26 03:58
聂志钧 发表于 2015-10-7 22:05
但是我查到1602的时序参数都是ns级别的,我设置下的MCU执行一条指令的时间是us级别的,这样的话是不是延 ...

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

一周热门 更多>