- 1、本文档共19页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机时钟设计说明书
课程设计成果说明书
题 目: 单片机时钟
学生姓名:
学 号:______ ___
学 院:
班 级:
指导教师:
浙江海洋学院教务处
年 月 日
一 系统功能
单片机时钟由单片机和数码管组成,能够以24小时计时方式显示时钟的时,分,秒,能够进行整点报时,使用按键可实现时分的调整和秒表的功能,还能切换到显示班级和姓名。
二 设计方案
采用AT89C51单片机和共阳七段LED数码管构成时钟系统,可以得到图1-1所示的单片机时钟电路设计的总框架图。
图1-1 单片机时钟系统总体设计框图
三 系统硬件仿真电路
系统硬件仿真电路见图1-2。此系统采用AT89C51单片机,用12MHz晶振(仿真图中略),共阳七段LED显示器,单片机P0口输出段码数据,P2口作列扫描输出,P1口接几个功能按键,按键可实现不同的功能(显示时钟,调整时钟,秒表,班级姓名的显示及整点报时)。
图1-2 硬件仿真电路
四 程序设计
1 主程序
该程序设计中采用定时器T0中断完成时钟的计时程序,秒表使用定时器T1中断完成,主程序循环调用显示子程序及查键,采用子程序和按键结合的方法,当按键按下时,调用相应的子程序,完成相应的功能。主程序流程图见图1-3。
图1-3 主程序流程图
2 各项服务程序及功能程序
2.1 显示子程序
采用七段共阳LED数码管动态扫描实现数据显示。显示时,数据从已设定的表中查得对应的显示段码从P0口输出,P2口控制对应的数码管,就能在数码管中显示在表中查得的数据。
定时器T0中断服务程序
定时器T0用于时间计时。定时溢出中断周期设为50ms,因此初值定为3CB0H,中断累计20次,即完成1秒,此时对秒计数单元加1。计时的最大值为23小时59分59秒。计数显示采用十进制BCD码计数。如此数码管显示时钟,即完成了单片机的时钟计数程序。
T0中断计时程序流程见图1-4。
图1-4 T0中断计时程序流程
时间调整程序
时间调整设计方法:按下按键KEY1,此时小时计数单元闪动,计时器停止运行,等待下一步的操作,用按键KEY2可以实现小时加调整,按键KEY3实现小时减调整,再按下按键KEY1,此时分计数单元闪动,计时器停止运行,等待下一步的操作,用按键KEY2可实现分钟加调节,按键KEY3实现分钟减调整,再按下按键 KEY1,返回到显示时钟程序。
T1中断服务程序
T1中断程序用于秒表的计数。由于定时10ms,因此每10ms进行一次中断,计数单元加1,每100次为1秒,秒表的最小两位的显示数值为00~99,最大计数为59.99秒。
显示班级和姓名程序
在正常时钟状态下若按下开关KEY4,则进入显示班级和姓名,显示通过查表查得班级和姓名的代码。若放开开关KEY4,则恢复正常的时钟显示。
五 软件调试与运行结果
在Proteus软件上画好图,用keil软件编译程序,将程序放入单片机中,开始运行,时钟显示正确,开关KEY1和KEY2可以进行时和分的调节,按下KEY3,执行秒表功能,按下开关KEY5返回时钟显示。按下开关KEY4可以显示班级和姓名,当时钟运行到59分59秒,能整点报时。
总程序:
/*--------------------------------------
Clock program V1.0
--------------------------------------*/
#include reg51.h
//
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
sbit BUZZ=P3^7;
sbit KEY1=P1^0;
sbit KEY2=P1^1;
sbit KEY3=P1^2;
sbit KEY4=P1^3;
sbit KEY5=P1^4;
uchar hour_reg, minute_reg, second_reg;
uchar hour1_reg, minute1_reg, second1_reg;
void delay(uint);
void display(uchar*);
void time2str(uchar*);
v
文档评论(0)