单片机课设1.docx
- 文档编号:11121771
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:23
- 大小:241.42KB
单片机课设1.docx
《单片机课设1.docx》由会员分享,可在线阅读,更多相关《单片机课设1.docx(23页珍藏版)》请在冰豆网上搜索。
单片机课设1
六路智能抢答器
一、课程设计的目的和要求
设计目的:
利用所学单片机的理论知识进行软硬件整体设计,锻炼学生理论联系实际、综合应用的能力。
一、设计内容:
设计基于单片机的6人抢答器,并编程实现其功能.
二、设备和器材:
单片机最小开发系统,中断控制器8259A一片(自选),并行接口8255A一片或8155(用单片机开发板),发光二极管12只(红,黄各6只),LED数码管若干只,按钮或按键10个,其他器件任选。
三、设计要求:
1、设计硬件接口电路,将这些外设构成一个简单的单片机应用系统,画出接口的连接图。
2、编写下列控制程序
①1—6号手中先按下按钮者,LED数码管显示其选手号码(后按下无效),且计时开始,1秒停止计时。
②由裁判掌握,若回答正确,该选手对应黄灯亮,否则红灯亮。
③回答正确时,记分牌加10分,不正确减10分(初始分100分)
二、总体设计
2.1功能介绍
1、主持人按"抢答开始"键,会有提示音,并立刻进入抢答倒计时(预设30s抢答时间),如有选手抢答,会有提示音,并会显示其号数并立刻进入回答倒计时(预设60s抢答时间),不进行抢答查询,所以只有第一个按抢答的选手有效。
倒数时间到小于5s会每秒响一下提示音。
2、如倒计时期间,主持人想停止倒计时可以随时按"停止"按键,系统会自动进入准备状态,等待主持人按"抢答开始"进入下次抢答计时。
3、如果主持人未按"抢答开始"键,而有人按了抢答按键,犯规抢答,LED上不断闪烁FF和犯规号数并响个不停,直到按下"停止"键为止。
4、P3.0为开始抢答,P3.1为停止,p1.0-p1.7为八路抢答输入数码管段选P0口,位选P2口低3位,蜂鸣器输出为P3.6口。
P3.2抢答时间调整结,P3.3回答时间调整,P3.4为时间加1调整,P3.5为时间减1调整。
5、p3.7口为主持人判断按键,按下该键记分牌加10分,回答完后若没按下该键,减十分。
2.2抢答器的工作原理
抢答器的工作原理是利用单片机的定时器T0、T1中断完成,其余状态循环调用显示子程序,用4个共阴极LED数码管来显示,用P0口作为数码管的八个段选,用P2口中的P2.0、P2.1、P2.2、作为4个数码管其中3个位选,P1口接8个按键,提供选手抢答,P3.0-P3.1两个按键,提供开始、结束。
抢答功能:
通过八路按键配合程序来实现抢答功能。
当主持人按下抢答键开始抢答后,此时任一路按下按钮均闭锁其它各路,由程序对键盘译码并显示最先按下抢答键的路数及其当前时间;如果主持人还未按下开始键,有选手按下抢答键,蜂鸣器将一直响,并显示该选手号数。
抢答限时:
主持人按下抢答键后,设置15秒为抢答时间。
若15秒内无人抢答,倒计时为0时发出报警,说明该抢答题目作废。
此时闭锁所有抢答按键,只有当主持人再次按下抢答键开始下一次抢答方可抢答。
答题限时:
当选手按下按钮时,启动倒计时,倒计时为0时发出报警,说明答题时间到。
计分显示:
由主持人判断选手回答是否正确,并按下计分按键,计分数码管显示该号选手分数。
三、硬件设计
3.1原理图的确定
单片机实现抢答的原理图:
图3-1抢答器原理图
3.2芯片的选择
抢答器电路的核心是89C51单片机,其内部带有4KB的FLASHROM,无需外扩程序存储器;抢答器没有大量的运算和暂存数据现有的128B篇内RAM已经能满足容量需求,故不需外扩片外RAM,系统配有8位8段数码显示管,管采用共阴数码管,作为时钟的显示输出。
3.3复位电路的设计
图2-2复位电路原理图
该复位电路采用上电自动复位和手动复位两种复位方式,图中网络标号所指9连接到单片机的复位引脚。
要实现复位只需在,51系列单片机的RESET引脚上加上5v的高电平就可以了。
上电复位是利用电容的充电来实现的,即上电瞬间RESET端的电位与Vcc相同,随着电容上储能增加,电容电压也逐渐增大,充电电流减小,RESET端的电位。
这样就会建立一个脉冲电压,调节电容与电阻的大小可对脉冲的持续时间进行调节。
通常若采用12MHz的晶振时,复位元件参数为10pF的电解电容和10kΩ的电阻。
按钮复位电路是通过按下复位按钮时,电源对RESET端维持两个机器周期的高电平实现复位的。
3.4晶振电路的设计
MSC-51单片机的定时控制功能是用时钟电路和振荡器完成的,而根据硬件电路的不同,连接方式分为内部时钟方式和外部时钟方式。
本设计中采用内部时钟方式。
单片机内部有一个反相放大器,XTAL1、XTAL2分别为反相放大器的输入端和输出端,外接定时反馈元件组成振荡器(内部时钟方式),产生时钟送至单片机内部各元件。
时钟频率越高,单片机控制器的控制节拍就越快,运算速度也就越快。
一般来说单片机内部有一个带反馈的线性反相放大器,外界晶振(或接陶瓷振荡器)和电容就可组成振荡器,如图2-2所示。
加电以后延时一段时间(约10ms)振荡器产生时钟,不受软件控制,图中Y1为晶振,震荡产生的时钟频率主要由Y1确定。
电容C1,C2的作用有两个:
一是帮助振荡器起振,二是对振荡器的频率起微调作用,典型值为30pF。
晶振电路的设计如图2-2所示:
图3-2晶振电路原理图
3.5数码显示管的选择
数码显示管用来作为时间的显示输出,一般用7段数码显示管。
本次设计中采用7段共阴数码显示管应用简单、可靠性高、成本低,作为显示输出。
连接时段选信号接在P0口的P0.0~P0.6七个I/O口上,P1口是准双向I/O接口在输出驱动部分具有驱动4个TTL负载的能力,即输出电流不大于400μA,所以在接电阻时选择接10kΩ限流电阻。
而在位选方面采用单片机P2口的P2.0~P2.2三个I/O口作为位选信号的输出口。
四、软件设计
4.1主程序的设计
此程序的及时采用定时器T0和T1中断完成,其余状态循环调用显示子程序。
系统主程序流程图如图3-1所示。
图4-1系统主程序流程图
4.2显示子程序的设计
由于采用软件动态扫描实现数据显示,显示用十进制BCD码的数据对应段码存放在ROM表中。
显示时,先取出70H~75H某一地址中的数据,然后查得对应的显示段码从P0口输出。
P2口将对应的数码管选中,就能显示该地址单元的数据值。
4.3定时器T0、T1中断服务程序的设计
定时器T0用于响铃程序,定时器T1用于计时程序。
当答题剩余5秒种时P3.6口不断取反使喇叭发出一定频率的声音,提示选手。
中断服务程序流程图如图3-2所示。
N
Y
N
Y
图3-2中断服务程序流程图
4.4程序清单
定时器T1时间初值
设50ms时间初值为Z,Z的计算方法为
(216-Z)×12=12×50×103,结果Z=15536D=3CB0H
OKEQU20H;抢答开始标志位
RINGEQU22H;响铃标志位
ORG0000H
AJMPMAIN
ORG0003H
AJMPINT0SUB
ORG000BH
AJMPT0INT
ORG0013H
AJMPINT1SUB
ORG001BH
AJMPT1INT
ORG0040H
MAIN:
MOVR1,#30;初设抢答时间为30s
MOVR2,#60;初设答题时间为60s
MOVTMOD,#11H;设置定时器T0/T1模式1
MOVTH0,#0F0H
MOVTL0,#0FFH;越高发声频率越高,越尖
MOVTH1,#3CH
MOVTL1,#0B0H;50ms为一次溢出中断
SETBEA
SETBET0
SETBET1
SETBEX0
SETBEX1;允许四个中断,T0/T1/INT0/INT1
CLROK
CLRRING
SETBTR1
SETBTR0;一开始就运行定时器,以开始显示FFF
=====查询程序=====
START:
MOVR5,#0BH
MOVR4,#0BH
MOVR3,#0BH
ACALLDISPLAY;未开始抢答时候显示FFF
JBP3.0,NEXT
ACALLDELAY
JBP3.0,NEXT
ACALLBARK;按键发声
MOVA,R1
MOVR6,A;送R1->R6,因为R1中保存了抢答时间
SETBOK;抢答标志位,用于COUNT只程序中判断是否查询抢答
MOVR3,#0AH;抢答只显示计时,灭号数
AJMPCOUNT;进入倒计时程序,"查询有效抢答的程序"在COUNT里面
NEXT:
JNBP1.0,FALSE1
JNBP1.1,FALSE2
JNBP1.2,FALSE3
JNBP1.3,FALSE4
JNBP1.4,FALSE5
JNBP1.5,FALSE6
JNBP1.6,TZ1
JNBP1.7,TZ2
AJMPSTART
TZ1:
JMPFALSE7
TZ2:
JMPFALSE8
=====非法抢答处理程序=====
FALSE1:
ACALLBARK;;按键发声
MOVR3,#01H
AJMPERROR
FALSE2:
ACALLBARK
MOVR3,#02H
AJMPERROR
FALSE3:
ACALLBARK
MOVR3,#03H
AJMPERROR
FALSE4:
ACALLBARK
MOVR3,#04H
AJMPERROR
FALSE5:
ACALLBARK
MOVR3,#05H
AJMPERROR
FALSE6:
ACALLBARK
MOVR3,#06H
AJMPERROR
FALSE7:
ACALLBARK
MOVR3,#07H
AJMPERROR
FALSE8:
ACALLBARK
MOVR3,#08H
AJMPERROR
=====INT0(抢答时间R1调整程序)=====
INT0SUB:
MOVA,R1
MOVB,#0AH
DIVAB
MOVR5,A
MOVR4,B
MOVR3,#0AH
ACALLDISPLAY;先在两个时间LED上显示R1
JNBP3.4,INC0;P3.4为+1s键,如按下跳到INCO
JNBP3.5,DEC0;P3.5为-1s键,如按下跳到DECO
JNBP3.1,BACK0;P3.1为确定键,如按下跳到BACKO
AJMPINT0SUB
INC0:
MOVA,R1
CJNEA,#63H,ADD0;如果不是99,R2加1,如果加到99,R1就置0,重新加起。
MOVR1,#00H
ACALLDELAY1
AJMPINT0SUB
ADD0:
INCR1
ACALLDELAY1
AJMPINT0SUB
DEC0:
MOVA,R1
JZSETR1;如果R1为0,R1就置99
DECR1
ACALLDELAY1
AJMPINT0SUB
SETR1:
MOVR1,#63H
ACALLDELAY1
AJMPINT0SUB
BACK0:
RETI
=====INT1(回答时间R2调整程序)=====
INT1SUB:
MOVA,R2
MOVB,#0AH
DIVAB
MOVR5,A
MOVR4,B
MOVR3,#0AH
ACALLDISPLAY
JNBP3.4,INC1
JNBP3.5,DEC1
JNBP3.1,BACK1
AJMPINT1SUB
INC1:
MOVA,R2
CJNEA,#63H,ADD1
MOVR2,#00H
ACALLDELAY1
AJMPINT1SUB
ADD1:
INCR2
ACALLDELAY1
AJMPINT1SUB
DEC1:
MOVA,R2
JZSETR2
DECR2
ACALLDELAY1
AJMPINT1SUB
SETR2:
MOVR2,#63H
ACALLDELAY1
AJMPINT1SUB
BACK1:
RETI
===倒计时程序(抢答倒计时和回答倒计时都跳到改程序)===
COUNT:
MOVR0,#00H;重置定时器中断次数
MOVTH1,#3CH
MOVTL1,#0B0H;重置定时器
RECOUNT:
MOVA,R6;R6保存了倒计时的时间,之前先将抢答时间或回答时间给R6
MOVB,#0AH
DIVAB;除十分出个位/十位
MOV30H,A;十位存于(30H)
MOV31H,B;个位存于(31H)
MOVR5,30H;取十位
MOVR4,31H;取个位
MOVA,R6
SUBBA,#07H
JNCLARGER;大于5s跳到LARGER,小于等于5s会提醒
MOVA,R0
CJNEA,#0AH,FULL1s中0.5s向下运行
CLRRING
AJMPCHECK
FULL:
CJNEA,#14H,CHECK下面是1s的情况,响并显示号数并清R0,重新计
SETBRING
MOVA,R6
JZQUIT;计时完毕
MOVR0,#00H
DECR6;一秒标志减1
AJMPCHECK
LARGER:
MOVA,R0
CJNEA,#14H,CHECK如果1s向下运行,否者跳到查"停/显示"
DECR6;计时一秒R6自动减1
MOVR0,#00H
CHECK:
JNBP3.1,QUIT;如按下停止键退出
ACALLDISPLAY
JBOK,ACCOUT如果是抢答倒计时,如是则查询抢答,否者跳过查询继续倒数(这里起到锁抢答作用)
AJMPRECOUNT
ACCOUT:
JNBP1.0,TRUE1
JNBP1.1,TRUE2
JNBP1.2,TRUE3
JNBP1.3,TRUE4
JNBP1.4,TRUE5
JNBP1.5,TRUE6
JNBP1.6,TZ3
JNBP1.7,TZ4
AJMPRECOUNT
TZ3:
JMPTRUE7
TZ4:
JMPTRUE8
QUIT:
CLROK;如果按下了"停止键"执行的程序
CLRRING
AJMPSTART
=====正常抢答处理程序=====
TRUE1:
ACALLBARK;按键发声
MOVA,R2
MOVR6,A;抢答时间R2送R6
MOVR3,#01H
CLROK因为答题的计时不再查询抢答,所以就锁了抢答
AJMPCOUNT
TRUE2:
ACALLBARK
MOVA,R2
MOVR6,A
MOVR3,#02H
CLROK
AJMPCOUNT
TRUE3:
ACALLBARK;
MOVA,R2
MOVR6,A
MOVR3,#03H
CLROK
AJMPCOUNT
TRUE4:
ACALLBARK;
MOVA,R2
MOVR6,A
MOVR3,#04H
CLROK
AJMPCOUNT
TRUE5:
ACALLBARK;
MOVA,R2
MOVR6,A
MOVR3,#05H
CLROK
AJMPCOUNT
TRUE6:
ACALLBARK;
MOVA,R2
MOVR6,A
MOVR3,#06H
CLROK
AJMPCOUNT
TRUE7:
ACALLBARK;
MOVA,R2
MOVR6,A
MOVR3,#07H
CLROK
AJMPCOUNT
TRUE8:
ACALLBARK;
MOVA,R2
MOVR6,A
MOVR3,#08H
CLROK
AJMPCOUNT
=====犯规抢答程序=====
ERROR:
MOVR0,#00H
MOVTH1,#3CH
MOVTL1,#0B0H
MOV34H,R3;犯规号数暂存与(34H)
HERE:
MOVA,R0
CJNEA,#0AH,FLASH;0.5s向下运行->灭并停响
CLRRING
MOVR3,#0AH
MOVR4,#0AH
MOVR5,#0AH;三灯全灭
AJMPCHECK1
FLASH:
CJNEA,#14H,CHECK1下面是1s的情况,响并显示号数并清R0,重新计
SETBRING
MOVR0,#00H
MOVR3,34H;取回号数
MOVR5,#0BH
MOVR4,#0BH;显示FF和号数
AJMPCHECK1
CHECK1:
JNBP3.1,QUIT1
ACALLDISPLAY
AJMPHERE
QUIT1:
CLRRING
CLROK
AJMPSTART
=====显示程序=====
DISPLAY:
MOVDPTR,#DAT1查表显示程序,利用P0口做段选码口输出/P2低三位做位选码输出,
MOVA,R3
MOVCA,@A+DPTR
MOVP2,#0feH
MOVP0,A
ACALLDELAY
MOVDPTR,#DAT2
MOVA,R5
MOVCA,@A+DPTR
MOVP2,#0fdH
MOVP0,A
ACALLDELAY
MOVA,R4
MOVCA,@A+DPTR
MOVP2,#0fbH
MOVP0,A
ACALLDELAY
RET
DAT1:
DB00h,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H
;"灭","1","2","3","4","5","6","7","8","9","灭","F"
DAT2:
DB3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H
;第一个为零,其他与上相同,因为十位如果为零显示熄灭
====加减时间延时(起到不会按下就加N个数)======
DELAY1:
MOV35H,#08H
LOOP0:
ACALLDISPLAY
DJNZ35H,LOOP0
RET
=====延时(显示和去抖动用到)=====
DELAY:
MOV32H,#12H
LOOP:
MOV33H,#0AFH
LOOP1:
DJNZ33H,LOOP1
DJNZ32H,LOOP
RET
=====发声程序=====
BARK:
SETBRING
ACALLDELAY1
ACALLDELAY1
CLRRING;按键发声
RET
=====TO溢出中断(响铃程序)=====
T0INT:
MOVTH0,#0ECH
MOVTL0,#0FFH
JNBRING,OUT;
CPLP3.6;RING标志位为1时候P3.6口不断取反使喇叭发出一定频率的声音
OUT:
RETI
=====T1溢出中断(计时程序)=====
T1INT:
MOVTH1,#3CH
MOVTL1,#0B0H
INCR0
RETI
END
五、使用keilc51、proteus软件调试仿真说明
试验的程序通过Keilc51软件编译,产生HEX文件.
通过Proteus进行仿真,如仿真结果所示,按下开始后,数码管开始倒计时,仿真结果如图5-1所示。
图5-1Proteus仿真的结果
当有选手按下按扭时,数码管显示选手号码并开始倒计时,如图5-2所示
图5-2Proteus仿真的结果
通过仿真结果证实,该方案可行。
该设计方案同过51系列单片机的P0口作为段选输出,用P2口作为位选输出,显示时间。
并通过接在P3.0-P3.6口的按键开关控制开始、结束、喇叭提示等功能。
P1口接选手按键,控制抢答。
本设计实现简单,成本较低很适合我们大学生动手实践。
六、结束语
经过将近一周的单片机课程设计,终于完成了六路抢答器的设计,虽然没完全达到设计要求,计分功能有些缺陷,但还是收获良多,我学会了如何在程序中找错误,如何通过单片机实现简单的功能。
单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,这锻炼了自己独立思考问题的能力和通过查看相关资料来解决问题的习惯。
还有了解了课程设计的一般步骤,和设计中应注意的问题。
从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单片机更是如此,写程序的能力只有在经常的写,调式,观察,再写,再调反复的过程中才能提高,这就是我在这次课程设计中的最大收获。
七、参考文献
[1]李朝青.单片机原理及接口技术.北京:
航空航天大学出版社.2005.
[2]周润景、张丽娜.基与PROTEUS的电路及单片机仿真.北京:
航空航天大学出版社,2009.
[3]胡耀辉、朱朝华等.单片机系统开发实例经典.北京:
冶金工业出版社.2006.
[4]张迎新.单片机初级教程.北京:
航空航天大学出版社,2007.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机