本帖最后由 奋斗哥 于 2012-12-6 15:05 编辑
转自与非博客:宜昌城老张的博客
记得早在2008年,我看到哈工大郭天祥同学的《十天攻克单片机》的视频讲座,为他的不断学习,不断追求的进取精神所感染。我从这个视频讲座里学习到的学以致用的思维理念和规范严谨的编程风格,至今还影响着我。视频配套教程也常常在我手边翻阅,书名为《新概念 51单片机C语言教程-入门、提高、开发、拓展全攻略》。
书中第8讲,题为“1602液晶显示原理及应用”,讲述了1602液晶模块的工作原理,模块的控制和数据引脚功能、控制线的时序,缓存RAM地址以及如何用软件指令控制1602液晶硬件运行。不妨看看这段郭天祥同学当年的教学视频,为Arduino单片机控制1602液晶显示,做些知识准备。 1602液晶显示原理及应用视频: 现在的时间已经来到了2012年11月了,一种易学好用的Arduino单片机正在风靡全球。所以我把兴趣点从51转到了Arduino,是不是这山望那山高,也不是的,单片机是拿来用的,不是用来学的,Arduino因为更方便“用”,而且会了51,学习Arduino单片机也就是分分钟的时间,所以转到Arduino单片机来做应用也是自然进化的结果。 上一篇文章《零成本学Arduino单片机之入门》提到了Arduino单片机的5点优势,其中有一个优势是:“针对周边I/O设备的Arduino编程,由于很多I/O设备都随之带有库文件或者样例程序,所以在自己的程序中,可以引用库文件中的函数,或复制样例程序,然后修改下其中的参数,即可迅速编写出大段大段的复杂程序,从而放大了您的编程能力。”,所以有了Arduino单片机可能就不需要了解上述视频所介绍的1602液晶工作原理以及软件指令与硬件底层电路之间对应关系。完全可以把1602液晶模块看成黑匣子,只要知道1602液晶11个引脚哪几根是控制引脚,哪几根是数据引脚就OK了! Arduino确实不是省油的灯,早就帮你准备好了一切,1602液晶有专门的函数库,即LiquidCrystal,这个函数库相关资讯,可以从官网了解到,http://arduino.cc/en/Tutorial/HomePage。 LiquidCrystal函数库针对1602液晶的数据传送有两种模式,一种是8bit模式,一种是4bit模式。8bit的传送速度快,是因为显示的字符都是ASCII码,ASCII码是8位二进制数组成,所以8bit刚好一次就把字符的二进制码一次传完,而4bit则是需要将字符拆成两半,一次只传送4bit,两倍时间才可以把数据传完,不过4bit模式的好处是需要的数据引脚少了一半,方便硬件连线。 8bit模式需要D0~D7引脚,4bit只需后四个引脚D4~D7。不管是哪种模式控制引脚都有3个,分别为:RS、RW、Enable。 4bit模式的LiquidCrystal申明函数为:LiquidCrystal(RS, RW, Enable, D4, D5, D6, D7); 8bit模式的LiquidCrystal申明函数为:LiquidCrystal(RS, RW, Enable, D0, D1, D2, D3, D4, D5, D6, D7); 这篇文章介绍的仿真项目中1602液晶显示采用的是8bit模式,用到的3个控制引脚和8个数据引脚,如下图所示,它们分别连到了Arduino单片机11个数字端口上,根据8bit模式的LiquidCrystal申明函数的参数格式和Arduino单片机与1602液晶的引脚连线关系,1602液晶引脚与Arduino数字端口对应关系,可申明为:LiquidCrystal lcd(11,12,13,2,3,4,5,6,7,8,10)。 尽管网络上的Arduino英文资讯可谓铺天盖地,但是中文书籍却很少,但是还是要尽可能地收集些中文资料才对,比如LiquidCrystal函数库的用法,我就是从《Arduino一试就上手》书中第7-5页看到。在这本书你可以继续看到LiquidCrystal函数库的其它函数,如初始化1602液晶工作模式函数lcd.begin(16,2);光标定位函数lcd.setCursor();ASCII字符显示函数lcd.print()。 此书是中国台湾作者孙骏荣等所编写,已经被科技出版社引进,并转换成简体中文版,是本学习Arduino的好书。中国台湾总是在新科技潮流工具的应用上,能紧跟国际潮流。
说完1602液晶的Arduino单片机的应用,接着谈谈如何在仿真环境下,输出PWM信号,来调节LED灯的亮度。 Arduino单片机发出的PWM信号频率大约500hz,所以用实物进行测试,由于滞留效应,人眼感觉不到LED灯发生了闪烁现象,认为亮度变化是平稳的。但是用 Proteus进行仿真试验,却只是看到LED灯闪烁得厉害,所以我采用了一个由电感与电容组成的滤波电路,把PWM信号变成直流信号,消除了仿真时闪烁的问题。注意实物测试,不需要这个滤波电路。 在Proteus软件环境里,提取Arduino单片机、LCD1602、LED、电位计,并进行硬件连线,并根据上一篇“入门”文章介绍的方法,设置Arduino单片机的工作模式和上载Hex文件,就可以仿真,测试下仿真实验的效果了。 双击图片,都可以放大看!
|