基于单片机的多功能数字钟系统设计分析
扫描二维码
随时随地手机看文章
引言
随着科技的发展,电子技术也在不断地向前飞速发展。本设计是制作一款多功能数字钟,其具有显示年、月、日,时、分、秒、星期及闹钟功能,而且秒、分、时、日、月、年可自动关联进位。秒具备清零功能,分、时、日、月、年可自动修改、手动设置等功能。它是以一块AT89S52芯片作为主控模块,采用DS1302作为定时来源的多功能数字钟。多功能数字钟结构较简单,因此便于操作使用。它具有高度的智能化和集成化,是现代人办公、生活、学习的好帮手,具有广阔的市场前景。同时,它具有闹铃和播放音乐等功能,由于这些完善的功能,它必将越来越受到社会各界人士的欢迎。
1 系统方案的论证与选择
1.1 各模块方案的论证与选择
1.1.1 主控模块的论证与选择
方案一:采用8031芯片。8031芯片内部无ROM,需要外扩程序存储器,由此造成电路焊接的困难,况且使用8031还需要另外购买其他的芯片,从而造成成本较高,性价比低。
方案二:采用89C51芯片。80C51芯片内部有ROM,且片内ROM全部采用FLASH ROM,它能在3V的超低压工作,与MCS-51系列单片机完全兼容,但是其不具备ISP在线编程技术,需把程序编写好以后再放到编程器中烧写,才可以进行硬件电路的调试,倘若程序编写出现问题,调试电路就较麻烦,而且其芯片内存也只有4kB。
方案三:采用AT89S52芯片。该芯片内部既有Flash ROM,又与MCS-51兼容,而且ISP在线编程技术适用于AT89S52芯片,这样既降低了成本也无需反复插拔芯片,可避免损坏芯片;而且它的性能稳定,且内存达8kB。
经过三种方案的比较,方案三主要容量较大,具有成本低的优点。因此主模块采用AT89S52。
1.1.2 显示模块的论证与选择
方案一:点阵显示。是由八行八列的LED管集成在一块电路上组成,主要用来显示汉字,同时也能显示数字和少量图象,但它的焊接较麻烦,价格高,鉴于所设计的内容要求用它不切实际,所以排除此方案。
方案二:LED数码管静态显示。此方案电路容易理解且驱动的程序简单,但需多片七段译码器驱动显示,这不仅增加了成本,还占用单片机多个I/O口,也给电路的焊接带来一定的困难,因此不选用此方案。
方案三:采用LED数码管动态扫描显示。此方案价格低廉,不仅减少了对I/O口的浪费,而且能够同时驱动多个数码管。但其驱动程序不容易编写和理解。
方案四:采用LCD液晶显示。由ks0108驱动,能显示大量数据、文字、图形,显示的位数多,字体清晰多样、美观,而且外部接线较简单。
经过四种方案的比较,本设计主要显示字体较多,因此,最后选择了方案四。
1.1.3 控制按键的论证与选择
方案一:选取阵列式按键,减少了I/O口的使用,且扫描M×N个按键只需占用M+N个I/O口即可实现,但给编程带来了一定的困难,虽然节省了很多的口线,降低了成本,但在此设计中所用的按键要尽量少,因此排除此方案。
方案二:独立式按键,每个按键实现一个功能,易于控制且编写程序简单,容易理解,虽然会占用一定的单片机I/O口资源,但是题目中要求使用的按键要尽量少。
通过以上两种方案比较,采用方案二。
1.2 系统各模块的最终方案
经过以上对本系统各模块的方案进行论证与实际应用相比较,本设计电路最终选用AT89C52作为主控系统来控制时钟的准时运转,采用独立试按键控制本设计系统将要实现的全部功能,选用LCD动态扫描来显示时间。本设计选择最优的方案,并设计出如图1所示的系统框图。
如图1所示,系统的整个控制流程是:由单片机AT89C52的内部程序定时控制LCD使之显示出本文所要实现的效果,当计时到整点时单片机发出一条命令去控制喇叭进行整点报时,若出现特殊状况,比如突然断电则单片机将会停止工作,从而会造成时间的不准确,所以加一组键盘便于随时修正时间使时间能够准时计时。此外,为了使所设计的数字钟秒表更为准确,本系统电路又添加了时钟芯片DS1302,此芯片计时精度非常高,一个星期误差只有3s。添加了此芯片使本系统更具实用性。
2 系统的硬件设计与实现
本设计的多功能时钟主要由四个模块组成,其核心元件是一块单片机AT89C52,并采用了误差小的时钟芯片DS1302作时钟定时,它一星期的误差只有为3s。
系统主要通过单片机AT89C52对各个模块进行实时控制,其中P3.1\P3.1\P3.2用来接独矩阵式按键,此模块用于控制电路以便于实现预期要实现的各个功能:P1和P2口用来接LCD进行动态显示,利用AT89C52单片机直接控制LCD来实现对LCD的动态扫描显示,其中驱动LCD用芯片KS0108;P2.0\P2.1\P2.2还接了时钟芯片DS1302的第5、7、6脚作定时用;本系统还有一部分是闹铃,闹铃用普通蜂鸣器即可,外加三极管电阻对其声音进行放大。
2.1 主控制模块电路的设计
主控模块电路的电路如图2所示。
如图2所示,本次设计的多功能数字钟采用一块AT89C52作为主控模块,还用到了转换芯片DS1302,主要是对实现定时电路进行信号交换。在单片机工作之前,我们必须给它一个电源(5V)和连接一些需要连接的地方。比如第18、19引脚之间要给它接上一个12MHz的晶振和两个33pF的电容。第31引脚要接上电源,第9引脚要接上复位电路。第20引脚要接地,第40引脚要接上电源。DS1302芯片主要用于电路的转换。单片机剩下的P0口、P3口、和P2口分别用于其他功能。同时要指出的是在使用P0口时要给它接上上拉电阻,这样单片机的驱动能力就会大大增强。P3口是复用功能,可以用做数据的传输和地址线。特别要强调的是这里只能用高8位做数据线。P2口内部已经具备了上拉电阻,因此不用再加上拉电阻了。这些都是上电之前要做好的一些前提条件,如果忽视了哪一点,都可能使单片机不能正常工作,或者说容易烧坏单片机。
2.2 LCD显示模块电路的设计
显示电路图如图3所示。从图3中可以观察到,单片机P1口连接LCD的D0-D7, LCD的第1、2脚分别接电源和地,然后由单片机AT89C52载入程序用以控制LCD,由此来显示相应的文字。
为了线路的简便,本显示模块只用到一块LCD(128×64)的液晶显示器。另外,为了使程序更简单,还使用了一块液晶的控制器芯片KS0108来驱动LCD,这样当编写程序时就省去了编写LCD的驱动程序,大大减少了设计的时间段,这样既省时间又不会使电路变复杂。
2.3 闹铃与按键模块电路的设计
闹铃电路如图4所示。本电路比较简单,只用普通的蜂鸣器接至AT89C52由它进行控制,从图4可以看出单片机P3.0口接喇叭的正极,为了使蜂鸣器的声音大些,P3.0口信号输出端接上一个电阻和一个三极管用于放大声音信号,蜂鸣器的负极直接接地,按键模块用到了三个按钮和三个电阻。单片机的P3.1\P3.2\P3.3与三个按钮相连。按钮的另一端接喇叭的 负极。其中按钮的功能是随时调整时间以及调
整闹钟。
2.4 DS1302时钟模块的设计
2.4.1 引脚功能及结构
图5所示为DS1302的引脚图。其中VCC1为后备电源,Vcc2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1正0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc大于或等于2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),后面有详细说明。SCLK始终是输入端。
2.4.2 DS1302与CPU的连接
DS1302与CPU的连接电路如图6所示。DS1302与CPU的连接需要三条线,即SCLK(7)、I/O(6)、RST(5)。时钟的显示用LCD。实际上,在调试程序时可以不加电容器,只加一个32.768kHz的晶振即可。只是选择晶振时,不同的晶振,误差也较大(还可以在上面的电路中加入DS18 B20,同时显示实时温度)。只要占用CPU一个口线即可。LCD还可以换成LED,因为LED无法显示较复杂的字符而本设计有用到字符显示,因此系统选用LCD,其特点是可显示任意字段笔划(比如星期)而且显示清晰。
为了初始化任何数据的传输,引脚信号应由低变高,并且应将具有地址和控制信息的8位数据(控制字节)装入芯片的移位寄存器内,数据的读写可以用单字节或多字节的突发模式方式进行。所有的数据应在时钟的下降沿变化,而在时钟的上升沿,芯片或与之相连的设备进行输入。
3 系统的软件设计
3.1 系统软件概述
3.1.1 DS1302的命令字节
命令字节的格式如图7所示,每次数据的传输都是由命令字节开始的,这里的最高有效位必须是1。D6是RAM(为1)或时钟/日历(为0)的标识位。D1~D5定义片内寄存器的地址。最低有效位(D0)定义了写操作(为0时)或读操作(为1时)。命令字节的传输始终从最低有效位开始。