简易数字钟设计_第1页
简易数字钟设计_第2页
简易数字钟设计_第3页
简易数字钟设计_第4页
简易数字钟设计_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、信息与电气工程学院课程设计说明书(2014 /2015 学年第二学期)课程名称 : 单片机课程设计 题 目 : 简易数字钟设计 专业班级 : 学生姓名 : 学 号: 指导教师 : 设计周数 : 2周 设计成绩 : 2015年 6 月 25 日1、 课程设计目的(1)综合利用所学单片机知识完成一个单片机应用系统设计并在实验室实现,从而加深对单片机软硬知识的理解,获得初步的应用经验。(2)学习A T 8 9 C 5 1定时/计数器的原理及基本应用。(3)掌握多为数码管动态显示方法。(4)掌握Keil uVision2 IDE的使用方法。【包括项目文件的建立,给项目添加程序件,编

2、译、连接项目,形成目标文件,运行调试观察结果,多文件的处理,仿真环境的设置。】(5)掌握Keil C51的调试技巧。【包括如何设置和删除断点,如何查看和修改寄存器的内容,如 何 观 察 和 修 改 变 量,如 何 观 察 存 储 器 区 域,并 行 口 的 使 用, 定 时 器 /计数器的使用,串行口的使用,外中断的使用。】(6)掌握PROTEUS软件使用过程。2、 简易数字钟的要求及软硬件的分析2.1简易数字钟的设计要求 利 用电子电 路 构 成 一个简 易 数 字 钟 ,该 数字钟电路主要由C51单片机、4位共阳极数码管、时计数、分计数器、蜂鸣器、LED灯、NPN型和PNP型三极

3、管、按键、若干电阻和导线组成。其中电路系统的分计数器采用60进制,时计数器采用24进制,。译码器显示电路将时、分计数器的输出状态通过三个两位共阳数码管显示出来。整点报时电路根据计时系统的输出状态产生一个脉冲信号,用蜂鸣器输出。相 对 机 械 钟 而 言,数 字 钟 能 达 到 准 确 计 时 ,并 显 示 小 时 、分 钟,同 时 通 过 不 同 按 键 的 不 同 功 能 对 该 数 字 钟 进 行 小 时 和 分 钟 调 整 ,也 可 通 过 按 键 来 接 她 通 蜂 鸣 器 来 发 出 响 声 。2.2数字钟的软件分析2.1.1数字钟软件的系统分析 系统的软件设计也是工具系统功能的设计

4、。单片机软件的设计主要包括执行软件(完成 各种实质性功能)的设计和监控软件的设计。单片机的软件设计通常要考虑以下几个方面的 问题:(1)根据软件功能要求,将系统软件划分为若干个相对独立的部分,设计出合理的总体 结构,使软件开发清晰、简洁和流程合理;(2)培养良好的编程风格,如考虑结构化程序设计、实行模块化、子程序化。既便于调 试、链接,又便于移植和修改;(3)建立正确的数学模型,通过仿真提高系统的性能,并选取合适的参数;(4)绘制程序流程图;(5)合理分配系统资源;(6)为程序加入注释,提高可读性,实施软件工程;(7)注意软件的抗干扰设计,提高系统的可靠性。 系统软件设计流程图 这次的数字电子

5、钟设计用到很多子程序,它们的流程图如下所示。 主程序是先开始,然后启动定时器,定时器启动后在进行按键检测,检测完后,就可以显示时间。按键处理是先检测秒按键是否按下,秒按键如果按下,秒就加 1,如果没有按下,就检 测分按键是否按下,分按键如果按下,分就加1,如果没有按下,就检测时按键是否按下,时按键如果按下,时就加1,如果没有按下,就把时间显示出来。2.2.2 简易数字钟程序 #include <regx52.h> #define uchar unsigned char #define uint unsigned int sbit k1 = P35; /按键1 sbit k2 = P

6、34; /按键2 sbit k3 = P33; /按键3 sbit k4 = P32; /按键4 sbit LED = P10; /LED显示 sbit beep = P36; /蜂鸣器 int m1 = 0, m2 = 0, m3 = 0, m4 = 0; /数码管要显示的数字 int time_n = 0; /1s时间到标志位 int smg_n = 0; /位选控制哪个数码管闪 int xz_flg = 0; /选择键是否被按下 int shi = 0, fen = 0; miao = 0; int zd_flg = 0; /整点标志 char duan=0xc0,0xf9,0xa4,0

7、xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff;/段选编码09null; /- /本文件函数 void System_Init();/初始化函数 void Smg_Scan(); /数码管动态扫描 void Delay_1ms(uint z); /延时函数 void Blink(uint wei); /数码管闪烁函数 void Key_Scan(); /按键扫描函数 void Bao_Shi(); /整点报时/*/ void main() System_Init(); while(1) Smg_Scan(); Key_Scan(); Bao_Shi(); /*初始

8、化子函数 void System_Init() /初始化函数 TMOD = 0X01; /定时器0 工作方式1 TH0 = 0X4C; /定时50000us TL0 = 0X00; EA = 1; ET0 = 1; TR0 = 1; /*延时子函数 void Delay_1ms(uint z)/1ms延时函数 uint x,y; for(x = z;x > 0;x-) for(y = 110;y >0;y-); /*数码管扫描子函数 void Smg_Scan() P2_0= 0; /数码管1位选通 P0 = duanm1; /送段选 Delay_1ms(1); /延时1msP2_

9、0=1; /数码管1位关断P2_1=0; /数码管2位选通 P0 = (duanm2& 0x7f); /送段选 Delay_1ms(1); /延时1msP2_1=1; P2_2=0; /数码管3位选通 P0 = duanm3; /送段选 Delay_1ms(1); /延时1msP2_2=1; P2_3= 0; /数码管4位选通 P0 = duanm4; /送段选 Delay_1ms(1); /延时1msP2_3=1; /*中断子函数 void time0() interrupt 1 /yanshi zi chengxu TH0 = 0X4C; /定时50000us TL0 = 0X00

10、; time_n+; if(time_n = 10) /0.5s 到了吗? LED = LED; if(xz_flg = 1) switch(smg_n) /到了0.5s 对应位的数码管灭 case 0 : m1 = 10;Delay_1ms(500); break; case 1 : m2 = 10; Delay_1ms(500); break; case 2 : m3 = 10; Delay_1ms(500);break; case 3 : m4 = 10;Delay_1ms(500); break; if(time_n = 20) /1s 到了 time_n = 0; miao+; if

11、(miao = 60) miao = 0; fen+; if(fen =60) zd_flg = 1; /整点标志 shi+; if(shi = 24) shi = 0; m4 = fen % 10; /数码管4显示分钟的低位 m3 = fen / 10; /数码管3显示分钟的高位 m2 = shi % 10; /数码管2显示小时的低位 m1 = shi / 10; /数码管1显示小时的高位 /*键盘扫描子函数void Key_Scan() if(k1 = 0) /选择键 Delay_1ms(21); /延时20ms if(k1 = 0) /按键1确实被按下 xz_flg = 1; /选择键按

12、下 EA = 0; smg_n+; /改变选择的数码管 if(smg_n = 4) smg_n = 0; while(!k1) /松手检测 Smg_Scan(); /使按下键时所有数码管都亮 Delay_1ms(21); while(!k1); if(xz_flg = 1) if(k2 = 0) /加1键 Delay_1ms(21); if(k2 = 0)switch(smg_n)case 0 : m1+;if(m1 = 2)m1 = 0;break;case 1 : m2+;if(m2 = 10)m2 = 0;break;case 2 : m3+;if(m3 = 6)m3 = 0;break

13、;case 3 : m4+;if(m4 = 10)m4 = 0;break;while(!k2) /松手检测Smg_Scan(); Delay_1ms(21); while(!k2); if(k3 = 0) /减1键 Delay_1ms(21); if(k3 = 0) switch(smg_n) case 0 : m1-; if(m1 = -1) m1 = 2; break; case 1 : m2-; if(m2 = -1) m2 = 9; break; case 2 : m3-; if(m3 = -1) m3 = 5; break; case 3 : m4-; if(m4 = -1) m4

14、 = 9; break; while(!k3) Smg_Scan(); Delay_1ms(21); while(!k3); if(k4 = 0) /确定键 Delay_1ms(21); if(k4 = 0) xz_flg = 0; EA = 1; while(!k4) Smg_Scan(); Delay_1ms(21); while(!k4); /*/void Bao_Shi() uint i,j; /定义循环变量 if(zd_flg = 1) for(j=0;j<3;j+) for(i=0;i<m1;i+) beep=!beep; /蜂鸣器开关 Delay_1ms(80); /

15、延时80ms Delay_1ms(1000); zd_flg = 0; 2.3 简易数字钟硬件分析2.3.1 数字钟的总电路图2.3.2数字钟的硬件单元电路分析(1)最小系统设计图1 单片机最小系统的结构图(2)晶体 (3)常用的复位电路如下图所示: 图3 常用复位电路图(4)最常用的显示器数码管,如下图所示。图4 显示器的符号图(5)显示电路显示模块需要实时显示当前的时间,即时、分,因此需要 4个数码管。采用动态显示方式显示时间,硬件连接如下图所示,时的十位和个位 分别显示在第一个和第二个数码管,分的十位和个位分别显示在第四个和第五个数码管,显示器的显示 控制方式按驱动方式可分成静态显示方式

16、和动态显示方式两种。对于多位显示器,通常 都是采用动态扫描的方法进行显示,其硬件连接方式如下图所示。图5 数码管的硬件连接示意图(6) 键盘控制电路该设计需要校对时间,所以用三个按键来实现。按 k1 来调节小时的时间,按k2来调节分针的时间。下图是按键硬件连接图。图6 按键控制电路的硬件连接图2.2.3 系统调试各功能模块均调整通过后,进行整机调试,其过程如下:将调好的各功能模块连接在一起,用函数信号发生器模拟交流电压信号,先用仿真机代AT89C2051 单片机进行模拟调试,对每一芯片的片选、启动进行检测,并对数据线和地址线也进行检测。调试成功后再将程序写到单片机中进行调试。3 、课程设计总结

17、  设计之初没有一点信心,感觉设计复杂没有一丝头绪,但是后来结合所学的数字电子技术知识,并且与同学进行交流开始逐步构想、设计、运行检测。现将心得体会总结如下: (1)开始设计之前必须有一个整体的构想,考虑周到,由于接线较多一旦出现错误较难发现和改正,这样可以避免后期调试时出现较少的问题。(2)列出几个方案进行比较选出最简单易行的方案,并进行理论上的排检(3)在设计某些模块的时候无法把握住整体,这时可以先进行小部分功能的实现,在此基础上进行改进,虽然可能会多花一些时间,但这比空想要有效的多。(4)电路连接尽量整洁有序,使各项功能的连接一目了然,方便查看及排查故障(5)很多难点的突破都来自于与同学的交流,交流使自己获得更多信息,开拓了思路,因此要重视与别人的交流。(6)应该有较好的理论基础,整个实验都是在理论的指导下完成了,设计过程中使用了许多理论课上学的内容,如真值表、卡诺图等。本次设计把理论应用到了实践中,同时通过设计,也加深了自己对理论知识的理解和掌握。总体来说,本 设 计 要 求 有 耐 心 和 细 心,有 效 合 了 理 论 与 实 践,将 我 们 所 学 的 书 本 知 识 运 用 于 实 践,培养了我 们 发 现 和 解 决 问 题 的 能 力。  参考文献:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论