单片机课程设计报告(五人表决器)_第1页
单片机课程设计报告(五人表决器)_第2页
单片机课程设计报告(五人表决器)_第3页
单片机课程设计报告(五人表决器)_第4页
单片机课程设计报告(五人表决器)_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上目录单片机课程设计一、方案设计1、设计题目:5人表决器2、设计要求:1) 、可供57个人进行表决,每个人有一个“同意”和一个“反对”按键,故一个人需要两个按键,表决时两个键先按下的一个有效,同时按下则表示无效,每次表决每个按键只能是第一次按下的有效,多按无效,用单片机设计表决器是硬件电路与软件设计相结合的一种设计,因此在硬件电路只能实现按键的按下与释放,不能智能的实现检测按键被按下几次,则可用软件设计来实现其功能。2) 会议主持人可利用按键控制表决的开始与结束,点亮黄灯用于显示表决开始,熄灭黄灯表示结束,并将表决结果用红灯与绿灯显示。当不相等时,“同意”多于“反对”点

2、亮绿灯,“同意”少于“反对”点亮红灯。3)在实现上述功能的基础上增加“同意”数和“反对”数的显示。二、硬件电路设计1、硬件设计思路:此次设计的题目是5人表决器,分析得设计的硬件电路选用P1口与P2口作为同意与反对按键的输入端。又表决的开始与结束是由主持人来控制的,因此需要两个按键来表示表决的开始与结束,因此可采用外部中断0与外部中断1来控制表决的开始于结束。故设计总共需要按键12个。设计要求中需要四盏灯,分变为一个黄灯,一个绿灯和二个红灯,三盏灯用于输出显示,因此也可以征用单片机的I/O口,由于P1口与P2口作为同意与反对按键的输入端且P0口当做输出端口时可以不用接上拉电阻,因此可将三个显示灯

3、接在P0口用于显示表决的结果。还有一盏红灯用来做电源指示灯。2、元器件参数确定:设计要求中需要三盏灯(黄灯,绿灯和红灯)用于输出显示,选用P0口的3个端口与显示灯相连接用于输出,由于输出端口输出的高电平一般为5V,而发光二极管允许的最大电流为5mA,因此需要用到限流电阻,发光二极管可降2V的电压,则限流电阻上的压降为3V,那么限流电阻的最小阻值为R=3V/5mA=600欧姆,由于输出的高电平不是5V,故用510欧姆的限流电阻。然后将单片机的最小系统(最小系统中各元器件的参数可参考单片机课本中给出的值)加入电路中就是此次设计的硬件电路。3、 元件清单:元件名称元件数目元件型号元件参数备注按键开关

4、12个一般接对角线电解电容1个一般22uF有正负之分瓷片电容2个30PF发光二极管3个普通红、黄、绿灯显示灯晶振1个12M内部时钟电路电阻3个普通510用于限流单机片芯片一片805140脚电源插头1个/各元器件的作用:开关:有十个开关用于分别用做5人的同意与反对按键;一个开关用于复位电路,另外两个按键用于主持人的开始与结束按键;电容:用于单片机的最小系统;发光二极管:黄灯用于显示表决的开始与结束,红灯与绿灯用于显示表决的结果;电阻:用于限制电流;8051芯片:软件编程;电源接头:用于接外接电源。4、电路工作原理简述:该电路是基于硬件电路,应用汇编语言来设计出其工作流程,硬件电路是用软件程序来检

5、测表决器的开始按键是否被按下,如果开始键已按下,则利用软件程序来检测用于表决的按键是否被按下以及按下的按键是否有效,然后检测结束键是否被按下,如果按下则表决结束,并且显示最终的表决结果。硬件电路只能够用于表征表决是否开始以及每个人按下的是同意按键还是反对按键。工作流程:当主持人按下开始表决的开始按键(在电路中用接在外部中断0上的按键来表示开始按键)后,5个人才开始表决,5个人分别按下同意按键或是反对按键,剩余的事情由软件来处理分析最终统计得到“同意”的人数和“反对”的人数,当主持按下结束按键后(在电路中用外部中断1上所接的按键来表示结束按键),软件中用外部中断1来表示结束(采用中断的方式),在

6、中断程序中比较“同意”的人数与“反对”的人数的大小。当“同意”的人数大于“反对”的人数时,应用软件程序点亮绿灯;当“同意”的人数小于“反对”的人数时,应用软件程序点亮红灯;当“同意”的人数等于“反对”的人数时,则应用软件程序将红灯与绿灯同时点亮。图1 单片机系统的时钟电路图2 实物电路板三、软件设计说明1、模块设计:初始化模块:对系统进行初始化,由于程序中有中断源,因此打开相应的中断也放在程序的初始化模块中;检测开始按键:检测开始按键是否被按下,按下则开始执行循环检测同意与反对按键,为消除按键抖动,此处需调用延时程序;循环检测同意/反对按键:循环检测同意与反对按键是否被按下,同时统计同意总数与

7、反对总数,然后等待中断到来;延时程序:用于消除按键的机械抖动,调用0.5s的延时程序;中断处理:当中断源到来,首先熄灭黄灯,然后将同意总数与反对总数进行比较,并点亮对应的显示灯;调用延时程序开始按键的检测系统初始化开始2、软件设计流程图中断程序等待中断循环检测同意反对按键点亮绿灯比较同意与反对数的大小大于结束中断返回点亮所有灯等于点亮红灯小于3、软件总体功能:软件的总体功能1. 用于检测开始按键是否被按下,按下则表决按键按下才有效,即开始表决;2. 开始表决后循环检测对应的同意与反对按键是否被按下,并统计同意总数与反对总数;3.等待中断,即等待结束按键被按下,在中断处理中将同意与反对数进行比较

8、,并点亮相应的显示灯,程序结束。四、程序清单ORG0000HAJMPMAIN;/转主程序/ORG0013H;/外部中断1的入口地址/AJMPINT_1;/跳转到中断/ORG0100HMAIN:MOVSP,#60H;/给地址指针赋初值/MOVA,#0FFHMOVP1,A;/给P1口赋初始值/MOVP2,A;/给P2口赋初始值/MOVP0,A;/给P0口赋初始值/SETBEA;/开中断/SETBEX1;/打开外部中断1/SETBIT1;/设置外部中断1为边沿触发方式/JBP3.2,$;/等待外部中断0上的按键按下/LCALLDEL05S;/调用延时程序/JNBP3.2,$;/等待按键弹起/CLRP

9、0.5;/点亮黄灯/L10:JBP1.4,L11;/判断按键P1.4口上的按键是否被按下/JNBP1.4,$;/等待按键弹起/JNBP2.0,L11;/检测对应的反对按键是否被按下/LCALLDEL05S;/调用延时程序/MOV21H,#00H;/将21H初始化/MOVA,21H;/21H中存储第一个同意按键的按下数/INCA;/对21H地址单元中的值加1/MOVB,AMOVA,#01HCJNEA,B,L11;/将寄存器A中的值与1比较,保证只有第一次按下才有效/MOV21H,A;/26H中存储第一个反对按键的按下数/MOV31H,#00HMOVA,31HINCAMOV31H,A;/对31H中

10、的同意数加1/L11:JBP1.3,L12;/检测按键是否被按下/JNBP1.3,$;/等待按键弹起/JNBP2.1,L12;/判断对应的反对建是否被按下/LCALLDEL05S;/调用延时程序/MOV22H,#00HMOVA,22H;/同L10注释,下同/INCAMOVB,ACJNEA,B,L12MOV22H,AMOVA,31HINCAMOV31H,AL12:JBP1.2,L13;/同上/JNBP1.2,$JNBP2.2,L13LCALLDEL05SMOV23H,#00HMOVA,23HINCAMOVB,ACJNEA,B,L13MOV23H,AMOVA,31HINCAMOV31H,AL13:

11、JBP1.1,L14;/同上/JNBP1.1,$JNBP2.3,L14LCALLDEL05SMOV24H,#00HMOVA,24HINCAMOVB,ACJNEA,B,L14MOVA,31HINCAMOV31H,AL14:JBP1.0,S0;/同上/JNBP1.0,$JNBP2.4,S0LCALLDEL05SMOV25H,#00HMOVA,25HINCAMOVB,ACJNEA,B,S0MOV25H,AMOV30H,AMOVA,31HINCAMOV31H,AS0:JBP2.0,s1;/判断第一个反对建是否被按下/JNBP2.0,$;/等待按键弹起/JNBP1.4,s1;/判断对应的同意键是否被按下

12、/LCALLDEL05S;/调用延时程序/MOV26H,#00H;/将26H初始化/MOVA,26H;/将值送入对应的存储空间/INCA;/寄存器A的内容加1/MOVB,ACJNEA,B,S1;/与1比较/MOV26H,AMOVA,32HINCA;/对寄存器A的内容加1/MOV32H,A;/将寄存器A的值赋值给32H/S1:JBP2.1,S2;/同上面的S0程序的注释/JNBP2.1,$JNBP1.3,S2LCALLDEL05SMOV27H,#00HMOVA,27HINCAMOVB,ACJNEA,B,S2MOV27H,AMOVA,32HINCAMOV32H,AS2:JBP2.2,S3;/同上/

13、JNBP2.2,$JNBP1.2,S3LCALLDEL05SMOV28H,#00HMOVA,28HINCAMOVB,ACJNEA,B,S3MOV28H,AMOVA,32HINCAMOV32H,AS3:JBP2.3,S4;/同上/JNBP2.3,$JNBP1.1,S4LCALLDEL05SMOV29H,#00HMOVA,29HINCAMOVB,ACJNEA,B,S4MOV29H,AMOVA,32HINCAMOV32H,AS4:JBP2.4,RT;/同上/JNBP2.4,$JNBP1.0,RTLCALLDEL05SMOV30H,#00HMOVA,30HINCAMOV B,ACJNEA,B,RTMO

14、V30H,AMOVA,32HINCAMOV32H,ART:AJMPL10;/跳转到L0程序循环检测各个按键是否被按下/DEL05S:MOVTMOD,#10H;/定时器T1,方式1/MOVTL1,#0DCH;/送计数初值,保证定时时间为125ms/MOVTH1,#0BHMOVR2,#4;/设置软计数器,使4*125ms=0.5s/SETBTR1;/启动定时计数器/LOOP:JNBTF1,$;/等待1ms定时到/MOVTL1,#0DCH;/再送计数初值,保证定时时间始终为125ms/MOVTH1,#0BHCLRTF1;/清除溢出标志位,以便下次判断/DJNZR2,LOOP;/等待0.5S延时到/C

15、LRTR1;/关闭定时器1/RET;/延时程序返回/INT_1:SETBP0.5;/熄灭黄灯/MOVA,31H;/将同意数赋值给寄存器A/MOVB,AMOVA,32HCLRP0.0CJNEA,B,LP;/比较同意数与反对数的大小/MOVP0,#00H;/三个显示灯同时点亮/SJMPOUT;/跳转到OUT程序/LP:JCGREEN;/判断溢出标志位Cy/CLRP0.0;/点亮绿灯/SJMPOUT;/跳转到OUT程序/GREEN:CLRP0.2;/点亮红灯/OUT:NOP;/空操作指令/RETI;/中断返回/END五、制作调试说明1、制作与程序设计思路:将所设计的硬件电路焊接好,然后根据硬件电路的

16、基本接法画出软件编程的流程图,然后根据流程图中的各个模块编写相应模块的程序,最后将各个模块综合起来构成说设计的程序。2、 调试过程与结果:程序的编写过程:1) 、根据软件的流程图中的各个模块的基本要求,先编写出模块程序,使其实现模块功能;然后根据流程图中各个模块之间的箭头方向将各个模块联系在一起,最后对对整体程序进行调节,直至调试运行后没有逻辑错误与警告;2) 、将运行没有错误的程序导入模拟软件中进行仿真调试,首先发现不能实现预期的功能,于是对程序进行修改,直至调试成功,通过仿真能够实现预期的功能,则程序编写成功,可进行硬件电路的调试。调试过程中出现的问题:1) 、将所编程的的程序烧写在单片机

17、8051芯片中,然后将其加入硬件电路中,然后进行调试,发现不能实现其功能。2) 调整后继续进行调试,结果还是不能实现预期的功能,当按下的同意键大于反对建时,绿灯被点亮;但当按下的反对建大于同意键时,仍然显示绿灯,同意键等于反对建是也显示绿灯,也不能达到预期的功能;进一步对程序进行调试,但仍然不能解决问题。然后对硬件电路进行检测发现有一个管脚虚焊,红灯也不能正常工作,于是将坏掉的元器件换掉后再进行调试后猜成功实现理想的功能。六、操作使用说明1、 将汇编语言程序烧写进单片机8051芯片中,然后把芯片连接到硬件电路中;2、 按下开始按键(外部中断0)后开始表决,P1口上的按键为同意按键,P2口上的按

18、键为反对按键,表决后按下结束按键(外部中断1),点亮相应的显示灯,绿灯表示同意大于反对总数,点亮红灯表示反对大于同意同意数。七、总结这次实训,主要实习任务是根据以前所学知识,设计单片机硬件电路,制作电路,自己编写汇编程序;并通过调试硬件电路和程序使其实现预期的功能。这次实训让我真正的了解了单片机设计的基本设计理念,以及设计所需要掌握的一些基本概念。同时更加巩固了我们所学习的知识,并将所学习的理论知识真正的应用于实践中。我认为此次的实习对我是受益匪浅的,让我更加有了学习的动力。当我所设计的电路经调试能够实现预期效果时,我的内心是无比的愉悦,虽然此次在调试过程中遇到了很多的问题,最终的结果页并不是那么理想,但我还是感觉很欣慰,因为这次实训让我了解到了平时学习中的不足,让我更谦虚的学习更多的知识。虽然有很多地方是借鉴别人的

温馨提示

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

评论

0/150

提交评论