单片机电子时钟系统设计.docx

上传人:b****1 文档编号:23259151 上传时间:2023-05-15 格式:DOCX 页数:23 大小:364.79KB
下载 相关 举报
单片机电子时钟系统设计.docx_第1页
第1页 / 共23页
单片机电子时钟系统设计.docx_第2页
第2页 / 共23页
单片机电子时钟系统设计.docx_第3页
第3页 / 共23页
单片机电子时钟系统设计.docx_第4页
第4页 / 共23页
单片机电子时钟系统设计.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

单片机电子时钟系统设计.docx

《单片机电子时钟系统设计.docx》由会员分享,可在线阅读,更多相关《单片机电子时钟系统设计.docx(23页珍藏版)》请在冰豆网上搜索。

单片机电子时钟系统设计.docx

单片机电子时钟系统设计

电气信息学院

单片机与控制技术课程设计报告

 

课题名称电子时钟的设计

专业班级

学号

学生姓名

指导教师

评分

 

2012年12月24日至12月30日

课程设计量化评分标准

 

指标

分值

评分要素

得分

方案设计

20

方案选择合理,分析、设计正确,原理清楚,电路、程序流程图清晰,结构合理,程序简洁、正确。

 

 

设计报告

20

报告结构严谨,逻辑严密,论述层次清晰,语言流畅,表达准确,重点突出,报告完全符合规范化要求,用计算机打印成文。

 

调试与结果

20

过程清晰,调试方案设计合理,测试点选择适当,程序编写正确,调试步骤清楚。

电路及程序运行结果正确,达到预期效果。

 

工作态度

20

工作量饱满程度,题目难度;工作态度,按时完成设计任务,是否独立完成等。

 

答辩成绩

20

思路清晰;语言表达准确,概念清楚,论点正确;分析归纳合理,结论严谨;回答问题有理论根据,基本概念清楚。

 

总评成绩

 

指导老师评语:

 

答辩记录

1、例举设计过程中遇到的问题及其解决方法(至少两例)。

答:

(1)问题说明:

在程序设计时,许多原来程序设计的知识已经忘记,不知怎么下笔。

解决方法:

看书请教同学,一点点捡起原来的C语言,参考资料。

(2)问题说明:

在仿真时,许多元器件找不到,而且很多都类似却各有差别,不知选哪个好。

解决方法:

网上查资料,询问同学,在书本中找到相关部分仔细阅读。

2、教师现场提的问题记录在此(不少于2个问题)。

答:

 

摘要

单片计算机即单片微型计算机。

由RAM,ROM,CPU构成,定时,计数和多种接口于一体的微控制器。

它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。

而51系列单片机是各单片机中最为典型和最有代表性的一种。

这次课程设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。

本设计主要设计了一个基于AT89C51单片机的电子时钟。

在数码管通过一个控制键转换来显示相应的时间和日期。

并通过多个控制键用来实现时间和日期的调节。

应用keil软件实现单片机电子时钟系统的程序设计,用Proteus的ISIS软件实现仿真。

该方法仿真效果真实、准确,节省了硬件资源。

现代的电子时钟是基于单片机的一种计时工具,采用延时程序产生一定的时间中断,用于一秒的定义,通过计数方式进行满六十秒分钟进一,满六十分小时进一,满二十四小时小时清零。

从而达到计时的功能,是人民日常生活不可缺少的工具。

数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。

在这里我们将已学过的比较零散的数字电路的知识有机的、系统的联系起来用于实际,来培养我们的综合分析和设计电路,写程序、调试电路的能力。

关键词:

单片机;时钟;键盘控制;C语言

I

目录

答辩记录II

1设计任务1

2设计方案1

2.1任务分析1

2.2方案设计1

3系统硬件设计5

3.1时钟电路设计5

3.2复位电路设计5

3.3数码管显示工作原理5

3.474ls373介绍6

4仿真与性能分析7

5心得体会9

参考文献9

附录程序清单10

1设计任务

设计任务:

1.用6个7段LED数码管作为显示设备,设计时钟功能;

2.可以分别设定小时、分钟和秒,复位后时间为00:

00:

00;

3.秒钟复位功能,秒复位键按下后,秒回到00。

图1.1电子钟成品图

1.基本要求

(1).LED宜采用动态扫描法显示

(2).如果需要制作电子万年历,可以考虑外部扩展专用时钟芯片(如:

DS1302)

2.选做

(1).日期、时间切换功能

(2).使用LCD取代LED作为显示设备

(3).实现闹钟功能(创新部分)

2设计方案

2.1任务分析

电子时钟的设计主要目的是利用单片机设计出完整的电子时钟系统,可以考虑用最小单片机系统来实现。

方案简单且性能较好。

2.2方案设计

1.硬件方案

根据设计的要求可知,系统的硬件原理框图如图2.1所示。

 

 

图2.1系统的硬件原理框图

 

单片机可选用AT89C51,它与8051系列单片机全兼容,但其内部带有4KB的FLASHROM,设计时无需外接程序存储器,为设计和调试带来极大的方便。

南北向和东西向各采用2个数码管计时,同时需要对该方向的指示灯的点亮时间进行倒计时。

键盘系统可以根据系统的需要设置不同的键的个数,可以选择线式键盘或矩阵式键盘,若单片机的IO口不够用时,可以考虑扩展8255或8155满足系统的要求。

 

2.软件方案

图2.2主程序流程图

3系统硬件设计

3.1时钟电路设计

图3.1单片机时钟电路

如图3.1所示,采用内部时钟产生方式,在XTAL1和XTAL2两端跨接晶体或陶瓷振荡器,与内部反相器构成稳定的自击震荡。

其发出的时钟脉冲直接送入片内定时控制部件。

3.2复位电路设计

如图3.2所示,采用上电+按钮电平复位方式,当按下按钮时,RST管脚高电平触发。

为保证复位可靠,RC时间常数应大于两个机器周期,电容取33uf,电阻取200欧。

图3.2单片机复位电路

3.3数码管显示工作原理

数码管是一种把多个LED(7SEG-MP*8-CA-BLUE)显示段集成在一起的显示设备。

有两种类型,一种是共阳型,一种是共阴型。

共阳型就是把多个LED显示段的阳极接在一起,又称为公共端。

共阴型就是把多个LED显示段的阴极接在一起,即为公共商。

阳极即为二极管的正极,又称为正极,阴极即为二极管的负极,又称为负极。

通常的数码管又分为8段,即8个LED显示段,这是为工程应用方便如设计的,分别为A、B、C、D、E、F、G、DP,其中DP是小数点位段。

而多位数码管,除某一位的公共端会连接在一起,不同位的数码管的相同端也会连接在一起。

即,所有的A段都会连在一起,其它的段也是如此,这是实际最常用的用法。

数码管显示方法可分为静态显示和动态显示两种。

静态显示就是数码管的8段输入及其公共端电平一直有效。

动态显示的原理是,各个数码管的相同段连接在一起,共同占用8位段引管线;每位数码管的阳极连在一起组成公共端。

利用人眼的视觉暂留性,依次给出各个数码管公共端加有效信号,在此同时给出该数码管加有效的数据信号,当全段扫描速度大于视觉暂留速度时,显示就会清晰显示出来。

 

图3.3七段共阴发光数码管

 

3.474ls373介绍:

373为三态输出的八D透明锁存器,373的输出端O0~O7可直接与总线相连。

  当三态允许控制端OE为低电平时,O0~O7为正常逻辑状态,可用来驱动负载或总 线。

当OE为高电平时,O0~O7呈高阻态,即不驱动总线,也不为总线的负载,锁存器内部的逻辑操作不受影响。

当锁存允许端LE为高电平时,O随数据D而变。

当LE为低电平时,O被锁存在已建立的数据电平。

当LE端施密特触发器的输入滞后作用,使交流和直流噪声抗扰度被改善400mV。

  引出端符号:

D0~D7数据输入端;OE三态允许控制端(低电平有效;LE锁存允许端;O0~O7输出端

图3.474LS373

 

4仿真与性能分析

1、系统仿真过程

仿真平台采用proteusisis。

先将程序生成Hex文件,然后倒入选好的单片机中,添加需要的元器件,连线开始仿真。

图4.1仿真图

2仿真结果与分析

当电子钟上电复位后,数码管显示00-00-00。

并以1秒为单位计时,通过案件S1/S2/S3/S4可调节时间和日期。

如下图显示时间为5时22分23秒:

图4.2系统仿真结果(时间)

如下图显示日期为11年7月3日:

图4.3系统仿真结果(日期)

5心得体会

进过不懈的努力,我们顺利完成了这次单片机课程设计课题中的个性化电子时钟设计,

本次仿真总的来说是实现了预期的效果,但是喇叭把的效果不是很好。

功能还不够完善,设计还比较简单。

不过通过此次设计我们还是学会了不少东西。

首先,学会了keil和proteus软件。

然后,由于此次程序是用C语言编写的,以前的C语言知识的到了巩固。

同时,我们还领悟到了团队精神的真谛。

通过这次的设计使我认识到本人对单片机方面的知识知道的太少了,对于书本上的很多知识还不能灵活运用,尤其是对程序设计语句的理解和运用,不能够充分理解每个语句的具体含义

总的来说,本次的设计使我从中学到了最重要的东西,那就是如何从理论到实践的转化,怎样将我所学到的知识运用到我以后的工作中去。

在大学的课堂的学习只是在给我们灌输专业知识,而我们应把所学的用到我们现实的生活中去,此次的电子时钟设计给我奠定了一个实践基础,我会在以后的学习、生活中磨练自己,使自己适应于以后的竞争,同时在查找资料的过程中我也学到了许多新的知识,在和同学协作过程中增进同学间的友谊,使我对团队精神的积极性和重要性有了更加充分的理解。

参考文献

[1]郭天祥.新概念51单片机C语言教程[M].北京:

电子工业出版社,2009.

[2]胡汉才.单片机原理与接口技术[M].北京:

清华大学大学出版社,2004.1-505.

[3]邢国泉.LM35温度传感器的温度特性及其应用[J].医疗设备信息.2007,11(9):

25-28.

[4]薛国红,赵修斌,卢艳娥等.零漂与增益控制对量化的影响分析[M].西安:

空军工程大学,2008.

[5]马忠梅,刘滨等.单片机C语言Windows环境编程宝典[M].北京:

北京航空航天大学出版社.2003

附录程序清单

#include

#include

sbitP20=P2^0;/****定义端口****/

sbitkhour=P3^0;

sbitkmin=P3^1;

sbitknian=P3^2;

sbittiaonian=P3^3;

sbitspeaker=P3^7;

intj=-1;/*****定义变量,j用以控制扫描********/

bitflag=0,leap=0;/*****定义flag控制时分秒和年月日的显示,leap判断是否为闰年***/

charsecshi=0,secge=0,minshi=0,minge=0,hourshi=0,hourge=0;

chardayshi=0,dayge=0,monthshi=0,monthge=0,yearshi=0,yearge=0;

unsignedintnum=0,sec=0,min=0,hour=0;/****设置初始时间为00时0分0秒****/

unsignedintday=1,month=1,year=10;/****设置初始日期为2010年1月1日****/

charsaomiao[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

/****扫描数组,控制位选******/

charshijian[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

/*******共阴数码管的0,1,2,3,4,5,6,7,8,9********/

voiddelay(unsignedintz)/*******延时子程序******/

{unsignedintx,y;

for(x=z;x>0;x--)

for(y=10;y>0;y--);

}

voidtimer()interrupt1/*********定时器中断0********/

{

TH0=(65535-5000)/256;/******重新装入初值*****/

TL0=(65535-5000)%256;

num++;

j++;

if((year%4==0&&year%100!

=0)||(year%400==0))/*******判断是否为闰年******/

leap=1;/*******闰年,使leap=1******/

else

leap=0;/*******平年,使leap=0******/

if(num==150)/*****实验微调得num=150时大概为1s******/

{num=0;

sec++;/****秒自动加1*****/

}

if(sec==60)

{

sec=0;

min++;/****60s时,分自动加1,秒归0*****/

}

if(min==60)

{

min=0;

hour++;/****60分时,小时自动加1,分归0*****/

}

if(hour==24)

{

hour=0;

min=0;

sec=0;

day++;/****24时,天自动加1,时分秒归0*****/

}

/*************************************************************************************************************************************************************************月份的判断,平年时的2月和闰年时的2月,以及30天和31天的判断**************************************************************************************************************************************************************/

if((leap==1&&month==2&&day==30)||(leap==0&&month==2&&day==29))

{

day=1;

month++;/*****2月28天或29天时月自加1*****/

}

if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)

{

if(day==32)

{

day=1;

month++;/*****月为31天达到时月自动加1*****/

}

}

if(month==4||month==6||month==9||month==11)

{

if(day==31)

{

day=1;

month++;/*****月为30天达到时月自动加1*****/

}

}

if(month==13)

{

year++;

month=1;/*********新的一年的开始**********/

}

secge=sec%10;

secshi=sec/10;

minge=min%10;

minshi=min/10;

hourge=hour%10;

hourshi=hour/10;

dayge=day%10;

dayshi=day/10;

monthge=month%10;

monthshi=month/10;

yearge=year%10;

yearshi=year/10;

P1=saomiao[j];/*******数码管的位选设置*********/

if(flag==1)/*******flag=1,显示年月日*******/

{

if(P1==0x80)P2=shijian[dayge];

if(P1==0x40)P2=shijian[dayshi];

if(P1==0x20)P2=0xbf;/******年与月之间的分隔符"-"的显示*****/

if(P1==0x10)P2=shijian[monthge];

if(P1==0x08)P2=shijian[monthshi];

if(P1==0x04)P2=0xbf;/******月与天之间的分隔符"-"的显示*****/

if(P1==0x02)P2=shijian[yearge];

if(P1==0x01)P2=shijian[yearshi];

}

else/*******flag=0,显示时分秒*******/

{

if(P1==0x80)P2=shijian[secge];

if(P1==0x40)P2=shijian[secshi];

if(P1==0x20)P2=0xbf;

if(P1==0x10)P2=shijian[minge];//xianshi

if(P1==0x08)P2=shijian[minshi];

if(P1==0x04)P2=0xbf;

if(P1==0x02&&hour<24)P2=shijian[hourge];/*****显示小时0~23*****/

if(P1==0x01&&hour<24)P2=shijian[hourshi];

}

if(j==7)

{

j=-1;

}

}

voidtimer1()interrupt0

/*************************************************************************************************************************************************************外部中断0,设置标志flag,按键未按下,flag=0,显示时分秒,按键按下,flag=1,显示年月日*************************************************************************************************************************************************************/

{

flag=!

flag;/******按下knian按钮****flag=1,x显示年月日*******/

}

voidcontrol()/*******时分的调整子程序********/

{

if(flag==0)/****显示时分秒的情况下做时分的调整******/

{if(kmin==0)

{

min++;

while(kmin==0);

if(min==60)

min=0;

}

if(khour==0)

{

hour++;

//sec=0xc0;

while(khour==0);

if(hour>23)

hour=0;

}

}

if(flag==1)/********显示年月日的情况下做年月日的调整**********/

{

if(kmin==0)

{

day++;

while(kmin==0);

}

if(khour==0)

{

month++;

while(khour==0);

if(month>12)

month=1;

}

if(tiaonian==0&&speaker==1)

{

year++;

while(tiaonian==0);

}

}

}

voidbaoshi()/******整点报时子程序********/

{

if(min==0&&sec<10)/*****整点闹钟响,响10秒*****/

{

speaker=0;

delay

(1);

speaker=1;

}

else

speaker=1;

}

voidalarm()/******闹钟子程序*******/

{

bitring=1;

charxx=10;

if(tiaonian==0)

{

ring=0;

delay(100);

while(tiaonian==0);/******关闭正在叫的闹钟*****/

}

if(hour==6&&min==xx&&ring==1)/*******闹钟按时鸣叫1分钟******/

{

speaker=0;

delay

(1);

speaker=1;

}

if(hour==6&&min==xx+1)/*****1分钟后闹钟停止鸣叫*******/

{

speaker=1;

}

}

voidmain()

{

TMOD=0x01;/*******设置工作方式******/

TR0=1;

P2=0;

TH0=(65535-5000)/256;/******装入计时初值*****/

TL0=(65535-5000)%256;

IE=0x82;

IP=0x00;/*******设置中断优先级*****/

EA=1;

EX0=1;/****开外部中断0******/

while

(1)

{

control();

alarm();

baoshi();

}

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1