大工《单片机原理及应用》大作业.docx

上传人:b****9 文档编号:25027199 上传时间:2023-06-04 格式:DOCX 页数:18 大小:181.92KB
下载 相关 举报
大工《单片机原理及应用》大作业.docx_第1页
第1页 / 共18页
大工《单片机原理及应用》大作业.docx_第2页
第2页 / 共18页
大工《单片机原理及应用》大作业.docx_第3页
第3页 / 共18页
大工《单片机原理及应用》大作业.docx_第4页
第4页 / 共18页
大工《单片机原理及应用》大作业.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

大工《单片机原理及应用》大作业.docx

《大工《单片机原理及应用》大作业.docx》由会员分享,可在线阅读,更多相关《大工《单片机原理及应用》大作业.docx(18页珍藏版)》请在冰豆网上搜索。

大工《单片机原理及应用》大作业.docx

大工《单片机原理及应用》大作业

大工《单片机原理及应用》大作业

网络教育学院

《单片机原理及应用》大作业

 

 

题目:

单机片电子时钟设计

学习中心:

辽宁本溪奥鹏学习中心

层次:

高起专

专业:

机械制造与自动化

年级:

2013年春季

学号:

131080131409

学生姓名:

丁志芳

 

单片机电子时钟设计

1.设计背景

数字钟已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。

由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。

尽管目前市场上已有现成的数字钟集成电路芯片出售,价格便宜、使用也方便,但鉴于单片机的定时器功能也可以完成数字钟电路的设计,因此进行数字钟的设计是必要的。

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

单片机全称,单片机微型计算机,从应用领域来看,单片机主要用来控制系统运行,所以又称微控制器或嵌入式控制器,单片机是将计算机的基本部件微型化并集成在一块芯片上的微型计算机。

单片机技术在计算机中作为独立的分支,单片机具有体积小、功能强可靠性高、价格低廉等一系列优点,不仅已成为工业测控领域普遍采用的智能化控制工具,而且已渗入到人们工作和和生活的各个角落,有力地推动了各行业的技术改造和产品的更新换代,应用前景广阔。

2.时钟的基本原理分析

利用单片机定时器完成计时功能,定时器0计时中断程序每隔0.01s中断一次并当作一个计数,设定定时1秒的中断计数初值为100,每中断一次中断计数初值减1,当减到0时,则表示1s到了,秒变量加1,同理再判断是否1min钟到了,再判断是否1h到了。

为了将时间在LED数码管上显示,可采用静态显示法和动态显示法,由于静态显示法需要译码器,数据锁存器等较多硬件,可采用动态显示法实现LED显示,通过对每位数码管的依次扫描,使对应数码管亮,同时向该数码管送对应的字码,使其显示数字。

由于数码管扫描周期很短,由于人眼的视觉暂留效应,使数码管看起来总是亮的,从而实现了各种显示。

3.时钟设计分析

针对要实现的功能,采用AT89S51单片机进行设计,AT89S51单片机是一款低功耗,高性能CMOS8位单片机,片内含4KB在线可编程(ISP)的可反复擦写1000次的Flash只读程序存储器,器件采用高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构。

这样,既能做到经济合理又能实现预期的功能。

在程序方面,采用分块设计的方法,这样既减小了编程难度、使程序易于理解,又能便于添加各项功能。

程序可分为闹钟的声音程序、时间显示程序、日期显示程序,秒表显示程序,时间调整程序、闹钟调整程序、定时调整程序,延时程序等。

运用这种方法,关键在于各模块的兼容和配合,若各模块不匹配会出现意想不到的错误。

首先,在编程之前必须了解硬件结构尤其是各引脚的用法,以及内部寄存器、存储单元的用法,否则,编程无从下手,电路也无法设计。

这是前期准备工作。

第二部分是硬件部分:

依据想要的功能分块设计设计,比如输入需要开关电路,输出需要显示驱动电路和数码管电路等。

第三部分是软件部分:

先学习理解汇编语言的编程方法再根据设计的硬件电路进行分块的编程调试,最终完成程序设计。

第四部分是软件画图部分:

设计好电路后进行画图,包括电路图和仿真图的绘制。

第五部分是软件仿真部分:

软硬件设计好后将软件载入芯片中进行仿真,仿真无法完成时检查软件程序和硬件电路并进行修改直到仿真成功。

第六部分是硬件实现部分:

连接电路并导入程序检查电路,若与设计的完全一样一般能实现想要的功能。

最后进行功能扩展,在已经正确的设计基础上,添加额外的功能!

4.时钟的实现

4.1电路设计

4.1.1整体设计

此次设计主要是应用单片机来设计电子时钟,硬件部分主要分以下电路模块:

显示电路用8个共阴数码管分别显示,星期(年份),小时、分钟(月份)和秒(日),通过动态扫描进行显示,从而避免了译码器的使用,同时节约了I/0端口,使电路更加简单。

单片机采用AT89S51系列,这种单片机应用简单,适合电子钟设计。

电路的总体设计框架如下:

 

4.2分块设计

模块电路主要分为:

输入部分、输出部分、复位和晶振电路。

4.2.1输入部分

输入信号主要是各种模式选择和调整信号,由按键开关提供。

以下为输入部分样例:

在本实验中主要用用P3口输入按键信号,还用到了特殊的P0口。

对于P0口,由于其存在高阻状态,为了实现开关功能,给其添加上拉电阻,具体如下图所示:

4.2.2输出部分

本电路的输出信号为7段数码管的位选和段选信号,闹铃脉冲信号,提示灯信号。

本实验的数码管是共阴的,为了防止段选信号不能驱动数码管,故在P1口连接上拉电阻后,再送段选信号,以提高驱动,位选信号直接从P2口接入,如下图:

闹铃由P2.6端输出,模块如下:

4.2.3晶振与复位电路

本实验单片机时钟用内部时钟,模块如下:

复位电路为手动复位构成,模块如下:

各模块拼接组合,电路总体设计图如下

4.3程序设计

4.3.1程序总体设计

本实验用汇编程序完成.

程序总的流程图如下:

 

主程序开始

显示星期,时,

分,秒

是否有调转?

T0中断

秒,分,时等进位

闪烁提示

显示日期并调整

响铃提示

时间调整

闹铃设置

定时设置

铃声测试

秒表模式

回主程序

定时到

按0键

按0键

闹铃到

按1键

按2键

按3键

按4键

按5键

按7键

7键恢复

按4键

按8键

按0键

按0键

倒计时启动并显示

回主程序

秒表暂停

秒表清零

回主程序

按7键

 

3.

 

4.3.2程序主要模块

1.延时模块

数码管显示动态扫描时,用到延时程序,这里使用延迟1ms的程序,此程序需反复调,除数码管动态扫描外,数码管的闪烁提示,以及音乐模块也用到了延时,只是延时的长短不同罢了,在此不再赘述。

2.中断服务程序

本实验中,计数器T0,T1中断都有运用,其中T0中断为时钟定时所用,T1中断用于音乐播放。

T0的定时长度为0.01s,工作于方式1,计数1次,时长1us,故计数器计数10000次,进入中断,计数初值为65536-10000=55536=#0D8F0,装满定时器需要0.01s的时间,从而100次中断为一秒,一秒之后,判断是否到60秒,若不到则秒加一,然后返回,若到,则秒赋值为0,分加一,依次类推。

包括日期显示的功能也是如此。

另外,由于要实现倒计时功能,因此在中断程序中还要加入减一的寄存器,需要时将其进行显示。

基于以上考虑,以R3为倒计时中的秒,R4为倒计时的分,当秒加1时R3减一,减到0之后,秒赋值为59,分减一,直到分为0。

计数器T1工作于方式1,当调用响铃程序时,其计数功能开启,为音乐音调不同频率的方波的形成,提供延时。

其中断服务程序就是根据音调改变音乐方波输出口电平的高低,用语句CPL实现。

中断服务程序中日历的实现较为复杂,要考虑平年,闰年,特殊的2月,每月的天数的不尽相同。

具体的逻辑判断方法为:

首先,要考虑年份是不是闰年,闰年的判断方法是:

将年份除以100,若能整除,则将年份除以400,若还能整除,则为闰年,若不能,则为平年;若不能被100整除,则判断是否能被4整除,若能,则为闰年,若不能则为平年。

只有2月与平、闰年相关,因此在闰年和平年的子程序中,要判断是不是2月,若是则在相应的年中进行日期的增加,若不是则转入平时的月份。

其中1、3、5、7、8、10、12月是每月31天,4、6、9、11月为每月30天。

日历进位判断流程图如下:

 

年份能否被100整除

N

Y

年份是否能被4整除

年份是否能被400整除

N

N

平年

闰年

Y

Y

是不是2月

是不是2月

Y

日>=28之后返回为1

N

N

Y

日>=29之后返回为1

若月份为1、3、5、7、8、10、12月则调用31天的程序

若月份为4、6、9、11则调用30天的程序

 

本实验用8个数码管,刚好能显示年,月,日,扫描显示与时间的扫描显示类似。

年比较特殊,由两个寄存器存储,个位,十位为0时,表明年数能被100整除,若此时千位,百位

组成两位数能被4整除,则年数被400整除,为闰年。

若十位,个位组成两位数能被4整除,则年数能被4整除,为闰年。

3.主程序

主程序主要对按键进行扫描,以及判断定时和闹铃时间是否已到,若到则调用相关程序。

4.显示子程序

8个数码管轮流进行显示,分别显示1ms,依赖人的视觉暂留效应,给人以数码管持续高亮的错觉。

日期的显示,秒表的显示,倒计时的显示,调闹铃,调定时的显示,闪烁的显示程序与以上的扫描相似,有的以子程序的方式出现,通过子程序调用语句ACALL调用;有点直接嵌套在相应的程序里面,顺序执行,或者用调转语句AJMP调用。

4.4程序调试及仿真

本程序通过Keil单片机开发平台实现程序的编译,链接,生成HEX文件。

通过Keil和硬件仿真平台Proteus的联合,可以将设计效果仿真出来,根据效果,有目的的改变设计,优化程序。

利用Proteus仿真实验过程截图:

普通时间显示模式仿真图,表示:

星期一9点10分38秒

5.总结

单片机原理及应用作为我们主要的专业课程之一,我觉得单片机课程设计很有必要,而且很有意义。

但当拿到题目时,确实不知道怎么着手,有些迷茫,但想到老师在上课时,给我们很详细的开发、分析过一个工业实例,在这个案例的启发、帮助下,历时一个多星期,解决了一个又一个难题,终于完成本次课题任务。

 

本课程设计先从整体论述了设计电子钟的大致思路,然后再采用划分模块的方法,将硬件电路划分为开关电路,显示驱动电路,以及数码管电路等,而软件部分,则依据要实现的功能,划分为:

闹钟的声音程序,时间显示程序,日期显示程序,秒表显示程序,时间调整程序、闹钟调整程序、定时调整程序,延时程序等。

最后将各模块集成为一个整体,合成一个多功能的电子钟。

通过本课程设计培养我的系统设计能力,使我得到了能力上的训练,培养和提高我以下方面的能力:

 一是调查研究、分析问题的能力;二是查找文献的能力;三是制定设计方案的能力;四是设计计算和绘图的能力;五是语言文字表达的能力。

在这次课程设计中,运用到了很多以前的专业知识,虽然过去从未独立应用过它们,但在学习的过程中带着问题去学,我发现效率很高,这是我做这次课程设计的一大收获。

另外,要做好一个课程设计,就必须做到:

在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,而反复修改、不断改进是系统设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题。

课程设计结束了,但从中学到的知识会让我受益终身。

发现问题、提出问题、分析问题、解决问题和实践能力的提高都会使我在以后的学习、工作和生活中受益。

设计过程,好比是我们人类成长的历程,常有一些不如意,但毕竟这是第一次做,难免会遇到各种各样的问题。

在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,不能灵活运用。

在此也了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的铺垫!

 

附录:

延时程序:

D_1MS:

MOVR7,#2

D_5:

MOVR2,#250

DJNZR2,$

DJNZR7,D_5

RET

主程序:

MAIN:

JNBP3.0,DATETZ;按下0键,显示日期并可对日期进行调整

JNBP3.1,ZSTZ1;按下1键,显示时间,并可调时

JNBP3.2,NLTZZ;按下2键,进行闹铃设置

JNBP3.3,DSTZ;按下3键,进行定时设置

JNBP3.4,CESHI;闹铃测试

JNBP3.6,STOPWATCHTZ;按下6键,进入秒表方式

ACALLDISP;调用时钟显示子程序

JNBP0.6,RERING;判断是否开启闹铃重响功能

RE:

JNBP2.7,DSPDKQ;判断是否开启闹铃功能,没开则去判断定时

FMQPD:

;判断定时值R4,R3是否到零、闹铃时刻是否已到

MOVA,HOUR;

SUBBA,38H;

JZFEN;判断小时数是否到闹铃所定时间,若到,则对分进行判断;若不到,则对定时进行判断

AJMPDSPDKQ

FEN:

MOVA,MINUTE;

SUBBA,37H;

JZMIAO;判断分是否到闹铃所定时间,若到,则对秒进行判断;若不到,则对定时进行判断

AJMPDSPDKQ

MIAO:

MOVA,SECOND

SUBBA,#0

JZSHENGYIN1;判断秒是否到闹铃所定时间,若到,则时,分,秒都到达闹铃时刻,进入响铃子程序;若不到则判断定时

AJMPDSPDKQ

RERING:

;闹铃重响判断程序

JNBF0,RE;标志位F0为0,不进行闹铃重响设定

CPLF0

MOV3CH,#1;定时判断标志位赋1,定时判断功能开启

JNBP0.7,M1;闹铃重响间隔时间选取

MOVR4,#0;闹铃重响间隔30秒

MOVR3,#30

AJMPMAIN

M1:

;闹铃重响间隔60秒

MOVR4,#1

MOVR3,#0

AJMPMAIN

DSPDKQ:

;判断是否应该进行定时判断

MOVA,3CH;3CH是引入的判断因子,当其为0时,不对定时时间是否到0进行判断

JNZDSPD2;当3CH不是0时,跳转到定时判断程序

AJMPMAIN

DSPD2:

MOVA,R4;

JZS_PD;R4所存定时分数为0,则转而判断R3所存定时秒数

AJMPMAIN;

S_PD:

MOVA,R3;

JNZMAIN;R4,R3所存参数减为0,定时长度已到

JNBP0.6,SHENGYIN2;闹铃重响功能开启时,跳入响铃程序

AJMPTISHI;不是闹铃重响定时,则定时时间到时,跳入提示程序

AJMPMAIN

CESHI:

ACALLRING

AJMPMAIN

SHENGYIN1:

;调用响铃子程序

LCALLRING

AJMPMAIN

SHENGYIN2:

SETBF0;闹铃重响标志位设定

LCALLRING;响铃

CLRF0;标志位复位

AJMPMAIN

NLTZZ:

AJMPNLTZ1;跳入闹铃调整程序

DSTZ:

AJMPDSTZ1;跳入定时调整程序

DATETZ:

AJMPDATETZ1;跳入日期调整程序

STOPWATCHTZ:

AJMPSTOPWATCHTZ1;跳入秒表程序

显示子程序:

DISP:

;时间显示子程序

JNBP3.7,OUT1;判断节能开关7是否按下,按下则数码管不显示,延长其寿命

MOVDPTR,#LEDTAB

MOVA,SECOND;显示当前时间秒位

MOVB,#10

DIVAB;A存十位,B存个位

MOVCA,@A+DPTR

MOVP1,A

CLRSEC_S

ACALLD_1MS;显示当前时间秒十位

SETBSEC_S

MOVA,B

MOVCA,@A+DPTR

MOVP1,A

CLRSEC_G

ACALLD_1MS;显示当前时间秒个位

SETBSEC_G

MOVA,MINUTE;显示当前时间分位

MOVB,#10

DIVAB

MOVCA,@A+DPTR

MOVP1,A

CLRMIN_S

ACALLD_1MS

SETBMIN_S

MOVA,B

MOVCA,@A+DPTR

MOVP1,A

CLRMIN_G

ACALLD_1MS

SETBMIN_G

MOVA,HOUR;显示当前时间时位

MOVB,#10

DIVAB

MOVDPTR,#LEDTAB

MOVCA,@A+DPTR

MOVP1,A

CLRHOU_S

ACALLD_1MS

SETBHOU_S

MOVA,B

MOVCA,@A+DPTR

MOVP1,A

CLRHOU_G

ACALLD_1MS

SETBHOU_G

MOVA,WEEK;显示当前星期数

MOVCA,@A+DPTR

MOVP1,A

CLRY_S

ACALLD_1MS

SETBY_S

OUT1:

RET

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

当前位置:首页 > 求职职场 > 职业规划

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

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