今天初学了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);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
我查了液晶是3.3和5V都有的,第一次上电时候液晶出了乱码所以应该是3.3的我觉得,原来我倒是没想到从51移植程序,找了几个430的也不知道对不对,自己改的也没有效果,这次我去找几个51的自己移植下。多谢指点
对,找个51开发版的例程。然后自己移植,找个好点的例程,这个例程明显写的很不规范,移植起来很费劲。
一周热门 更多>