六、温湿度传感器DHT11驱动封装(下):如何为编程爱好者设计一款好玩的智能硬件(六)——初尝试·把温湿度给收集了(下)!

七、点阵字符型液晶显示模块LCD1602驱动封装(上):如何为编程爱好者设计一款好玩的智能硬件(七)——LCD1602点阵字符型液晶显示模块驱动封装(上)

八、LCD1602点阵字符型液晶显示模块驱动封装(中)

  已经有好一阵子没写了,一方面是因为最近闲杂的事特多,另一方面(主要方面)是因为我卡在了LCD1602驱动的权衡上面——总共3个控制线和一个8位并行的数据线,放在51这种引脚直接使用的8位单片机上驱动代码非常简洁;放在CC2541这种引脚需要提前声明属性,并且引脚属性分输入和输出两种,其驱动代码就稍微复杂;等到将其移植到STM32F103上的时候,整个代码已经不能看了!我先基于51平台写其驱动,然后扩展写CC2541,最后准备攻克STM,结果代码乱到不想看~由此,我想如果强行地去适应各种硬件平台,不如根据不同得组合场景写不同的代码,强扭的瓜不甜,所以接下来计划有变→_→!

  遂思忖良久,终醍醐灌顶——maybe 51和LCD1602更配哦~following:

用MCU+LCD+无线构成一个无线显示模块

而不拘泥于之前得用一个模块强硬地去适应各种平台的做法

本节尝试做一个最简单的无线显示屏,然后在接下来几节不断完善做出让你大吃一惊的无线显示屏

1、本节的无线显示屏的样子 

  由于LCD1602屏分为上下两行,每行可显示16个字符(ASCII),为了达到较好的显示效果(我从老式新闻联播下面的消息滚动得来灵感),决定尝试做一个滚动的显示屏~

2、先做个滚动显示屏

第一种滚屏方式:双行双信息

 void main()
{
uchar a;
init(); write_com(0x80 + ); //将第一个字符写在向右偏移17个字符处,为后面的由右向左划入做准备。
delay();
for(a = ; a < ; a++)
{
write_date(table1[a]);
delay();
} write_com(0xc0 + );
delay();
for(a = ; a < ; a++)
{
write_date(table2[a]);
delay();
} for(a = ; a < ; a++)
{
write_com(0x18); //左移
delay1();
}
while();
}

  该种方式中6-20行先将要显示的两行内容分别存储到LCD1602非显示区的内存处,然后在22-26行通过左移指令将未显示区数据拉到显示区显示,从而达到滚动效果!该种显示效果是同时利用两行向左滚动信息的方式,但是两行必须同时滚动,不太理想~

第二种滚屏方式:双行滚一信息,满屏清屏

 void main()
{
init();
for(num = ; num < ; num++) //第一屏
{
beep = ;
write_data(table[num]);
delay();
beep = ;
delay();
}
write_com(0x80 + 0x40);
for(num = ; num < ; num++)
{
beep = ;
write_data(table1[num]);
delay();
beep = ;
delay();
}
write_com(0x01); //清屏
write_com(0x80); //设置字符显示位置指针于第一行
for(num = ; num < ; num++) // 第二屏
{
beep = ;
write_data(table2[num]);
delay();
beep = ;
delay();
}
write_com(0x80 + 0x40); //设置字符显示位置指针于第二行
for(num = ; num < ; num++)
{
beep = ;
write_data(table3[num]);
delay();
beep = ;
delay();
}
write_com(0x80);
write_com(0x01);
for(num = ; num < ; num++) //第三屏
{
beep = ;
write_data(table4[num]);
delay();
beep = ;
delay();
}
write_com(0x80 + 0x40);
for(num = ; num < ; num++)
{
beep = ;
write_data(table5[num]);
delay();
beep = ;
delay();
}
write_com(0x01);
write_com(0x80);
for(num = ; num < ; num++) //第四屏
{
beep = ;
write_data(table6[num]);
delay();
beep = ;
delay();
}
write_com(0x80 + 0x40);
for(num = ; num < ; num++)
{
beep = ;
write_data(table7[num]);
delay();
beep = ;
delay();
}
write_com(0x01);
write_com(0x80);
for(num = ; num < ; num++) //第五屏
{
beep = ;
write_data(table8[num]);
delay();
beep = ;
delay();
}
write_com(0x80 + 0x40);
for(num = ; num < ; num++)
{
beep = ;
write_data(table9[num]);
delay();
beep = ;
delay();
}
write_com(0x01);
write_com(0x80); for(num = ; num < ; num++) //第六屏
{
beep = ;
write_data(table10[num]);
delay();
beep = ;
delay();
}
write_com(0x80 + 0x40);
for(num = ; num < ; num++)
{
beep = ;
write_data(table11[num]);
delay();
beep = ;
delay();
}
while();
}

  

  此种显示方式是将下面的一个名人名言滚动显示出来——

uchar code table [] = "I want to bring ";
uchar code table1[] = "out the secret ";
uchar code table2[] = "of nature and ";
uchar code table3[] = "apply them for ";
uchar code table4[] = "the happiness of";
uchar code table5[] = "man.I don't know";
uchar code table6[] = "of any better s-";
uchar code table7[] = "-ervice to offer";
uchar code table8[] = "for the short t-";
uchar code table9[] = "-ime we are in ";
uchar code table10[] = "the world. ";
uchar code table11[] = "---Thomas Edison";

  每次写另一行数据时会调用write_com(0x80)或write_com(0xC0)命令重新调整字符显示位置指针,当执行写0x80之后,再写数据就会依次写入0x80,0x81....中(即第一行的从左往右的数据),当写0xC0之后,再写数据将会依次写入0xC0,0xC1....(即第二行的从左往右的数据),每次两行数据都写过之后写入0x01清屏,进入下次数据写入环节~该滚动效果符合正常阅读习惯——从上到下,从左到右

3、开工做无线滚动屏     

  

  经常读我文章的朋友可能知道我写这个无线滚动显示屏的制作肯定会以蓝牙串口透传模块作为切入点——因为蓝牙串口透传模块只要简单连线就能像操作串口一样来实现蓝牙无线传输数据了,我在这方面也花了比较多的笔墨介绍它——

 下面是以前写的蓝牙串口透传的各种应用:

[C#] 编程控制笔记本蓝牙与外部蓝牙设备通信

  [安卓] 11、串口蓝牙·将软硬结合进行到底

  [安卓] 13、安卓蓝牙定位(一)——如何周期性获得蓝牙节点信号强度?

  [智能硬件] 1、三分钟看懂智能硬件原理——蓝牙防丢器制作教程(包括手机应用)

  [智能硬件] 2、三分钟看懂智能硬件原理——智能玩具小风扇制作教程(包括手机应用开发)

  [智能硬件] 3、三分钟看懂智能硬件原理——简易智能手环制作教程(包括炫酷手机客户端开发)

最终效果预览  

综上,我们实现串口发送也就很方便利用蓝牙透传实现无线屏

因此,我们只要实现在上位机串口助手上发送一个字符串,能够在LCD1602显示屏上显示出来就算完成了制作一个最简单的无线显示屏的任务了!

由于,今天有点晚,所以先来个效果预览,具体工程明天再细讲!

@beautifulzzzz

  2015-10-1 持续更新中~

如何为编程爱好者设计一款好玩的智能硬件(八)——LCD1602点阵字符型液晶显示模块驱动封装(中)的更多相关文章

  1. 如何为编程爱好者设计一款好玩的智能硬件(九)——LCD1602点阵字符型液晶显示模块驱动封装(下)

    六.温湿度传感器DHT11驱动封装(下):如何为编程爱好者设计一款好玩的智能硬件(六)——初尝试·把温湿度给收集了(下)! 七.点阵字符型液晶显示模块LCD1602驱动封装(上):如何为编程爱好者设计 ...

  2. 如何为编程爱好者设计一款好玩的智能硬件(七)——LCD1602点阵字符型液晶显示模块驱动封装(上)

    当前进展: 一.我的构想:如何为编程爱好者设计一款好玩的智能硬件(一)——即插即用.积木化.功能重组的智能硬件模块构想 二.别人家的孩子:如何为编程爱好者设计一款好玩的智能硬件(二)——别人是如何设计 ...

  3. 如何为编程爱好者设计一款好玩的智能硬件(十)——无线2.4G通信模块研究·一篇说完

    六.温湿度传感器DHT11驱动封装(下):如何为编程爱好者设计一款好玩的智能硬件(六)——初尝试·把温湿度给收集了(下)! 七.点阵字符型液晶显示模块LCD1602驱动封装(上):如何为编程爱好者设计 ...

  4. 如何为编程爱好者设计一款好玩的智能硬件(三)——该选什么样的MCU呢?

    一.我的构想:如何为编程爱好者设计一款好玩的智能硬件(一)——即插即用.积木化.功能重组的智能硬件模块构想 二.别人家的孩子:如何为编程爱好者设计一款好玩的智能硬件(二)——别人是如何设计硬件积木的! ...

  5. 程序员编程利器:20款最好的免费的IDEs和编辑器

    程序员编程利器:20款最好的免费的IDEs和编辑器 还没转眼明年可就大年三十了,忙的可真是晕头转了个向,看着亲朋好友们那让人欣羡的小肚腩,不禁感慨,岁月是一把猪饲料,绿了芭蕉,肥了那杨柳小蛮腰,可怜我 ...

  6. IOS开发入门教程-总结篇-写给狂热的编程爱好者们

    程序发轻狂,代码阑珊,苹果开发安卓狂!--写给狂热的编程爱好者们 写在前面的话 学习iOS应用程序开发已有一段时间,最近稍微闲下来了,正好也想记录一下前阶段的整个学习过程.索性就从最基础的开始,一步一 ...

  7. Java Socket 网络编程心跳设计概念

    Java Socket 网络编程心跳设计概念   1.一般是用来判断对方(设备,进程或其它网元)是否正常动行,一 般采用定时发送简单的通讯包,如果在指定时间段内未收到对方响应,则判断对方已经当掉.用于 ...

  8. 五款好玩又好用的Linux网络测试和监控工具

    五款好玩又好用的Linux网络测试和监控工具 [51CTO精选译文]在这篇介绍几款Linux网络测试实用工具的文章中,我们使用Bandwidthd.Speedometer.Nethogs.Darkst ...

  9. 如何从零开始设计一款漂亮的移动APP?

    以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具. 我13岁时开始学习平面设计.我从网上课程学会了设计网站,并习惯于全天使用Photoshop和Affi ...

随机推荐

  1. PMI列子1

    遍历得到PMI中,是注释类型的,你可以参考一下.int num_text, thetype, thesubtype;tag_t  draft_aid_tag = NULL_TAG;UF_UI_open ...

  2. html中 table 和 form的位置

    对于web前端开发来说  经常会用到 像firebug这样审查元素 工具 发现了一个这样的现象: 当 able><form><tr>....</tr>< ...

  3. ZOJ3795_Grouping

    告诉你某些人的年龄大小关系,问你把所有的人分成若干个组,最少需要多少组,使得组内任意两个人的年龄不可比. 首先考虑特殊情况,如果所有年龄关系构成了一个环,那么这个环中所有人的年龄都是相等,也就是可比的 ...

  4. SQL Server 大数据量分页建议方案

    简单的说就是这个 select top(20) * from( select *, rowid = row_number() over(order by xxx) from tb with(noloc ...

  5. C++面试中关于sizeof问题总结

    原文:http://blog.sina.com.cn/s/blog_7c983ca60100yfdv.html#SinaEditor_Temp_FontName (1)      sizeof是操作符 ...

  6. 编写shell脚本遇到的问题

    运行shell脚本提示“syntax error near unexpected token for((i=0;i<$length;i++))”: 原因是因为Linux下的换行符是 \n 而你在 ...

  7. java 验证码

    package lizikj.bigwheel.pcsystem.util;import javax.imageio.ImageIO; import java.awt.*; import java.a ...

  8. Asp.Net异步编程-使用了异步,性能就提升了吗?

    Asp.Net异步编程 写在前面的话,很久没有写Blog了,不对,其实一致就没有怎么写过.今天有空,我也来写一篇Blog 随着.Net4.5的推出,一种新的编程方式简化了异步编程,在网上时不时的也看到 ...

  9. Spring笔记--0907

    包含ioc和aop两大核心概念 aop----事务管理 spring框架运用的设计模式(查一下) ---------------------------------------Ioc(控制反转)和Di ...

  10. jquery操作dom

    1访问元素(属性,内容,值,css) 1元素属性(获取,设置,删除) .attr(name) .attr(key, value)  || .attr({key0:value0, key1:value1 ...