这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 1602液晶显示问题!!请大家帮忙解决一下

共6条 1/1 1 跳转至

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

菜鸟
2008-08-15 10:11:29     打赏
    最近在用89s52做了一个简易电容表,用的是1602液晶的显示。可是液晶老是显示不出来。第一行显示黑的方格。第二行没有显示。液晶是好的。另外我有做了一个1602的测试程序。用proteus仿真都能显示。到实际电路中就出现上面的问题。请哪位大虾指教!!!急!!



关键词: 液晶显示     问题     大家     帮忙     解决     一下    

菜鸟
2008-08-19 11:27:30     打赏
2楼
需LCD 驱动MCU推荐用:EM78P468NH/LH(台湾义隆)



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


菜鸟
2008-08-20 16:56:30     打赏
3楼
液晶显示一个要注意时序,很多时候不能显示是时序不对,再有就是对比度调节

工程师
2008-08-20 17:30:36     打赏
4楼
还是看看数据手册!

助工
2008-08-21 15:13:09     打赏
5楼
时序不对
或者在LCD忙时发送了下一条指令,造成LCD未执行该指令
你的仿真MCU晶振肯定小于实际晶振频率

助工
2008-08-22 10:21:33     打赏
6楼
#include <at89x51.h>
#include <intrins.h>

#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<k;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<bytenum;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 跳转至

回复

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