电子时钟设计及程序.doc
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
电子时钟设计 简介 该设计主要由单片机AT89C51和液晶显示器组成,实现常用的实时电子钟功能。利用 可编程芯片AT89C51强大的功能,我们了实现日历功能、时钟功能。该时钟使用液晶显示 器作为显示模块,使用3个弹性小按键作为输入模块,调节年、月、日、星期、时、分、 秒。 一.方案比较与论证 根据设计要求,该时钟系统可分输入部分、处理部分和显示数据部分。其中输入部分是 键盘输入数据调整要显示的内容,处理部分单片机接收并通过算法处理键盘输入的信息 变成显示模块所能接受的信息,显示部分是用来实时显示处理部分处理后的数据。 输入模块我们选用三个独立弹性小按键来实现,选用矩阵式键盘则太浪费资 处理模块我们选用了STC公司的STC89C52芯片来,与Atmel公司生产的AT89S52一样,也是 40脚双列直插式封装,这里芯片对刚学单片机的人来说容易入手,其功能也很强大,用 来实现一个电子钟完全足够了。 显示部分我们可有两种选择:数码管和1602液晶显示器。实现一个电子钟若用数码管则 需6个,所占空间相对大了些,而且我们还要实现日历的功能,需要更多的数码管,所点 空间翻倍,而且还会造成单片机I/O引脚滥用甚至不够用,用液晶显示器来实现则方便得 多,界面也相对友好,但液晶显示器有个缺点就是价格比较贵。因此我们最终选择了16 02液晶显示器。另处独立弹性小按键具有价格便宜、容易获得、容易控制等特点。 二.系统理论分析、计算与电路仿真 1、定时器与中断原理 电子钟主要是利用单片机的定时器/计数器和中断来实现。定时器实际是加1计数器,单 片机每运行一个机器周期定时器就自动加1,当计到所定的数N时,单片机就产生一次中 断,停下所做的工作,转而去执行中断服务程序。单片机每个机器周期等于外部晶振的 12个振荡周期,当外部晶振是12MHz时,则每个机器周期的时间是 Tcy = 12×1/12=1µm (2-1) 定数器设为N时,即每计到N时产生一次中断,而一次中断的时间为: t = N×Tcyµm (2-2) 当产生X(x根据N来设置,两者之积为1000000)次中断后我就知道过了1s,再通过液晶 显示出来,这样就达到了让液晶每隔一秒跳一下的目的了。 2、proteus仿真结果 3、液晶部分 图4-3 液晶1、2端口分别是工作电源的负、正极,15、16是液晶背光灯电源正负极,R4起限流 作用,避免电流过大烧坏背光灯。第3端口还可接一电位器,调节液晶显示对比度。无标 号的8个端口是数据端,通过一上拉电阻接到单片机的 P0口。 三.系统的软件设计(如必要,含有流程图) 1、程序流程图 流程图中的X表示液晶中秒、分、时、星期、年、月、日中的任一个。 图5-1 主程序流程图 图5-2 扫描键盘的子程序流程 四.系统测试及结果 测试结果总的来说很满意,比预计的还要好。但由于中断函数中代码较长,故存在 一定程度的误差,用秒表测试大约为每5分钟慢了一秒,这个问题是用单片机定时器来数 时所无法解决的,中断函数必定会较长,处理这一函数会花费一定的时间这就无法做到 让时钟走得很精确。解决方法是用一时钟芯片来实现,由于时钟芯片不好买又比较贵( 新的20几块一片),暂时就不考虑了,有机会再尝试。 1. 源程序 //主函数放在最后面 #include <reg51.h> #define uchar unsigned char #define uint unsigned int sbit rs=P2^4;//定义液晶数据命令选择端 sbit lcden=P2^5;//液晶使能端 sbit s1=P2^0;//按键1 sbit s2=P2^1;//按键2 sbit s3=P2^2;//按键3 uchar count,s1num; char shi,fen,miao;//时、分、秒 char year,month,day,week;//年月日星期 void delay(uint x)//延时子程序 { uint j,k; for(j=x;j>0;j--) for(k=110;k>0;k--); } //----液晶写命令功能--- void write_com(uchar com) { rs=0; lcden=0; P0=com; delay(5); lcden=1; delay(5); lcden=0; } //---液晶写数据功能----- void write_date(uchar date) { rs=1; lcden=0; P0=date; delay(5); lcden=1; delay(5); lcden=0; } //----------写入时、分、秒--------? void write_sfm(uchar add,uchar date) { uchar shi,g 《电子时钟设计及程序》文档详述了一个基于单片机AT89C51和液晶显示器构建的实时电子钟的设计过程。设计的核心是利用单片机的强大功能,结合简单的输入和显示模块,实现时间显示和日历功能。在方案比较与论证阶段,设计者考虑了输入、处理和显示三个部分,选择了3个独立按键作为输入,STC89C52单片机作为处理单元,以及1602液晶显示器作为显示设备,因为它们在成本、易用性和效率上都有优势。 在系统理论分析中,设计者强调了定时器和中断原理的重要性。定时器作为加1计数器,每经过一定数量的机器周期就会触发中断,中断服务程序负责更新显示内容。通过设置合适的计数器值N和中断次数X,可以实现每秒更新一次液晶显示。此外,文档还提到了Proteus仿真的应用,验证了设计方案的可行性。 在软件设计部分,主程序流程图展示了如何处理按键输入和液晶显示的逻辑,包括扫描按键状态、处理用户输入和定时器中断服务。程序中还包含了一些基本的子程序,如延时函数和液晶写入命令及数据的函数,用于控制液晶显示器的工作。 系统测试结果显示,虽然总体效果满意,但由于中断处理程序的长度导致了微小的时间误差,大约每5分钟慢1秒。这种精度问题可以通过使用专门的时钟芯片来解决,但由于成本和购买难度,设计者没有采用这种方法。 整个电子时钟设计涵盖了硬件选择、理论分析、软件设计和测试,是一次完整的嵌入式系统开发实践。设计过程中体现了对单片机特性的理解,以及在资源有限的情况下权衡各种因素的能力。通过这个项目,学习者可以深入理解单片机的中断机制、定时器工作原理,以及如何与外部设备如液晶显示器进行通信。同时,它还强调了实际工程中对成本、性能和易用性的综合考量。
剩余11页未读,继续阅读
- OBOB6672023-12-07有错 不完整代码
- 粉丝: 192
- 资源: 3万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助