电子线路CAD课数字时钟设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电子线路CAD课程设计报告
单片机电子时钟
山东科技大学
日期:2015年 1 月18 日
教师评语
目录
一、绪论 (1)
二、设计内容 (2)
2.1、基本功能 (2)
2.2、扩展功能 (2)
三、原理图设计 (2)
3.1系统功能实现总体设计思路 (2)
3.2各部分功能实现 (4)
3.3系统工作原理 (4)
3.4时钟各功能分析及图解 (5)
3.5控制电路的C语言源程序 (7)
四、系统仿真与调试 (13)
五、PCB板图设计 (14)
六、总结 (14)
七、参考文献 (15)
一、绪论
单片机即单片微型计算机。(Single-Chip Microcomputer ),是集CPU ,RAM ,ROM ,定时,计数和多种接口于一体的微控制器。他体积小,成本低,功能强,广泛应用于工业自动化上和智能产品。时钟,自从它被发明的那天起,就成为了人类的好朋友,但随着时间的推移,科学技术的不断发展,时钟的应用越来越广范,人们对时间计量的精度要求也越来越高。怎样让时钟更好的为人民服务,怎样让我们的老朋友再次焕发青春呢?这就要求我们不断设计出新型的时钟,来不断满足人们的日常生活需要。然而市场上的时钟便宜的比较笨重,简单实用的又比较昂贵。那么,有没有一款既简单实用价格又便宜的时钟呢?所以本设计利用单片机功能集成化高,价格又便宜的特点设计一款结构既简单,价格又便宜的单片机电子时钟。
二、设计内容
2.1 基本功能
(1)能够显示时分秒
(2)能够调整时分秒
2.2 扩展功能
(1)能够任意设置定时时间
(2)定时时间到闹铃能够报警
(3)实现了秒表功能
三、原理图设计
3.1系统功能实现总体设计思路
此设计原理框图如图所示,此电路包括以下四个部分:单片机,键盘,闹铃
电路及显示电路。
设计原理框图
经多方论证硬件我们小组采用AT89C51单片机和7SED 八位共阳极数码管等来实现单片机电子时钟的功能。
详细元器件列表如表所示:
详细元器件列表
3.2各部分功能实现
(1)单片机发送的信号通过程序控制最终在数码管上显示出来。
(2)单片机通过输出各种电脉冲信号来驱动控制各部分正常工作。
(3)为使时钟走时与标准时间一致,校时电路是必不可少的,键盘用来校正数码管上显示的时间。
(4)单片机通过控制闹铃电路来完成定时闹钟的功能。
3.3系统工作原理
设计的电路主要由四模块构成:单片机控制电路,显示电路、闹铃电路以及校正电路。
详细电路功能图如图
本设计采用C语言程序设计,使单片机控制数码管显示时、分、秒,当秒计数计满60时就向分进位,分计数器计满60后向时计数器进位,小时计数器按“23翻0”规律计数。时、分、秒的计数结果经过数据处理可直接送显示器显示。当计时发生误差的时候可以用校时电路进行校正。设计采用的是时、分、秒显示,单片机对数据进行处理同时在数码管上显示。
3.4时钟各功能分析及图解
3.4.1电路各功能图解分析
(1)时钟运行图
仿真开始运行时,或按下key4键时,时钟从12:00:00开始运行,其中key2键对分进行调整,key3对小时进行调整,key6可以让时钟暂停。
时钟运行图如图所示:
时钟运行图
(2)秒表计时图
当按下key1键进入秒表计时状态,key6是秒表暂停键,可按key4键跳出秒表计时状态。
如图
秒表计时图
(3)闹铃设置图及运行图
当按下key5,开始定时,分别按key2调分,key3调时设置闹铃时间,然后按下key4键恢复时钟运行状态(图1)当闹铃设置时间到时,蜂鸣器将发出10秒中蜂鸣声
图1闹铃时间设置图
该数字钟是用一片STC89C52单片机通过编程去驱动8个数码管实现的。通过6个开关控制,从上到下6个开关KEY1-KEY6的功能分别为:KEY1,切换至秒表;KEY2,调节时间,每调一次时加1;KEY3, 调节时间,每调一次分加1;KEY4,从其它状态切换至时钟状态;KEY5,切换至闹钟设置状态,也可以对秒表清零;KEY6,秒表暂停.控制键分别与P1.0~P1.5口连接.其中:A通过P2口和P3口去控制数码管的显示如图所示P2口接数码管的a ——g端,是控制输出编码,P3口接数码管的1——8端,是控制动态扫描输出.
B从P0.0输出一个信号使二极管发光,二极管在设置的闹钟时间到了时候发光,若有乐曲可以去驱动扬声器实现。
3.5控制电路的C语言源程序
根据流程图,经过认真分析得出控制电路的源程序如下:
#include
#define uchar unsigned char #define uint unsigned int
#define delay_time 3/*宏定义
*/
uchar
k,dat[]={0,0,0,0,0,0,0,0};
uint tcount,t,u;
uchar
dat1[]={0,0,0,0,0,0,2,1};
uchar
dat2[]={0,0,0,0,0,0,0,0};
uchar
alarms[]={0,0,0,0,0,0,0,0};
uchar
dis_bit[]={0x80,0x40,0x20,0x10,0
x08,0x04,0x02,0x01};
unsigned char code SEG7[11]={0xC0,/*0*/
0xF9,/*1*/
0xA4,/*2*/ 0xB0,/*3*/ 0x99,/*4*/ 0x92,/*5*/ 0x82,/*6*/ 0xF8,/*7*/
0x80,/*8*/
0x90,/*9*/
0xBF,/*-*/
};/*数字显示数组*/
sbit miaobiao1=P1^0;
sbit tminute=P1^1;
sbit thour=P1^2; sbit miaobiao2=P1^3;
sbit alarm=P1^4;
sbit P0_0=P0^0;
sbit P1_5=P1^5;
sbit P1_6=P1^6;
sbit P1_7=P1^7;/*端口定义*/ uchar ms=0;
uchar flag=0;
uchar sec=0;
uchar minit=0;
struct time{uchar
second;uchar minute;uchar hour;}time1;
uchar n,i;
void delay(n)
{while(n--)
{
for(i=120;i>0;i--);
}
}
/*延时子程序*/
void modify(void)
{
EA=0;
if(thour==0)
{
if(flag==0)
{
dat1[6]++;delay(280);