找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5795|回复: 4
打印 上一主题 下一主题
收起左侧

LCD2004液晶测试程序有问题,液晶不显示

[复制链接]
跳转到指定楼层
楼主
ID:24879 发表于 2013-10-11 13:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/************************************************************************************************/
/***                                       LCD2004液晶显示                                                ***/
/***                                       2013-10-9                                                      ***/
/************************************************************************************************/
#include<aduc812.h>
#define uint unsigned int
#define uchar unsigned char
#define DATA P0                                                                    //定义LCM数据总线至P0
sbit RS=P2^5;                                                                        //寄存器选择位(0指令1数据)
sbit RW=P2^6;                                                                        //设置读写位(0写入1读取)
sbit E=P2^7;                                                                        //使能为(0禁止1允许)
sbit BF=P1^7;

//uchar line1[]="LCM TEST PROGRAM";                                //第一行显示字符
//uchar line2[]="Everything is OK!";                                //第二行显示字符
//uchar line3[]="aaaaaaaaaaaaaaa";                                    //第三行显示字符
//uchar line4[]="bbbbbbbbbbbbbbb";                                    //第四行显示字符

void Init_LCD(void);                                                        //声明液晶初始化设置函数
void write_cmd(uchar);                                                        //声明写指令函数
void write_data(uchar);                                                        //声明写数据函数
void check_BF(void);                                                        //声明检测忙信号函数
void delay_1ms(uint);                                                        //声明延时函数       
void set_xy(uchar x,uchar y);                                        //声明显示位置
void display(uchar x,uchar y,uchar *s);                        //声明显示函数

/*********************1ms延时函数****************************************************************/
void delay_1ms(uint x)
{
        uint i,j;
        for(i=1;i<x;i++)
        for(j=1;j<120;j++);
}
/*********************液晶初始化函数*************************************************************/
void Init_LCD(void)
{
        write_cmd(0x38);                                                         //设置8位格式,2行,5x7
        write_cmd(0x01);                                                         //设定输入方式,增量不移位
        write_cmd(0x06);                                                         //整体显示,关光标,不闪烁
        write_cmd(0x0c);                                                         //清除屏幕显示                       
}
/**********************写指令函数******************************************************************/
void write_cmd(uchar com)
{
        check_BF();
        RS=0;
        RW=0;
        DATA=com;
        delay_1ms(2);
        E=1;
        delay_1ms(2);
        E=0;
}
/**********************写数据函数*******************************************************************/
void write_data(uchar chardata)
{
        check_BF();
        RS=1;
        RW=0;
        DATA=chardata;
        delay_1ms(2);
        E=1;
        delay_1ms(2);
        E=0;
}
/**********************检查忙碌函数******************************************************************/
void check_BF(void)
{
        E=0;
        do
        {
                BF=1;
                RS=0;
                RW=1;
                E=1;
        }while(BF==1);       
}
/**********************定义显示位置*******************************************************************/
void set_xy(uchar x,uchar y)
{
        uchar add;
        if(x==0)
                add=0x80+y;
        else
                if(x==1)
                        add=0xc0+y;
        else
                if(x==2)
                        add=0x94+y;
        else
                if(x==3)
                        add=0xd4+y;
        write_cmd(add);

}
/**********************显示函数***********************************************************************/
void display(uchar x,uchar y,uchar *s)
{
        set_xy(x,y);
        while(*s)
        {
                DATA=*s;
                write_data(*s);
                s++;
        }
       
}
/**********************主函数*************************************************************************/
void main()
{
        Init_LCD();
        while(1)
        {
                display(0,0,"line1");
                display(1,0,"line2");
                display(2,0,"line3");
                display(3,0,"line4");
                         
        }
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:105648 发表于 2016-3-15 23:54 | 只看该作者
本帖最后由 mysy 于 2016-3-16 00:10 编辑

看你的硬件接口是否一样,他的打印函数很简单。。。 不一定对

回复

使用道具 举报

板凳
ID:105648 发表于 2016-3-16 00:50 | 只看该作者
check_BF(); 有问题, 删除或修改
回复

使用道具 举报

地板
ID:106422 发表于 2018-9-24 17:05 | 只看该作者
删除了忙检测还是不显示怎么办?
回复

使用道具 举报

5#
ID:529857 发表于 2019-5-7 18:15 | 只看该作者
 初始化貌似有点小问题   我小白,  说错了别见怪
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表