我这个1602显示程序为何只显示一行啊?

[复制链接]
5451|11
 楼主| gaohq 发表于 2009-1-2 17:13 | 显示全部楼层 |阅读模式
如下的个显示程序,只能显示"hello!" 第二行怎么也不显示,没整了,上来求救.
#include <reg51.h>
#include <intrins.h>
sbit rs=P2^0;
sbit rw=P2^1;
sbit ep=P2^2;
typedef bit  BOOL;
typedef unsigned char BYTE;

BYTE code dis1[]={"hello!"};
BYTE code dis2[]={"who are you?"};

BOOL lcd_bz()
{
 BOOL reslut;
 rs = 0;
 rw = 1;
 ep = 1;
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 reslut=(BOOL)(P0 & 0x80);
 ep = 0;
 return reslut;
 }
 delay(BYTE ms)
 { 
   BYTE i;
   while(ms--)
  {
   for(i=0;i<250;i++)
    { 
      _nop_();
      _nop_();
      _nop_();
      _nop_();
     }
 }
}
void lcd_wcommd(BYTE commd)

  while(lcd_bz());
  rs = 0;
  rw = 0;
  ep = 0;
  _nop_();
  _nop_();
 P0 = commd;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  ep = 1;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  ep = 0;
}

void lcd_wdate(BYTE date)
{
  while(lcd_bz());
  rs = 1;
  rw = 0;
  ep = 0;
  P0 = date;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  ep = 1;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  ep = 0;
 }
 lcd_pos(BYTE pos)
 {
   lcd_wcommd(pos | 0X80);
   }
 lcd_init()
 {
   lcd_wcommd(0x38);
   delay(1);
   lcd_wcommd(0x0c);
   delay(1);
   lcd_wcommd(0x06);
   delay(1);
   lcd_wcommd(0x01);
   delay(1);
  }

 main()
{
  BYTE i;
  lcd_init();
  delay(10);
  lcd_pos(0x05);
  i = 0;
     while(dis1 != '\0')
  {
    lcd_wdate(dis1);
    i++;
   }
   lcd_pos(0x40);
   i=0;
      while(dis2 != '\0');
   {
     lcd_wdate(dis2);
     i++;
     }
}
请帮忙看看,学习ing   谢谢!!!!!
l8j8h8 发表于 2009-1-2 17:35 | 显示全部楼层

STR的Demo板就是用此模块,到ST网站下载源代码参考

 楼主| gaohq 发表于 2009-1-3 13:33 | 显示全部楼层

这两段代码有区别吗?

// lcd_pos(0x40);
  // i = 0;
    //  while(dis2 != '\0')
   //{
    // lcd_wdate(dis2);
    // i++;
    // }
      lcd_pos(0x40);
      i = 0;
        while(dis2  !=  '\0')
    {
       lcd_wdate(dis2);
       i++;
       }
上面的是我写的,就不能显示第二行,下面的是我copy例子程序上的就行,我实在是找不出两者的差别,大家帮我找找吧,特郁闷!!!
computer00 发表于 2009-1-3 13:37 | 显示全部楼层

关键在于初始化,要初始化为双行显示。

huangjiyue 发表于 2009-1-3 15:16 | 显示全部楼层

地址指针

先查一下地址指针有没有换行!我以前也那样,第二行的内容把第一行覆盖了;查查
suohongliang 发表于 2009-1-13 19:47 | 显示全部楼层

试试这个

#include<reg51.h>
#defined uchar unsigned char 
#defined uint unsinged int 
sbit lcdrs=P2^0;
sbit lcden=P2^1;
uchar code table[]="HELLO!";
uchar code table1[]="NIHAO!";
void delay(uint z)
{
   uint x,y;
   for(x=z;x>0;x--)
     for(y=110;y>0;y--);
}
suohongliang 发表于 2009-1-13 19:50 | 显示全部楼层

接上面的

void write_com(uchar com)
{
   lcdrs=0;P0=com;
   delay(5);
   lcden=1;
  delay(5);
  lcden=0
}
void write_date(uchar date)
{
  lcdrs=1;P0=date;delay(5);lcden=1;delay(5);lcden=0;
}
suohongliang 发表于 2009-1-13 19:58 | 显示全部楼层

接上面的

void init()//初始化
{ num=0;  
lcden=0;
  write_com(0x38);write_com(0x0e);write_com(0x06);write_com(0x01);
  write_com(0x80);
}
uchar num;//在第一个里面写 
void main()
{
   init();write_com(0x80+0x40);
   for(num=0;num<5;num++)
   { write_date(table[num]);delay(5);}
   for(num=0;num<6;num++)
   {
      write_date(table1[num]);delay(5);
    }
   while(1);
}
suohongliang 发表于 2009-1-13 20:04 | 显示全部楼层

接上面的

5脚接地
 楼主| gaohq 发表于 2009-1-14 11:16 | 显示全部楼层

解决了,谢谢suohongliang

程序匠人 发表于 2009-1-15 14:02 | 显示全部楼层

顶上去啊

xiechengbin 发表于 2010-7-26 15:24 | 显示全部楼层
四楼说的真是废话
您需要登录后才可以回帖 登录 | 注册

本版积分规则

378

主题

3767

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部