基于51单片机的无线篮球计分器.docx
- 文档编号:30400830
- 上传时间:2023-08-14
- 格式:DOCX
- 页数:22
- 大小:1.10MB
基于51单片机的无线篮球计分器.docx
《基于51单片机的无线篮球计分器.docx》由会员分享,可在线阅读,更多相关《基于51单片机的无线篮球计分器.docx(22页珍藏版)》请在冰豆网上搜索。
基于51单片机的无线篮球计分器
单片机课程设计
基于51单片机的无线篮球计分器设计
专业年级:
2012级电气工程及其自动化
参与成员:
邹勇(P1*******4)尚阿琪(P1*******5)
刘甜甜(P1*******5)马辉(P1*******7)
张大为(P1*******5)贾双梅(P1*******5)
指导老师:
黄靖涛
摘要
目前,随着人民生活条件的改善以及对各种比赛项目的热爱和欣赏,采取有线机器来进行记分的中小型比赛也开始减少,取而代之的是利用无线控制进行记分。
无线记分系统不再沿用过去的记分功能,而是利用无线发送与接收的形式工作,既节省了材料费用,也使记分器工作的时候比较不受约束,且可以任意挪动。
因此为了使记分更加方便并且记分设备的携带更加便捷,无线记分设备在国内外的研究都变得更加广泛和深入。
本文主要设计了一个基于CC1101模块的无线记分器,采用的是STC89C52芯片,来进一步研究射频收发模块与单片机的结合,并实现无线记分功能。
本设计的无线记分器分别由记录端和接收显示端这两部分构成。
记录端由单片机最小系统、CC1101无线发射模块、按键、指示灯等组成,单片机读取按键后把数据利用CC1101无线发射模块发送给接收显示端进行显示。
接收显示端由单片机最小系统、CC1101无线接收模块、四位数码显示模块等组成,无线接收模块将接收的数据送单片机处理后,再将数据由数码管显示出来。
根据该无线记分器的设计框图,进行材料的选购以及硬件的搭建,并用C语言编写程序实现记分功能,分别利用四个功能按键控制A、B两队的加分和减分,在记录端数码管上显示加分或者减分,在接收端数码管上显示两队的比分情况。
关键词:
无线;射频收发模块;记分器
目录
摘要2
一、系统方案设计4
1.1系统构成框图及基本功能介绍4
1.2系统各部分简介4
二、硬件电路设计5
2.151单片机最小系统5
2.2无线收发部分6
2.2.1CC1101模块简介6
2.2.2无线模块单片机接口7
2.374HC573芯片介绍7
2.4触摸按键介绍8
2.5数码管模块介绍9
2.6各模块连接概述10
三、软件设计11
3.1软件设计综述11
3.2C程序设计12
四、硬件搭建及测试12
4.1程序的编写及烧录12
4.2硬件测试13
总结14
附录15
附录1C程序设计15
附录2硬件调试效果图19
一、系统方案设计
1.1系统构成框图及基本功能介绍
本设计主要采用STC89C52单片机制造而成,由无线发送模块和无线接收模块组成无线收发系统,按键区采用TTP226触摸按键,设置四个功能按键,分别控制A、B两队的加减分情况,显示区分为两个部分,一部分由一组四位数码管模块形成,处于发送端显示加或减的功能;另一部分由一组八位数码管模块形成,处于接收端显示A、B两队比分情况。
同时,采用74HC573锁存控制器来控制数据在数码管上的输出。
系统构成框图如图1-1所示。
图1-1系统构成框图
1.2系统各部分简介
(1)单片机数据在数码管上的显示。
单片机的工作电压为5V,如果直接将数码管与单片机连接,则会导致电压不够,数码管显示不清。
本设计中主要是采取在单片机与数码管之间连接了74HC573芯片,使得数码管上成功显示加减分以及A、B两队的比分情况,该芯片起到了电流放大以及程序锁存的作用。
(2)CC1101无线模块的电源输入。
由于该模块工作于1.8-3.6V电源电压之间,故采用3.3V电源稳压模块对其进行稳压,从而使该无线模块可以正常工作。
(3)CC1101无线发送与接收模块之间信息的传送。
CC1101的发送器部分是基于RF频率直接合成的,将一个晶体连接至XOSC_Q1和XOSC_Q2。
由晶体振荡器产生合成器的参考频率,以及ADC和数字部件的时钟,同时以一个四线的串行外设接口来进行配置和存取数据缓冲器。
另一方面,CC1101中具有一个低功耗中频接收机。
低噪声放大器将接收到的射频信号放大,并在进行积分求取的过程中降压转换至中频。
在IF下,I/Q信号被模拟数字转换器数字化,而且均以数字形式完成自动增益控制、精确信道滤波、调制解调位和数据包同步。
二、硬件电路设计
2.151单片机最小系统
图2-1STC89C52单片机最小系统
本设计主要采用的是STC89C52芯片。
该芯片是由STC公司出产的一款性能强,功耗低,具有8K在系统可编程Flash存储器的八位微控制器。
STC89C52芯片具备了传统51单片机所不具备的功能,虽然其使用的是经典的MCS-51内核,但它又做了很多的改进。
同时,STC89C52因其在单芯片上拥有8位CPU和在系统可编程Flash存储器,更是为那些嵌入式控制应用系统提供了灵活有效的解决方案。
如图2-1所示为51单片机最小系统图,它由电源部分、复位电路部分、和晶振电路组成。
2.2无线收发部分
2.2.1CC1101模块简介
CC1101是一款用于极低功耗RF应用的Sub-GHz高性能射频收发器。
其主要是针对工业方面、科技研究方面和医疗方面以及300-348MHz、387-464MHz和779-928MHz这几个频带的短距离无线通信设备。
该无线收发模块的最大传输速率可以达到500Kbps,而且在空旷的地方可达200-300米的传输距离,可以从软件方面来对波特率进行修改,具有无线唤醒等功能,支持低功率电磁波激活功能,无线唤醒处于睡眠状态的低功耗设备,灵敏度达到-110dBm,具有很高的可靠性,可广泛应用于各种场合的短距离无线通信领域。
其通常应用于300/779MHzISM/SRD频带的超低功耗无线应用、无线计量、无线告警、楼宇自动化和安全系统等[11-13]。
CC1101RF收发器集成了一个高度可配置的基带调制解调器,支持数据包的处理、突发传输、数据的缓冲、空闲信道的评估、指示链路质量以及无线唤醒等硬件方面的处理。
我们还可以通过一个串行外设接口对CC1101的重要运行参数和64字节RX和TX的先入先出数据缓存器进行控制。
CC1101在一个典型的系统中经常会与一个微控制器以及一些额外的无源组件结合应用[14-15]。
其关键特性如下:
(1)RF性能
灵敏度高且电流消耗较低,在所有可用的频率带下,具有高达+10dBm的可编程输出功率、1.2到500kBaud的可编程数据速率以及卓越的接收机选择性和阻断性能,可用频带有:
300-348MHz、387-464MHz和779-928MHz。
(2)模拟特性
支持2-FSK、GFSK、MSK以及OOK,灵活的ASK波形整形,建立时间只需90μs,能够迅速地锁定频率合成器,对于很多跳频系统都非常适用,同时利用自动频率补偿调整频率合成器到实际接收信号的中心频率,并且拥有集成的模拟温度传感器。
(3)数字特性
支持数据包导向系统、校验地址、检测同步字、灵活的数据包长度以及自动CRC处理;可用一次“突发”数据传输对所有寄存器进行编程,具有高效的串行外设接口,数字RSSI输出,可编程信道滤波器带宽,可编程载波监听指示器,可编程前导质量指示器;可用于增强随机噪声伪同步字检测的保护,支持发送前自动空闲信道评估,支持所有数据包的链路质量指示,可选数据自动白化和去白。
2.2.2无线模块单片机接口
图2-2无线模块与单片机连接图
如图2-2所示、无线模块的SI、SO、CSN、GDO0、GDO2、SCLK分别与单片机的P0.0、P0.1、P0.2、P0.3、P0.4、P0.5相连。
通过这6个I/O口与CC1101芯片SPI总线进行数据的交换,进而完成收发等功能。
2.374HC573芯片介绍
74HC573芯片是一款具有三态输出的八路锁存器,用于驱动电容相对较高或者阻抗相对较低的负载,实现缓冲寄存器、串并口以及双向总线驱动器等。
当该芯片锁存允许端,即LE端,为高逻辑电平时,输出端Q输出数据跟数据输入端D一致;当LE端为低逻辑电平时,输出端进入锁存状态,无论输入为何种电平,输出Q均保持上一次的电平状态,即保持预先设置好的数据。
74HC573芯片的输出使能端
(低电平有效),可用来设置输出口的工作状态。
当
为高电平时,无论锁存允许端和数据输入端为何种电平,输出都是高阻态。
在处于高阻态的状态时,输出端无法进行读取也不能进行驱动总线,即芯片处于不可控状态。
其芯片引脚图如图2-3所示。
图2-374HC573芯片引脚图
2.4触摸按键介绍
本次无线记分器设计采用的是一款TTP226触摸式按键,KEY1-KEY8接口与TTP226的D0-D7输入接口连接,输出接口Q0-Q7与OUT1-OUT8接口相连,将其安置在记分器的无线发射端来控制A、B两队的加减分。
这是一种接触板检测IC,一共提供了八个触摸按键,并且内含八个指示灯,每个按键对应一个指示灯,当按下某个按键时,与其对应的指示灯就会亮起,证明该按键在工作。
在软件编程的时候,设置1键为A队的加分键、2键为A队的减分键,设置3键为B队的加分键、4键为B队的减分键。
TTP226触摸式按键不再延续传统固定pad尺寸的直接按钮键,而且接触键在交直流应用中的特点是功耗较低、工作电压较宽。
其具体特点如下:
工作电压为2.0V~5.5V;在工作电压为3V时,工作电流典型值为80uA,最大值为160uA,输出刷新率约为55Hz;人体接触检测相对比较稳定,取代了传统直接切换的按键;由按键中的选项可以分别选择直接模式、矩阵模式和串行模式,直接模式下最多八个输入和八个输出。
在上电之后,TTP226触摸式按键有一段稳定时间,在此期间触碰触摸键区功能无效,TTP226的是0.8~1.0s,而且始终进行自动校准,当任何按键都不被触碰时,TTP226重新的校准周期是0.8~1.0s。
如图2-4所示TTP226触摸式按键电路原理图。
图2-4TTP226触摸式按键电路原理图
2.5数码管模块介绍
本次无线记分器设计采用一个八位数码管显示模块以及一个四位数码管显示模块来进行加、减分功能的显示以及A、B两队的比分情况。
在无线发射端设计一个四位数码管来显示加减功能,当按下A队或者B队加分键的时候,该数码管模块则显示“Add”;当按下A队或者B队减分键的时候,该数码管模块则显示“dEL”。
该四位数码管模块的电路原理图如图3-4所示。
在无线接收端设计一个八位数码管来显示A、B两队的比分情况,初始值设置为“000--000”,分别通过A、B两队的加减分键来对比分情况进行调整,如A队得50分,B队得42分,则数码管显示为“050--042”。
图2-5四位数码管模块电路原理图
2.6各模块连接概述
对于无线发送端,采用电源稳压模块对整个单片机系统进行稳压,单片机正常工作电压为5V,本设计中稳压在5.35V左右,也可以供单片机小系统正常工作。
设置单片机P2.0-P2.5接口分别与CC1101模块的SCK、MOSI、GDO2、MISO、CSN、GDO0接口相连,由于CC1101模块需要的是1.8-3.6V的电源输入,故采用3.3V电源稳压模块对无线发送模块进行稳压。
将P3.0-P3.7接口与TTP226触摸按键的OUT1-OUT8接口相连,P0.0-P0.7接口与74HC573芯片的D0-D7输入引脚相连,P2.7接口与芯片LE端相连,再将74HC573芯片的Q0-Q7输出引脚连向四位数码显示模块的A-DP接口,且将单片机P1.4-P1.7接口分别与数码显示模块的另外四个接口相连。
无线发送端电路原理图见附录2。
对于无线接收端,稳压方面与无线发送端一致,设置单片机P1.1-P1.6接口分别与CC1101模块的SCK、MOSI、GDO2、MISO、CSN、GDO0接口相连,同样由于CC1101模块需要的是1.8-3.6V的电源输入,故采用3.3V电源稳压模块对无线接收模块进行稳压。
在无线接收端设置了两个74HC573芯片,将P0.0-P0.7接口与其中一个74HC573芯片的D0-D7输入引脚相连,P2.6接口与芯片LE端相连,再将74HC573芯片的Q0-Q7输出引脚连向八位数码显示模块的A-DP接口。
而另外一个74HC573芯片的LE端与P2.7接口相连,输出接口Q0-Q7与数码显示模块的另外八个接口相连。
三、软件设计
3.1软件设计综述
本设计软件设计方面的构思方法比较简洁,容易理解,方法也比较新颖,没有复杂的程序嵌套。
程序开始时先进行初始化,定义各个端口,并且对各函数进行声明,再对按键进行扫描,查看是否有键按下,若有键按下,判断是哪个键按下,首先判断是A队评分区的按键按下,还是B队评分区的按键按下。
若判定为A队评分区的按键按下,再判断是加分键,还是减分键,若为加分键,则给A队进行加分处理;若为减分键,则给A队进行减分处理。
若判定为B队评分区的按键按下,再判断是加分键,还是减分键,若为加分键,则给B队进行加分处理;若为减分键,则给B队进行减分处理。
然后再对数码管进行扫描,加以显示;若无键按下,则不执行任何程序,直接结束。
主程序流程图如图4-1所示。
图3-1主程序流程图
3.2C程序设计
该无线记分器设计一共设置了四个功能按键分别实现A、B两队加减分功能,1号键实现A队加分功能,连续触摸即可对A队进行连续加分,为防止出现加分错误,设置2号键对A队进行减分控制;3号键实现B队加分功能,连续触摸即可对B队进行连续加分,同样,为防止出现加分错误,设置4号键对B队进行减分控制。
当按下A队或者B队加分键的时候,无线发射端上的四位数码管模块则显示“Add”;当按下A队或者B队减分键的时候,该数码管模块则显示“dEL”。
而无线接收端设计的显示A、B两队比分情况的八位数码管,初始值设置为“000--000”,分别通过A、B两队的加减分键来对比分情况进行调整,如A队得57分,B队得42分,则数码管显示为“057--042”,中间两位数码管用于显示“--”来区分A、B两队的比分。
程序见附录1。
四、硬件搭建及测试
4.1程序的编写及烧录
本次设计采用C语言进行程序编写,并使用Keil软件进行程序的编译,而软件调试主要就是根据编译时产生的错误进行查找和修改。
编写界面如4-1所示。
图4-1编写界面
程序编译操作步骤:
1、为该工程建立一个文件夹“无线发送”;
2、新建一个project文件“无线发送.uv4”,将其保存在文件夹“无线发送”中,并设置单片机型号,即目标器件为STC89C52;
3、编辑源程序,建立源文件“无线发送.c”,再保存在文件夹“无线发送”中;
4、在工程项目组中添加源文件“无线发送.c;
5、设置调试环境,选择调试模式为硬件仿真,将实物与计算机的USB连接,选择串口为COM1,设置串行口波特率为115200bps,烧录界面如图4-2所示;
图4-2烧录界面
4.2硬件测试
程序编译成功之后,启动专门用于STC系列单片机的STC-ISP软件,选择正确的单片机型号,即STC89C52,再选择编译产生的.HEX文件,设置串口为COM1,最高波特率为115200bps。
之后,使目标板处于断电状态,点击下载按钮,该软件将与单片机进行握手,此时给目标板上电,将目标程序烧录到单片机中。
然后,对实物进行检测调试。
单片机工作电压为5V左右,故用电源稳压模块对电源电压进行手动调整,并用万用表对电压进行测量,确保电源电压限定在单片机工作电压范围内。
首先,打开无线发送和接收两端的电源开关,初始值设置为“000--000”,显示效果图见附录2。
如果此时比赛开始A队得一分,触摸一下1号按键,发送端数码管显示“Add”,此时接收端数码管显示比分为“001--000”;如果之后B队又得两分,长触3号按键,发送端数码管依然显示“Add”,B队分数跳动两下,松开按键,此时接收端数码管显示比分为“001--002”。
无线记分器显示效果图见附录2。
总结
本次设计过程中也遇到了不少问题,并得到了解决,以下对其中的几个问题加以总结。
(1)CC1101无线模块在发送以及接收信号时可能受到干扰而导致不能及时向单片机系统传输数据,编写程序时采用一定的延时,来避免这种干扰。
(2)最初采购了四个共阳的二位数码管和两个共阳的四位数码管,利用这些数码管焊接之后,记分器表面布线复杂,而且由于焊接的问题导致接触不良,显示乱码,故改用焊接好的八位数码管显示模块以及四位数码管显示模块。
(3)在向数码管发送程序时,LED显示有时候会出现重影,可以在改变段的输出内容之前,先令所有的位都停止显示,即开位、送段码、延时1~5ms、关位,再下一位,就可进行消隐。
当然这次的设计中也还存在着一定的不足,比如说设计中使用的触摸按键在工作时,用手触摸A组加分按钮,就容易触碰到A组的减分按钮,导致A组的加分键和减分键指示灯同时亮起,所以如果条件允许的话,可以采用设计更好的按键模块来代替这次使用的触摸按键。
附录
附录1C程序设计
#include
#defineDataPortP0//定义数据端口程序中遇到DataPort则用P0替换
#definea1
#defineb0
sbitLATCH1=P2^7;//定义锁存使能端口段锁存
sbitLATCH2=P2^6;//位锁存
unsignedcharcodedofly_DuanMa[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//显示段码值0~9
unsignedcharcodedofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
unsignedcharTempDataA[3];//A队存储显示值的全局变量
unsignedcharTempDataB[3];//B队存储显示值的全局变量
unsignedintnumA=0;//A队要显示的数
unsignedintnumB=0;//B队要显示的数
voidDelaysmg(unsignedintt)
{
while(--t);
}
voidDisplay_flag()
{
unsignedchari;
for(i=3;i<=4;i++)
{
DataPort=0;//清空数据,避免交替重影
LATCH1=1;//段锁存
LATCH1=0;
DataPort=dofly_WeiMa[i];//取位码
LATCH2=1;//位锁存
LATCH2=0;
DataPort=0xBF;//取显示数据,段码
LATCH1=1;//段锁存
LATCH1=0;
Delaysmg(200);//扫描间隙延时
}
}
voidDisplay(unsignedcharFirstBit,unsignedcharNum,unsignedcharname)
{
unsignedchari;
for(i=0;i { DataPort=0;//清空数据,避免交替重影 LATCH1=1;//段锁存 LATCH1=0; DataPort=dofly_WeiMa[i+FirstBit-1];//取位码 LATCH2=1;//位锁存 LATCH2=0; if(name) DataPort=TempDataA[i];//取显示数据,段码 else DataPort=TempDataB[i];//取显示数据,段码 LATCH1=1;//段锁存 LATCH1=0; Delaysmg(200);//扫描间隙延时 } } voidDisplay_A() { TempDataA[0]=dofly_DuanMa[numA/1000];//分解显示信息,如要显示57,则57/10=557%10=7 TempDataA[1]=dofly_DuanMa[(numA%1000)/100]; TempDataA[2]=dofly_DuanMa[((numA%1000)%100)/10]; Display(1,3,a);//A队 Display_flag();//显示”--“ } voidDisplay_B() { TempDataB[0]=dofly_DuanMa[numB/1000];//分解显示信息,如要显示57,则57/10=557%10=7 TempDataB[1]=dofly_DuanMa[(numB%1000)/100]; TempDataB[2]=dofly_DuanMa[((numB%1000)%100)/10]; Display(6,3,b);//B队 Display_flag();//显示”--“ } #include #include #defineINT8Uunsignedchar #defineINT16Uunsignedint #defineWRITE_BURST0x40//连续写入 #defineREAD_SINGLE0x80//读 #defineREAD_BURST0xC0//连续读 #defineBYTES_IN_RXFIFO0x7F//接收缓冲区的有效字节数 #defineCRC_OK0x80//CRC校验通过位标志 //******************************************************************** sbitSCK=P1^1; sbitMOSI=P1^2; sbitGDO2=P1^3; sbitMISO=P1^4; sbitCSN=P1^5; sbitGDO0=P1^6; //******************************************************************** sbitLED=P1^0; //******************************************************************** //接收函数主函数部分 voidmain(void) { INT8Uleng=0; INT8URxBuf[8]={0}; INT8UPaTabel[8]={0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60}; CpuInit(); POWER_UP_RESET_CC1100(); halRfWriteRfSettings(); halSpiWriteBurstReg(CCxxx0_PATABLE,PaTabel,8); while (1) { leng=8;//预计接受8bytes if(halRfReceivePacket(RxBuf,&leng)) { if(RxBuf[0]==0xA2)//接收到A队加分信号 { numA=numA+1; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 无线 篮球 计分
![提示](https://static.bdocx.com/images/bang_tan.gif)