ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:81.97KB ,
资源ID:11497035      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11497035.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于单片机的数字时钟设计兰州交通大学.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于单片机的数字时钟设计兰州交通大学.docx

1、基于单片机的数字时钟设计兰州交通大学单片机原理及系统课程设计评语:考勤(10)守纪(10)过程(30)设计报告(30)答辩(20)总成绩(100) 专 业:电气工程及其自动化 班 级: 电气1103 姓 名: 郭 振 学 号: 201109318 指导教师: 侯 涛 兰州交通大学自动化与电气工程学院2014 年 1 月 15 日基于单片机的数字时钟设计1、课程设计目的(1)进一步熟悉和掌握单片机的结构及工作原理。(2)掌握单片机的接口技术及相关外围芯片的特性及控制方法。(3)通过课程设计,掌握以单片机为核心的电路设计的基本方法和技术,了解有关电路参数的计算方法。2、设计方案在整个设计中,主要用

2、的是单片机的自动控制原理,包括硬件和软件。在硬件部分,包括按键控制模块、数码管显示模块和闹钟模块;软件部分,主要是主程序设计。本设计是作息时间控制器,设计其实现的功能主要有:使用4位七段显示器来显示当前的时间,由LED闪动作为秒计数表示,显示格式为“时分”,并可显示日期,显示格式为“月日”,年份单独显示。由4个按键来作功能设置,可以设置现在的日期、时间及定时设置时间,一旦设置的时间到则作出相应动作:发光二极管闪亮,同时播放音乐。系统方框图如图1所示: 图1 系统方框图3、硬件设计3、1按键控制模块按键设定部分比较简单,因为本系统按键少,所以在设计上采用了独立按键方式,程序的编制上也采用了简单的

3、扫描方式。按键控制模块主要有由四个按键组成:K1、K2、K3、K4、。其中K1的功能是模式切换键;K2的作用是加一;K3的作用是闹钟使能;K4的作用是减一。 (1)时间校正:当我们需要正确的显示时间即可进行时间校正,按一下K1即进入小时校正状态,通过K2加一或K4减一来进行小时校正,再按一次K1键即可进行分钟校正,校正原理同小时校正相同。 (2)闹钟设定:当我们需要闹钟提醒时即可使用此功能,连续按三下K1键即可进入闹钟小时设定状态,通过K2键加一或K4键减一,进行小时设定,再按一次K1键即可进行分钟设定,其设定原理与小时设定原理相同,按一下K3键,则时间设定完毕,到时会自动响铃。 (3)日期校

4、正:当我们需要与当前日期保持一致时,则可以使用日期校正功能,连续按动五次K1键,则进入月份校正状态,通过K2加一键或K4减一键进行校正月份,再按一次K1键,则可进行日期校正,校正原理同月份校正原理相同。 (4)年份校正:当我们需要保持年份与当前年份一一致时,则可以进行年份校正。连续按动七次K1键,即进入年份校正状态,通过K2加一键或K4减一键进行校正。 (5)闹钟响铃:当我们设定的时间与当前时间一致时,则闹钟就会自动响铃提示,与此同时发光二极管闪亮,一分钟后响铃停止,发光二极管熄灭,若在此期间按下闹钟使能键K3同样能使响铃停止,发光二极管熄灭。3、2数码管显示模块时间显示模块主要由四位七段数码

5、管来显示,配合按键控制模块的校正与设定时间,相应的显示。时间正常显示时,LED每闪动60次,分钟自动加一;每六十分钟小时自动加一;每24小时天自动加一。数码管显示模块如图2所示:图2 数码管显示模块仿真图3、3闹钟模块闹钟模块快的主要功能即闹铃。当设定时间与当前时间一致时,则闹钟自动闹铃进行提示,同时二极管闪亮一分钟后,自动退出响铃状态,若按K3键,闹钟退出响铃状态。闹钟模块如图3所示: 图3 闹钟模块仿真图4、硬件设计4、1主程序设计 在主控程序循环中主要工作为扫描是否有按键,若有按键则应做相应的功能处理,同时也扫描显示器显示时间数据,并检查所设置的时间是否到了,时间计时处理程序是等过了1S

6、后,则更新时间数据,将最新的时,分,秒的数据转换为数字数据并显示在七段显示器上。程序中是这样判断是否过了1S的:设一旧秒数变量,当新旧秒数变量不一样时,则表示已过了1S,要做相关程序时间处理了。4、2 中断子程序中断子程序的主要功能:提供时间基准。当连续中断20次时,即为一秒,此时秒加一;当秒值为60时,分钟加一,同时秒清零;当分钟值为60时,小时加一,同时分钟值清零;当小时为24时,天值加一,同时小时清零;由于每月天数不定,1、3、5、7、8、10、12月为31天,当计数到此类月份时,天值为32时,月值加一,同时天值为1;4、6、9、11月为30天,当计数到此类月份时,天值为31时,月值加一

7、,同时天值为1;如果是闰年,则2月为29天,当计数到此类月份时,天值为30时,月值加一,同时天值为一;如果不是闰年,则2月为28天,当计数此类月份时,天值为29时,月值加一,同时天值为一;当月值为13时,则年值加一,同时月值为一。中断子程序流程图如图4所示: 图4 中断子程序流程图4、3 按键扫描子程序按键扫描子程序是程序计中相当重要的一部分。按键扫描子程序的功能是:扫描是否有按键按下,若有键按下,则执行相应功能。5、系统仿真 Proteus仿真如图5所示: 图5 系统仿真图6、总结通过这两周的课程设计,让我了解了设计电路的程序,也让我了解了数字钟的工作原理和设计理念,加强了我们动手、思考和解

8、决问题的能力。在此次的数字钟设计过程中,我进一步熟悉了单片机芯片的硬件结构和各引脚的功能,以及数码管的工作原理和使用方法,巩固和加强了理论知识。参考文献1 王思明,张金敏,苟军年等.单片机原理及应用系统设计M.科学出版社,2012年2 吴金. 8051单片机实践与应用M.清华大学出版社,2002 年附1:源程序代码#include#define uint unsigned int#define uchar unsigned charuchar code a10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/*sbit K1=P14;sbi

9、t K2=P15;sbit K3=P16;sbit K4=P17;sbit sd=P36;sbit BEEP=P37;uchar m=0,h=0,sec=0,cnt=0,x,y,qian,bai,shi,ge;uchar set_h=00;uchar set_m=00;uchar month=1;uchar day=1;uchar th0_f;uchar tl0_f;uint year=2014; void delay(uchar t);/延时函数void scankey(void); /按键扫描函数void init(void); /初始化函数void display(void);/显示函数

10、void set_time(void);/设定时间显示辅助函数void set_day(void); /设定日期显示辅助函数void m_choose(void); /月份选择函数void bianhuan(void); /年份显示辅助函数void bianhuan1(void);/时间显示辅助函数changedata(uchar *song,uchar *diao,uchar *jie);/音乐符号串解释函数 void play(uchar *songdata);/奏乐函数/世上只有妈妈好uchar code mamahao= 6.5_35|16_5_6-|35_6_53_2_|1_,6_5

11、_3_2-| 2.3_55_6_|321-|5.3_2_1_,6_1_|,5- ; uchar code freq36*2= 0xA9,0xEF,/00220HZ ,1 /0 0x93,0xF0,/00233HZ ,1# 0x73,0xF1,/00247HZ ,2 0x49,0xF2,/00262HZ ,2# 0x07,0xF3,/00277HZ ,3 0xC8,0xF3,/00294HZ ,4 0x73,0xF4,/00311HZ ,4# 0x1E,0xF5,/00330HZ ,5 0xB6,0xF5,/00349HZ ,5# 0x4C,0xF6,/00370HZ ,6 0xD7,0xF6,

12、/00392HZ ,6# 0x5A,0xF7,/00415HZ ,7 0xD8,0xF7,/00440HZ 1 /12 0x4D,0xF8,/00466HZ 1# /13 0xBD,0xF8,/00494HZ 2 /14 0x24,0xF9,/00523HZ 2# /15 0x87,0xF9,/00554HZ 3 /16 0xE4,0xF9,/00587HZ 4 /17 0x3D,0xFA,/00622HZ 4# /18 0x90,0xFA,/00659HZ 5 /19 0xDE,0xFA,/00698HZ 5# /20 0x29,0xFB,/00740HZ 6 /21 0x6F,0xFB,/

13、00784HZ 6# /22 0xB1,0xFB,/00831HZ 7 /23 0xEF,0xFB,/00880HZ 1 0x2A,0xFC,/00932HZ 1# 0x62,0xFC,/00988HZ 2 0x95,0xFC,/01046HZ 2# 0xC7,0xFC,/01109HZ 3 0xF6,0xFC,/01175HZ 4 0x22,0xFD,/01244HZ 4# 0x4B,0xFD,/01318HZ 5 0x73,0xFD,/01397HZ 5# 0x98,0xFD,/01480HZ 6 0xBB,0xFD,/01568HZ 6# 0xDC,0xFD,/01661HZ 7 /35

14、 ; /* /音乐符号串解释函数changedata(uchar *song,uchar *diao,uchar *jie) uchar i,i1,j; char gaodi;uchar banyin; uchar yinchang;/ uchar code jie78=0,12,14,16,17,19,21,23; *diao=*song; for(i=0,i1=0;) gaodi=0; banyin=0; yinchang=4; if(*(song+i)=|) | (*(song+i)= ) i+; switch(*(song+i) case ,: gaodi=-12;i+; break;

15、 case : gaodi=12;i+; break; if(*(song+i)=0) *(diao+i1)=0; *(jie+i1)=0; return; j=*(song+i)-0x30; i+; j=jie7j+gaodi; yinc: switch(*(song+i) case #: i+;j+; goto yinc; case -: yinchang+=4; i+; goto yinc; case _: yinchang/=2; i+; goto yinc; case .: yinchang=yinchang+yinchang/2; i+; goto yinc; *(diao+i1)

16、=j; *(jie+i1)=yinchang; i1+; /* /奏乐函数 void play(uchar *songdata) uchar i,c,j=0; uint n; uchar diaodata40; uchar jiedata40; changedata(songdata,diaodata,jiedata); TR1=1; for(i=0;diaodatai!=0;i+) tl0_f=freqdiaodatai*2; th0_f=freqdiaodatai*2+1; for(c=0;cjiedatai;c+) for(n=0;n24;n+) scankey(); if(y=0) T

17、R1=0; return; display(); TR1=0; for(n=0;n=10)P0&=0x00; delay(20); P2=0xfd; P0=abai; if(x%2=1&cnt=10)P0&=0x00; else if(x=0&cnt=10)P0|=0x80; delay(20); P2=0xfb; P0=ashi; if(x%2=0&x!=0)|x=7)&cnt=10)P0&=0x00; delay(20); P2=0xf7; P0=age; if(x%2=0&x!=0)|x=7)&cnt=10)P0&=0x00; delay(20);void m_choose(void)

18、switch(month) case 1:if(day=32)day=1;else if(day=0)day=31;break; case 2:if(year%4=0)if(day=30)day=1;else if(day=0)day=29; elseif(day=29)day=1;else if(day=0)day=28;break; case 3:if(day=32)day=1;else if(day=0)day=31;break; case 4:if(day=31)day=1;else if(day=0)day=30;break; case 5:if(day=32)day=1;else

19、if(day=0)day=31;break; case 6:if(day=31)day=1;else if(day=0)day=30;break; case 7:if(day=32)day=1;else if(day=0)day=31;break; case 8:if(day=32)day=1;else if(day=0)day=31;break; case 9:if(day=31)day=1;else if(day=0)day=30;break; case 10:if(day=32)day=1;else if(day=0)day=31;break; case 11:if(day=31)day

20、=1;else if(day=0)day=30;break; case 12:if(day=32)day=1;else if(day=0)day=31;break; void set_time(void) qian=set_h/10; bai=set_h%10; shi=set_m/10; ge=set_m%10; void set_day(void) qian=month/10; bai=month%10; shi=day/10; ge=day%10;void bianhuan(void) qian=year/1000; bai=year%1000/100; shi=year%100/10;

21、 ge=year%10;void bianhuan1(void) qian=h/10; bai=h%10; shi=m/10; ge=m%10;void scankey(void) if(K1=0) delay(20); if(K1=0) while(K1=0); x+; if(x=3)set_time(); else if(x=5)set_day(); else if(x=7)bianhuan(); else if(x=8)x=0;bianhuan1(); if(K2=0) delay(20); if(K2=0) while(K2=0); switch(x) case 0:break; ca

22、se 1:h+;if(h=24)h=0;bianhuan1();break; case 2:m+;if(m=60)m=0;bianhuan1();break; case 3:set_h+;if(set_h=24)set_h=0;set_time();break; case 4:set_m+;if(set_m=60)set_m=0;set_time();break; case 5:month+;if(month=13)month=1;set_day();break; case 6:day+;m_choose();set_day();break; case 7:year+;bianhuan();break; if(K3=0) delay(20); if(K3=0) while(K3=0); y+; if(y=2)y=0; if(K4=0) delay(20); if(K4=0) while(K4=0); switch(x) case 0:break; case 1:h-;if(h=255)h=23;bianhuan1();break; case 2:m-;if(m=255)m=59;bianhuan1();break; case 3:set_h-;if(set_h=255)set_h=23;set_time();break; case 4:s

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

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