找回密码
 立即注册

QQ登录

只需一步,快速开始

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

LCD1602A显示图片功能

[复制链接]
跳转到指定楼层
#
最近学习51单片机学会LCD1602A显示图片功能,这里分享给大家(上传显示效果和使用说明)

#include"reg52.h"
#define uchar unsigned char
#define uint unsigned int

sbit lcdrs=P1^0;
sbit lcdrw=P1^1;
sbit lcden=P2^5;

uchar code table[]={
                         0x03,0x07,0x0f,0x1f,0x1f,0x1f,0x1f,0x1f,
                         0x18,0x1E,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,
                         0x07,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,
                         0x10,0x18,0x1c,0x1E,0x1E,0x1E,0x1E,0x1E,
                         0x0f,0x07,0x03,0x01,0x00,0x00,0x00,0x00,
                         0x1f,0x1f,0x1f,0x1f,0x1f,0x0f,0x07,0x01,
                         0x1f,0x1f,0x1f,0x1f,0x1f,0x1c,0x18,0x00,
                         0x1c,0x18,0x10,0x00,0x00,0x00,0x00,0x00
                                        };         //心形图片       
uchar code table1[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};  //自定义字符数据地址

void delay(uchar z)
{
       uint x,y;
       for(x=z;x>0;x--)
              for(y=122;y>0;y--);      
}
void write_cmd(uchar cmd)        //写命令
{
       lcdrs=0;
       lcdrw=0;   
       lcden=1;
       P0=cmd;     
       delay(5);
       lcden=0;   
       lcden=1;
}
void write_date(uchar date)         //写入数据
{
       lcdrs=1;
       lcdrw=0;   
       lcden=1;
       P0=date;   
       delay(5);
       lcden=0;   
       lcden=1;
}
void init_lcd1602()          //1602初始化
{
       write_cmd(0x01);  
       write_cmd(0x38);  
       write_cmd(0x0c);  
       write_cmd(0x06);  
       delay(1);
}
void main()
{
       uchar i;
       init_lcd1602();
       delay(1);
              write_cmd(0x40);    //开始写入你要显示的自定义字符、汉字代码
              for(i=0;i<64;i++)
              {
                     write_date(table[i]);
                     delay(5);
              }
              write_cmd(0x80);   
              for(i=0;i<4;i++)     //写入心形前一半数据
              {
                     write_date(table1[i]);  
                     delay(5);
              }
                                       write_cmd(0xc0);   
              for(i=4;i<8;i++)                      //写入心形后一半数据
              {
                     write_date(table1[i]);  
                     delay(5);
              }
                                      
       while(1);
}

微信图片_20180723213232.jpg (84.13 KB, 下载次数: 82)

微信图片_20180723213232.jpg

参考资料.doc

43.5 KB, 下载次数: 29, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

5#
ID:1064915 发表于 2025-7-3 09:26 | 只看该作者
     LCD1602内部有一个64字节的自定义CGRAM,一个字符占8个字节,所以在CGRAM能够存放8个字符。
CGRAM的地址为0x40.所以当我们要写入数据时,要先写入一条地址命令 write_com(0x040);然后把你要写入的数据通过写数据命令写入  write_date( 你要写得数据);
           write_cmd(0x40);    //开始写入你要显示的自定义字符、汉字代码
              for(i=0;i<64;i++)
              {
                     write_date(table[i]);
                     delay(5);
              }
以上只是把你要显示汉字的代码存放在CGRAM里,就相当于其他常用字符一样固定在LCD里面了,如果不把它读出来,LCD是不会显示的。
      常用字符是从0x20开始显示,而0x00—0x0f都是没有用的,其实这个正式为我们自定义显示字符准备的。当你把上面的代码输入到CGRAM中,LCD1602会把汉字或字符赋与地址,这个地址是从0x00开始,因为最多只能8个字符,所以当在CGRAM里面输入8个字符代码时,这8个字符的代码的数据地址就是0x00开始到0x07。
     要显示自定义字符和显示常用字符一样的做法了,先写地址,然后写数据
自定义字符的数据就是0x00—0x07。
Write_date(0x00) — Write_date(0x07);
回复

使用道具 举报

地板
ID:1110477 发表于 2025-7-3 03:07 | 只看该作者
为啥是:write date,而不是write data
回复

使用道具 举报

板凳
ID:1110792 发表于 2025-7-2 19:34 | 只看该作者
由创意,赞!
回复

使用道具 举报

沙发
ID:466164 发表于 2019-3-13 22:03 | 只看该作者
有创意,买了12864,我的那个很久没用了,顶一下。
回复

使用道具 举报

楼主
ID:68189 发表于 2019-3-13 10:23 | 只看该作者
感谢分享,谢谢楼主了.
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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