论坛» 嵌入式开发» MCU

1602液晶显示问题!!请大家帮忙解决一下

菜鸟
2008-08-15 10:11 1楼
最近在用89s52做了一个简易电容表,用的是1602液晶的显示。可是液晶老是显示不出来。 第一行显示黑的方格。第二行没有显示。液晶是好的。另外我有做了一个1602的测试程序。用proteus仿真都能显示。到实际电路中就出现上面的问题。请哪位大虾指教!!!急!!
菜鸟
2008-08-19 11:27 2楼
需LCD 驱动MCU推荐用:EM78P468NH/LH(台湾义隆)



单片机开发:http://hi.baidu.com/dianda34(代理义隆、松翰单片机)

菜鸟
2008-08-20 16:56 3楼
液晶显示一个要注意时序,很多时候不能显示是时序不对,再有就是对比度调节
工程师
2008-08-20 17:30 4楼
还是看看数据手册!
助工
2008-08-21 15:13 5楼
时序不对
或者在LCD忙时发送了下一条指令,造成LCD未执行该指令
你的仿真MCU晶振肯定小于实际晶振频率
助工
2008-08-22 10:21 6楼
#include
#include

#define uchar unsigned char
#define uint unsigned int

sfr lcd_bus = 0x80; //P0口对应地址0X80,声明lcdbus,控制数码管
sbit seg8con = P2^3; //声明seg8con,控制数码管段码
sbit bit8con = P2^4; //声明bit8con,控制数码管位码
sbit RS = P2^2; //寄存器选择
sbit RW = P2^1; //读/写选择
sbit E = P2^0; //使能信号

uchar code tel[]= //电话:15821637746
{
0x31,0x35,0x38,0x32,0x31,0x36,0x33,0x37,0x37,0x34,0x36
};
uchar code web[]= //网址:www.cpucore.cn
{
0x77,0x77,0x77,0x2e,0x63,0x70,0x75,0x63,0x6f,0x72,0x65,0x2e,0x63,0x6e
};
/*******************************************************************************
** 函数名称:lcd1602_delay
** 功能描述:LCD1602延时函数
** 输入:k
** 输出:无
** 全局变量:无
** 调用模块:无
**
** 作者:HXT
** 日期:2008年8月3日
**------------------------------------------------------------------------
** 修改人:
** 日期:
**------------------------------------------------------------------------
*******************************************************************************/
void lcd1602_delay(uchar k)
{
uchar i,j;
for(i=0;i{
for(j=0;j<200;j++)
{;}
}
}
/*******************************************************************************
** 函数名称:lcd1602_write_seq
** 功能描述:LCD1602显示器写命令时序函数
** 输入:无
** 输出:无
** 全局变量:无
** 调用模块:lcd1602_delay
**
** 作者:HXT
** 日期:2008年8月3日
**------------------------------------------------------------------------
** 修改人:
** 日期:
**------------------------------------------------------------------------
*******************************************************************************/
void lcd1602_write_seq(void)
{
RS=0;
RW=0;
E=0;
lcd1602_delay(5);
E=1;
}
/*******************************************************************************
** 函数名称:lcd1602_clear
** 功能描述:lcd1602清屏幕函数
** 输入:无
** 输出:无
** 全局变量:无
** 调用模块:lcd1602_write_seq
**
** 作者:HXT
** 日期:2008年8月3日
**------------------------------------------------------------------------------
** 修改人:
** 日期:
**------------------------------------------------------------------------------
*******************************************************************************/
void lcd1602_clear(void)
{
lcd_bus=0x01;
lcd1602_write_seq();
}
/*******************************************************************************
** 函数名称:lcd1602_row_addr
** 功能描述:lcd1602写行地址函数,选择待写字符的显示位置
** 输入:write_addr
** 输出:无
** 全局变量:无
** 调用模块:lcd1602_write_seq
**
** 作者:HXT
** 日期:2008年8月3日
**------------------------------------------------------------------------------
** 修改人:
** 日期:
**------------------------------------------------------------------------------
*******************************************************************************/
void lcd1602_row_addr(uchar write_addr)
{
lcd_bus=write_addr;
lcd1602_write_seq();
}
/*******************************************************************************
** 函数名称:lcd1602_init
** 功能描述:lcd1602初始化
** 输入:无
** 输出:无
** 全局变量:无
** 调用模块:lcd1602_delay,lcd1602_clear,lcd1602_write_seq
**
** 作者:HXT
** 日期:2008年8月3日
**------------------------------------------------------------------------------
** 修改人:
** 日期:
**------------------------------------------------------------------------------
*******************************************************************************/
void lcd1602_init(void)
{
lcd1602_delay(5);
lcd1602_clear();
lcd_bus=0x38;
lcd1602_write_seq();
lcd_bus=0x0c;
lcd1602_write_seq();
lcd_bus=0x06;
lcd1602_write_seq();
}
/*******************************************************************************
** 函数名称:lcd1602_write_onedata
** 功能描述:lcd1602写一个字节函数(一个字符)
** 输入:onebyte
** 输出:无
** 全局变量:无
** 调用模块:lcd1602_delay
**
** 作者:HXT
** 日期:2008年8月3日
**------------------------------------------------------------------------------
** 修改人:
** 日期:
**------------------------------------------------------------------------------
*******************************************************************************/
void lcd1602_write_onedata(uchar onebyte)
{
lcd_bus=onebyte;
RS=1;
RW=0;
E=0;
lcd1602_delay(5);
E=1;
}
/*******************************************************************************
** 函数名称:lcd1602_write_onebyte
** 功能描述:lcd1602写一个字节函数(一个字符)
** 输入:write_addr,onebyte
** 输出:无
** 全局变量:无
** 调用模块:lcd1602_delay,lcd1602_write_seq
**
** 作者:HXT
** 日期:2008年8月3日
**------------------------------------------------------------------------------
** 修改人:
** 日期:
**------------------------------------------------------------------------------
*******************************************************************************/
void lcd1602_write_onebyte(uchar write_addr,uchar onebyte)
{
lcd_bus=write_addr;
lcd1602_write_seq();
lcd_bus=onebyte;
RS=1;
RW=0;
E=0;
lcd1602_delay(5);
E=1;
}
/*******************************************************************************
** 函数名称:lcd1602_write_a_page
** 功能描述:lcd1602写页函数(多个数据)
** 输入:buffer,addr,bytenum
** 输出:无
** 全局变量:无
** 调用模块:lcd1602_row_addr,lcd1602_write_onebyte
**
** 作者:HXT
** 日期:2008年8月3日
**------------------------------------------------------------------------------
** 修改人:
** 日期:
**------------------------------------------------------------------------------
*******************************************************************************/
void lcd1602_write_a_page(uchar *buffer,uchar addr,uchar bytenum)
{
uchar i;
lcd1602_row_addr(addr);
for(i=0;i{
lcd1602_write_onedata(buffer[i]);
}
}/*******************************************************************************
** 函数名称:main
** 功能描述:主函数
** 输入:无
** 输出:无
** 全局变量:无
** 调用模块:lcd1602_delay,lcd1602_init,lcd1602_clear,lcd1602_write_a_page
**
** 作者:HXT
** 日期:2008年8月3日
**------------------------------------------------------------------------------
** 修改人:
** 日期:
**------------------------------------------------------------------------------
*******************************************************************************/
void main(void)
{
seg8con=1; //不锁存
bit8con=1; //不锁存
lcd_bus=0xff; //初始化,显示码和位选码都为0xff,数码管构不成回路
seg8con=0; //锁存数码管显示码数据
bit8con=0; //锁存数码管位选码数据
lcd1602_delay(10); //延时

lcd1602_init(); //lcd1602初始化
lcd1602_clear(); //lcd1602清屏幕

while(1)
{
lcd1602_write_a_page(web,0x81,14); //显示本站网址
lcd1602_write_a_page(tel,0xc2,11); //显示本站电话
}
}
/*******************************************************************************
End Of File
*******************************************************************************/
给你参考一下!
共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]