今天初学了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);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
但是我查到1602的时序参数都是ns级别的,我设置下的MCU执行一条指令的时间是us级别的,这样的话是不是延迟不加也没有问题呢?
我是在寝室里自己鼓捣的初学者,没有这么专业的设备啊,手头就一个launchpad和一点电路零件
是的。所以说,读写指令一般是不需要专门加延时函数的,前提是你从51移植过来的代码是正确的。IO的输入输出模式配置好,也就初始化的时候好像需要一点点延时的。还有,430应该是3.3供电的话,一般液晶是5V,还要注意这个问题。
一周热门 更多>