arduino lcd16022 NUM后面计数

六、温湿度传感器DHT11驱动封装(下):
七、点阵字符型液晶显示模块LCD1602驱动封装(上):
八、LCD1602点阵字符型液晶显示模块驱动封装(中)
  已经有好一阵子没写了,一方面是因为最近闲杂的事特多,另一方面(主要方面)是因为我卡在了LCD1602驱动的权衡上面&&总共3个控制线和一个8位并行的数据线,放在51这种引脚直接使用的8位单片机上驱动代码非常简洁;放在CC2541这种引脚需要提前声明属性,并且引脚属性分输入和输出两种,其驱动代码就稍微复杂;等到将其移植到STM32F103上的时候,整个代码已经不能看了!我先基于51平台写其驱动,然后扩展写CC2541,最后准备攻克STM,结果代码乱到不想看~由此,我想如果强行地去适应各种硬件平台,不如根据不同得组合场景写不同的代码,强扭的瓜不甜,所以接下来计划有变&_&!
  遂思忖良久,终醍醐灌顶&&maybe 51和LCD1602更配哦~following:
用MCU+LCD+无线构成一个无线显示模块
而不拘泥于之前得用一个模块强硬地去适应各种平台的做法
本节尝试做一个最简单的无线显示屏,然后在接下来几节不断完善做出让你大吃一惊的无线显示屏
1、本节的无线显示屏的样子 
  由于LCD1602屏分为上下两行,每行可显示16个字符(ASCII),为了达到较好的显示效果(我从老式新闻联播下面的消息滚动得来灵感),决定尝试做一个滚动的显示屏~
2、先做个滚动显示屏
第一种滚屏方式:双行双信息
1 void main()
write_com(0x80 + 17);
//将第一个字符写在向右偏移17个字符处,为后面的由右向左划入做准备。
delay(20);
for(a = 0; a & 13; a++)
write_date(table1[a]);
delay(20);
write_com(0xc0 + 17);
delay(50);
for(a = 0; a & 13; a++)
write_date(table2[a]);
delay(40);
for(a = 0; a & 16; a++)
write_com(0x18); //左移
delay1(600);
  该种方式中6-20行先将要显示的两行内容分别存储到LCD1602非显示区的内存处,然后在22-26行通过左移指令将未显示区数据拉到显示区显示,从而达到滚动效果!该种显示效果是同时利用两行向左滚动信息的方式,但是两行必须同时滚动,不太理想~
第二种滚屏方式:双行滚一信息,满屏清屏
1 void main()
for(num = 0; num & 16; num++) //第一屏
write_data(table[num]);
delay(100);
delay(50);
write_com(0x80 + 0x40);
for(num = 0; num & 16; num++)
write_data(table1[num]);
delay(100);
delay(50);
write_com(0x01); //清屏
write_com(0x80);
//设置字符显示位置指针于第一行
for(num = 0; num & 16; num++) // 第二屏
write_data(table2[num]);
delay(100);
delay(50);
write_com(0x80 + 0x40); //设置字符显示位置指针于第二行
for(num = 0; num & 16; num++)
write_data(table3[num]);
delay(100);
delay(50);
write_com(0x80);
write_com(0x01);
for(num = 0; num & 16; num++) //第三屏
write_data(table4[num]);
delay(100);
delay(50);
write_com(0x80 + 0x40);
for(num = 0; num & 16; num++)
write_data(table5[num]);
delay(100);
delay(50);
write_com(0x01);
write_com(0x80);
for(num = 0; num & 16; num++) //第四屏
write_data(table6[num]);
delay(100);
delay(50);
write_com(0x80 + 0x40);
for(num = 0; num & 16; num++)
write_data(table7[num]);
delay(100);
delay(50);
write_com(0x01);
write_com(0x80);
for(num = 0; num & 16; num++) //第五屏
write_data(table8[num]);
delay(100);
delay(50);
write_com(0x80 + 0x40);
for(num = 0; num & 16; num++)
write_data(table9[num]);
delay(100);
delay(50);
write_com(0x01);
write_com(0x80);
for(num = 0; num & 16; num++) //第六屏
write_data(table10[num]);
delay(100);
delay(50);
write_com(0x80 + 0x40);
for(num = 0; num & 16; num++)
write_data(table11[num]);
delay(100);
delay(50);
  此种显示方式是将下面的一个名人名言滚动显示出来&&
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、开工做无线滚动屏  &  
  经常读我文章的朋友可能知道我写这个无线滚动显示屏的制作肯定会以蓝牙串口透传模块作为切入点&&因为蓝牙串口透传模块只要简单连线就能像操作串口一样来实现蓝牙无线传输数据了,我在这方面也花了比较多的笔墨介绍它&&
 下面是以前写的蓝牙串口透传的各种应用:
最终效果预览  
综上,我们实现串口发送也就很方便利用蓝牙透传实现无线屏
因此,我们只要实现在上位机串口助手上发送一个字符串,能够在LCD1602显示屏上显示出来就算完成了制作一个最简单的无线显示屏的任务了!
由于,今天有点晚,所以先来个效果预览,具体工程明天再细讲!
@beautifulzzzz
持续更新中~
阅读(...) 评论()1602四线控制方法 ,超级精简............... - 单片机/MCU论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
1602四线控制方法 ,超级精简...............
助理工程师
18:42:55  
10222&查看
& && &一般情况下,LCD1602与单片机连接的线路共有11条,其中有8条数据线,3条控制线(其余的5条为电源和地)。如果把它们都连接上,将占用较多的单片机的接口。那么如何减少接口呢?& && & LCD1602还有一种使用高4位数据线的接法,可以减少单片机的负担。另外,RW的控制也并非是必用的,如果仅仅是用于读取LCD1602“忙”的状态,就可以用稍事等待来代替。这样一来,RW就可以直接接地,使LCD1602永远处于写入的状态。那么,LCD1602和单片机之间就仅仅需要6条线了,这算是一种比较简洁的接法了。& && &下面的一个例子是使用P1口的高4位连接到LCD1602的高4位数据线。源代码:
(4.39 KB, 下载次数: 201)
18:41 上传
点击文件名下载附件
下载积分: 积分 -1 分
对应的原理图:
(805.5 KB, 下载次数: 353)
18:42 上传
点击文件名下载附件
下载积分: 积分 -1 分
(备注:程序中只使用了八位数据线的高四位)
/*==========================================================
* 开发人员:laowang
* 当前版本:V1.0
* 创建时间:12/8/2013
* 修改时间:
* 功能说明:让1602显示“51Start:” “the best one!”
*==========================================================*/& && && && && && && && && && &&&
* 数据口:P1.4-P1.7
* 控制口:lcdrs=P3^2& &lcdrw=P3^3& & lcden=P3^4
* 传输方式:并口,四线(高四位)
*==========================================================*/
#include&reg52.h&
#define uchar unsigned char
#define uint unsigned int
& && && && && && && && && && && && && && && && && && && && && &&&
sbit lcdrs=P3^2;& && && && && && && && && && && && && && && && && &//数据/命令选择端,低电平为指令,高电平为数据
sbit lcdrw=P3^3;& && && && && && && && && && && && && && && && && &//读写控制端,低电平为写
sbit lcden=P3^4;& && && && && && && && && && && && && && && && && &//使能端
uchar code table1[]=&& & 51Start:& & &;
uchar code table2[]=&&&the best one! &;
void delay(uint x)& && && && && && && && && && && && && && && && & //延时 x 毫秒
& && && & uint i,j;
& && && & for(i=x;i&0;i--)
& && && && && & for(j=110;j&0;j--);
/*==========================================================& &
*函数名称:Lcd_1602_write(uchar com,date)
*功& & 能:向1602写数据/指令
*入口参数:com(com=0 写命令&&com=1 写数据)
*出口参数:
*说& & 明:四线用的是1602的高四位DB4-DB7,单片机的数据口为P1口的高四位P1.4-P1.7
*==========================================================*/
void Lcd_1602_write(uchar com,date)& && && && && && &&&
& && && & lcdrw=0;& && && && && && && && && && && && && && && && &&&//设置为写
& && && & lcdrs=& && && && && && && && && && && && && && && && &&&//将形参传给lcdrs
& && && & for(i=0;i&2;i++)& && && && && && && && && && && & //每次写四位,写完一个数据/命令(8位)需要两次
& && && & {& &
& && & lcden=1;
& && & P1=(P1&0x0f)|(date&0xf0);& && && &//将date的高四位送入P1,同时保持P1的低四位不变
& && && && && && && && && && && && && && && && && && && && && && && && && &//如果使用P1的低四位的话,则该处应该改为:P1=(P1&0xf0)|((date&&4)&0x0f);
& && & delay(3);& && && && && && && && && && & //适当延时,数据稳定
& && & lcden=0;& && && && && && && && && && && && && & //送入数据
& && & date&&=4;& && && && && && && && && && && &//低四位左移到高四位
& && && & }
/*==========================================================& &
*函数名称:void Lcd_1602_init()
*功& & 能:对1602进行初始化
*入口参数:
*出口参数:
*说& & 明:用四线时,1602的初始化只需要高四位数据就可以完成,在初始化完成之后必须再传入四位数据,需注意。
*& && && & 执行完write_x28);之后液晶已经初始化,其实在执行了一半的时候就已经初始化完成,此时又传入了
& && && && && && && && & 四位数据(一个写语句会传入8位数据),这时候如果直接写数据的话,就会形成乱码
*==========================================================*/
void Lcd_1602_init()
{& && && && && && && && && && && && && && && && && && && && && && && && && && && && && && &
& && && & Lcd_1602_write(0,0x28);& && && && && && && && && && &&&//0x28=,将液晶设置为16*2显示,5*7点阵,4位数据口
& && &&&delay(5);& && && && && && && && && && && && && && && && &//
& && &&&lcden=1;& && && && && && && && && && && && && &&&//
& && &&&lcden=0;& && && &
& && &&&Lcd_1602_write(0,0x28);& && && && && && & //显示方式设置
& && && & Lcd_1602_write(0,0x0e);& && && && && && & //设置开显示,不显示光标
& && && & Lcd_1602_write(0,0x06);& && && && && && & //默认(0x06)写入新数据后光标右移 屏幕不移动
& && && & Lcd_1602_write(0,0x01);& && && && && && & //显示清0,数据指针清0& && && && &
void main()
& && && & Lcd_1602_init();& && && && &
& && && &&&Lcd_1602_write(0,0x80);& && && && && && &&&//第一行
& && && &&&for(num=0;num&16;num++)
& & {& && &
& && & Lcd_1602_write(1,table1[num]);& && &&&//写数据
& && & delay(3);
& & Lcd_1602_write(0,0xc0);& && && && && && && && & //第二行
& & for(num=0;num&16;num++)
& && & Lcd_1602_write(1,table2[num]);
& && & delay(3);
& & while(1);
21:50:42  
哈哈学习了{:1:}{:1:}{:1:}{:1:}
21:22:32  
PCB在线计价下单
板子大小:
板子数量:
PCB 在线计价
非常有用,多谢了
等待验证会员
09:26:58  
哈哈哈哈哈哈哈哈
14:16:29  
受教了,感谢
16:17:54  
感谢版主拿干货出来。
23:35:08  
感谢楼主的分享,我正卡在这里呢!就是不能进行正常显示,出现乱码了。
23:35:33  
楼主的注释非常好,很清晰
16:04:29  
不错。。。。。。。。。。。。。。。
助理工程师
23:25:28  
楼主的注释非常好,不错。。。。。。。。。。。。。。。
14:00:42  
感谢楼主,正好现在需要
18:33:37  
好好好哈好好好哈哈哦
22:48:38  
谢谢谢谢谢谢谢谢谢谢&&确实不错
助理工程师
09:50:55  
回复一下又不会怀孕!
23:03:54  
牛啊!测试下。。。。
19:44:07  
666666,学习了,受益匪浅
助理工程师
21:47:16  
基础技能,先下了看看吧。。。。
16:13:44  
这个不错,IO不够用用这个办法解决
14:29:46  
嘿嘿嘿,刚好看到这里 3Q
等待验证会员
11:04:11  
感谢楼主。。。。。。。。。
Powered by
供应链服务
商务及广告合作
Jeffery Guo
关注我们的微信
供应链服务 PCB/IC/PCBA
版权所有 (C) 深圳华强聚丰电子科技有限公司

我要回帖

更多关于 arduino lcd1602 的文章

 

随机推荐