返回该小组首页 回复主题
cola123

cola123

小组等级:     E币:429  (E币换礼)

#1楼主:高手指点我一下吧?!

文章发表于:2008-09-19 05:04

最近我开始学习使用液晶1602,因为之前没有用过液晶,所以很它的程序还是不太熟悉,勉强能看懂吧,但是修该了几个程序用在EDN 51的板子上总是不行,液晶没有显示。由于我是新手,不知道是程序的原因还是我液晶出问题了。我自己看程序也发现不了问题,已经试了好几天了, 还是没有进展,所以请求坛中高手指点一下,下面的程序用在EDN51 的板子上为什么不能显示。

 

不胜感激!

 

#include <at89x52.h>

#include <intrins.h>

/*********************************端口定义**********************************/

sbit rs= P1^0;

sbit rw = P1^1;

sbit ep = P1^2;

/********************************显示数据表*********************************/

unsigned char code dis1[] = {"www.hificat.com"};

unsigned char code dis2[] = {"0571-85956028"};

/*****************************************************************************

函数功能:LCD延时子程序

入口参数:ms

出口参数:

*****************************************************************************/

void delay(unsigned char ms)

{

unsigned char i;

while(ms--)

{

for(i = 0; i< 250; i++)

{

_nop_();

_nop_();

_nop_();

_nop_();

}

}

}

/*****************************************************************************

函数功能:测试LCD忙碌状态

入口参数:

出口参数:result

*****************************************************************************/

bit lcd_bz()

{

bit result;

rs = 0;

rw = 1;

ep = 1;

_nop_();

_nop_();

_nop_();

_nop_();

result = (bit)(P0 & 0x80);

ep = 0;

return result;

}

/*****************************************************************************

函数功能:写指令数据到LCD子程序

入口参数:cmd

出口参数:

*****************************************************************************/

void lcd_wcmd(unsigned char cmd)

{

while(lcd_bz());//判断LCD是否忙碌

rs = 0;

rw = 0;

ep = 0;

_nop_();

_nop_();

P0 = cmd;

_nop_();

_nop_();

_nop_();

_nop_();

ep = 1;

_nop_();

_nop_();

_nop_();

_nop_();

ep = 0;

}

/*****************************************************************************

函数功能:设定显示位置子程序

入口参数:pos

出口参数:

*****************************************************************************/

void lcd_pos(unsigned char pos)

{

lcd_wcmd(pos | 0x80);

}

/*****************************************************************************

函数功能:写入显示数据到LCD子程序

入口参数:dat

出口参数:

*****************************************************************************/

void lcd_wdat(unsigned char dat)

{

while(lcd_bz());//判断LCD是否忙碌

rs = 1;

rw = 0;

ep = 0;

P0 = dat;

_nop_();

_nop_();

_nop_();

_nop_();

ep = 1;

_nop_();

_nop_();

_nop_();

_nop_();

ep = 0;

}

/*****************************************************************************

函数功能:LCD初始化子程序

入口参数:

出口参数:

*****************************************************************************/

void lcd_init()

{

lcd_wcmd(0x38);

delay(1);

lcd_wcmd(0x0c);

delay(1);

lcd_wcmd(0x06);

delay(1);

lcd_wcmd(0x01);

delay(1);

}

/*****************************************************************************

函数功能:主程序

入口参数:

出口参数:

*****************************************************************************/

void main(void)

{

unsigned char i;

lcd_init();// 初始化LCD

delay(10);

lcd_pos(0x01);//设置显示位置

i = 0;

while(dis1[i] != '\0')

{

lcd_wdat(dis1[i]);//显示字符

i++;

}

lcd_pos(0x42);// 设置显示位置

i = 0;

while(dis2[i] != '\0')

{

lcd_wdat(dis2[i]);// 显示字符

i++;

}

while(1);

}

 

su37sm

   小组等级:    E币:145  (E币换礼)

#2

文章发表于:2008-09-28 09:59

lcd_wcmd(pos | 0x80);  这个干什么的?我怎么看不懂

su37sm

   小组等级:    E币:145  (E币换礼)

#3

文章发表于:2008-09-28 10:02

还有你在循环写入一个字符后最好延时一下  上个delay

 

我也是初学者,我是把你的代码和我的代码比较后给出一些建议   不一定有用:)

cola123

   小组等级:    E币:429  (E币换礼)

#4

文章发表于:2008-10-08 23:12

谢谢楼上的回复,已经调好了,是3脚上电阻的原因。呵呵。

总共 , 当前 /

快速回复主题--如果想加入编辑器功能,建议使用 [高级回复]

您目前还不是小组成员,请先加入

回复贴子区

用户名:    您没有注册?

密码:    忘记了密码?

内容:

  • DesignDesign
  • HTMLHTML

浏览该小组的用户还看过...

所有小组精华文章