单片机课程论文_第1页
单片机课程论文_第2页
单片机课程论文_第3页
单片机课程论文_第4页
单片机课程论文_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

-.z..--可修编-"单片机原理及外围电路"课程论文"篮球赛计时计分器":迪丽努尔·阿力甫**:5011212238班级:计算机16-2-.z.-可修编-目录TOC\o"1-3"\h\u27693摘要 112044正文 229131技术背景 21833设计意义 228462设计目标 315350硬件电路设计 339761、CPU局部 3199062.管脚说明: 4297423.振荡器特性: 7311844.按键局部 827053软件设计 125498结论 2126324参考文献 22-.z.摘要篮球是一项充满乐趣的运动,打篮球可以学到很多课本里没有的东西,比方信任,合作,鼓励等,现在篮球普及率已经很高,不仅仅是专业运发动的运动,也是普通老百姓的活动,不管是走在学校里,还是公园里,甚至是乡村里,都能看到篮球场,都能看到打篮球的人,篮球已成为我们大局部人生活里不可或缺的组成局部,每天都能听到有人在谈论篮球,说说自己喜欢的NBA巨星……因为喜欢篮球,所以打篮球,时不时会来场剧烈的比赛,篮球计分器将让我们摆脱用粉笔或记分牌计分带来的不便,轻轻松松几个按钮开关就能让我们记下分数,让我们感受到科技给我们带来的巨变。随着微电子技术的不断开展与进步,微处理器芯片的集成程度越来越高,单片机已可以在一块芯片上同时集成CPU、存储器、定时器/计数电路,这就很容易将计算机技术与测量控制技术结合,组成智能化测量控制系统。利用一些与单片机相关的硬器件设计一个关于篮球计时计分器对的设计,其中最主要设计俩局部:一是数码管显示器的显示局部,二是按键处理的判断。在此处输入中文摘要〔字数一般不少于300字〕。摘要必须反映全文中心容,容应包括目的、过程及方法、结论。要求论述简明、逻辑性强、尽量用短句。采用第三人称的写法,并请用过去时态表达作者工作,用现在时态表达作者结论。【关键词】词1单片机;词2数码管;词3定时器;正文技术背景单片机是现代电子技术的新兴领域,它的出现极推动了电子工业的开展,已成为电子系统设计中最为普遍的应用手段。近年来单片机技术得到了突飞猛进的开展,各种单片机开发工具层出不穷。虚拟仿真就是近年来兴起的一种新型应用技术,采用虚拟仿真技术,在原理图设计阶段就可以对单片机应用设计进展评估,验证所设计电路是否到达所要求的技术指标,还可以通过改变元器件参数使整个电路性能到达最优化。这样就无须屡次购置元器件及制作印刷电路板,节省了设计时间与经费,提高了设计效率与质量。设计意义通过篮球计分计时器的制作,可以使我熟悉,了解单片机开发设计实例的过程,并能使读者加深对单片机的理解和运用以及掌握单片机与外围接口的一些方法和技巧,这主要表现在以下的一些方面:〔1〕篮球计分计时器包含了AT89C51系列单片机的最小应用系统的构成,同时在此根底上扩展了一些实用性强的外围接口。〔2〕掌握键盘接口原理,能正确地把键盘使用到单片机系统中,可以了解到LED显示器的构造,工作原理以及这种显示器的接口实例。〔3〕学会调试电路,分析电路故障,积累电路调试经历。设计目标设计并制作一个用于赛场的篮球赛计时计分器,实现如下根本功能:〔1〕能记录整个赛程的比赛时间,并能修改比赛时间,暂停比赛时间。〔2〕能随时刷新甲,乙两队在整个赛程中的比分。〔3〕中场交换场地时,能交换甲,乙两队比分的位置。〔4〕比赛时间完毕时,能发出报警指令。硬件电路设计电路主要包括CPU局部、电源局部、按键局部、LED显示局部。1、CPU局部51单片机为单芯片微控制器,常见封装形式为40脚双列直插式塑料封装DIP-40,其引脚识别为:正面面向用户,缺口向上,左上面第一脚为1脚,然后按逆时针方向依次为2~40脚。通常第一脚有标志符号。51单片机管脚图如图2所示。AT89C51是一种带4K字节闪烁可编程可擦除只读存储器〔FPEROM—FalshProgrammableandErasableReadOnlyMemory〕的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。图2单片机引脚图2.管脚说明:VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0口作为原码输入口,当FIASH进展校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。P2口:P2口为一个部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1〞时,其管脚被部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进展存取时,P2口输出地址的高八位。在给出地址“1〞时,它利用部上拉优势,当对外部八位地址数据存储器进展读写时,P2口输出其特殊功能存放器的容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1〞后,它们被部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流〔ILL〕这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下表所示:口管脚备选功能P3.0R*D〔串行输入口〕P3.1T*D〔串行输出口〕P3.2/INT0〔外部中断0〕P3.3/INT1〔外部中断1〕P3.4T0〔记时器0外部输入〕P3.5T1〔记时器1外部输入〕P3.6/WR〔外部数据存储器写选通〕P3.7/RD〔外部数据存储器读选通〕P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想制止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOV*,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE制止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器〔0000H-FFFFH〕,不管是否有部程序存储器。注意加密方式1时,/EA将部锁定为RESET;当/EA端保持高电平时,此间部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源〔VPP〕。*TAL1:反向振荡放大器的输入及部时钟工作电路的输入。*TAL2:来自反向振荡器的输出。3.振荡器特性:*TAL1和*TAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片振荡器。石晶振荡和瓷振荡均可采用。如采用外部时钟源驱动器件,*TAL2应不接。有余输入至部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的上下电平要求的宽度。单片机是一种微控制器,任何为控制器正常工作最根本的条件是要有正确的电源、时钟电路好复位信号,三者缺一不可。单片机正常工作最根本条件是:正确的电源、时钟信号、复位信号。51系列单片机第40引脚接电源+5V,第20引脚接地。电压过高或者过低均会引起单片机CPU部工作。单片机指令执行时在时钟脉冲控制下进展的,时钟脉冲信号是由单片机部时钟电路及18脚、19脚外接晶振和电容组成的时钟电路产生的。时钟电路异常,也会引起单片机CPU部工作,可通过测量30脚〔ALE〕是否有时钟脉冲六分频信号输出来判断振荡电路是否起振。复位电路时在CPU通电后,给复位端9脚〔RST〕一个复位脉冲,使CPU部处于初始工作状态。51系列单片机是高电平复位,在正确的复位后〔工作状态〕9脚应保持低电平。如果复位电路出现故障,CPU也将无法工作。由于CPU的复位电路只有在开机瞬间产生复位脉冲,周期一般为几毫秒,用万用表无法鉴别正常与否。对于只有上电复位的复位电路,快速判断CPU是否有故障可以采取强制复位的方法,将复位瞬时接电源正端,如果此时CPU恢复工作,说明CPU的复位电路出现故障。对于有按键复位的复位电路,按下复位键,测量复位端是否有高电平产生来判断复位电路工作是否正常。图3CPU控制电路2、电源局部图4电源局部4.按键局部ADD1,DEC1,E*CHANGE,ADD2,DEC2,RUN/STOP其中: ADD1甲队比分加1键,〔暂停时为调整时间分钟加1〕 DEC1甲队比分减1键,〔暂停时为调整时间分钟减1〕 E*CHANGE换场键,半场休息时换场。 ADD2乙队比分加1键,〔暂停时为调整时间秒钟加1〕 DEC2乙队比分减1键,〔暂停时为调整时间秒钟减1〕 RUN/STOP启动暂停键,比赛开场时按下启动计时,比赛开场。比赛开场后,按下为暂停计时,比赛暂停。甲乙队比分默认000,此时按下ADD1键,可以比照赛时间分钟加1,按下DEC1键,可以比照赛时间的分钟减1,按下ADD2键,可以比照赛时间秒加1,按下DEC2键,可以比照赛时间秒减1。图6按键局部系统的总电路图图7系统总电路图在proteus下的仿真。图7AT89C51单片机局部图8排阻局部图9蜂鸣器局部图10按键局部图11时间显示局部图12比分显示局部图13仿真全图软件设计代码程序就是从主程序开场执行的,在主程序里可以调用子程序,调用完成后还要返回主程序继续执行。我们在主程序里对各个模块进展初始化,用一个while循环不断地循环执行各个子程序,例如按键扫描程序在这里可以一次一次地扫描按键,这样实现简单易行。延时子程序此次程序中单独设立了一个带有参数传输的延时子程序,以供其他程序块的调用,且延时可以通过参数方便的控制,使程序更加的简洁。:中断效劳子程序当T0中断发生时转入执行中断效劳子程序,本程序主要用于提供一个准确的时钟实现定时。另外还用对数码管的循环扫描显示,每中断一次就对数码管进展扫描一次,从而提供一个稳定的显示输出,不受其他程序的延时影响。数码管显示子程序数码管显示采用动态显示方式,这样占用I/O口资源比拟少,且易于实现。在运行中可以随时修改显示分数及时间。按键处理模块按键识别及处理程序主要由键盘识别和键值处理组成。其中键盘识别子程序不断地对键盘进展判断是否有键按下。当有键按下时则转到相应按键进展相应处理,即可实现对甲、乙两队总分的计算与处理和比照赛时间的相应操作。源程序代码*include<reg51.h>*defineLEDDataP0 //定时数码管的段值从P0口输出unsignedcharcodeLEDCode[]={0*3f,0*06,0*5b,0*4f,0*66,0*6d,0*7d,0*07,0*7f,0*6f};//数码管0--9的编码unsignedcharminit,second,count,count1;//分,秒,计数器unsignedcharset_minit=12,set_second=0;sbitadd1=P1^0; //甲队加分,每按一次加1分/比赛前为时间加1分sbitdec1=P1^1; //甲队减分,每按一次减1分/比赛前为时间减1分sbite*change=P1^2; //交换场地sbitadd2=P1^3; //乙队加分,每按一次加1分/比赛前为时间加1秒sbitdec2=P1^4; //乙队减分,每按一次减1分/比赛前为时间减1秒sbitsecondpoint=P0^7; //秒闪动点//数码管的位选控制脚,共有10位数码管sbitled1=P2^7; sbitled2=P2^6;sbitled3=P2^5;sbitled4=P2^4;sbitled5=P2^3;sbitled6=P2^2;sbitled7=P2^1;sbitled8=P2^0;sbitled9=P3^7;sbitled10=P3^6;sbitalam=P1^7; //报警bitplayon=0; //比赛进展标志位,为1时表示比赛开场,计时开启bittimeover=0; //比赛完毕标志位,为1时表示比赛完毕bitAorB=0; //甲乙队交换位置标志位bithalfsecond=0; //半秒标志位unsignedintscoreA; //甲队得分unsignedintscoreB; //乙队得分//====================延时==================voidDelay5ms(void){ unsignedinti; for(i=100;i>0;i--);}voiddisplay(void){//显示时间〔分钟〕 LEDData=LEDCode[minit/10];//显示分钟的十位 led1=0; //开启位选 Delay5ms(); //延时,以便足以点亮数码管。 led1=1; //关闭位选 LEDData=LEDCode[minit%10]; //显示分钟的个位 led2=0; Delay5ms(); led2=1;//秒点闪动 if(halfsecond==1) LEDData=0*80; else LEDData=0*00; led2=0; Delay5ms(); led2=1; secondpoint=0;//显示时间〔秒钟〕 LEDData=LEDCode[second/10]; //显示秒钟的十位 led3=0; Delay5ms(); led3=1; LEDData=LEDCode[second%10]; //显示秒钟的个位 led4=0; Delay5ms(); led4=1;//显示1组的分数百位 if(AorB==0) LEDData=LEDCode[scoreA/100]; else LEDData=LEDCode[scoreB/100]; led5=0; Delay5ms(); led5=1;//显示1组分数的十位 if(AorB==0) LEDData=LEDCode[(scoreA%100)/10]; else LEDData=LEDCode[(scoreB%100)/10]; led6=0; Delay5ms(); led6=1;//显示1组分数的个位 if(AorB==0) LEDData=LEDCode[scoreA%10]; else LEDData=LEDCode[scoreB%10]; led7=0; Delay5ms(); led7=1;//显示2组分数的百位 if(AorB==1) LEDData=LEDCode[scoreA/100]; else LEDData=LEDCode[scoreB/100]; led8=0; Delay5ms(); led8=1;//显示2组分数的十位 if(AorB==1) LEDData=LEDCode[(scoreA%100)/10]; else LEDData=LEDCode[(scoreB%100)/10]; led9=0; Delay5ms(); led9=1;//显示2组分数的个位 if(AorB==1) LEDData=LEDCode[scoreA%10]; else LEDData=LEDCode[scoreB%10]; led10=0; Delay5ms(); led10=1;}//====================按键检测程序================================================voidkeyscan(void){ if(playon==0) //在比赛未开场的状态下 { if(add1==0) //当add1按键按下时 { display(); //调用显示,同时作为延时消抖 if(add1==0); //延时消抖后,依然检查到按键按下 { if(minit<99) //当分钟小于99时,分钟加1 minit++; else minit=99; //否则,分钟仍然为99,调整为99分钟 } do //当按键未松开时,一直调用显示,防止数码管闪动, display(); while(add1==0); } if(dec1==0) //当dec1键按下时,dec1的原理与add一样, { display(); if(dec1==0); { if(minit>0) minit--; else minit=0; } do display(); while(dec1==0); } if(add2==0) //调整秒,原理同上 { display(); if(add2==0); { if(second<59) second++; else second=59; } do display(); while(add2==0); } if(dec2==0) { display(); if(dec2==0); { if(second>0) second--; else second=0; } do display(); while(dec2==0); } if(e*change==0) //换场键 { display(); if(e*change==0); { TR1=0; //关闭T1计数器 alam=1; //关报警 AorB=~AorB; //开启交换 minit=set_minit; //并将时间预设为12:00 second=0; } do display(); while(e*change==0); } } else //比赛开场。 { if(add1==0) //add1键按下 { display(); //调用显示,同时延时消抖 if(add1==0); { if(AorB==0) //当场地标志位=0时, { if(scoreA<999) //当A方的比分小于999时,比分加1 scoreA++; else scoreA=999; //否则最大值为999分 } else //当场地标志位=1时, { if(scoreB<999) //当B方的比分小于999时,比分加1 scoreB++; else scoreB=999; //否则最在值为999分 } } do display(); while(add1==0); } if(dec1==0) //当dec1键按下时,原理与add1一样,比分减1 { display(); if(dec1==0); { if(AorB==0) { if(scoreA>0) scoreA--; else scoreA=0; } else { if(scoreB>0) scoreB--; else scoreB=0; } } do display(); while(dec1==0); } if(add2==0) //原理同上 { display(); if(add2==0); { if(AorB==1) { if(scoreA<999) scoreA++; else scoreA=999; } else { if(scoreB<999) scoreB++; else scoreB=999; } } do display(); while(add2==0); } if(dec2==0) { display(); if(dec2==0); { if(AorB==1) { if(scoreA>0) scoreA--; else scoreA=0; } else { if(scoreB>0) scoreB--; else scoreB=0; } } do display(); while(dec2==0); } }}//******************************主函数voidmain(void){ TMOD=0*11; //TMOD设置 TL0=0*b0; //定时器0,初值为0*3CB0,既定时0.05s TH0=0*3c; TL1=0*b0; //定时器1,初值为0*3CB0,即定时0.05s TH1=0*3c; minit=set_minit; //初始值为12:00 second=0; EA=1; //开总中断 ET0=1; //开T0中断 ET1=1; //开T1中断 TR0=0; TR1=0; E*0=1; //开外部中断0 IT0=1; IT1=1;// E*1=1; P*0=1;// P*1=1; PT0=0; P1=0*FF; P3=0*FF; while(1) { keyscan(); //按键检查 display(); //显示程序}}//============外部中断0中断程序=================voidP*Int0(void)interrupt0{ Delay5ms(); E*0=0; //关中断使能 alam=1; //关蜂鸣器 TR1=0; //关定时器0 if(timeover==1) //当一节比拟时间完毕时,完毕标志位=1 { timeover=0; //去除标志位 } if(playon==0) //当比赛完毕或暂停时 { playon=1; //开场标志位 TR0=1; //开启计时 } else { playon=0; //开场标志位清零,表示暂停 TR0=0; //暂停计时 } E*0=1; //重新开中断 }//===================定时器0中断效劳函数======================voidtime0_int(void)interrupt1{ TL0=0*b0; //重赋初值 TH0=0*3c; TR0=1; //启动计时 count++; //软件计数器加1 if(count==10) //0.05s*10=0.5s,即0.5秒钟时 { halfsecond=0; //半秒标志位清零 }

温馨提示

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

评论

0/150

提交评论