简易秒表设计报告_第1页
简易秒表设计报告_第2页
简易秒表设计报告_第3页
简易秒表设计报告_第4页
简易秒表设计报告_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

一.前言在电子科学技术高速发展的今天,高科技产品越来越多的应用在我们的日常生活中,给我们的生活带来了非常大的方便,每时每秒我们都能感受到产品的更新换代。产品和技术革新的日新月异都让人非常惊讶。像平常我们工作所用的电脑、手机和生活所用的电视机,收音机,Mp3等等,这些高科技产品给我们带来了极大的方便,但这要归功于科学技术的高速发展。简易秒表是我们的单片机课程设计题目。简易秒表涉及到《模拟电子技术》和《电路分析》中的相关知识。本文介绍的简易秒表电路设计新颖具有电路结构简单、成本较低、操作方便、灵敏可靠等优点,经使用效果良好,具有较高的推广价值。二.系统设计要求⑴硬件设计:根据任务要求,完成单片机最小系统及其扩展设计。⑵软件设计:根据硬件设计完成显示功能要求,完成控制软件的编写与调试;利用单片机定时器中断和定时器计数方式实现秒定时。通过LED显示程序的调整,熟悉LED动态显示的控制过程。⑶功能要求:用PB1启动秒表和停止秒表,PB2键将秒表归零,按一下PB1,即开始定时,在数码管上每秒加1,加到99,归零,秒表在暂停状态下,按下PB3键可对秒数加1,按下PB4键可对秒数减1。(4)通过阅读和调试简易秒表整体程序,学会如何编制含LED动态显示、键盘扫描和定时器中断等多种功能的综合程序,初步体会大型程序的编制和调试技巧。三.设计思路分析本设计以单片机为核心设计的简易秒表方案是:用按钮PB1启动秒表和停止秒表,开启后立刻进入计时状态,用定时器T0进行1s的计数,每隔1s就把预设时间加1,用一个两位的LED数码管显示时间,按钮PB2将秒表归零,如果第二次按一下S1键,计时会立即停止,在数码管上显示当前秒数,这时如果按下PB2键,数码管会显示00,直到再次按下PB1键计时才会开始,当秒数加到99后,下一秒数码管会归零,即从0开始重新每秒加1计时。另外在P1口的0和1引脚各连接一个按钮,一个进行加1,另一个进行减1。四.系统硬件电路设计4.1简易秒表显示模块显示模块主要是显示秒表当前秒数,我考虑有以下两种显示方案。方案1:使用传统的数码管显示。数码管具有低能耗、低损耗、低压、寿命长、耐老化、防晒、防潮、防火、防高低温,对外界环境要求低,易于维护,同时其精度高,称量快,精确可靠,操作简单。数码显示是采用BCD编码显示数字,程序编译容易,资源占用较少。根据以上的论述,采用方案二,如图:4-1。方案2:使用液晶屏显示时间。液晶显示屏具有轻薄短小、低耗电量、无辐射危险,平面直角显示以及影像稳定不闪烁等优势,可视面积大,画面效果好,分辨率高,抗干扰能力强的特点。但由于只需要显示时间和组别的数字,信息量比较少,且由于液晶是以点阵的模式显示各种符号,需要利用控制芯片创建字符库,编程工作量大,控制器的资源占用较多,其成本也偏高。在使用时不能有静电干扰,否则易烧坏液晶显示芯片,不易维护。4.2控制器模块单片机的选择图:4-1七段发光二极管ATMEL公司的89C52单片机是增强型RISC内载Flash的单片机,芯片上的Flash存储器附在用户的产品中,可随时编程,再编程,使用户的产品设计容易,更新换代方便。89C52单片机采用增强的RISC结构,使其具有高速处理能力,在一个时钟周期内可执行复杂的指令,每MHz可实现1MIPS的处理能力。89C52单片机工作电压为2.7~6.0V,可以实现耗电最优化。89C52的单片机广泛应用于计算机外部设备,工业实时控制,仪器仪表,通讯设备,家用电器,宇航设备等各个领域。由于单片机的种类很多,在选择单片机时要依据实际设计要求选择合适的单片机。例如当设计仅仅需要一个单片机定时器那么选择89C1051或89C2051即可,而不选择89C52,因为后者的价格较高一些。当然若程序和数据区的要求较高那么选择的单片机还要满足程序空间的要求。下面我们来比较89C51和89C52。下表进行51和52的比较数据存储器程序存储器定时器中断51系列128B4KB2552系列256B8KB38在本设计中,我们选用现在较为流行的51系列单片机,即选用ATMEL公司的AT89C51,如图4-2。图4-2C51单片机行开始和暂停。本设计的PB2键与P3.3引脚连接,该按钮被按下时,就产生外部中断,程序跳转执行外部中断0,对秒表进行清零。5.4显示模块电路设计该模块由1个共阳极的两位7段LED数码管构成,由P2口控制两位7段LED数码管的显示,用来显示当前秒表的秒数六.简易秒表软件系统设计6.1定时模块设计中,一开始不运行定时器T0,只要按下PB1键,定时器T0立即运行,进行1s的计时。这里我们采用的是定时器T0工作方式1,定时0.05s,在中断程序设置变量叠加的方法来得到一秒的基本定时,定时器T1工作方式2,也是在中断程序设置变量叠加的方法来得到定时8ms,每隔8ms两位7段LED数码管的两个公共端会交替通电,动态扫描当前简易秒表的秒数,即定时器定时一秒之后,单片机立即就会通过两位7段LED数码管显示出来。当计时99s后,下一秒从0开始计时。·现把定时器T0,T1和外部中断0,1中断程序介绍如下:voidT0_1s(void)interrupt1//定时器T0中断函数{TH0=TH_M1;//给定时器T0装入初值 TL0=TL_M1; if(++count_T0==20)//每0.05sT0中断一次,重叠20次得到1s,对计时加1 {count_T0=0; seconds++; if(seconds==100) seconds=0; } disp[0]=TAB[seconds/10];//得到十位数 disp[1]=TAB[seconds%10];//得到个位数}voidT1_8ms(void)interrupt3//定时器T1中断函数{if(++count_T1==32)//每0.25msT0中断一次,重叠32次得到8ms {count_T1=0; if(++scan==3)scan=1; SEG=0xff; P1_6=!P1_6;P1_7=!P1_7;//对两位LED数码管进行交替显示 SEG=disp[scan-1];}}voidint0_sw(void)interrupt0//外部中断0中断函数{TR0=!TR0;while(PB0==0); ys(10);}voidint1_RST(void)interrupt2//外部中断1中断函数{while(PB1==0);ys(10); seconds=0;//对计数清零 disp[0]=disp[1]=0xc0;TH0=TH_M1;//给定时器T0装入初值 TL0=TL_M1;}外部中断1开始6.2外部中断1开始外部中断0开始主程序流程图,如图6-1所示。外部中断0开始PB2键是否松开关闭定时器T0PB2键是否松开关闭定时器T0开始PB1键是否松开PB1键是否松开装入初值,暂停并且PB1,PB2按下?装入初值,暂停并且PB1,PB2按下?计数清零,定时器T0装初值返回主函数数返回主函数NY返回主函数数返回主函数进行加1进行加1或减1处理图6-1抢答器主程序流程图七.系统的调试整个程序设计如下:#include<reg51.h>#defineSEGP2#definecount_M150000//宏定义#defineTH_M1(65536-count_M1)/256#defineTL_M1(65536-count_M1)%256intcount_T0=0;#definecount_M2250#defineTH_M2(256-count_M2)#defineTL_M2(256-count_M2)Charcount_T1=0;charcodeTAB[10]={0xc0,0xf9,0xa4,0xb0,0x99,//定义字符型数组,装入0到9的数字0x92,0x82,0xf8,0x80,0x90};chardisp[2]={0xc0,0xc0};charseconds=0;charscan=0;sbitP1_0=P1^0;sbitP1_1=P1^1;sbitP1_6=P1^6;sbitP1_7=P1^7;sbitPB0=P3^2;sbitPB1=P3^3;voidys(inti){//消除抖的动子函数定义intj; for(;i>0;i--)for(j=0;j<200;j++);}main(){P1=0x7f;IE=0x8f;//开启KA总中断开关,允许外部中断0、1和定时器0、1 TCON=0x00;//所有中断响应标志位清零 TMOD=0x21;//定时器T0工作方式1,T2工作方式2 TH0=TH_M1;TL0=TL_M1;//给定时器T0装入初值 TR0=0;//关闭定时器T0 TH1=TH_M2;//给定时器T1装入初值 TL1=TL_M2; TR1=1;//关闭定时器T1 P3=0xff;//P3的八个引脚全为高电平 while(1)//判断加1或减1语句{if((TR0==0)&(P1_1&P1_0)){ys(10);if((P1_1==0)&(seconds>0))seconds--;//对秒数减1if(P1_0==0)seconds++;//对秒数加1disp[0]=TAB[seconds/10];//显示加1或减1后的秒数 disp[1]=TAB[seconds%10];while((P1_0&P1_1)==0);}}}voidT0_1s(void)interrupt1//定时器T0中断函数{TH0=TH_M1;//给定时器T0装入初值 TL0=TL_M1; if(++count_T0==20)//每0.05sT0中断一次,重叠20次得到1s,对计时加1 {count_T0=0; seconds++; if(seconds==100) seconds=0; } disp[0]=TAB[seconds/10];//得到十位数 disp[1]=TAB[seconds%10];//得到个位数}voidT1_8ms(void)interrupt3//定时器T1中断函数{if(++count_T1==32)//每0.25msT0中断一次,重叠32次得到8ms {count_T1=0; if(++scan==3)scan=1; SEG=0xff; P1_6=!P1_6;P1_7=!P1_7;//对两位LED数码管进行交替显示 SEG=disp[scan-1];}}当秒表走到6时,按下PB1键暂停时的状态,即第二次按下PB1键voidint0_sw(void)interrupt0//外部中断0中断函数{TR0=!TR0;while(PB0==0); ys(10);}voidint1_RST(void)interrupt2

温馨提示

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

评论

0/150

提交评论