单片机课程设计报告4intpWord文档格式.docx
《单片机课程设计报告4intpWord文档格式.docx》由会员分享,可在线阅读,更多相关《单片机课程设计报告4intpWord文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
![单片机课程设计报告4intpWord文档格式.docx](https://file1.bdocx.com/fileroot1/2023-1/8/a4248805-6bee-4bd3-8ad4-4c182ce0cd7d/a4248805-6bee-4bd3-8ad4-4c182ce0cd7d1.gif)
抢答器不仅考验选手的反应速度同时也要求选手具备足够的知识面和一定的勇气,选手们都站在同一个起跑线上,体现了公平公正的原则。
1.2抢答器的意义
本系统采用单片机作为整个控制核心。
控制系统的四个模块为:
显示模块、存储模块、抢答开关,总开关模块。
该系统通过一个自锁按键输入抢答信号;
利用一个数码管来完成显示功能;
用按键来让选手进行抢答,在数码管上显示哪一组先答题的,从而实现整个抢答过程。
在知识比赛中,特别是做抢答题目的时候,在抢答过程中,为了知道哪一组或哪一位选手先答题,必须要设计一个系统来完成这个任务。
如果在抢答中,靠视觉是很难判断出哪组先答题。
利用单片机系统来设计抢答器,使以上问题得以解决,即使两组的抢答时间相差几微秒,也可分辨出哪组优先答题。
相对于类似电视台这类花几万元采购的抢答器系统,如果个人组织小型的抢答比赛,这毕竟不合适,但是依靠单片机的低成本,低功耗,可以很好的解决个人用户需要举办小型抢答比赛的需求,而且精度高,操作性好。
第2章设计概述
2.1抢答器的工作原理
抢答器的工作原理是采用单片机最小系统,用中断式键盘进行抢答。
采用动态显示组号。
主持人按下开始抢答键才可以抢答。
主持人没有按下开始抢答按纽(P3.0),各组人员无法抢答,主持人按下开始抢答按纽(P3.0),数码管10秒倒计时(10秒内抢答有效),如果有人按下按键,程序就会判断是谁先按下的,然后数码显示管就会显示抢答成功选手的号码,并封锁键盘,数码管显示当前选手的编号,禁止其他人按键的输入,从而实现了抢答的功能。
如果在设定的时间中没有一个人按下按键,一到时间,则倒计时停止,不可以抢答。
抢答成功后。
当要进行下一次的抢答时,由主持人抬起自锁按键,主程序再次进入初始化,进入下一次抢答的就绪状态。
2.2设计任务
(1)多路数字抢答器的硬件和软件设计;
(2)分析电路图;
(3)画出程序流程图;
(4)编写代码;
(5)程序分析与调试;
第3章系统硬件电路设计
3.1AT89C51单片机硬件电路
单片机(SCM)是单片微型计算机(SingleChipMicrocomputer)的简称。
它是把中央处理器CPU、随机存储器RAM、只读存储器ROM、I/O接口电路、定时/计数器以及输入输出适配器都集成在一块芯片上,构成一个完整的微型计算机。
它的最大优点是体积小,可放在仪表内部,但存储量小,输入输出适配器简单,功能较低[2]。
目前,单片机在民用和工业测控领域得到最广泛的应用,早已深深地融入人们的生活中。
近年来,AT89C51在我国非常流行,它最大的特点是内部有可以多次重复编程的ROM,并且ROM可以直接用编程器来擦写,使用起来比较方便。
本设计使用到的元器件包括:
AT89C51芯片、LED二极管、七段LED数码管的译码。
其中AT89C51是系统的核心,它主要负责控制各个部分的协调工作。
在其外围接上复位电路,数码管,LED二极管,按钮以及振荡器,P1口为8个LED二极管,P2.1-P2.7为抢答输入键接口,数码管段选P0口,位选P3.5和P3.4口。
3.2原理及电路总框图
图3.1抢答器原理框图
图3.2抢答器总原理图
第4章系统软件设计
4.1主程序设计
单片机通电以后,2位数码管显示数字“10”此时自锁开关为打开状态,任何选手的按键都无效,8个LED等长灭,当自锁开关闭合后,数码管开始”10-0”的10秒倒计时,在10秒内任意选手抢答,数码管会立即显示对应选手的号码,对应号码的LED灯也会亮起,此时任何选手的按键都无效。
若10秒内无选手抢答,则倒计时完毕以后数码管显示“00”,LED全灭,任意选手按键无效。
在任意时候打开自锁开关,则程序初始化,再次按下时可再次抢答
4.2子程序设计
4.2.1数码管显示电路
LED数码管,实现七段数码管的显示二位十进制数。
来进行倒计时,即来限制抢答的时间。
由于本次课设选用的共阳接法所以对应的段码表如下
表4-1共阳接法数码管段码表
0xc0
0xf9
0xa4
0xb0
0x99
0x92
0x82
0xf8
0x80
0x90;
1
2
3
4
5
6
7
8
9
4.2.2键盘扫描段码表
本次键盘扫描程序采用的是行列翻转法扫描键盘,即先置行为0,读列值,存在变量1中,然后把列置为0,读行值,存在变量2中,把变量1和变量2相加即为按键对应的键值,下表为相应按键对应的键值
表4-2行列翻转法键盘键值表
0xb7
0xbb
0xbd
0xbe
0xd7
0xdb
0xdd
0xde
S1
S2
S3
S4
S5
S6
S7
S8
4.3系统流程图
4.3.1系统主程序流程图
4.3.2系统中断程序流程图
N
Y
Y
图4.1系统主程序流程图
N
图4.2抢答器中断系统流程图
4.4源程序代码
#include<
reg51.h>
sbitp3_0=P3^0;
sbitp3_4=P3^4;
sbitp3_5=P3^5;
unsignedcharkey,num;
unsignedcharx,y;
unsignedcharcount;
unsignedcharkeycode;
unsignedcharLED_T[10]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff};
//P1口LED表
flag=0;
start=0;
flagl=0;
voiddelay()//延时
{
unsignedinti;
i=500;
while(i--);
}
intkeyscan()//键盘扫描
unsignedcharread,recode,keyvalue;
P2=0xf0;
read=P2;
if(read!
=0xf0)
{
delay();
if(read!
{
P2=0x0f;
recode=P2;
keyvalue=read+recode;
returnkeyvalue;
}
}
return0;
voiddisplay()//显示
unsignedcharcodeTable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//数码管段码表
switch(num)
case0:
{x=0;
y=0;
break;
case1:
{x=1;
case2:
{x=2;
case3:
{x=3;
case4:
{x=4;
case5:
{x=5;
case6:
{x=6;
case7:
{x=7;
case8:
{x=8;
case9:
{x=9;
case10:
y=1;
p3_4=0;
p3_5=0;
P0=Table[x];
p3_5=1;
delay();
P0=Table[y];
p3_4=1;
unsignedchardecode()//解码按键
switch(key)
case0xb7:
return1;
case0xbb:
return2;
case0xbd:
return3;
case0xbe:
return4;
case0xd7:
return5;
case0xdb:
return6;
case0xdd:
return7;
case0xde:
return8;
voidmain()
while
(1)
while(start==0)//P3.0自锁开关按下,程序跳出循环,开始初始化中断
num=10;
P1=LED_T[9];
display();
if(p3_0==0)
start=1;
EA=1;
TMOD=0x01;
TH0=0xd8;
TL0=0xf0;
ET0=1;
TR0=1;
count=100;
num=9;
while(flag==0&
&
p3_0==0)//flag=0且P3.0按下时执行此循环
if(flagl==1)//若中断里检测到按键,P1口对应LED亮起
P1=LED_T[num-1];
display();
start=0;
flag=0;
flagl=0;
voidtimer_1(void)interrupt1
TH0=0xD8;
if(p3_0==1)//中断途中抬起P3.0自锁开关,关中断
TR0=0;
flag=0;
key=keyscan();
//检测到按键,解码按键至对应case,并且显示对应数字,关中断,防止再次进入中断,保证锁住状态
if(key!
=0)
num=decode();
flagl=1;
count--;
//10秒倒计时
if(count==0)
num--;
if(num==0)
count=100;
第5章结束语
制作此次试验,开始很苦恼,无从下手。
后来和同组同学讨论,决定首先借助于网络资料。
网络上的资源大多并不完善,甚至有些根本看不懂。
此时真的恩头疼。
于是回想之前实验课上所学习的知识,寻找借鉴例题。
零零散散下载摘录很多东西。
又结合抢答比赛的实际应用,开始起草最初的设计草案。
想法很多,设计也几近完整,然而很多功能却无法实现。
于是小组讨论决定按照草案一步步依次解决,边解决边定稿最后设计方案。
中间遇到很多问题,困难。
这时我们才了解到对知识的掌握还有许多的生疏和欠缺。
然而此时后悔已经于事无补。
我们只能不停在网络上搜索查找学习,尽量弥补自身知识的不足。
渐渐完善此设计.这次课程设计让我充分理解了89C51芯片的工作原理,知道了抢答器的硬件和软件的实现过程,并且通过自己动手编写程序来控制抢答器的工作,我感到非常有成就感,也锻炼了我的编程能力。
在此我非常要感谢的是我的指导老师高桂革老师和我们小组的各个成员们,感谢老师和组长徐宇峰同学的细心认真的辅导和帮助,让我学到了许多原来不知道的知识。
这次课程设计能够顺利的完成,当然有我个人的努力,但同时也离不开指导老师的答疑解惑和同学的帮助。
参考文献
[1]宋彩礼等.《单片机原理与C51编程》.西安交通大学出版社2008年
[2]李泉溪.《单片机原理与应用实例仿真》.北京航天航空大学出版社2009年
[3]江世明.《基于Proteus的单片机应用技术》.电子工业出版社2008年
[4]喻宗泉.《单片机原理与应用技术》.西安电子科技大学出版社2005年
[5]万光毅.《单片机实验与实践教程》.北京航天航空大学出版社2003年