51单片机的lcd1602的问题!!显示不正常。。

下面是我写的程序,我的目的是从右向左移动显示,然后闪动!!但就是不行,屏幕除了闪什么都没有!!请赐教!!#include<reg52.h>#include<intrins... 下面是我写的程序,我的目的是 从右向左移动显示,然后闪动!!但就是不行,屏幕除了闪什么都没有!!请赐教!!
#include <reg52.h>
#include <intrins.h>
#define delay_4us() _nop_(); _nop_(); _nop_(); _nop_()
sbit lcdrs=P2^6; //数据命令选择端
sbit lcdwr=P2^5; //读写选择端
sbit lcden=P2^7; //使能端
unsigned char code dis1[]="Hello everyone!";
unsigned char code dis2[]="Welcome to here!";

/*延时子程序*/
void delayms (int time)
{
unsigned char i;
while (time--)
{
for (i=0; i<250; i++)
{
delay_4us();
}
}
}

/*测试lcd忙碌状态
/*lcd_busy为1,忙,等待;0,闲,可进行写命令数据 */
bit lcd_busy ()
{
bit result;
lcdrs=0; //命令状态
lcdwr=1; //读状态
lcden=1;
delay_4us();
result=(bit)(P0 & 0x80);
lcden=0;
return result;
}

/* 向lcd写入命令*/
void write_order (unsigned char order)
{
while (lcd_busy ()); //等待lcd空闲
lcdrs=0; //命令
lcdwr=0; //写状态
lcden=0;
P0=order;
delay_4us(); //稍作延时
lcden=1; //高脉冲
delay_4us();
lcden=0;
}

/*向lcd写入数据 */
void write_data (unsigned char date)
{
while (lcd_busy ());
lcdrs=1; //数据
lcdwr=0; //写状态
lcden=0;
P0=date;
delay_4us();
lcden=1;
delay_4us();
lcden=0;
}

/* 显示位置子程序 */
void lcd_pos (unsigned char pos)
{
write_order (pos | 0x80);
}

/* 清屏子程序 */
void lcd_clear ()
{
write_order (0x01);
delayms(5);
}
/* 初始化子程序 */
void lcd_init ()
{
delayms (15);
write_order (0x38); //设置为16*2显示,5*7点阵,8位数据接口
delayms (5);
write_order (0x0c); //开显示,不显示光标
delayms (5);
write_order (0x06); //写一个字符后地址指针自动加1
delayms (5);
write_order (0x01); //清屏
delayms (5);
}

/*闪动子程序 */
void flash ()
{
delayms (600); //控制停留时间
write_order (0x08); //关闭显示
delayms (200);
write_order (0x0c); //开显示
delayms (200);
write_order (0x08); //关闭显示
delayms (200);
write_order (0x0c); //开显示
delayms (200);
}
/*主程序 */
void main ()
{
unsigned char i, j;
delayms (10);
lcd_init (); //初始化
while (1)
{
lcd_clear (); //清屏
lcd_pos (0x10); //写在第一行17字节处
i=0;
while (dis1[i] != '\0')
{
write_data (dis1[i]);
i++;
}
lcd_pos (0x50); //写在第二行17字节处
i=0;
while (dis2 != '\0')
{
write_data (dis2[i]);
i++;
}
for (j=0; j<16; j++)
{
write_order (0x18); //整屏向左移动16格
delayms (100);
}
flash ();
}
}
展开
 我来答
long765long
2012-08-04 · 超过19用户采纳过TA的回答
知道答主
回答量:96
采纳率:0%
帮助的人:53.5万
展开全部
先写个简单测试程序让液晶打开光标,看看是否成功,若错误可能时序或者电路连接错误。然后再检查吧。
问题大学刚学时貌似也遇见过,工作了忘了。
话说楼主要学会规范代码啊,要不没人喜欢看的~~(楼主的程序其实没有看,勿怪。程序纠错可以使用硬件调试,看看初始化完成没,然后慢慢找)
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hyplin
2012-08-04 · 贡献了超过111个回答
知道答主
回答量:111
采纳率:0%
帮助的人:27.3万
展开全部
寄存器配置好了没 看LCD1602元件手册
追问
我写lcd1602的其它程序都可以啊!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
陈亚飞509
2013-01-08
知道答主
回答量:1
采纳率:0%
帮助的人:1546
展开全部
大哥,您的解决方法可以和我分享一下吗?我也遇到类似问题,目的是液晶屏显示......万分感谢!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ningyunnan
2012-08-04
知道答主
回答量:2
采纳率:0%
帮助的人:3166
展开全部
亻女
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式