打印

lcd1602 不显示怎么回事?

[复制链接]
3566|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lkkjob|  楼主 | 2008-3-16 19:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我最近在学习使用液晶显示,先选了比较简单的lcd1602.程序编译已经成功了,但烧进板子之后却没什么反应了,不知道怎么回事,请大家帮我看一下啊。程序如下:p0为8位数据口,
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sfr p0=0x80;
sfr p2=0xA0;
sbit EN1602=p2^5;
sbit RS1602=p2^7;
sbit RW1602=p2^6;

char code str1[]="Welcom!";
void delay_10us(uchar n)
{do
   {_nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    }while(--n);
}
void delay_ms(uint n)  
{do
   {delay_10us(131);
    }while(--n);
}
bit lcd1602_test()  /*忙测试
{uchar status;
 p0=0xff;
 RS1602=0;
 RW1602=1;
 EN1602=1;
 _nop_();
 status=p0;
 _nop_();
 EN1602=0;
 return status&0x80;
}
void lcd1602_wr_cmd(uchar cmd,bit test)  /*写命令
{if(test) while(lcd1602_test());
 RS1602=0;
 RW1602=0;
 p0=cmd;
 EN1602=1;
 _nop_();
 EN1602=0;
}
void lcd1602_wr_dat(uchar dat)  /*写数据
{while(lcd1602_test());
 RS1602=1;
 RW1602=0;
 p0=dat;
 EN1602=1;
 _nop_();
 EN1602=0;
}
void lcd1602_xy(uchar x,uchar y) /*定位
{uchar ramaddr=y*0x40+x;
 lcd1602_wr_cmd(ramaddr|0x80,1);
}

void lcd1602_wr_str1(uchar *ptr,uchar n) /*写n个字符
{uchar i;
for(i=0;i<n;i++) lcd1602_wr_dat(*ptr++);
}

void main()
{ EN1602=1;
 delay_ms(200);
 EN1602=0;
 lcd1602_wr_cmd(0x38,0);  /*初始化
 delay_ms(5);
 lcd1602_wr_cmd(0x38,0);
 delay_ms(5);
 lcd1602_wr_cmd(0x38,0);
 delay_ms(5);
 lcd1602_wr_cmd(0x08,1);
 lcd1602_wr_cmd(0x01,1);
 lcd1602_wr_cmd(0x06,1);
 lcd1602_wr_cmd(0x0c,1);
 while(1)
 {lcd1602_wr_cmd(0x01,1);
 lcd1602_xy(0,0);      /*从第一行第一列开始写welcom
 lcd1602_wr_str1(str1,8);
}
 }

相关帖子

沙发
sutie2008| | 2008-3-16 22:27 | 只看该作者

PO口是否有上拉电阻

我没看你的程序,首先看一下你的硬件问题,P0口做I/O使用时是要加上拉电阻的,否则无法做I/O使用。如果还点不亮发送邮件到suxungang@tom.com,我回复给你一份程序。

使用特权

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

本版积分规则

18

主题

36

帖子

0

粉丝