单片机表决器实训报告.docx
- 文档编号:7056045
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:13
- 大小:180.38KB
单片机表决器实训报告.docx
《单片机表决器实训报告.docx》由会员分享,可在线阅读,更多相关《单片机表决器实训报告.docx(13页珍藏版)》请在冰豆网上搜索。
单片机表决器实训报告
目录
一.设计题目1
二.方案设计1
三.硬件设计2
2.元件参数2
3.电路图如图所示2
4.电路的工作原理3
5.元件明细3
四.软件设计4
1软件设计思路4
2程序流程图4
3总体框架结构介绍5
4软件的总体6
5程序段事例6
6程序清单6
五.制作调试9
六.心得体会10
七.参考文献10
一.设计题目
利用AT89S51单片机设计并制作会议表决计票器电路。
要求如下:
可供5~7个人进行表决,每个人有一个同意和一个反对按键,表决时两个按键先被按下的有效,若再按另一个键将清除前一次按键的效能,每次表决每个按键只是第一次按下的有效,多按次数无效,除非前一次按键的效能被清除或未生效。
会议主持人通过按键控制表决开始和结束,黄色指示灯亮代表投票开始,示意可以开始表决,同时清除前一次投票结果。
同意多余反对,点亮绿色指示灯,反之点亮红色指示灯。
在实现上述功能的基础上增加同意和反对的票数。
二.方案设计
1要实现供5人的表决器,每个人需要一个“同意”按键和一个“反对”按键,故意人需要两个按键表决两个先按下的一个有效,多按的次数无效,由于是用于单片机表决器,而单片机的硬件电路与软件设计相结合的一种电路设计,因此在引硬件电路只能实按键的按下与释放,不能智能的实现检测按键被按下几次,因此该部分克用软件的汇编来实现其功能。
2主持人通过按键来控制表决的开始与结束,可有两个外部中断来实现,按下外部中断0的按键式表示表决开始,黄灯亮,按下外部中断1是表示表决结束,黄灯灭;当表决结束厚统计“同意”和“反对”的票数,“同意”的票数大于“反对”的票数时,绿灯被点亮,“同意”的票数小于“反对”的票数时,红灯被点亮,“同意”的票数等于“反对”的票数时,红灯绿灯都被点亮。
3在扩展时加上了同意数和反对数的显示,可以通过两个数码管,一个显示同意书,一个显示反对数。
三.硬件设计
为设计的是5人表决器,参加表决的人总的需要10个按键,没人两个,“赞成”和“反对”,分
对应高电平和低电平,高电平的按键一端接单片机一端接VCC,低电平的按键一端接单片机,一端接地。
由于单片机内部的P1口语P2口都有上拉电阻。
所以一般选用P1口或P2口,再次我选用P2口做为输入端口。
又由于表决的开始与结束是有主持人通过按键来控制的,因此还需要两个按键来表示表决的开始与结束,因此可采用外部中断0与外部中断1来控制表决的开始与结束,故总设计需要按键12个。
设计中要求有三盏灯,分别为黄灯,绿灯和红灯,三盏灯用于输出显示,因此可以用单片机的I/O口输出,可以用P2口最为输出口,还需要一盏灯检测单片机是否上电接在单片机VCC处,所以总共需要4盏灯。
在扩展时加上了显示“反对”或“赞成”的票数,也属于输出显示,可以通过接上电阻在接上数码管显示
2.元件参数
设计中要求有4盏灯,一盏作输出显示,一盏作上电显示,有与接上的电压为+5V,二极管的压降2V,所以必须接上限流电阻,在此我选用510欧的限流电阻,再将单片机的最小系统加入电路,还需要接上数码管,由P0.0~P0.7分别送出LED的a-dp显示字段码,P2.7和P2.6则输出字位码,用来控制第几位显示。
LED共阳极。
3.电路图如图所示
4.电路的工作原理
此电路是基于硬件电路,应用汇编语言设计出它的工作流程,硬件电路时用软件程序来检测表决开始是否被按下,如果开始键被按下,则通过软件汇编来检测表决的按键是否赞成或反对或无效,然后再检测结束按键是否被按下,如果反对按键被按下,则表示表决技术,再通过P0口输出在数码管上显示投票结果。
5.元件明细
元件名称
元件数目
元件型号
元件参数
备注
按键开关
12个
接对角线
电容
3个
一个电解电容,两个瓷片电容
电解电容22uf,瓷片电容30uf
电解电容长脚为正,此片无正负之分
发光二极管
4个
一红,一绿,一黄,其他
显示灯
晶振
1个
12M
内部时钟电路
电阻
19
7个510欧,12个470欧,1个10K欧
用于限流
单片机芯片
1片
AT89S51
40脚
电源插头
1个
数码管
1个
10脚有两个com端
三极管
1个
S9012
各元件的作用:
开关:
十个分别用于5个人的同意与反对按键,两个用于主持人的开始于结束按键。
电容:
用于单片机的最小系统中。
发光二级管:
用于显示表决开始,结束,赞成,反对和上电与否。
电阻:
用来限制电流。
单片机芯片:
实现软件的编程与烧写。
数码管:
显示赞成与反对票数。
电源插头:
用于接外接电源。
四.软件设计
1软件设计思路
在硬件电路中,由于硬件电路中显示灯是接在P2口的三个端口,用于输出,且二极管为共阳极的接法,则单片机的程序设计中要是灯亮必须为低电平有效,由于程序中用到中断源,所以要打开中断源;模块设计时可用查询方式检测开始按键是否被按下,如果按下测黄灯点亮,开始此奥巨额,再用查询方式检测刻个按键是否被按下,如果按下则检测对应的反对按键是否被按下,则表示无效即为弃权,跳转到下一个按键检测程序继续检测,一次检测各个按键的情况,检测对应的同意或反对时,相应的同意数或反对数加一,数码管的初始显示设置为0,用外部中断1来表示结束按键,当中断来临时取出同意与反对的统计数进行比较,比较后点亮相应的显示灯。
2程序流程图
3总体框架结构介绍
初始化模块:
对系统进行初始化,由于程序中有中断源,因此打开相应的中断也放在程序的初始化模块中;
检测开始按键:
检测开始按键是否被按下,按下则开始执行循环检测同意与反对按键,为消除按键抖动,此处应调用延时程序;
循环检测同意、反对按键:
循环检测同意、反对按键是否被按下,同时统计同意数与反对数,然后等待中断到来;
延时程序:
用于小穿件的机器抖动,调用的延时程序为0.5s;
中断处理:
当中断源到来,首先熄灭黄灯,然后将同意总数与反对总数进行比较,并点亮相应的显示灯,将票数在数码管中显示出来。
4软件的总体
(1)用于检测开始按键是否被按下,按下则表示表决按键按下才有效,即开始表决;
(2)开始表决后循环检测对应的同意与反对按键是否被按下,并统计同意数与反对数;
(3)等待中断,等待结束按键按键被按下,在中断处理中将同意与反对数进行比较,
(4)亮相应的显示灯,送入数码管显示出来。
5程序段事例
在此升序中关键是开中断,只有先开中断程序才能继续执行,否侧将进入死循环
SETBEA;开中断
SETBEX1;开外部中断1
SETBIT1;设置外部中断1为边缘触发方式
JBP3.2,$
6程序清单
ORG0000H
AJMPMAIN;转主程序
ORG0013H;外部中断1的入口地址
AJMPINT_1;跳转到中断
ORG0100H
MAIN:
MOVSP,#60H;给地址指针赋初值
MOVA,#OFFH
MOVP1,A;给P1口赋初值
MOVP2,A;给P2口赋初值
MOVP0,A;给P0口赋初值
SETBEA;开中断
SETBEX1;开外部中断1
SETBIT1;设置外部中断1为边缘触发方式
JBP3.2,$;等待外部中断0上的按键按下
LCALLDEL05S;调用延时程序
JNBP3.2,$;等待按键弹起
CLRP2.0;点亮黄灯
L01:
JBP1.4,L11;判断按键P1.4口上的按键是否被按下
JNBP1.4,$;等待按键弹起
JNBP1.4,L11;检测对应的反对按键是否被按下
LCALLDEL05S;调用延时程序
MOV21H,#00H
MOVA,21H;21H中存储第一个同意按键的按下数
INCA;对211地址单元中的值加1
MOVB,A
MOVA,#01H
CJNEA,B,L11;将寄存器A中的值与1中的比较,保证只有第一次按下才有效
MOV21H,A;21H中存储第一个反对按键的按下数
MOV31H,#00H
MOVA,31H
INCA;对31H中的同意数加1
MOV31H,A
L11:
JBP1.3,L12;检测按键是否被按下
JNBP1.3,$;等待按键弹起
JNBP1.3,L12;检测对应的反对按键是否被按下
LCALLDEL05S
MOV22H,#00H
MOVA,22H
INCA
MOVB,A
CJNEA,B,L12
MOV22H,A
MOVA,31H
INCA
MOV31H,A
L12:
JBP1.2,L13
JNBP1.2,$
JNBP2.2,L13
LCALLDEL05S
MOV23H,#00H
MOVA,23H
INCA
MOVB,A
CJNEA,B,L13
MOV23H,A
MOVA,31H
INCA
MOV31H,A
L13:
JBP1.1,L14
JNBP1.1,$
JNBP1.1,L14
LCALLDEL05S
MOV24H,#00H
MOVA,24H
INCA
MOVB,A
CJNEA,B,L14
MOV24H,A
MOVA,31H
INCA
MOV31H,A
L14:
JBP1.0,S0
JNBP1.0,$
JNBP1.0,S0
LCALLDEL05S
MOV25H,#00H
MOVA,25H
INCA
MOVB,A
CJNEA,B,S0
MOV25H,A
MOVA,31H
INCA
MOV31H,A
S0:
JBP1.4,S1
JNBP1.4,$
JNBP1.4,S1
LCALLDEL05S
MOV26H,#00H
MOVA,26H
INCA
MOVB,A
CJNEA,B,S1
MOV26H,A
MOV32H,#00H
MOVA,32H
INCA
MOV32H,A
S1:
JBP1.3,S2
JNBP1.3,$
JNBP1.3,S2
LCALLDEL05S
MOV27H,#00H
MOVA,27H
INCA
MOVB,A
CJNEA,B,S2
MOV27H,A
MOVA,32H
INCA
MOV32H,A
S2:
JBP1.2,S3
JNBP1.2,$
JNBP1.2,S3
LCALLDEL05S
MOV28H,#00H
MOVA,28H
INCA
MOVB,A
CJNEA,B,S3
MOV28H,A
MOVA,32H
INCA
MOV32H,A
S3:
JBP1.1,S4
JNBP1.1,$
JNBP1.1,S4
LCALLDEL05S
MOV29H,#00H
MOVA,29H
INCA
MOVB,A
CJNEA,B,S4
MOV29H,A
MOVA,32H
INCA
MOV32H,A
S4:
JBP1.0,RT
JNBP1.0,$
JNBP1.0,RT
LCALLDEL05S
MOV30H,#00H
MOVA,30H
INCA
MOVB,A
CJNEA,B,RT
MOV30H,A
MOVA,32H
INCA
MOV32H,A
RT:
AJMPL10;跳转到L0程序循环检测各个按键是否被按下
DEL05S:
MOVTMOD,#10H;定时器T1,方式1
MOVTL1,#0DCH;送计数初值,保证定时时间为125ms
MOVR2,#4;设置软计数器,使4*125ms=0.5s
SETBTR1;启动定时计数器
LOOP:
JNBTF1,$;等待1ms定时到
MOVTL1,#0BH
CLRTF1;清除溢出标志位,以便下次判断
DJNZR2,LOOP;等待0.5s延时到
CLRTR1;关闭定时器1
RET;延时程序返回
INT_1:
SETBP2.0;熄灭黄灯
MOVA,31H
MOVB,A
MOVA,32H
CLRP0.0
CJNEA,B,LP;比较同意数与反对数的大小
MOVP0,#00H;三个显示灯同时点亮
SJMPOUT;跳转到out程序
LP:
JCGREEN;判断溢出标志位Cy
CLRP0.0;点亮绿灯
SJMPOUT;跳转到out程序
GREEN:
CLRP0.2;点亮红灯
OUT:
NOP;空操作指令
RETI;中断返回
END
数码管显示程序清单:
ORG0000HLOOP:
MOVR2,#0MOVR7,#13L0:
MOVR4,#7FHMOVDPTR,#TABL1:
MOVA,R2MOVCA,@A+DPTRMOVP0,AMOVA,R4MOVP2,AACALLDEL1SINCR2JNBACC.4,L0RRAMOVR4,ADJNZR7,L1SJMPLOOPTAB:
DB0C0H,0F9H,0A4H,0B0HDB99H,92H,82H,0F8HDB80H,90H,88H,83HDB0C6H,0A1H,86H,8EH,0FFHDEL1S:
MOVR3,10DEL1:
MOVR4,#50DEL2:
MOVR5,#60DEL3:
DJNZR5,DEL3NOPDJNZR4,DEL2DJNZR3,DEL1RETEND
五.制作调试
将所设计的硬件电路焊接好,然后根据硬件电力路的今本要求画出软件编程的流程图,然后根据流程图中的各个模块编写相应的模块程序,最后将各个模块综合起来构成所设计的程序。
应当注意当按下开关时,接的是低电平,因此在编辑程序时不要弄反以免出现错误。
六.心得体会
通过此单片机课题的选定,编程,调试,仿真到最后完成论文,心情是喜悦并且激动的,觉得做好一件事情并不是那么容易,关键是要看你对这件事情的态度问题,通过这次课题实验,我也对单片机这门课有了更加深刻的认识,它的用途,它的功能,它的方便之处,都通过这几天的研究得到了体会,而且对知识的巩固也起到了一定的作用。
这次论文课题的编写,还有一个重要的认识就是,要学好一门课很容易,但是要真正能把它运动到实际中就难了,掌握一定的理论知识并且会做题还不够,关键是要怎么样去利用,所以,在今后的学习生活中,我要学会学以致用。
另外,单片机是建立在C语言的基础之上,因此可知大学所学的课程时相互关联的,学好每一门课是非常重要的,作为物理专业的同学,我们更应该熟练操作并且掌握好这门功课,这对以后的不管是毕业论文还是所学知识都是很有帮助的。
七.参考文献
《单片机原理及接口技术》胡键主编机械工程出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 表决器 报告