A8号

51单片机趣味制作有哪些,单片机创意制作

15

51单片机趣味制作有哪些,单片机创意制作

怎么制作一个diy手工单片机

摇摇棒,光立方都是、另外自动小车也不错。

ELEJ-CDC1简介

ELEJ-CDC1是一款创意型数字时钟(即Creative Digital Clock)。之所以说它是创意制作,其实就是使用常规的数码管和常见元器件,实现通常时钟具备的功能的同时,还通过硬件改进和软件设置,巧妙实现通常时钟不具备的功能——人性化用户体验。

时钟太常见了,是生活中极其普通的物品之一,我们只需瞧一下钟,就能说出时间,而且我们也把这看成是很自然的事情。功能完善的时钟可以计时间(Clock)和日期(Calendar),即年、月、星期、日、时、分和秒的实时参数。时钟有很多种,按照不同的分类标准可以分为不同的类型,对于按照模拟数字量分为传统的模拟时钟和数字时钟,这里主要分析一下数字时钟。

数字时钟可以由模块化的时钟电路实现,可以由数字门电路+时钟发生电路实现,也可以由控制器(单片机)+定时器实现,还可以由控制器+RTC芯片实现等,其实这里也不用“等”了,因为似乎没有其他方法了。你可能会说从网上下载一个时钟软件不也是嘛,哈哈,告诉你吧,其实这样的软件用的时钟信号是你计算机主板上的RTC芯片时钟或者集成在某个大规模集成电路内部的RTC模块提供的。

RTC即为实时时钟,它是可提供时间(通常也提供日期)的时钟器件。RTC通常包含一个可长期供电的电池,即使在没有电源供电的情况下也可以保持时间的跟踪。

有很多著名厂商和很多著名的RTC芯片,玩单片机的应该没有不知道DS1302、DS12887和PCF8523等芯片的;RTC著名厂商有很多,比如Maxim(美信〈达拉斯半导体〉)、NXP(恩智浦)、Intersil(英特矽尔)等。笔者曾经使用过美信的DS3231用作智能电表的时钟计量,调过英特矽尔的ISL12022M,DS3231和ISL12022M,它们都集成了晶体振荡器,精度极高,且外围电路十分简单,基本无需外围元器件,其实DS3231和ISL12022M的功能也很相似、性能也差不多。恩智浦的RTC芯片有很多款,比如本文要介绍的ELEJ-CDC1,使用的是PCF8523。PCF8523性能很不错,使用的是I2C总线与控制器连接,且是高速I2C总线(Fm+),可以达到1MHz,在某些实时性要求极高的系统中非常适用。常见的PCF8523有SO8和TSSOP14封装,TSSOP14引脚间距较小,引脚排列很密,不容易焊接,大家可以选择SO8封装的,容易焊接。

制作实时时钟非常有趣,可以同时学会很多与界面显示相关的技术、控制器接口技术、数字处理技术和按键功能实现技术等,对于各种智能家用电器的显示界面设计有参考意义,例如冰箱、洗衣机、电磁炉等的显示界面。关于实时数字显示器件的选择,可以是LED、数码管、点阵屏、LCD等,实际学习可以逐个调试掌握、真正搞懂,然后独立开发基于控制器的项目就不成问题了。(不骗你,真的!)

现在,我们就一起开始制作吧!

51单片机趣味制作有哪些

ELEJ-CDC1硬件原理

ELEJ-CDC1由6个模块电路构成:电源电路、控制器电路、RTC电路、数码管电路、蜂鸣器电路和按键电路,其中电源电路、数码管电路、蜂鸣器电路和按键电路与ELEJ-IDBC1智能数字电池充电器设计中的电路设计方法和电路原理一样,只是数码管在实际的排列时有所不同,而且数码管选用的是1位的8段式数码管。

下面主要介绍控制器电路、RTC电路和特殊处理的数码管电路。

为了大家的制作方便,这个制作仍然使用STC的51控制器,ELEJ-CDC1使用的控制器型号为STC15F204EA,用DIP-20封装,电路连接如图1.1所示。STC15F204EA内部高精度R/C时钟,常温下温漂5‰,时钟从5~35MHz可选,这样我们就无需再外置晶体振荡器了。实际焊接在“洞洞板”上如图1.2所示。

RTC芯片用NXP的PCF8523时钟芯片,PCF8523电路图如图1.3所示。

图1.3中电阻R11、R16和R17是上拉电阻,因为PCF8523的INT2、INT1/CLKOUT引脚都是开漏输出,所以必须上拉,此外,SDA和SCL也必须上拉。仔细看看图1.3,你会发现在+5V电源和PCF8523的VDD之间接了VD5、R15和C6,有什么用,不接可以吗?很多时钟芯片都不接的呀!说说原因吧:仔细阅读PCF8523数据手册的典型应用一节,你会发现它提供的典型应用电路连接有R15和C6,它俩的作用是限制VDD的压摆率,如果VDD下降得过快,就不能确保内部电路可靠切换到备用电池供电;二极管VD5是为了防止电源反接烧坏PCF8523TS,PCF8523TS不便宜啊,烧的是钱呢!

注 :电压转换速率(Slew Rate),简写为SR,简称压摆率,其定义是在1μs或者1ns的时间里电压升高的幅度,直观上讲就是方波电压由波谷升到波峰所需时间,单位通常有V/s、V/ms、V/μs和V/ns四种。电压转换速率用示波器就可以测量。

我使用的是TSSOP14封装的,由于芯片引脚很密,所以我腐蚀了一块转接板,实物如图1.4所示。注意:在制作中你可以使用SO8封装的,无转接板也可以焊接。

图1.1 控制器电路

图1.2 控制器实物图

图1.3 PCF8523电路图

图1.4 PCF8523腐蚀板

图1.5 PCF8523腐蚀板焊接实物

焊接上芯片,通电蓝色LED点亮,如图1.5所示。

51单片机趣味制作有哪些,单片机创意制作

数码管电路如图1.6所示。其实仔细看看原理图,和通常使用的电路没有任何区别,其实就是驱动电路的设计。

图1.6 数码管电路图

与通常使用不同的是数码管的放置方式。如何实现显示功能,以下详细说明一下。

对于动态扫描显示技术,几乎每本书、每个资料都会说“动态显示是多个数码管交替显示,利用人的视觉暂留作用,使人看到多个数码管同时显示。在编程时,需要输出段选和位选信号,位选信号选中其中一个数码管,然后输出段码,使该数码管显示所需要的内容,延时一段时间后,再选中另一个数码管,再输出对应的段码,高速交替。”如果你是初学者,肯定感到有点迷惑!

那我就用图来说明一下吧!动态扫描最根本的原理如图1.7所示。

图1.7 数码管动态扫描原理

4个数码管轮流显示一遍为一个周期T,即4个显示ton之和,且由于每个显示时间一样,也即T=4×ton,在软件实现手段上,我用的是定时器中断,这样便于main函数处理多个任务。使用的数码管为共阳极的,所以ton时间数码管的位引脚为低电平(以数码管DS1为例:当LED_COM1=0,三极管导通,DS1选通,此时如果有段码数据加到A-H引脚,则DS1显示),即数码管显示,数码管会按照300μs的时间轮流循环显示,即:数码管1→数码管2→数码管3→数码管4→数码管1……无限循环往复,由于“数码管1→数码管2→数码管3→数码管4”仅需要1200μs,即扫描频率833Hz,我们眼睛是分辨不出它们是在逐个显示的,我们可以看到的是每个数码管都完整显示。如果,你想仔细看看所谓的“扫描”是啥,你可以把T选得大一些,对应的ton=T/4也大些,那样你就会看到数码管逐个显示,显示的界面会让你感觉很不舒服(一个接一个地闪烁显示)。

图1.8 ELEJ-CDC1数码管实物

图1.9 ELEJ-CDC1整机焊接面实物图

总结一下:我们调试数码管,说白了就是调试T(根据实际调试数据ton≈1ms时,显示效果也很不错,当然是越小越好了;扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感),此外还要注意以下两个问题。

(1)所谓的“消隐”问题,当你更新显示的“段”的时候,显示的位置还是在前一时间的“位”上;然后你再更新“位”,这就出现移动的效果了。解决方法:显示下一位时先让数码管熄灭;在位的数码显示前,先关闭一下数码管,这样方可消除拖尾现象。

(2)驱动要足够,例如,我在使用数码管时均使用了三极管驱动,尽管STC控制器I/O口可以配置为推挽输出,但是为了便于硬件移植,即51控制器通用,还是加了驱动,在实际制作调试时,你也可以选择用STC控制器直接驱动。

ELEJ-CDC1创意数字时钟数码管实物如图1.8所示,焊接面如图1.9所示。

软件设计思路

这里我直接用文字叙述:在没有任何认为“干预”ELEJ-CDC1的情况下,ELEJ-CDC1从用户接通电源起,工作步骤(也就是软件执行过程)为控制器初始化、某些系统参数初始化→配置PCF8523、获取RTC数据(通过I2C接口读取)→处理RTC数据,处理结果暂时存储在控制器缓存中→通过定时器中断技术使控制器缓存中的RTC数据显示在数码管上→再读取新的RTC数据,处理数据,实时显示……就这样只要用户不断电,ELEJ-CDC1就会“不知疲倦”地重复实时显示RTC的实时数据。

然而,RTC芯片内部的数据在上电时,一般不会是当前的时间,怎么办呢?一般人都知道重新校准时间。其实,从PCF8523角度来看,就是重新向PCF8523内部时钟寄存器内写入数据,覆盖掉原始的不是当前时间的数据,然后PCF8523就从新的时间数据开始计时(时钟源就是那个32768Hz的晶体振荡器)。这样,自然就需要一个校时程序,而且这个校时程序块不是一直运行,只有用户需要时才启动,所以就需要一个开关。开关?你可能会惊讶:软件里面哪里有开关呢?此时,如果你仔细想一想数字电路,是不是想起了0和1,就是啊,这个开关就用一个Bit变量实现,比如,变量为1时启动校时程序块,为0时运行时钟。记住一点,校时程序块和正常走时程序块在同一时间绝不可能同时运行!

至于闹钟,也很简单,每读取一次RTC数据显示,程序就判断一次此时的时间和用户设定的闹钟时间是否一样,如果一样,那就“闹”吧!闹多久?程序开发者自行设置,如果开发者愿意,甚至可以让用户自行配置;如果你既是开发者又是用户,那我就不说啥了,随你的心情,随意配置吧!

读到这里,你是不是感觉ELEJ-CDC1总体脉络很清晰了呢!如果真的用心说是,那就好,你肯定可以独立调试ELEJ-CDC1了,而且,你还可以学习很多工程设计调试的方法。再说得犀利些:如果你仅仅是为了做一个ELEJ-CDC1,完全或者基本没有什么浓厚实物兴趣驱使你,你可能在调试时非常痛苦,甚至不能让ELEJ-CDC1正常运行。比如,你在调试ELEJ-CDC1时,你会彻彻底底地明白什么是数码管动态显示,为什么动态显示要用定时器中断,为什么不直接用延时扫描的方法,数码管不同界面切换方法,I2C驱动如何写(后续我会仔细说),甚至蜂鸣器振荡频率如何选择……总之,我们喜欢电,我们可以在兴趣中提高能力和扎实掌握解决实际工程问题的方法。哇!说多了,不过这样的兴趣就是动力,可以很随意地步行10多里路去二手电子市场(偷笑)。

图1.10 “AL:--”界面

图1.11 “AL:on”界面

图1.12 “12Hr”和“24Hr”界面

图1.13 时间显示界面

图1.14 日期显示界面

图1.15 星期显示界面

看几张数码管的界面图片吧!如图1.10~1.15所示。

好吧,这个版本的ELEJ-CDC1制作就介绍到这里吧,其实如果想再加其他功能,真的有点难,因为4K字节ROM空间的STC15F204EA放不下了,我就遇到此尴尬,不然ELEJ-CDC1最后一位本来打算用作“℃”显示的数码管就不会没用上,我的代码中,数码管段码就没有全部放在code内,否则连闹钟功能也没了。反正我们以后会让ELEJ-CDC1升级的!

相关源程序可以到qq群657864614进行下载!

新店开张,为了提升人气,即日起将开启前所未有的优惠力度,相当于免费送了!商品限购,先买先得!所有商品均可以无理由退换,请放心购买!一个属于电子工程师的专属淘宝店,总有一款适合你:

很简单的??其实单片机配合传感器做一些就行~~~我也刚学。。比如你做个自动开窗的装置。外面光太强窗帘就拉下,有风也拉下。。做个颜色的分辨器~比如有些人分不清红绿。

最难得是通信,你把51单片机之间的通信搞明白了,再做创意。

您可能还会对下面的文章感兴趣: