基于ATmega16的多功能万年历
一、功能:
1、阳历显示
2、农历显示
3、时分秒星期显示
4、本学期第几周显示
5、当前室内温度湿度显示
6、室外温度显示
二、原件:
主控芯片:ATmega16 8M晶振
显示:2.3寸共阳数码管(27个)
数码管驱动:uln2003、三极管8050、8550、传感器:DS1302、DS18B20、DHT-11
74HL238、74HL04
电源模块:LM7812、LM7805
其他元件: 电阻、电容等
三、基本模块介绍
1、电源模块:
对于整个万年历的供电系统,我们采用了15V的直流输入,通过通过稳压芯片LM7812和LM2596-5将输入电压分为两路稳压至12V与5V,分别供给显示模块与单片机控制模块。
电路图如下:
2、显示驱动及扫描模块:
对于2.3寸数码管的驱动模块,我们采用的uln2003三极管8050及8550相结合的驱动方法。具体方案如下图所示(图中仅画出两个数码管,其余相同):
如上图,我们采用了大功率三极管8550与8050作阳极驱动,通过多8050基极电平的控制向共阳极灌入大电流,数码管的段引脚我们采用了ULN2003驱动。LN2003 是高耐压、大电流复合晶体管阵列,由七个硅NPN 复合晶体管组成且工作电压高,工作电流大,灌电流可达500mA,用在大功率共阳数码管的段极驱动再好不过。
由于我们设计的万年历所用到的数码管有27个,如果采用一般的扫描方式那么所需I/O口多大34个。而我们的主控芯片共32个通用I/O口,即使全部用来扫描数码管也不够用。
因为上面的原因,所以我们采用了译码器扫描的方式。通过4个3-8译码器与1个非门组成一个5-32的译码器,通过这个组合电路最多可以用12个(5个编码端+7的段极)I/O口扫描32数码管,极大程度上扩展了I/O口的数量。
原理图如下:
3、单片机主控模块:
万年历的主控芯片我们选择的是ATmega16。ATmega16是基于增强的AVR RISC结构的低功耗8 位CMOS微控制器,由于其先进的指令集以及单时钟周期指令执行时间,ATmega16 的数据吞吐率高达1 MIPS/MHz具有比普通的CISC 微控制器最高至10 倍的数据吞吐率。 而且ATmega16的片上资源较普通51单片机也十分丰富。
4、传感器模块
万年历室内外温度湿度的采集是通过DS18B20与DHT-11来采集的,DS1302与DHT-11都是单总线器件,这在电路设计与I/O口资源占用上给设计者减少很多麻烦,但是由于是单总线设计,所以在数据采集程序上却存在一定难度。
万年历时钟数据的采集是通过DS1302来完成的,DS1302 是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。这在编程上给设计者带来很多便利。