大家好,今天给各位分享51单片机学习251602液晶显示自定义图形的一些知识,其中也会对进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!
以第二行第七行显示—month 为例,方便在特定位置显示特定的汉字或图形。
仿真图:
这里需要一个取模软件:
1 首先选择8*8的尺寸
2 放大图表
3、参数设置
4.获取具体图形。需要注意的是,左边的三列不要使用。然后根据需要取模具
程序:
程序内容较多,详细请参考源码。
源代码:
#includereg52.h
#include 内在函数.h
#定义uchar无符号字符
#定义uint 无符号整型
#定义delayNOP(); {_nop_();_nop_();_nop_();_nop_();}; //短延迟
sbit LCD_RS=P2^0;
位LCD_RW=P2^1;
位LCD_EN=P2^2;
//自定义字符
uchar code mytab1[8]={0x1F,0x11,0x11,0x1F,0x11,0x11,0x1F,0x00,};//日
uchar代码mytab2[8]={0x0F,0x09,0x0F,0x09,0x0F,0x09,0x0B,0x19,}; //月
void delay1(int ms) //带参数的ms级延迟函数
{
无符号字符y;
同时(毫秒–)
{
for(y=0; y250; y++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
/******************************************************** ***** ******************/
/*检查LCD忙状态*/
/*lcd_busy=1,忙,等待,lcd_busy=0,空闲*/
/******************************************************** ***** ******************/
bit lcd_busy() //忙检测
{
位结果;
LCD_RS=0;
LCD_RW=1;
LCD_EN=1;
延迟NOP();
结果=(位)(P00x80);
LCD_EN=0;
返回(结果);
}
/******************************************************** ***** ******************/
/*向LCD写入指令*/
/*RS=L,RW=L,E=高电平,D0-D7=命令码*/
/******************************************************** ***** ******************/
无效lcd_wcmd(uchar cmd)
{
while(lcd_busy());
LCD_RS=0;
LCD_RW=0;
LCD_EN=0;
_nop_();
_nop_();
P0=命令;
延迟NOP();
LCD_EN=1;
延迟NOP();
LCD_EN=0;
}
/******************************************************** ***** ******************/
/*向LCD写入数据*/
/*RS=H,RW=L,E=高脉冲,D0-D7=数据*/
/******************************************************** ***** ******************/
无效lcd_wdat(uchar dat)
{
while(lcd_busy());
LCD_RS=1;
LCD_RW=0;
LCD_EN=0;
P0=数据;
延迟NOP();
LCD_EN=1;
延迟NOP();
LCD_EN=0;
}
/******************************************************** ***** ******************/
/* 将字符串写入LCD */
/******************************************************** ***** ******************/
无效write_str(uchar addr,uchar *p)
{
uchar i=0;
lcd_wcmd(地址);
while(p[i]!=’\0′)
{
lcd_wdat(p[i]);
我++;
}
}
/******************************************************** ***** **********/
/* 设置显示位置*/
/******************************************************** ***** **********/
无效write_position(uchar 行,uchar 列)
{
乌查尔地方;
if(row==1) //第一行
{
地方=0x80+col-1; //位置
lcd_wcmd(地点);
}
别的
{
地方=0xc0+col-1;
lcd_wcmd(地点);
}
}
/******************************************************** ***** **********/
/*将自定义字符写入CGRAM */
/******************************************************** ***** **********/
无效writetab1()
{
无符号字符i;
液晶屏_wcmd(0x40); //设置CGRAM地址
对于(i=0; i 8; i++)
lcd_wdat(mytab1[i]);
}
无效writetab2()
{
无符号字符i;
lcd_wcmd(0x48); //设置CGRAM地址
对于(i=0; i 8; i++)
lcd_wdat(mytab2[i]);
}
/******************************************************** ***** ******************/
/* 液晶屏初始化*/
/******************************************************** ***** ******************/
无效init_lcd()
{
延迟1(15); //延迟15ms
液晶屏_wcmd(0x01); //清屏
lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据
延迟1(5); //延迟5ms
液晶屏_wcmd(0x38);
延迟1(5);
lcd_wcmd(0x38);
延迟1(5);
lcd_wcmd(0x0c); //显示打开和关闭光标
延迟1(5);
液晶屏_wcmd(0x06); //移动光标
延迟1(5);
液晶屏_wcmd(0x01); //清屏
延迟1(5);
}
/*
0x00:第一个(0x40)0x01:第二个(0x48)
0x02:第三个(0x50)0x03:第四个(0x58)
0x04:第五个(0x60)0x05:第六个(0x68)
0x06:第七个(0x70)0x07:第八个(0x78)
第一行第一个位置的地址是0x80,第二行第一个位置的地址是0xC0
要求第一行第六个显示日
第二行第七行显示月份
*/
无效主()
{
init_lcd();
同时(1)
{
//显示日期
writetab1(); //第一个自定义字符的内容
写位置(1,6); //指定显示位置
液晶屏_wdat(0x00); //显示内容
//显示月份
writetab2(); //第二个自定义字符的内容
写位置(2,7);
液晶屏_wdat(0x01);
}
模拟结果:
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/132316.html
用户评论
窒息
终于找到这篇文章了!一直想自己实现简单的显示动态图片的功能,51单片机的性能有限,还是需要好好学习一下教程才能搞定。
有9位网友表示赞同!
算了吧
这个标题太吸引人了!我是嵌入式刚入门不久,对定制图形一直感兴趣,但现在还没接触过51芯片… 看到这个标题感觉自己离实现梦寐以求的功能越来越近了!
有13位网友表示赞同!
抚笙
我一直在用Arduino玩单片机项目,不过最近想尝试探索一下51的学习,从51单片机学习251602液晶显示自定义图形开始? 这篇文章或许能帮我开启这段新旅程!
有11位网友表示赞同!
北朽暖栀
屏幕尺寸有限、分辨率低总是51单片机的痛点,如果能实现自定义图形,至少有些丰富度了! 教程内容完善么?希望讲解清晰易懂!
有6位网友表示赞同!
逃避
我觉得51的液晶控制比较麻烦,学习成本也不小。如果能直接用更现代的芯片和屏幕也许会简单一些 ,但是想要了解这种经典的方式,确实需要好好研究一下!
有13位网友表示赞同!
■□丶一切都无所谓
学习这个项目需要什么基础知识啊? 我是完全没有单片机编程经验的入门者, 感觉自己是不是太菜了…
有11位网友表示赞同!
烬陌袅
对于想学习嵌入式和51的人来说,这个教程非常有价值。希望作者能不断更新,补充一些更实用的内容!
有15位网友表示赞同!
旧事酒浓
自己摸索实现自定义图形需要投入很多时间精力,这篇教程直接给出清晰的过程和代码真是太棒了!
有9位网友表示赞同!
采姑娘的小蘑菇
看这标题就感觉很有意思,终于可以看到51单片机显示出自己想要的图片了,以前只能做一些简单的静态字符显示…我要尝试一下!
有5位网友表示赞同!
绳情
我之前用STM32玩过类似的项目,发现51单片机的资源控制和开发方式确实不太一样。这个教程能帮我在学习过程中避开一些坑吗?
有14位网友表示赞同!
来瓶年的冰泉
我对51单片机的学习已经停滞不前了很久! 看这篇文章再次燃起了我的热情! 相信通过学习这个教程,我能够突破瓶颈重新开始
有10位网友表示赞同!
别在我面前犯贱
自定义图形的效果太酷了,一定要尝试一下! 文章讲解得怎么样啊?
有6位网友表示赞同!
敬情
学习成本太高了吧,而且51单片机的应用场景比较有限,直接用更强大的MCU不香吗……
有9位网友表示赞同!
惯例
这个项目听起来很有趣,但感觉对编程有一定要求啊! 我要好好想想自己时间安排是否合适再决定学习的节奏!
有8位网友表示赞同!
挽手余生ら
这个教程看起来很棒,希望能找到一些具体的代码和实例讲解,这样更能上手。
有8位网友表示赞同!
一生只盼一人
希望这篇教程能够涵盖比较全面的内容, 从基本电路设计到最终显示效果,都能一一解析!
有15位网友表示赞同!