当前位置:文档之家› 单片机七人表决器

单片机七人表决器

一.方案设计 1.设计题目:七人表决器。 2.实训要求 利用AT89S51单片机设计并制作会议表决计票器电路。具体要求如下: 1、可供57个人进行表决,每个人有一个“同意”和一个“反对”按键,表决时两个键先按下的一个有效,若再按另一个键将清楚前一次按键的效能;每次表决每个按键只能是第一次按的有效,多按的次数无效,除非前一次按键的效能已被清楚或没有生效。 2、会议主持人可利用按键控制表决开始和结束;开始表决后,点亮黄色指示灯,表示可以进行表决,同时清楚原来的表决结果;结束表决后显示表决结果;“同意”多于“反对”点亮绿色指示灯,反之点亮红色指示灯。 3、在实现上述功能的基础上增加“同意”数和“反对”数的显示。 二.硬件电路设计和原理。 1.硬件设计思路: 设计题目为5—7人表决器,题目选为七人表决器,七个按键表示同意,七个按键表示反对,各按键与单片机的输入端口相连,因此可选用单片机的四个I/O口,因为在单片机内部P1和P2都有上啦电阻,而P0没有上啦电阻,要在外部加上一个上拉电阻,为了简化电路,把P1和P2口选为按键同意和反对的输入端,因为表决考试和结束要利用主持人按键来控制,我采用外部中断0和外部中断一来控制其开始和结束;设计要求中需要四张灯,分别为2个红灯,一个黄灯,一个绿灯,其中三个灯用于输出显示,可用单片机的I/O口,另外一个红灯作为电源灯来显示,判断是否通电,因为P1口和P2口用做按键的同意和反对,把P2剩余的I/O口与三个灯连接,分别连接在P2.3,P2.4,P2.5口,因为P0口是低电平有效所以我的P0口与LED现实器相连用于显示反对与同意的人数的多少,采用动态显示的方式,为了保证两个显示器不再相同时间显示相同的数字,所以LED显示器的公共端受另外一组信号的控制,采用延时的方式让它们分别显示出来。 2.元件参数确定: 设计中需要四盏灯,分别为两个红灯,一个绿灯,一个黄灯,P0口的输出端输出高电平一般为5伏左右,最大电流为五毫安,因此必须加上限流电阻,我选用的是470欧的电阻,然后将单片机的最小系统加入此次的电路中。 3.元件清单: 14个开关用于7人同意与反对按键,另外两个开关用做控制投票开始和结束的总开关。 电容:用于单片机的最小系统。 发光二极管:用于表示投票开始与结束,和最后同意与反对票数的对比情况。 电阻:用于限流。 单片机8051芯片:用于编程。 电源接头:提供电源。 LED显示器:用于显示投票中同意与反对票数的多少。 4.电路工作原理简述。 当主持人按下开始键,外部中断0响应后,黄灯亮起,到外部中断服务程序,开始进行投票,7人开始表决,7个人分别按下同意或反对,然后有团建来处理和分析“同意”和“反对”的人数的多少,当主持人按下结束键时,停止投票。当最后结果“同意”人数多于“反对”人数时,亮起绿灯,当最后结果“同意”人数少于“反对”人数时,亮起红灯,把其最后的结果显示在两个LED显示器上面,最终达到设计的基本目标。 5.电路工作原理图: 6.电路实物图: 三.内容 1.软件设计思路: 1).软件初始化: 根据硬件开关与显示灯的接法对单片机进行初始值的设计,因为是低电平有效,故初始化设置为高电平有效。 2.)模块设计思路与各模块之间的联系: 用查询的方式来看按键是否被按下,若按下,点亮黄灯,开始表决,若同意或反对就在其对应的寄存器中自加一,知道总开关呢按键结束后,在比较其大小,并把最后结果存放在LED显示器当中。

2.软件总体功能: 1)用于检测开始键是否被按下,按下时表决器才有用才开始表决。 2)开始表决后循环检测对应的同意和反对是否被按下,并统计其同意总数和反对总数。 3)等待中断若结束按键被按下,在中断处理中比较,并点亮相应的显示灯。 4)把同意的票数和反对的票数分别显示在LED显示器上。 3.程序: ORG 0000H AJMP MAIN ORG 0003H SETB F0 SETB TR0 RETI ORG 000BH AJMP INTT0 ORG 001BH AJMP INTT1 ORG 0030H MAIN: MOV SP,#60H MOV TMOD,#11H MOV TL0,#0B0H MOV TH0,#03CH MOV R1,#20 MOV R2,#5 CLR P3.0 SETB EA SETB ET0 SETB EX0 SETB IT0 INDEX:MOV A,P1 ANL A,#0FH MOV 28H,A LCALL DELAY MOV A,P1 ANL A,#0FH CJNE A,28H,RETURN KEY: CJNE A,#0EH,KEY2 CLR P1.0 JB F0,DD SETB P3.0 LCALL SIXUNHUAN DD: LCALL AST KEY2: CJNE A, #0DH,KEY3 CLR P1.1 JB F0,DD1 SETB P3.0; LCALL SIXUNHUAN DD1: LCALL AST KEY3: CJNE A,#0BH,KEY4 CLR P1.2 JB F0,DD2 SETB P3.0 LCALL SIXUNHUAN DD2: LCALL AST KEY4: CJNE A,#07H,KEY5 CLR P1.3 JB F0,DD3 SETB P3.0 LCALL SIXUNHUAN DD3: LCALL AST KEY5: CJNE A, #0DH,KEY6 CLR P1.4 JB F0,DD4 SETB P3.0; LCALL SIXUNHUAN DD4: LCALL AST KEY6: CJNE A, #0DH,KEY7 CLR P1.5 JB F0,DD5 SETB P3.0; LCALL SIXUNHUAN DD5: LCALL AST KEY7: CJNE A, #0DH, RETURN CLR P1.6 JB F0,DD6 SETB P3.0; LCALL SIXUNHUAN DD6: LCALL AST RETURN:NOP AJMP INDEX DELAY:MOV R6,#13 DELAY1:MOV R5,#250;250 DELAY2:NOP DJNZ R5,DELAY2 DJNZ R6,DELAY1 RET AST: CLR ET0 SETB ET1 MOV TL1,#0E0H MOV TH1,#03CH SETB TR1 MOV R4,#20 MOV R3,#9 AJMP $ SIXUNHUAN:CLR EA SJMP $ INTT0:MOV TL0,#0B0H MOV TH0,#03CH DJNZ R1,LOOP1 MOV R1,#20 DJNZ R2,LOOP2 MOV A,#0 MOV DPTR,#TBB MOVC A,@A+DPTR MOV P2,A CLR EA SJMP $ LOOP2:MOV A,R2 MOV DPTR,#TBB MOVC A,@A+DPTR MOV P2,A LOOP1:RETI INTT1:MOV TL1,#0B0H MOV TH1,#03CH DJNZ R4,LOOP4 MOV R4,#20 DJNZ R3,LOOP MOV A,#0 MOV DPTR,#TAB MOVC A,@A+DPTR MOV P2,A CLR EA SJMP $ LOOP: MOV A,R3 MOV DPTR,#TBB MOVC A,@A+DPTR MOV P2,A LOOP4:RETI TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH DB 77H,7CH,39H,5EH,79H,71H END 四.心得体会 课程设计,我认为最重要的就是做好设计的预习,认真的研究老师给的题目,老师对实验的讲解要一丝不苟的去听去想。要重视程序的模块化,修改的方便,也要注重程序的调试,掌握其方法。硬件的设计跟焊接都要我们自己动手去焊,软件的编程也要我们不断的调试,最终一个能完成课程设计的劳动成果出来了。 在实训过程中,也暴露了许多问题. 不够细心焊错了线,由于对课本理论的不熟悉导致编程出现错误等等.但我们必须有有足够的挑战困难的勇气. 通过这两周的实训,我学习到了很多从前没有接触过的知识,使我眼界打开,感受颇深。基本的动手能力是一切工作和创造的基础和必要条件。 通过实训,同学们的友谊也增进了不少,很多不太懂的地方在同学们的帮助下完成了。 我们兢兢业业的老师,他们也顶着酷热和我们一起忙活,看着围在他身边的那一圈圈的人,他也总会耐心的为我们讲解,直到我们听懂为止。 最后我希望我们班能在以后的生活、学习中表现得更出色,更团结。老师们能够笑脸常开,万事如意!

相关主题