找回密码
 立即注册

QQ登录

只需一步,快速开始

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

LCD1602显示汉字 错误问题

[复制链接]
跳转到指定楼层
楼主
用LCD1602的CGRAM显示自定义的汉字 不知道哪里出错 就是不显示 求大神解答

#include<reg52.h>
sbit CE = P2^7;
sbit RW = P2^5;
sbit RS = P2^6;

unsigned char table[]=
{
        0x1F,0x11,0x11,0x1F,0x11,0x11,0x1F,0x00,//日
        0x0F,0x09,0x0F,0x09,0x0F,0x09,0x09,0x12,//月
        0x04,0x0F,0x12,0x0F,0x0A,0x1F,0x02,0x02,//年       
};

void Read_Busy()
{
        unsigned char busy;
        P0 = 0xff;
        RS = 0;
        RW = 1;
        do{
                CE = 1;
                busy = P0;
                CE = 0;
        }while(busy>7);       
}

void Write_Cmd(unsigned char cmd)
{
        Read_Busy();
        RS = 0;
        RW = 0;
        P0 = cmd;
        CE = 1;
        CE = 0;
}

void Write_Data(unsigned char dat)
{       
        Read_Busy();
        RS = 1;
        RW = 0;
        P0 = dat;
        CE = 1;
        CE = 0;
}

void main()
{
        int i;
        Write_Cmd(0x01);//数据指针清零 所有显示清零
        Write_Cmd(0x38);//设置显示
        Write_Cmd(0x0f);//开显示 光标闪烁
        Write_Cmd(0x06);//设置指针 光标 不移屏

        Write_Cmd(0x41); //写入CGROM
        for(i=0;i<24;i++)
        {
                Write_Data(table[i]);
        }
       
        Write_Cmd(0x80);//设置地址指针
        Write_Data(0x00);
        Write_Data(0x01);
        Write_Data(0x02);
        while(1);
}



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

使用道具 举报

沙发
ID:170270 发表于 2017-7-26 17:17 | 只看该作者
1602显示不了汉字。。。
回复

使用道具 举报

板凳
ID:492671 发表于 2019-11-20 23:11 | 只看该作者
可以的,但是比较麻烦
回复

使用道具 举报

地板
ID:213173 发表于 2019-11-21 07:00 | 只看该作者
汉字1602+ds1302+18B20万年历+仿真.zip (144.15 KB, 下载次数: 13)



回复

使用道具 举报

5#
ID:646252 发表于 2019-11-21 08:40 | 只看该作者
1602显示不了汉字
回复

使用道具 举报

6#
ID:560467 发表于 2019-11-21 09:08 | 只看该作者
lcd1602显示不了汉字的,换其他显示屏吧
回复

使用道具 举报

7#
ID:415088 发表于 2019-11-21 09:39 | 只看该作者
楼主,你的等待液晶准备好的函数是不是有一点问题:/* 等待液晶准备好 */
void LcdWaitReady()
{
        unsigned char sta;
       
        LCD1602_DB = 0xFF;
        LCD1602_RS = 0;
        LCD1602_RW = 1;
        do {
                LCD1602_E = 1;
                sta = LCD1602_DB; //读取状态字
                LCD1602_E = 0;
        } while (sta & 0x80); //bit7 等于 1 表示液晶正忙,重复检测直到其等于 0 为止
}
回复

使用道具 举报

8#
ID:213173 发表于 2019-11-21 10:37 | 只看该作者
两处错误!

#include<reg52.h>
sbit CE = P2^7;
sbit RW = P2^5;
sbit RS = P2^6;

unsigned char table[]=
{
        0x1F,0x11,0x11,0x1F,0x11,0x11,0x1F,0x00,//日
        0x0F,0x09,0x0F,0x09,0x0F,0x09,0x09,0x12,//月
        0x04,0x0F,0x12,0x0F,0x0A,0x1F,0x02,0x02,//年
};

void Read_Busy()
{
        unsigned char busy;
        P0 = 0xff;
        RS = 0;
        RW = 1;
        do{
                CE = 1;
                busy = P0;
                CE = 0;
        }while(busy>7);//while(busy>>7);      
}

void Write_Cmd(unsigned char cmd)
{
        Read_Busy();
        RS = 0;
        RW = 0;
        P0 = cmd;
        CE = 1;
        CE = 0;
}

void Write_Data(unsigned char dat)
{        
        Read_Busy();
        RS = 1;
        RW = 0;
        P0 = dat;
        CE = 1;
        CE = 0;
}

void main()
{
        int i;
        RW = 0;
        Write_Cmd(0x01);//数据指针清零 所有显示清零
        Write_Cmd(0x38);//设置显示
        Write_Cmd(0x0f);//开显示 光标闪烁
        Write_Cmd(0x06);//设置指针 光标 不移屏
       
        Write_Cmd(0x41); //Write_Cmd(0x40);
        for(i=0;i<24;i++)
        {
                Write_Data(table);
        }       
        Write_Cmd(0x80);//设置地址指针
        Write_Data(0x00);
        Write_Data(0x01);
        Write_Data(0x02);
        while(1);
}

回复

使用道具 举报

9#
ID:637732 发表于 2019-11-21 20:14 | 只看该作者
你可以考虑学习12864液晶,那个显示汉字较为容易
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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