单片机原理课程报告电子闹钟.doc_第1页
单片机原理课程报告电子闹钟.doc_第2页
单片机原理课程报告电子闹钟.doc_第3页
单片机原理课程报告电子闹钟.doc_第4页
单片机原理课程报告电子闹钟.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

单片机原理课程报告 电子闹钟 姓名: 学号: 专业: 学院: 指导老师: 目录一 系统功能介绍2二 系统框图及流程3设计原理3主流程图3闹钟时间的判别流程图4时间和闹钟的设置流程图4三 原理硬件及接线图6元器件的选择:6接线图:6四 实验调试结果说明7五 总结8六 部分代码:8一 系统功能介绍1,数字钟通过数字电路实现时、分、秒。2,由单片机作为数字钟的核心控制器,通过它的时钟信号进行实现计时功能,将其时间数据经单片机输出,利用显示器显示出来。通过开关可以进行校时、定时等功能。3,输出设备显示器可以用数码管来显示。4,利用独立按键通过单片机控制数码管进行闹钟的时分设置。通也是通过按键进行关闭操作。5,当当前时间与设定的闹钟时间一致时闹钟响起,同时伴随四个流水灯的循环显示作为闹钟的一种警示。6,时间上的设置都是采用独立按键单个的循环设置。二 系统框图及流程设计原理 系统原理图主流程图 闹钟时间的判别流程图主要是通过设定时间与实时时间对逐位对比确定是否进行闹铃。工作流程图如下图:开 始初始化闹钟时间闹钟时间到闹 铃10秒或按键显 示 时 间ynyn时间和闹钟的设置流程图通过独立按键的选择进行时间或者是闹钟的相应的时,分的循环加的设置。开始时间设置是否是时间设置按下key-up进行时间设置模式按下key-left进行12小时循环加设置按下key-down进行60分钟循环加设置按下key-up恢复正常显示模式按下key-right进行闹钟设置模式按下key-left进行12小时循环加设置按下key-down进行60分钟循环加设置按下key-right恢复正常显示模式进入闹钟启动状态结 束ny图 时间/闹钟设置流程图三 原理硬件及接线图元器件的选择:1,at89c52 是最理想的电子时钟开发芯片2,独立式按键。3,用数码管作为显示器。4,软件的方法来计时。5,蜂鸣器作为闹钟工作。6,led灯。接线图:系统单片机:独立按键:数码管:led灯:四 实验调试结果说明基本上实现了课程设计要求实现的功能。硬件部分设置了的四个按键key-top,key-left,key-down,key-right。当按键key-top 第一次按下时,停止计时进入时间设置,当按键key-left,进行时间的小时的设置采用循环设置法。当按下键key-down时,进入的分设置,也是循环设置,当再次按key-top时,时间进行正常的在数码管显示。按key-right按下时,进入闹钟的时分设置,当按key-left 时进入闹钟的小时设置。当按下键key-down时,进入闹钟的分中设置,设置好后再按下key-right键,则进入正常的时间显示。当当前时间显示与自己所设置的闹钟时间一致时,蜂鸣器便会响起伴随右四个led灯的循环闪烁。设置的时间为10秒钟。当自己想提前关闭闹钟时,可以按下key-right键,以此便停止闹钟再次进入闹钟设置,时间正常走动。此次按键的运用还和led灯相联系。每按一个键时都会有一个对应led灯闪烁。五 总结通过不断地调试与修改,功能上基本达标:时钟的显示,调时功能、校时功能、闹铃功能、闹钟设功能。虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,比如写一个程序看其功能很少认为编写程序简单,但到编程的时候才发现一些细微的知识或低级错误经常犯做不到最后常常失败,所以有些东西只有学精弄懂并且要细心才行,只学习理论有些东西是很难理解的,更谈不上掌握。在以后的学习中,要理论联系实际,注重与同学间的交流与合作,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的练习的过程中才能提高,我想这就是我在这次课程设计中的最大收获。六 部分代码:#include#include#include#define uchar unsigned char/*/mon51必须用到的/*uchar time_select = 0;uchar alarm_select = 0;uchar timedis_flag = 1;uchar alarmdis_flag = 0;uchar flag = 0;uchar ms_10 = 0;uchar hour = 12;uchar min = 0;uchar sec = 58;/*闹铃*/uchar alarmhour = 12;uchar alarmmin = 1;uchar beepring_flag = 1;sbit dig_data = p02; / 74hc595的数据输入引脚sbit dig_shcp = p04; / 74hc595的移位脉冲引脚sbit dig_stcp = p23; / 74hc595的锁存脉冲引脚code unsigned char segment = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; / 数字段码,segment0segment9分别对应数字09的段码code unsigned char select = 0xff,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80; / 位选,select0为全选,select1select8分别对应第1位(最右侧)第8位(最左sbit key_up = p11; sbit key_down = p12;sbit key_left = p10;sbit key_right = p13;sbit led1 = p14;sbit led2 = p15;sbit led3 = p16;sbit led4 = p17;sbit beepring = p34;t1()interrupt 3 et1 = 0; /禁止定时器1 th1 = 0xd8;/填充高8位溢出位 tl1 = 0xf0;/低八位溢出位 ms_10 +; if(ms_10 = 100) sec +; ms_10 = 0; if(sec = 60) min +; sec = 0; if(min = 60) hour +; min = 0; if(hour = 24) hour = 0; et1=1; /定时器中断允许位void delay(unsigned int i) unsigned int j,k; for(k=0;ki;k+) for(j=0;j1000;j+); /*功能: 输出位选字节和段码字节到74hc595输入参数: selectbyte: 位选字节 segmentbyte: 段码字节输出参数: 无返回值:*/void digoutput(unsigned char selectbyte, unsigned char segmentbyte) unsigned char i; dig_shcp = 0; / 74hc595的移位脉冲引脚输出低电平dig_stcp = 0; / 74hc595的锁存脉冲引脚输出低电平 /* 将段码字节(共8位,高位在前)移入74hc595芯片 */for(i=0; i8; i+) /* 判断数据的最高位,如果最高位是1,数据引脚输出高电平;如果是0,输出低电平 */ if(segmentbyte&0x80) dig_data = 1; else dig_data = 0; _nop_(); /* 输出74hc595芯片的数据移位脉冲,每输出一个移位脉冲,74hc595内部的数据移动一位 */dig_shcp = 1;_nop_();dig_shcp = 0;_nop_(); /* 要输出的数据左移一位,即为下一位数据的输出作准备 */segmentbyte = 1; /* 将位选字节(共8位,高位在前)移入74hc595芯片 */for(i=0; i8; i+) if(selectbyte&0x80) dig_data = 1; else dig_data = 0; _nop_();dig_shcp = 1;_nop_();dig_shcp = 0;_nop_();selectbyte = 1; /* 输出74hc595芯片的数据锁存脉冲,即将74hc595芯片接收到的最新数据输出到芯片的所有数据引脚 */dig_stcp = 1;_nop_();dig_stcp = 0;_nop_();void displaytime() /digoutput(select7,segmentinteger/10); digoutput(select6,segmenthour/10); digoutput(select5,segmenthour%10&0x80); digoutput(select4,segmentmin/10); / 第4位显示数字 digoutput(select3,segmentmin%10&0x80); / 第3位显示数字 digoutput(select2,segmentsec/10); / 第2位显示数字 digoutput(select1,segmentsec%10); / 第1位(最右侧)显示数字 void displayalarm() /digoutput(select7,segmentinteger/10); digoutput(select6,segmentalarmhour/10); digoutput(select5,segmentalarmhour%10&0x80); digoutput(select4,segmentalarmmin/10); / 第4位显示数字 digoutput(select3,segmentalarmmin%10&0x80); / 第3位显示数字 void init() ea=1; /允许所有中断位 ex0=1; /外部中断0允许位 ex1=1; /外部中断允许位 et1=1; /定时器中断允许位 it1=0; /触发方式选择位,这里为边沿触发方式 it0=0; px0=1; px1=0; tmod = 0x10;/定时器t1方式1,16位 th1 = 0xd8;/填充高8位溢出位 tl1 = 0xf0;/低八位溢出位 tr1 = 1; /启动定时器1void timeset() if(time_select) if(!key_left) /防抖判断 delay(3); if(!key_left) /人为 非人为原因判断 hour +; if(hour = 24) hour = 0; while(!key_left)displaytime();/执行空语句 等待 松手后反应 if(!key_down) /防抖判断 delay(3); if(!key_down) /人为 非人为原因判断 min +; if(min = 60) min = 0; while(!key_down)displaytime();/执行空语句 等待 松手后反应 void alarmset() if(alarm_select) if(!key_left) /防抖判断 delay(3); if(!key_left) /人为 非人为原因判断 alarmhour +; if(alarmhour = 24) alarmhour = 0;/ beepring = 0; while(!key_left)displayalarm();/执行空语句 等待 松手后反应 if(!key_down) /防抖判断 delay(3); if(!key_down) /人为 非人为原因判断 alarmmin +; if(alarmmin = 60) alarmmin = 0; while(!key_down)displayalarm();/执行空语句 等待 松手后反应 void main(void) /uchar idata disbuf6=0,0,0,0,0,0; /uchar hh,hl,mh,ml,sh,sl; beepring = 0; init(); while(1) if(!key_up) /防抖判断 delay(3); if(!key_up) /人为 非人为原因判断 if(tr1) tr1 = 0; time_select = 1; else tr1 = 1; time_select = 0; while(!key_up)displaytime();/执行空语句 等待 松手后反应 if(!key_right) /防抖判断 delay(3); if(!key_right) /人为 非人为原因判断 if(!flag&!(hour = alarmhour & min =alarmmin&sec11&beepring_flag) /显示闹钟 (非响铃时候才显示闹钟) alarm_select = 1; flag = 1; timedis_flag = 0; alarmdis_flag = 1; beepring_flag = 0; else/显示时间 alarm_select = 0; flag = 0; timedis_flag = 1; alarmdis_flag = 0; beepring_flag = 0; while(!key_right)displaytime();/执行空语句 等待 松手后反应 alarmset(); timeset();if(timedis_flag) displaytime();if(alarmdis_flag) displayalarm();if(hour = alarmhour & min =alarmmin&sec11 & beepring_fla

温馨提示

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

评论

0/150

提交评论