单片机课程设计--数字钟(曾旻枢)_第1页
单片机课程设计--数字钟(曾旻枢)_第2页
单片机课程设计--数字钟(曾旻枢)_第3页
单片机课程设计--数字钟(曾旻枢)_第4页
单片机课程设计--数字钟(曾旻枢)_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、 实验课程:单片机课程设计 专业班级:2013级电信3班 学号: 130101031106 姓名: 徐砚林 指导教师: 卢钢 同组设计者: 曾旻枢 2015年12月29日 电子数字钟一、设计功能要求 要求利用实验箱上的数码管模拟电子数字钟。显示时、分、秒,并且随时间跳变。在整点时,启动蜂鸣器。设计要求:(1) 系统硬件设计:利用单片机实验板完成设计要求; (2) 系统软件设计:完成控制软件的编写与调试;(3) 功能要求:1) 6位数码管显示小时、分钟,秒(例如:15:35:45);2) 具有整点提示功能(例如蜂鸣器鸣响半分钟),具有整点报时功能(例如十点响十声);二、设计方案1、原理依据电子钟

2、是一种用数字电路技术实现时,分,秒计时的装置,具有整点报时等功能。本设计主要采用C51单片机作为主控核心,动态数码管作为显示屏显示,蜂鸣器作为整点报时,独立按键K1作为消除闹铃。 数码管共阳极数码管的8个发光二极管的阳极连接在一起接高电平,其它管脚接各段驱动电路输出端。当某段的输出端为低电平时,则该段所连接的发光二极管导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。共阴极数码管的8个发光二极管的阴极连接在一起接低电平,其它管脚接各段驱动电路输出端。当某段的输出端为高电平时,则该段所连接的发光二极管导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。因此我们在显示数字的时候首先做

3、的就是给“0-9”十个数字编码,在要它亮什么数字的时候直接把这个编码送到它的阳极就行了。2、方案设计(1)、硬件方案 八位动态数码管、蜂鸣器和独立按键:硬件说明:八位动态数码管为共阴极数码,J16为位选码接口排线,J12为字形码接口排线,字形码经锁存器接到数码管,锁存器LE端经J21短路帽接VCC时,输入数据直通至输出端,当LE端经J21短路帽接JP10时,其输入数据经JP10控制将其锁存至输出端。连接方法:(1)JP18和J16用8PIN排线连接起来。(2)JP10和J12用8PIN排线连接起来。(3)J21 短路帽使LE接VCC,短路帽JP165 断开。利用P2.0作为独立键盘输入口,独立

4、键盘选K1;P21控制蜂鸣器,蜂鸣器JP9接线排的第6引脚与JP15接线排座的一引脚(独立按键K1)用杜邦线连接,使用独立按键K1。 连接方法: JP11和JP1和LED灯的JP1用8PIN排线连接起来。硬件说明:使用单片机的P2口来驱动8个LED,发光二极管的阳极接高电平,故P2口为低电平时,就可以驱动其点亮(2)软件方案利用内部中断T0完成时间计数,时间调整,定时时间为125ms,当时间到达125ms*8,即1S时,秒计数器缓冲器增加1,达到1小时时,则时计数器缓冲器增加1,同时蜂鸣器响,并将时分秒分别放入动态数码管。当分计数器缓冲器和时计数器缓冲器分别到达60min、24h时,对它们清零

5、。(3)同组设计人员及分工曾旻枢:编写设计方案以及主程序、中断设置、时间显示及累计处理部分代码,进行试验结果分析徐砚林:查阅参考文献,汇总整理所得资料,编写延时、时间调整与设置、整点报时功能部分代码三、系统代码实现#include<reg51.h>sbit ksec=P30;/设置秒sbit kmin=P31;/设置分sbit khour=P32; /设置小时sbit fmq=P33;sbit key=P34;unsigned char secshi=0,secge=0,minshi=0,minge=0,hourshi=0,hourge=0;unsigned int num=0,s

6、ec=0,min=0,hour=0;unsigned char code table10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;void delay(unsigned int);void display(); void Adjust_clock();void Clock();/-/ 主程序/-void main()TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;while(1)display();/时间显示函数Adjust_clock();

7、 /时钟调整与设置函数 Clock(); /整点报时函数/-/ 延时/-void delay(unsigned int z)unsigned int x,y;for(x=z;x>0;x-)for(y=80 ; y>0 ; y- );/-/ 时钟调整与设置/-void Adjust_clock()if(ksec=0) sec+; if(sec>=60)min+;sec=0; while(ksec=0) display();if(kmin=0) min+; if(min>=60)hour+;min=0; while(kmin=0) display(); if(khour=0

8、) hour+;if(hour>=24)hour=0; while(khour=0) display();/*while表示每按下一次按键则刷新一下时间显示*/-/ 整点报时功能/-void Clock() if(min=59 && sec=59) fmq=1; delay(1); fmq=0; /-/ 中断设置/-void time0() interrupt 1 1num+; TH0=(65536-50000)/256; TL0=(65536-50000)%256; /-/ 时间显示及累加处理/-void display()if(num=20) num=0; sec+;

9、 if( sec=60) sec=0; min+; if(min=60) min=0; hour+; if(hour=24) hour=0; min=0; sec=0; /*通过动态数码管显示,实现显示时间功能*/ secge=sec%10; secshi=sec/10; minge=min%10; minshi=min/10; hourge=hour%10; hourshi=hour/10; P2= 0x7f; P0=tablesecge; delay(2); /显示分钟个位 P2= 0xbf; P0=tablesecshi; delay(2); /显示分钟个位 P2= 0xfb; P0=

10、0x40; delay(2); /显示符号“-” P2= 0xef; P0=tableminge; delay(2); /显示分钟个位 P2= 0xf7; P0=tableminshi; delay(2); /显示分钟个位 P2= 0xdf; P0= 0x40; delay(2); P2= 0xfd; P0=tablehourge; delay(2); /显示分钟个位 P2= 0xfe; P0=tablehourshi; delay(2); /显示分钟个位 四、系统调试及结果分析问题:时间显示颠倒,第一位显示秒数,最后一位显示小时。 解决:源码中最后一部分控制数码管动态显示的代码顺序颠倒,将其

11、数据重新调整后即正常显示。问题:秒数到60后跳过分钟直接小时进位1.解决:源码中时间累加处理代码中分钟累加处理写错为if(min=60)变成了赋值语句,修改为if(min=60)后即解决。问题:整点报时功能蜂鸣器响起的时候会停止计时,时钟无法正常运行。 解决:最初将蜂鸣器的整点报时功能写在了时间显示及累加模块里面导致程序按照顺序运行蜂鸣器时会停止时间计时。之后经过多次尝试与调整,将整点报时功能单独写成一个模块放入主程序中即可。问题:编写时间调整模块后,按下按键数码管并无任何反应。 解决:按下按键后程序执行时间调整模块,执行完后并没有返回显示模块,顾在是在调整模块后加入语句while(ksec=0) display() 后程序正常运行。五、心得体会这次课设看似功能简单,但它包含了单片机设计中最核心、最重要的问题,很有深度。刚开始时我觉得这次实验内容很简单,但是上手之后发现并不想想象中那么容易,经过了一下午的尝试与查询相关资料才

温馨提示

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

评论

0/150

提交评论