基于51单片机的数字秒表设计毕业论文_第1页
基于51单片机的数字秒表设计毕业论文_第2页
基于51单片机的数字秒表设计毕业论文_第3页
基于51单片机的数字秒表设计毕业论文_第4页
基于51单片机的数字秒表设计毕业论文_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

目录TOC\o"1-3"\h\u108181单片机及数字秒表简介 4272491.1单片机的背景 4290231.2数字秒表的背景 4315152设计的目标 5254742.1设计目的 5138012.2具体操作 516823硬件设计 6155953.1原理图 6248574系统的软件设计 877624.1软件整体设计思路 8110164.2软件流程图 8249704.3程序 9220084.3.1数码管秒表显示程序: 9159814.3.21602液晶秒表显示程序 1565885总结 2122517参考文献 2116967致谢 22

基于51单片机的数字秒表设计摘要:在现今这个高度发达的社会,信息的获取成为了人们生活中非常重要的环节,人们每天所要获得的信息量非常之大,而在忙碌的生活中我们每天专门用来读书,看报纸新闻的时间就非常的有限。所以我们就需要一些更加便利的手段来获取信息而商家也需要一种更加广泛实惠的手段来发布信息。近年来随着科学技术的发展,单片机的应用正在不断走下面还深入。单片机以其高可靠性、高性价比、低电压、低功耗等一系列优点,近几年得到迅猛发展和大范围推广,广泛应用于工业控制系统,数据采集系统、智能化仪器仪表,及通讯设备、日常消费类产品、玩具等。并且已经深入到工业生产的各个环节以及人民生活的各层次中,如车间流水线控制、自动化系统等、智能型家用电器(冰箱、空调、彩电)等。关键字:单片机;数字秒表;仿真1单片机及数字秒表简介1.1单片机的背景近年来随着计算机在社会各领域的渗透,单片机的应用正在不断的走向深入,在实时监测和自动控制的单片机应用系统中,单片机往往被作为一个核心部件来使用。单片机以其高可靠性、高性价比、低电压、低功耗等一系列优点,近几年得到迅猛发展和大范围推广,广泛应用于工业控制系统,数据采集系统、智能化仪器仪表,及通讯设备、日常消费类产品、玩具等。并且已经深入到工业生产的各个环节以及人民生活的各层次中,如车间流水线控制、自动化系统等、智能型家用电器。在我们日常生活中单片机的应用非常广泛,数字秒表就是一个常见的应用,数字秒表不仅是时代发展的产物,更是人们智慧的结晶。1.2数字秒表的背景数字秒表具有显示直观、读取方便、精度高等优点,在计时中广泛应用。本设计中用单片机和数码管组成数字秒,表力求结构简单。

设计中包括硬件电路的设计和系统程序的设计。硬件电路主要有主控制器、控制按钮与显示电路组成。本文简单阐述了基于单片机的数字秒表的的设计。本设计的主要特点是计时精度达到0.01秒,是各种体育竞赛的必要设备之一。本设计的数字秒表采用AT89C51单片机为主要器件,利用其定时器的原理,结合显示电路、LED数码管以及外部外部中断电路来设计计时器。将软硬件结合起来,使得系统能实现0~99.99秒的计时,计时精度位0.01秒。硬件系统利用proteus仿真,在仿真中就能观察到系统的实际运行情况。2设计的目标2.1设计目的1.利用单片机定时器中断实现秒表计时功能。2.方案一:通过LED显示程序的调整,熟悉LED动态显示的控制过程。 方案二:通过对1602设置,熟悉1602液晶显示的控制过程。3.通过键盘程序的调整,熟悉矩阵式键盘的控制,熟悉键盘扫描原理。4.通过阅读和调试简易秒表整体程序,学会如何编制含LED动态显示、1602液晶的显示、键盘扫描和定时器中断等多种功能的综合程序。2.2具体操作2.2.1方案一:用AT89C51设计一个6位的数码管显示作为“秒表”,显示时间范围为0.00~655.36秒(此处可以通过设置两个变量进行进位操作来达到最大计数9999.99秒),计时精度达到0.01秒。利用其定时器的原理,数码管以及定时器中断来设计计时器。将软硬件结合起来,使得系统能实现0.00~655.36秒的计时。另外,通过独立按键的设计来对秒表进行控制。key1键控制计时的开始与暂停、key2键控制计时时的保存数据然后可以通过key4键控制数据的输出(可以保存十个,保存十个时秒表可以停止,该功能可用于赛跑中的计时)、key3键控制“清零”和保存按下清零键前的最后一次所计时间。(特别声明:每次处于“暂停状态”的时间都可以在此基础之上进行计时)。2.2.1方案二:用AT89C51设计一个1602液晶显示的“秒表”,显示时间范围为0.00~655.36秒(此处可以通过设置两个变量进行进位操作来达到最大计数9999.99秒),计时精度达到0.01秒。利用其定时器的原理,1602液晶以及定时器中断来设计计时器。将软硬件结合起来,使得系统能实现0.00~655.36秒的计时。另外,通过独立按键的设计来对秒表进行控制。key1键控制计时的开始与暂停、key3键控制“清零”和保存按下清零键前的最后一次所计时间。(特别声明:每次处于“暂停状态”的时间都可以在此基础之上进行计时)。注:由于开发板的键盘对液晶显示有影响,顾放弃数码管秒表显示中的部分功能。3硬件设计3.1原理图程序可用于在下图在软件中仿真也可以用于开发板4系统的软件设计4.1软件整体设计思路将程序模块化与功能,含有多个子程序的调用与嵌套。通过对按键的是否按下来对秒表进行操作,按键功能在设计目标的具体操作中已经展现。10毫秒秒定时采用定时器T0中断的工作方式1进行,中断及计数的开启与关闭受控于按键处理程序。4.2软件流程图按键key1按键key3按键key4按键key2计时开始与暂停显示key2保存的时间清零并保留清零时的时间按键key1按键key3按键key4按键key2计时开始与暂停显示key2保存的时间清零并保留清零时的时间按一次保存一个时间上电上电程序开始程序开始初始化函数初始化函数选择按键选择按键4.3程序4.3.1数码管秒表显示程序:/**********************************数码管显示秒表计时**********************************//**********************************头文件宏定义定义**********************************/#include<reg52.h> #defineuintunsignedint#defineucharunsignedcharuintt,tt;uinttable[10];ucharyi,er,san,si,wu,liu,i,j,k,l,m,flag;ucharcodetable0[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};ucharcodetable1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};ucharcodetable2[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};/**********************************位定义***********************************/sbitdula=P2^6;sbitwela=P2^7;sbitkey1=P3^4; //开始与暂停sbitkey2=P3^5; //保存10次时间sbitkey3=P3^6; //清零与恢复sbitkey4=P3^7; //读取保存的数据/**********************************函数的申明**********************************/voidinit();voiddisplay(flag);voiddisplay1();voidkeyscan1();voidkeyscan2();voidshu(uintt);voiddelay(uchard);/*********************************主函数**********************************/voidmain() {init(); while(1) { display1(); keyscan2(); }}/*********************************初始化函数**********************************/voidinit(){ m=1; TMOD=0x01; TH0=(65536-10000)/256; TL0=(65536-10000)%256; EA=1; ET0=1; TR0=0; shu(t);}/*********************************总显示函数**********************************/voiddisplay(flag){ while(flag) { display1(); keyscan1(); }}/*********************************数据显示函数**********************************/voiddisplay1(){ P0=table0[liu]; dula=1; dula=0; P0=0xff; P0=table2[0]; wela=1; wela=0; delay(5); P0=table0[wu]; dula=1; dula=0; P0=0xff; P0=table2[1]; wela=1; wela=0; delay(5); P0=table0[si]; dula=1; dula=0; P0=0xff; P0=table2[2]; wela=1; wela=0; delay(5); P0=table1[san]; dula=1; dula=0; P0=0xff; P0=table2[3]; wela=1; wela=0; delay(3); P0=table0[er]; dula=1; dula=0; P0=0xff; P0=table2[4]; wela=1; wela=0; delay(3);P0=table0[yi]; dula=1; dula=0; P0=0xff; P0=table2[5]; wela=1; wela=0; delay(3);}/**************************************动态显示数字循环中的键盘检测**************************************/voidkeyscan1(){ if(key1==0) { delay(10); if(key1==0) flag++; while(!key1); delay(10); while(!key1); if(flag%2) //判断是否暂停 TR0=1; else TR0=0; } if(key2==0) { delay(10); if(key2==0) { if(j==10) { j=0; flag++; } else { table[j]=t; j++; } } while(!key2); delay(10); while(!key2); } if(key3==0) { delay(10); if(key3==0) { l++; if(l%2) //判断是否清零还是恢复 { tt=t; t=0; shu(t); } else { t=tt; shu(tt); } display1(); } while(!key3); delay(10); while(!key3); } if(key4==0) { delay(10); if(key4==0) { if(k==10)k=0; t=table[k]; shu(t); display1(); k++; } while(!key4); delay(10); while(!key4); }}/***************************************主程序中计时暂停时的键盘检测***************************************/voidkeyscan2(){ if(key1==0) { delay(10); if(key1==0) flag++; while(!key1); delay(10); while(!key1); } if(flag%2) TR0=1; else TR0=0; display(flag%2); if(key4==0) { delay(10); if(key4==0) { if(k==10)k=0; t=table[k]; shu(t); display1(); k++; } while(!key4); delay(10); while(!key4); }}/***************************************数字的拆分***************************************/voidshu(uintt){ liu=t/100000; wu=t/10000%10; si=t/1000%10; san=t/100%10; er=t/10%10; yi=t%10; if(liu==0)liu=10; if(wu==0)wu=10; if(si==0)si=10;}/***************************************延时函数***************************************/voiddelay(uchard){unsignedchara,b,c;for(c=d;c>0;c--)for(b=120;b>0;b--)for(a=2;a>0;a--);}/*****************************************定时器0工作方式110毫秒计时******************************************/voidtime0()interrupt1 //计时10毫秒{ TH0=(65536-10000)/256; TL0=(65536-10000)%256; t++; shu(t); if(t%1000==170) if(m%2) { P1=0xaa; m++; } else P1=0x55;}4.3.21602液晶秒表显示程序/***************************************** 1602液晶显示秒表计时******************************************//**********************************头文件宏定义定义**********************************/#include<reg52.h>#defineuintunsignedint#defineucharunsignedcharuintt,tt;ucharflag,yi,er,san,si,wu,liu,l,m,num;ucharcodetable[]="0123456789";ucharcodetable1[]="***STOPWATCH***";/**********************************位定义***********************************/sbitdula=P2^6;sbitwela=P2^7;sbitLCDE=P3^4;sbitrs=P3^5;sbitkey1=P3^6;sbitkey3=P3^7;/**********************************函数的申明**********************************/voidinit();voidwrite_com(ucharcom);voidwrite_da(ucharda);voidshu(uintt);voidkeyscan1();voiddisplay();voiddisplay1();voiddelay(ucharz);/*********************************主函数**********************************/voidmain() { init(); while(1) { keyscan1(); display1(); }}/*********************************初始化函数**********************************/voidinit() { dula=1; P0=0x00; dula=0; wela=1; P0=0xff; wela=0; LCDE=0; write_com(0x01); write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x80); for(num=0;num<16;num++) { write_da(table1[num]); delay(3); } write_com(0x80+0x45); delay(5); shu(t); display1(); TMOD=0x01; TH0=(65536-10000)/256; TL0=(65536-10000)%256; EA=1; ET0=1;}/*********************************写指令**********************************/voidwrite_com(ucharcom){ P0=com; rs=0; LCDE=0; delay(5); LCDE=1; delay(5); LCDE=0;}/*********************************写数据**********************************/voidwrite_da(ucharda) { P0=da; rs=1; LCDE=0; delay(5); LCDE=1; delay(5); LCDE=0;}/*********************************数的拆分**********************************/voidshu(uintt) { liu=t/100000; wu=t/10000%10; si=t/1000%10; san=t/100%10; er=t/10%10; yi=t%10; if(liu==0)liu=10; if(wu==0)wu=10; if(si==0)si=10;}/**************************************动态显示数字循环中的键盘检测**************************************/voidkeyscan1(){ if(key1==0) { delay(10); if(key1==0) flag++; while(!key1); delay(10); while(!key1); } if(flag%2) TR0=1; else TR0=0; if(key3==0) { delay(10); if(key3==0) { l++; if(l%2) { tt=t; t=0; shu(t); } else { t=tt; shu(tt); } display1(); } while(!key3); delay(10); while(!key3); } }/*********************************总显示函数**********************************/voiddisplay(){ while(flag%2) { display1(); keyscan1(); }}/*********************************数据显示函数**********************************/voiddisplay1() { write_com(0x80+0x45); delay(5); write_da(table[liu]); write_da(table[wu]); write_da(table[si]); write_da(table[san]); write_da(0x2e); write_da(table[er]); write_da(table[yi]);}/***************************************延时函数***************************************/voiddelay(ucharz) { uchari; for(z;z>0;z--) for(i=110;i>0;i--);}/*****************************************定时器0工作方式110毫秒计时******************************************/voidtime0()interrupt1 { TH0=(65536-10000)/256; TL0=(65536-10000)%256; t++; shu(t); if(t%1000==170) if(m%2) { P1=0xaa; m++; } else P1=0x55

温馨提示

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

评论

0/150

提交评论