单片机实训篮球记分牌实训报告131601罗丙松资料.docx
《单片机实训篮球记分牌实训报告131601罗丙松资料.docx》由会员分享,可在线阅读,更多相关《单片机实训篮球记分牌实训报告131601罗丙松资料.docx(18页珍藏版)》请在冰点文库上搜索。
单片机实训篮球记分牌实训报告131601罗丙松资料
桂林电子科技大学
《基于单片机综合应用设计实训》报告
篮球比赛计分器设计
学院(系):
海洋信息工程学院
专业:
通信工程专业
学号:
学生姓名:
指导教师:
摘要
单片机是指一个集成在一块芯片上的完整计算机系统。
尽管他的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:
CPU、内存、内部和外部总线系统,目前大部分还会具有外存。
同时集成诸如通讯接口、定时器,实时时钟等外围设备。
而现在最强大的单片机系统甚至可以将声音、图像、网络、复杂的输入输出系统集成在一块芯片上。
本设计是采用STC89C52单片机为核心设计的一个用于赛场的篮球计分器。
显示部分为计分显示部分,采用共阴极LED显示。
计分模块分显示为“a”队和“b”队,均有三位LED实现分数显示。
显示模块采用动态扫描方式显示。
在本设计中P0口(P0.0~P0.7)作为段选口,P2(P2.0~P2.7)作为数码管位选口。
本设计共有K1~K5五个设置按钮。
K1为分数复位按钮,K2为a队加一分,K3为a队减一分,K4为b队加一分,K5为b队减一分。
设计题目具有实际实用意义,设计完成即可在实际生活活动中实用,使设计有更强的实用性和成就感。
关键词:
单片机篮球计分器数码管按键
1绪论
单片机是指一个集成在一块芯片上的完整计算机系统。
尽管他的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:
CPU、内存、内部和外部总线系统,目前大部分还会具有外存。
同时集成诸如通讯接口、定时器,实时时钟等外围设备。
而现在最强大的单片机系统甚至可以将声音、图像、网络、复杂的输入输出系统集成在一块芯片上。
单片机也被称为微控制器(Microcontroller),是因为它最早被用在工业控制领域。
单片机由芯片内仅有CPU的专用处理器发展而来。
最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。
INTEL的Z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的发展便分道扬镳。
早期的单片机都是8位或4位的。
其中最成功的是INTEL的8031,因为简单可靠而性能不错获得了很大的好评。
此后在8031上发展出了MCS51系列单片机系统。
基于这一系统的单片机系统直到现在还在广泛使用。
随着工业控制领域要求的提高,开始出现了16位单片机,但因为性价比不理想并未得到很广泛的应用。
90年代后随着消费电子产品大发展,单片机技术得到了巨大的提高。
随着INTELi960系列特别是后来的ARM系列的广泛应用,32位单片机迅速取代16位单片机的高端地位,并且进入主流市场。
而传统的8位单片机的性能也得到了飞速提高,处理能力比起80年代提高了数百倍。
目前,高端的32位单片机主频已经超过300MHz,性能直追90年代中期的专用处理器,而普通的型号出厂价格跌落至1美元,最高端的型号也只有10美元。
当代单片机系统已经不再只在裸机环境下开发和使用,大量专用的嵌入式操作系统被广泛应用在全系列的单片机上。
而在作为掌上电脑和手机核心处理的高端单片机甚至可以直接使用专用的Windows和Linux操作系统。
。
2课题背景
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。
2.1设计任务与要求
设计题目:
篮球记分牌
设计要求:
(1)3位数码管显示篮球分数
(2)通过按键进行加减分数
2.2设计目的
1.采用单片机为控制核心,把键盘和显示电路有机的结合起来,组成一个操作方便、交互性强的控制系统。
而且整个系统所包含的技术几乎包括了现本科学校控制专业所要求的知识,有利于实践教学取得最大效果。
2.系统软件采用结构化设计,具有易维护性,可以根据用户新的要求,对软件系统进行少量的修改,即可使系统功能得到一定程度的提高。
3.设计题目具有实际实用意义,设计完成即可在实际生活活动中实用,使设计有更强的实用性和成就感。
2.3设计题目的概述
本设计是采用STC89C52单片机为核心设计的一个用于赛场的篮球计分器。
本设计是采用STC89C52单片机为核心设计的一个用于赛场的篮球计分器。
显示部分为计分显示部分,采用共阴极LED显示。
计分模块分显示为“a”队和“b”队,均有三位LED实现分数显示。
显示模块采用动态扫描方式显示。
3总体设计方案
3.1设计思想
本设计是采用STC89C52单片机为核心设计的一个用于赛场的篮球计分器。
本设计是采用STC89C52单片机为核心设计的一个用于赛场的篮球计分器。
显示部分为计分显示部分,采用共阴极LED显示。
计分模块分显示为“a”队和“b”队,均有三位LED实现分数显示。
显示模块采用动态扫描方式显示。
设计中P0口(P0.0~P0.7)作为段选口,P2(P2.0~P2.7)作为数码管位选口。
本设计共有K1~K5五个设置按钮。
K1为分数复位按钮,K2为a队加一分,K3为a队减一分,K4为b队加一分,K5为b队减一分。
3.2方案论证
通过单片机的最小系统实现对电路的控制,数码管采用共阴数码管,共阴数码管公共端要接地,位选和段选都用了锁存器来驱动接于单片机的I/O口,以保证数码管的正常使用。
设计的电路提供下载接口,用5VUSB电源供电。
//P1.0~P1.3控制键
//RST(K4键)复位键
//P0.0~P0.7数码管段选
//P2.0-P2.7数码管位选
4硬件设计
4.1硬件结构及原理
4.1.1总体设计思路:
电路的核心模块是加减分和累加积分电路的设计,我们采用的总体方案是,用时钟信号电路产生的脉冲信号给加减分电路提供时钟信号,之后将加减分电路发出的信号给到软件中相对应队伍的变量上上进行总分的累加,然后在数码显示电路上显示出来。
4.1.2总体组成框图如图所示:
按键输入端
总体组成框图如图所示。
加减分按键按下
复位按键按下
已经完成程序写入的单片机
数码管显示相应分数加减后的结果
数码管显示回到初始状态
4.2单片机的选型
Atmel公司生产的AT89C51单片机是一种低功耗、低电压、高性能的8位单片机,它采用CMOS和高密度非易失性存储技术,而且其输出引脚和指令系统都与MCS-51兼容;片内的FlashROM允许在系统内改编程序或用常规的非易失性编程器来编程,内部除CPU外,还包括256字节RAM,4个8位并行I/O口,5个中断源,2个中断优先级,2个16位可编程定时计数器,AT89C51单片机是一种功能强、灵活性高且价格合理的单片机,完全满足本系统设计需要.
图中给出了AT89C51单片机的引脚分布和最小系统接法。
复位电路可以实现上电复位和按键复位两种复位方式:
上电复位电路由电容串联电阻构成,由图并结合“电容电压不能突变”的性质,可以知道,当系统一上电,RST脚将会出现高电平,并且这个高电平持续的时间由电路的RC值来决定。
典型的51单片机当RST脚的高电平持续两个机器周期以上就将复位,所以适当组合RC的取值就可以保证可靠的复位。
按键复位电路则是通过按下RESET按键拉高RST引脚电平来实现的。
晶体振荡电路由一个12MHZ石英晶振和两个30pF的电容组成,用于产生稳定的时钟脉冲信号供单片机工作。
4.3各模块的设计
4.3.1键盘输入模块的设计
据系统的控制要求,控制输入部分设置了:
分数复位按钮,为a队加一分按钮,为a队减一分按钮,为b队加一分按钮,为b队减一分按钮。
控制电路如图所示。
键盘接口按不同标准有不同分类方法,按键盘排布,可以分为独立方式(一组相互独立的键盘)和矩阵(一行列组成矩阵)方式。
此次设计只用到了5个按键,故可采用独立按键。
加减分控制、复位按钮电路部分
4.3.2分数显示模块的设计
在显示电路中,主要是利用了单片机的P0口和P2口。
采用两个共阴数码管显示。
数码管的a、b、c、d、e、f、g、h分别接P0.0~P0.7口,用于显示分数和队伍。
由于显示模块采用动态扫描方式显示,于是使用P2作为位选口通过锁存器链接相应管脚。
4.3.3系统硬件原理总图
系统硬件原理总图
4.3.4元器件清单
如表所示:
本系统所用的元器件
元器件名称
数量
电阻10K
1
电容30P
电容10U
2
1
单片机stc89c52rc
1
4位8段共阴数码管
2
74ATC573T
2
排阻4K7
1
12M晶振
1
按键开关
5
5V电源
1
导线
插针接口
若干
若干
5软件设计
主程序入口
5.1软件流程图
检测相关按键是否按下
对应变量进行运算并保存在输出变量
对应端口输出相应数据
开始
5.1.1单片机程序总体流程图
扫描按键
K2按下
K3按下
K1按下
K5按下
K4按下
A队加一分(当分数大于999时分数归零)
A队减一分一(当分数小于0时分数归零)
B队加一分(当分数大于999时分数归零)
B队加一分(当分数小于0时分数归零)
复位
数码管显示相应数据
5.1.2ISISProfessional仿真
5.2核心程序设计
单片机程序采用美国KeilSoftware公司出品的51系列兼容单片机C语言开发系统KeilC编写。
与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。
Keil采用工程方式集中管理源程序,编写单片机程序首先要建立工程,然后在工程中逐步按照设计进行编程。
5.3PCB设计
PCB的设计需要结合元件来进行,考虑到设计的整体美观性和统一性,并且由于部分元器件下方有足够空间可以将一些小元件和跳线可以设计在此类元件下走线。
为了硬件的可靠性需要将走线尽可能调粗。
同时还需尽量减少条线。
PCB详细图见附录。
PCB完成之后就可以进行电路印制以及焊接调试。
6调试
焊接完成后需要用万用表对各个焊点进行测试,测试各个是否虚焊或者相邻焊点之间是否短接,尽可能避免焊接上的错误。
在电路板刚刚焊好后,与以前制作的单片机板连接在一起,接好电路,烤入程序后发现第一个数码管的C段一直处于亮的状态,经检查后确定不是硬件出现的问题,试着重新将程序烤入单片机中,显示结果果然变得正常实践成功。
7课程设计心得体会
本设计通过分析单片机系统结构、工作原理,查阅单片机程序设计与应用相关科技文献,遵循实用、简单、可靠和低成本的原则,设计了一个具有实用意义的3位篮球计分牌。
回顾起此次单片机课程设计,从原理图到变成仿真、画PCB图,再到焊接电流以及调试收获颇多,用上了在大学中各种课程中学到的知识,如硬件认知计、大学社算机知识、单片机原理与设计等等。
同时还查阅和学习了很多资料来完善自己的设计。
这次课程设计历时二个星期左右,通过这两个星期的学习,发现了自己的很多不足,自己知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需提高。
在设计中遇到了很多编程问题,最后在老师的辛勤指导下,终于游逆而解。
同时,在老师那里我学得到很多实用的知识,在次我表示感谢!
同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!
参考文献
[1]谢维成,杨国成.单片机原理与应用及C51程序设计(第三版).北京.清华大学出版社,2014.
[2]马淑华,王凤文,张美金.单片机原理与接口技术[M].北京:
北京邮电大学出版社,2007.
[3]吴金戌,等.8051单片机实践与应用.北京:
清华大学出版社,2001,8.
致谢
附录
1原理图
2PCB图
3源程序代码
#include
#defineDIGP0
#defineSEG_ELETP2
sbitK1=P1^0;
sbitK2=P1^1;
sbitK3=P1^2;
sbitK4=P1^3;
sbitseg=P1^6;//LE,用来锁存位选,程序里面置高;
sbitplay=P1^7;//LE,用来锁存段选,程序里面置高
bitx2=0;
chara;
charb;
unsignedcharx1;
unsignedchary1,y2,y3,y4;
unsignedcharcodeDIG_CODE[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x5f,0x7c};//管子编码
unsignedcharNum=0;
unsignedcharseg_1[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
unsignedintdisp[8]={0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f};//位选
voidTimer0Configuration();
voidkey_key();
voidset_key();
/*******************************************************************************
*函数名:
main
*函数功能:
主函数
*输入:
无
*输出:
无
******************************************************************************/
voidDelay1ms(unsignedintt)//消抖程序
{
unsignedinti;
for(t;t>0;t--)
for(i=110;i>0;i--);
}
voidmain()
{
Timer0Configuration();
while
(1)
{
set_key();
}
}
voidTimer0Configuration()
{
TMOD=0X02;//选择为定时器模式,工作方式2,仅用TRX打开启动。
TH0=0X9C;//给定时器赋初值,定时100us
TL0=0X9C;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
}
/*******************************************************************************
*函数名:
DigDisplay()interrupt1
*函数功能:
中断数码管显示
*输入:
无
*输出:
无
*******************************************************************************/
voidset_key()
{
key_key();
if(y1)
{
y1=0;
a++;
if(a>999)
a=0;
}
if(y2)
{
y2=0;
a--;
if(a<0)
a=0;
}
if(y3)
{
y3=0;
b++;
if(b>999)
b=0;
}
if(y4)
{
y4=0;
b--;
if(b<0)
b=0;
}
disp[7]=DIG_CODE[11];
disp[2]=DIG_CODE[a/100];
disp[1]=DIG_CODE[a/10%10];
disp[0]=DIG_CODE[a%10];
disp[3]=DIG_CODE[10];
disp[6]=DIG_CODE[b/100];
disp[5]=DIG_CODE[b/10%10];
disp[4]=DIG_CODE[b%10];
}
voidkey_key()
{
unsignedchari;
if(K1==0)//检测按键K1是否按下
{
Delay1ms(15);//消除抖动
if(K1==0)
{
y1=1;
}
while((i<50)&&(K1==0))//检测按键是否松开