- 1、本文档共29页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
电子时钟规格书.
目 录
1 选题背景 1
2 方案论证 2
2.1系统硬件 2
2.2系统软件 2
3 系统硬件电路设计 2
3.1 单片机MCU 2
3.2 复位电路 3
3.3 数码管 3
3.4 键盘 4
4 系统软件设计 5
4.1 程序框架及主流程图 5
4.1.1 底层驱动 5
4.1.2 界面层 6
4.1.3 应用层 7
4.1.4 主函数 8
5 系统调试 9
5.1 需要用到的相关工具软件 9
5.2 调试结果 9
5. 2.1 菜单选择操作 9
5.2.2 时间校准操作(A1) 10
5.2.3 秒表(A2) 10
5.3 调试中遇到的问题 10
6 总结 10
附 录 11
参考文献 29
1 选题背景
1957年,Ventura发明了世界上第一个电子表,从而奠定了电子时钟的基础,电子时钟开始迅速发展起来。现代的电子时钟是基于单片机的一种计时工具,采用延时程序产生一定的时间中断,用于一秒的定义,通过计数方式进行满六十秒分钟进一,满六十分小时进一,满二十四小时小时清零。从而达到计时的功能,是人民日常生活不可缺少的工具。数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行时和分的校对,对系统的基本要求:
(1)基本功能:设计一个时钟电路,能显示年月日和时分秒;通过功能键完成年月日时分秒的切换与对时功能;
(2)附加功能:添加秒表功能,能通过键盘进行时间和秒表功能切换。
2 方案论证
2.1系统硬件
(1)(2)4个共阳数码管()4个按键
89C52内置8位中央处理单元、256字节内部数据存储器RAM、8k片内程序存储器(ROM)32个双向输入/输出(I/O)口、3个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。
图3-2 复位电路
3.3 数码管
数码管显示电路如图3-3所示,段选端口接到复用端口 P1 上,在数码管显示电路中,将 J11—J18 跳线的 2、 3 短接,就可以进行段选。 数码管的公共端 COM1—COM4 是经PNP 三极管 9012 接单片机的 P0.0—P0.3 口上的,属于共阳极的接法,当 COM 端有低电平时,选中数码管的某个位。
图3-3 数码管
J11 J12 J13 J14
图3-4 跳线
3.4 键盘
本次采用的是独立式键盘,8个按键一端分别接P2[0-7]口,并通过10K的电阻上拉,另一端地。没有按键状态下,P2口为高电平,当有按键按下时,为低电平状态。如图3-5所示。
电子时钟面板中设有4个按键(S2-S5),用于用户设定参数及执行各项操作。具体操作见用户使用说明书。
图3-5 键盘
4 系统软件设计
4.1 程序框架及主流程图
结合上述方案论证中层次化设计方法,本系统程序主要包括主程序、应用层程序、以及底层驱动程序,下面将结合程序设计设计过程作详细介绍。图4-1为系统的主流程图。
图4-1系统主流程图
4.1.1 底层驱动
按键驱动(key.c)
按键驱动主要包括按键初始化(配置引脚为输入,使能上拉)、读取按键键值、按键防抖,以及按键键值转化。其中按键消抖采用定时器方式,能大大释放CPU资源。另外添加了连击(即按键长按)功能,同样是在定利用定时器法方式实现的。键值转化将键值写入FIFO中,在应用层函数中读出键值,并做相应处理。
数码管显示模块(led.c)
为了节约硬件资源,降低系统的设计成本,采用动态扫描,软件译码的方式来实现数码管显示。在数据存储区建立一个显示缓冲区,存储单元的个数与数码管个数相等,也就是4个。每次执行显示任务时,只进行一个数码管显示,下一次调用显示子程序时,显示下一位数码管,以此类推。这样当每次退出数码管显示程序后,由于I/O口的锁存作用相应的数码管一直点亮。这就是数码管动态扫描函数ledScan_Display(),本系统中,每5ms扫描一次数码管。
用led_Disp_init()函数对数码管缓冲区进行初始化。
另外加入小数点亮、灭的函数:dot_On(),dot_Off()。
定时器(time.c)
本系统使用定时器0。对定时器0进行初始化,初始化应完成如下工作:
1)、设置定时器/计数器的工作模式TMOD(常用的是模式1:TMOD=0x01);
2)、装入预置数到TH0和TL0中(THx=TLx=MAX(8
文档评论(0)