打印

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

[复制链接]
4518|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 | 只看该作者

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

使用特权

评论回复
5
huangjiyue| | 2009-1-3 15:16 | 只看该作者

地址指针

先查一下地址指针有没有换行!我以前也那样,第二行的内容把第一行覆盖了;查查

使用特权

评论回复
6
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--);
}

使用特权

评论回复
7
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;
}

使用特权

评论回复
8
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);
}

使用特权

评论回复
9
suohongliang| | 2009-1-13 20:04 | 只看该作者

接上面的

5脚接地

使用特权

评论回复
10
gaohq|  楼主 | 2009-1-14 11:16 | 只看该作者

解决了,谢谢suohongliang

使用特权

评论回复
11
程序匠人| | 2009-1-15 14:02 | 只看该作者

顶上去啊

使用特权

评论回复
12
xiechengbin| | 2010-7-26 15:24 | 只看该作者
四楼说的真是废话

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

378

主题

3763

帖子

5

粉丝