电子时钟设计及程序.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和液晶显示器来设计一个简易的电子时钟,并展示其设计思路、实现步骤、软件编写以及测试结果。 电子时钟的设计主要由三部分构成:输入部分、处理部分和显示数据部分。输入部分负责接收用户的时间设置指令,处理部分用于处理时间计算以及响应输入命令,而显示部分则负责将处理结果以用户可读的方式展现出来。在输入模块的设计中,设计者选择了三个独立弹性小按键,相较于矩阵键盘,这种方式在成本上更为经济,且对于使用者来说也更容易操作。 在处理部分,设计者选用了STC公司的STC89C52芯片。这款芯片与ATMEL公司的AT89S52芯片类似,均提供40脚双列直插式封装,兼容性强,对于学习单片机的初学者来说更为友好。此外,其强大的功能足以满足电子时钟的运行需求。 而在显示数据部分,设计者面临了数码管与液晶显示器的选择问题。虽然数码管在成本上具有优势,但对于需要显示更多信息(如日期和星期)的电子时钟来说,数码管的数目会相应增多,占据更大空间,并且可能导致单片机的I/O引脚资源紧张。因此,设计者最终选择了1602液晶显示器,它不仅空间占用小,还能提供更加友好的用户界面。此外,独立弹性小按键以其成本低廉、易于获取和控制的优点,被用作输入模块。 系统理论分析部分主要涉及定时器与中断原理。定时器在单片机中通常作为加1计数器使用,每当单片机运行一个机器周期,定时器就会自动加1。当计数器达到预设值N时,就会产生一次中断,单片机转而执行中断服务程序。通过设置合适的计数器值N和中断次数X,可以控制每秒更新一次显示内容。在中断处理程序中,通过计算得出的中断时间来实现时间的更新,再通过液晶显示器进行显示。此外,还使用了Proteus仿真软件对设计进行了仿真测试,以确保方案的可行性。 软件设计是电子时钟项目的核心部分。设计者首先绘制了主程序流程图,明确主程序中各种功能模块的逻辑关系,如初始化、按键扫描、时间调整、时间显示等。同时,还涉及了如延时子程序、液晶写命令和数据子程序等基本函数的编写,这些都是为了控制液晶显示器正常工作所必需的。 在系统测试及结果分析中,测试显示电子时钟在整体性能上是令人满意的,但存在每5分钟慢1秒的微小误差。这部分误差主要是由于中断处理程序中代码较长,处理函数耗时所造成的。在理论上,可以通过使用更精准的时钟芯片来解决这个问题,但由于成本及购买难度,设计者暂时未采纳此方案。未来,如果条件允许,设计者计划尝试使用时钟芯片来实现更加精确的时间计算。 总体来说,本文所介绍的电子时钟项目,不仅是一个具有实用价值的电子设备,同时也是一次深入浅出的嵌入式系统设计学习过程。在项目开发过程中,设计者需要理解单片机的中断机制和定时器工作原理,了解如何与外部设备如液晶显示器进行通信,并且还要考虑到硬件成本、性能和易用性之间的平衡。通过这样的实践,学习者可以加深对嵌入式系统设计的理解,为以后更复杂的系统开发打下坚实的基础。
剩余11页未读,继续阅读
- OBOB6672023-12-07有错 不完整代码
- 粉丝: 198
- 资源: 3万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 解锁被其它进程或资源管理器占用的文件或文件夹
- 单相boost PFC电路仿真 功率因数校正 采用双闭环控制方式,电感电流内环+输出电压双环控制 在0.25s时加入负载扰动,可验证闭环系统稳定性 输出电压,和功率波形以及电路中主要工作波形如
- 【创新无忧】基于matlab遗传算法GA优化极限学习机KELM故障诊断【含Matlab源码 10735期】.zip
- 【创新无忧】基于matlab阿基米德算法AOA优化极限学习机KELM故障诊断【含Matlab源码 10681期】.zip
- 【创新无忧】基于matlab狮群算法LSO优化极限学习机KELM故障诊断【含Matlab源码 10726期】.zip
- 【创新无忧】基于matlab蚁狮算法ALO优化极限学习机KELM故障诊断【含Matlab源码 10736期】.zip
- 【创新无忧】基于matlab淘金算法GRO优化极限学习机KELM故障诊断【含Matlab源码 10727期】.zip
- 【创新无忧】基于matlab鹈鹕算法POA优化极限学习机KELM故障诊断【含Matlab源码 10728期】.zip
- 【创新无忧】基于matlab天鹰算法AO优化极限学习机KELM故障诊断【含Matlab源码 10729期】.zip
- 【创新无忧】基于matlab雾凇算法RIME优化极限学习机KELM故障诊断【含Matlab源码 10731期】.zip
- 【创新无忧】基于matlab向量加权平均算法INFO优化极限学习机KELM故障诊断【含Matlab源码 10732期】.zip
- 【创新无忧】基于matlab能量谷算法EVO优化极限学习机KELM故障诊断【含Matlab源码 10717期】.zip
- 【创新无忧】基于matlab星雀算法NOA优化极限学习机KELM故障诊断【含Matlab源码 10733期】.zip
- 【创新无忧】基于matlab黏菌算法LSMA优化极限学习机KELM故障诊断【含Matlab源码 10718期】.zip
- 【创新无忧】基于matlab蜣螂算法DBO优化极限学习机KELM故障诊断【含Matlab源码 10720期】.zip
- 【创新无忧】基于matlab雪融算法SAO优化极限学习机KELM故障诊断【含Matlab源码 10734期】.zip