单片机原理及应用综合实训报告电子时钟设计.doc_第1页
单片机原理及应用综合实训报告电子时钟设计.doc_第2页
单片机原理及应用综合实训报告电子时钟设计.doc_第3页
单片机原理及应用综合实训报告电子时钟设计.doc_第4页
单片机原理及应用综合实训报告电子时钟设计.doc_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

此文档收集于网络,如有侵权,请联系网站删除 单片机原理及应用综合实训报告题目: 电子时钟设计 院 别: 自动化学院 专 业: 电气工程及其自动化 1 姓 名: 徐惠彬 学 号: 2012104143024 指导教师: 祁伟 答辩日期: 2014年6月20日 此文档仅供学习与交流1电子时钟概述 当今社会,应用单片机的产品已经渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的足迹。所以现在,基于单片机的电子时钟系统也得到快速发展且使用领域已十分广泛,如运用在智能仪表、实时工控、通讯设备、导航系统、家用电器、汽车电子等的系统。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的工程师和科学家。科技越发达,智能化的东西就越多。学习单片机并扩展其运用到电子钟及测温是社会发展的必然需求,也是大学期间的必修课。 在国内外单片机学习呈上升趋势,研究基于单片机的电子时钟系统的科技学者也日益增多,但是很多人学习时没有头绪,不知道从何下手。面对种类繁多的各类开发板,仿真器,让初学者无所事从,不但多花钱还多走不少弯路,学生学习单片机没有大的资金投入,能够做到少花钱多办事才是最好的。 由于AVR单片机系列是我们在大学课堂中学习的,因此本课题围绕AVR系列单片机ATMEGA16设计,从电路图绘制,硬件焊接,程序设计,调试系统到各项功能实现,目的在于将课堂上学来的单片机理论知识与实践相结合,提高对单片机的认识,设计出基于单片机的电子时钟系统,学习专业软件的操作,熟悉制作过程,掌握一门技能,加强专业知识的掌握。也增加学生的实践经历,为学生就业提供一个可选方向,拓展就业渠道。在目前的国内外市场中,电子钟和测温系统的产品琳琅满目,但他们大多存在一个致命缺点即价格低廉的精度低、体积大,而精度高体积小的却价格昂贵,在智能化方面也存在一定问题。本基于单片机的电子时钟系统的设计旨在解决上述缺点折合为一个适中的产品实现高精度、小体积、低价格、易操作等优点。2 设计任务2.1 设计题目电子时钟设计。2.2 设计目的(1)巩固、消化课程所学内容。(2)通过51系列单片机设计电子时钟应用系统,使学生了解如何根据需要设计应用软件,熟悉软件设计、调试过程,练习撰写实训总结报告,进而培养学生运用专业知识设计实际系统的能力。2.3 设计内容1.理解读懂实验板有关原理设计:1)应用单片机串行口、并口驱动LED进行一星期日历显示。2)应用8051P3口、8255完成时间的设定工作。3)能用按键查询当前时间。4)利用P1口加入华彩设计,如发光二极管按键指示、时钟报时等(设计附加分)。2.根据电子时钟实际应用完成系统程序框图设计。3.根据程序框图完成软件设计工作。4.通电、软件调试、运行。3电子时钟的硬件电路设计3.1总原理图32单片机最小系统MCS51系统选用8051单片机,如图1所示。8051单片机内有4KROM、256字节RAM,程序存放在4KROM。8051单片机最小系统组成有:1)时钟电路:工作时钟;晶振电路如图3所示。2)复位电路,如图2所示;3)RAM:数据存储 4)ROM:程序存储 图25)I/O接口:与外界交互 图1 图33.3发光二极管8字数码管的显示LED显示有静态显示和动态显示两种方式。动态显示接口电路简图如图4所示。将各位数码管的段并联接在一起,由P1口控制(字型口),每一个数码管的共阴极(共阳极)接到P2.0、P2.1作为位选信号。虽说要显示的字型码通过P1口同时送到了每一个数码管,但它们不会同时显示同一个字符,只有控制共阴极(共阳极)的位选信号有效时,对应的数码管才会显示相应字符。这种由字型口控制要显示字符的字形码,依此循环选通每位数码管的位选信号就得到了动态显示效果。它主要是利用人眼的视觉暂留特性及数码管得余光特性,看上去似乎是多位数码管同时显示。是当显示位数较多时,节省硬件,接口电路简单,但显示占用CPU时间。静态显示占用CPU时间短,显示简单、稳定,但当显示位数较多时,占用接口资源多。动态显示接口电路较简单,但占用CPU时间,显示亮度 较静态显示差,一般说,显示位数较多时,采用动态或串并转换;显示位数较少时,采用静态显示方式。 图4静态显示接口电路如图5所示。选用共阴极LED,将共阴极点连接在一起接地,每一位的段选线与一个8位并口相连,只要将要显示的字符的字型码送至并行口锁存,LED显示器上便立即显示出该字符,直到CPU送来一个新的字型码为止,由于静态显示每位数码管均有独立的段选码,耗电量大,硬件多。如要外接6个数码管,则需要6个8位并行口。图53.4单片机I/O口扩展当单片机构成系统时,常常I/O口不够用,此时可利用MCS51的扩展能力,根据需要扩展相应接口,如可编程接口芯片8255与MCS51单片机连接可扩展I/O;利用MCS-51单片机的 串行口扩展并行I/O接口。实验板原理图的显示部分就是利用串入/并出技术实现2位数码管的显示。3.5独立式按键 键盘是一组按钮式开关的集合,常采用软件来识别。键盘的操作步骤:识键。判断是否有键按下(键入),若有,则需进一步译键。译键。在有键入的情况下,进一步识别是哪一个键,以便作进一步处理。键义分析。根据识别的结果,明确相应的键义。如果是数字键,应得出输出的数值;如果是功能键,则应知道具体的操作要求。 键盘构成:独立联接式非编码键盘。 特点:每个键相互独立,各自接通一条输入数据线。键未按下时,相应的数据线处于高电平,即为“1”态。当某键按下时,该键所连之数据线接地,即为“0”态。独立联接式编码键盘。 特点:在键数较多时,可采用独立式编码键盘,由4线-16线编码电路进行编码。 矩阵联接式非编码。特点:先使一行线接地,然后检查列线。如果某条列线也是低电位,则可判别两线相交处的某号键已按下。假如在扫描时没有发现有列线为地电位,则说明此行中无键按下。那么可将下一行线接地,如此逐一扫描列线,直到查完最后一行为止。 实验板中键盘电路设计可根据需要组合成独立联接式非编码键盘及矩阵联接式非编码,见图6所示。图6 3.6蜂鸣器(有源)原理图如图7所示有源蜂鸣器与无源蜂鸣器的区别 注意,这里的“源”不是指电源。而是指震荡源。 也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。 而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K5K的方波去驱动它。 有源蜂鸣器往往比无源的贵,就是因为里面多个震荡电路。图73.7温度显示原理图如图8所示图8Ds18b20特点如下:a) 独特的单线接口仅需一个端口引脚进行通讯 b) 每个器件有唯一的64位的序列号存储在内部存储器中 c) 简单的多点分布式测温应用 l 无需外部器件 d) 可通过数据线供电。供电范围为3.0V到5.5V。 e) 测温范围为-55125(67257) f) 在1085范围内精确度为5 g) 温度计分辨率可以被使用者选择为912位 h) 最多在750ms内将温度转换为12位数字 i) 用户可定义的非易失性温度报警设置 j) 报警搜索命令识别并标志超过程序k) 限定温度(温度报警条件)的器件 l 与DS1822兼容的软件 l) 应用包括温度控制、工业系统、消费品、温度计或任何热感测系统4电子时钟软件设计部分程序流程图如下所示5电子时钟实用说明1、开机时,显示111111。2、按下K16键,电子时钟开始运行,数码管显示时、分、秒。3、按下K12键,进入时间参数设置,此时可再次通过K12键进行年、月日、星期,小时,分钟,秒的切换,并通过K13、K14可分别对年、月、日、星期,时、分秒加1、减1,由此完成时间的设定。4、当数码管显示时分秒,可通过K15查询年、月日,温度和星期。6心得体会在此过程中遇到了很多困难,不过在自己坚持不懈的情况下,还是解决了大部分问题,在查询资料过程中,也学到了很多东西,希望通过这次实训后,自己能保持在实训期间努力学习的作风。7附录7.1参考文献单片机原理与接口技术主编祁伟北京航空航天大学出版社7.2程序代码#include#include#include/绝对地址访问头文件#define uchar unsigned char#define uint unsigned int#define com8255 XBYTE0xffff/5255控制口A1A0=11#define pa8255 XBYTE0xfffc/8255A口A1A0=00#define pb8255 XBYTE0xfffd/8255B口A1A0=01#define pc8255 XBYTE0xfffe/8255C口A1A0=10sbit p1_2=P12;/8255片选p12=0 sbit p1_1=P11;/8255片选p11=0sbit p1_0=P10;/8255片选p10=0sbit slck=P24;/8255片选p14=0sbit dq=P34; /温度接口bit gt=0;/中间变量uint temp;/实际温度值uchar code position4=0xef,0xdf,0xbf,0x7f;/数码管位选通uchar code dis_number=0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6;/后两位数码管09 共阳uchar code dis_cout=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/前四位数码管09共阴uchar num=1,j=1,n=0,s=1,ff=1,gg=1,dd=1,ww=0,tt=1,i,k,flag,time,nq=2,nb=0,ns=1,ng=4,rs=2,rg=0,shu2=0,yg=6,ys=0;/*变量意义:num:秒个位,j:秒十位,n:定时器加数变量,s:分个位,ff:分十位,gg:时个位,dd:时十位,tt:星期,shu2:查询转换,nq:年千位,nb:年百位,ns:年十位,ng:年个位,rs:日十位,rg:日个位,yg:月个位,ys:月十位*/int shu=-4;/时间改变转换/共阳数码管adp段的引脚控制定义sbit dp = P27;/二极管 dp 共阳极sbit g = P26;/二极管 g 共阳极sbit f = P25;/二极管 f 共阳极sbit e = P24;/二极管 e 共阳极sbit d = P23;/二极管 d 共阳极sbit c = P22;/二极管 c 共阳极sbit b = P21;/二极管 b 共阳极sbit a = P20;/二极管 a 共阳极sbit P1_7=P17; /数码管位控1sbit P1_6=P16; /数码管位控2sbit P1_5=P15; /数码管位控3sbit P1_4=P14; /数码管位控4sbit Beep=P13; /蜂鸣器void set_init_timer();/中断初始化void set_init_xint(); /定时器初始化void set_init_8255(); / 8255初始化void delayx1ms(uint cout);/1ms延时子程序void riqi();/显示日期和时间void word();/显示时分秒void zhendian();/整点报时void zhuanghuan();/转换设置时间void jiayi();/加一void jianyi();/减一void tioazhenn();/调整年显示void tiaozhenr();/调整日显示void tiaozheny();/调整月显示void tiaozhenq();/调整星期显示/*函数功能:主函数,不按按键时显示时分秒*/int main() set_init_xint(); /外部中断初始化set_init_timer(); /定时器初始化SCON=0x00; /串口方式0工作while(1)set_init_8255(); /8255初始化 switch(pb8255) /读取键盘值case 0xef:zhuanghuan();break;/k12切换时间case 0xdf:jiayi();break;/k13 加一case 0xbf:jianyi();break;/k14 减一case 0x7f:riqi();break;/k15 显示日期和温度default: word();break;/显示时分秒 return 0; /*函数功能:加一子程序*/void jiayi() if(shu=-3) ng+; tioazhenn();delayx1ms(500); if(shu=-2) yg+;tiaozheny();delayx1ms(500); if(shu=-1) rs+;if(rs=4)rs=0;tiaozhenr();delayx1ms(500); if(shu=0) rg+;tiaozhenr();delayx1ms(500); if(shu=1) tt+;tiaozhenq(); delayx1ms(500);if(shu=2) dd+;if(dd2)dd=0;P1_4=1;P1_5=1;P1_6=1; P1_7=0; delayx1ms(500);if(shu=3) gg+;P1_4=1;P1_5=1;P1_6=0;P1_7=1;delayx1ms(500);if(shu=4) ff+;P1_4=1;P1_5=0;P1_6=1;P1_7=1;delayx1ms(500);if(shu=5) s+;delayx1ms(500);if(shu=6) j+;P1=0xff;delayx1ms(500);if(shu=7) num+;P1=0xff;delayx1ms(500);/*函数功能:减一子程序*/void jianyi() if(shu=-3) ng-;tioazhenn();delayx1ms(500); if(shu=-2) yg-;tiaozheny();delayx1ms(500); if(shu=-1) rs-;if(rs=4)rs=0;tiaozhenr();delayx1ms(500); if(shu=0) rg-;tiaozhenr();delayx1ms(500); if(shu=1) tt-;tiaozhenq(); delayx1ms(500);if(shu=2) dd-;if(dd2)dd=0;P1_4=1;P1_5=1;P1_6=1;P1_7=0; delayx1ms(500);if(shu=3) gg-;P1_4=1;P1_5=1;P1_6=0; P1_7=1;delayx1ms(500);if(shu=4) ff-;P1_4=1;P1_5=0;P1_6=1;P1_7=1;delayx1ms(500);if(shu=5) s-;P1=0xff;delayx1ms(500);if(shu=6) j-;P1=0xff;delayx1ms(500);if(shu=7) num-;P1=0xff;delayx1ms(500);/*函数功能:转换时间设置子程序*/void zhuanghuan() shu+;delayx1ms(500); if(shu=8) shu=-4;/*函数功能:时分秒显示子程序*/void word()uint i; /*显示秒 */ for(i=0;i1;i+)P1=0xff;zhendian();slck=0;SBUF=dis_numberj;while(!TI);TI=0;slck=0;delayx1ms(3);slck=1;SBUF=dis_numbernum;while(!TI);TI=0;slck=0;slck=1;for(i=0;i=6) j=0; s+; for(i=0;i=6) ff=0;gg+; delayx1ms(2); for(i=0;i0xff;i+);/*函数功能:整点报时*/void zhendian() if(ff=0&s=0&num=0&j=0) TR1=1;/*函数功能:前四个数码管显示温度*/void displaynum(uint num) uchar i;for(i=0;i4;i+)P1=positioni;P2=dis_coutnum%10;if(i=2)dp=0;num=num/10;delayx1ms(1);P2=0xff;/*函数功能:ds18b20传感器初始化,读取应答信号*/bit init_ds18b20(void)bit flag;dq=1;for(time=0;time2;time+);dq=0;for(time=0;time200;time+);dq=1;for(time=0;time10;time+);flag=dq;for(time=0;time200;time+);return flag;/*函数功能:从ds18b20读取一个字节数据*/uchar readonechar(void)uchar i=0;uchar dat;for(i=0;i8;i+)dq=1;nop_();dq=0;_nop_();dq=1;for(time=0;time=1;if(dq=1)dat|=0x80;elsedat|=0x00;for(time=0;time8;time+);return dat;/*函数功能:向ds18b20写入一个字节数据*/void writeonechar(uchar dat)uchar i=0;for(i=0;i8;i+)dq=1;_nop_();dq=0;dq=dat&0x01;for(time=0;time10;time+);dq=1;for(time=0;time=1;for(time=0;time4;time+);/*函数功能:做好读温度的准备*/void readyreadtemp(void)uchar i=0;init_ds18b20();displaynum(temp);writeonechar(0xcc);displaynum(temp);writeonechar(0x44);for(i=0;i50;i+)displaynum(temp);init_ds18b20();displaynum(temp);writeonechar(0xcc);displaynum(temp);writeonechar(0xbe);/*函数功能:显示星期和温度,年月日】 */ void riqi() unsigned char tl,th,tn,td,i; shu2+;if(shu2=1)/*显示星期*/ for(i=0;i8;i+) if(tt=8) tt=0; slck=0;SBUF=0x00;while(!TI);TI=0;slck=0;delayx1ms(5);slck=1;SBUF=dis_numbertt;while(!TI);TI=0;slck=0;slck=1;/*显示温度*/for(i=0;i8;i+)flag=0;readyreadtemp();displaynum(temp);tl=readonechar();displaynum(temp);th=readonechar();displaynum(temp);if(th&0xf8)!=0x00)flag=1;tl=tl;th=th;if(tl=255)th+;tl=tl+1;tn=tn*16+tl/16;td=(tl%16)*100/16;tn=th*16+tl/16;td=(tl%16)*100/16;temp=tn*100+td;displaynum(temp); if(shu2=2)/*显示日 */ if(rg=10) rg=0; rs+; if(yg+10*ys)=1|(yg+10*ys)=3|(yg+10*ys)=5|(yg+10*ys)=7|(yg+10*ys)=8|(yg+10*ys=10)|(yg+10*ys=12) if(rs=3&rg=2) rs=0; rg=0; yg+; if(yg+10*ys)=4|(yg+10*ys)=6|(yg+10*ys)=9|(yg+10*ys=11) if(rs=3&rg=1) rs=0; rg=0; yg+; if(yg+10*ys)=2) if(ng+10*ns+100*nb+nq*1000)/4)=0)&(ng+10*ns+100*nb+nq*1000)/100)!=0)|(ng+10*ns+100*nb+nq*1000)/400=0) /能被4整除而不能被100整除为闰年或能被400整除为闰年 if(rs=2&rg=8) rs=0; rg=0; yg+; else if(rs=2&rg=9) rs=0; rg=0; yg+; P1=0xff;slck=0;SBUF=dis_numberrs;while(!TI);TI=0;slck=0;delayx1ms(3);slck=1;SBUF=dis_numberrg;while(!TI);TI=0;slck=0;slck=1;for(i=0;i0xff;i+); for(k=0;k200;k+) delayx1ms(3);/*显示月 */ P1_4=1; P1_5=0; P1_6=1; P1_7=1;P2=dis_coutys;delayx1ms(3);for(i=0;i=1&yg=3) ys=0;yg=0;ng+; if(shu2=3) slck=0;SBUF=0x00;while(!TI);TI=0;slck=0;delayx1ms(3);slck=1;SBUF=0x00;while(!TI);TI=0;slck=0;slck=1;/*显示年千位和百位 */ for(k=0;k200;k+) P1_4=1; P1_5=1; P1_6=1; P1_7=0; P2=dis_coutnq; delayx1ms(2); P1_4=1; P1_5=1; P1_6=0; P1_7=1; P2=dis_coutnb; delayx1ms(2);if(nb=10) nb=0; nq+; if(nq=10) nq=0; delayx1ms(2);/*显示年十位和个位 */P1_4=1; P1_5=0; P1_6=1; P1_7=1;P2=dis_coutns;delayx1ms(3);for(i=0;i=10) ns=0;nb+; if(shu2=4)shu2=0; /*函数功能:调整年显示*/void tioazhenn()/*显示年千位和百位 */ for(k=0

温馨提示

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

评论

0/150

提交评论