基于51单片机的无线篮球计分器设计.docx
《基于51单片机的无线篮球计分器设计.docx》由会员分享,可在线阅读,更多相关《基于51单片机的无线篮球计分器设计.docx(21页珍藏版)》请在冰豆网上搜索。
基于51单片机的无线篮球计分器设计
单片机课程设计
基于51单片机的无线篮球计分器设计
专业年级:
2012级电气工程及其自动化
参与成员:
邹勇(P4)尚阿琪(P5)
刘甜甜(P5)马辉(P7)
张大为(P5)贾双梅(P5)
指导教师:
黄靖涛
摘要
目前,随着人民生活条件的改善和对各类竞赛项目的酷爱和欣赏,采取有线机械来进行记分的中小型竞赛也开始减少,取而代之的是利用无线操纵进行记分。
无线记分系统再也不沿用过去的记分功能,而是利用无线发送与接收的形式工作,既节省了材料费用,也使记分器工作的时候比较不受约束,且能够任意移动。
因此为了使记分加倍方便而且记分设备的携带加倍便利,无线记分设备在国内外的研究都变得加倍普遍和深切。
本文要紧设计了一个基于CC1101模块的无线记分器,采纳的是STC89C52芯片,来进一步研究射频收发模块与单片机的结合,并实现无线记分功能。
本设计的无线记分器别离由记录端和接收显示端这两部份组成。
记录端由单片机最小系统、CC1101无线发射模块、按键、指示灯等组成,单片机读取按键后把数据利用CC1101无线发射模块发送给接收显示端进行显示。
接收显示端由单片机最小系统、CC1101无线接收模块、四位数码显示模块等组成,无线接收模块将接收的数据送单片机处置后,再将数据由数码管显示出来。
依照该无线记分器的设计框图,进行材料的选购和硬件的搭建,并用C语言编写程序实现记分功能,别离利用四个功能按键操纵A、B两队的加分和减分,在记录端数码管上显示加分或减分,在接收端数码管上显示两队的比分情形。
关键词:
无线;射频收发模块;记分器
一、系统方案设计
系统组成框图及大体功能介绍
本设计要紧采纳STC89C52单片机制造而成,由无线发送模块和无线接收模块组成无线收发系统,按键区采纳TTP226触摸按键,设置四个功能按键,别离操纵A、B两队的加减分情形,显示区分为两个部份,一部份由一组四位数码管模块形成,处于发送端显示加或减的功能;另一部份由一组八位数码管模块形成,处于接收端显示A、B两队比分情形。
同时,采纳74HC573锁存操纵器来操纵数据在数码管上的输出。
系统组成框图如图1-1所示。
图1-1系统组成框图
系统各部份简介
(1)单片机数据在数码管上的显示。
单片机的工作电压为5V,若是直接将数码管与单片机连接,那么会致使电压不够,数码管显示不清。
本设计中主若是采取在单片机与数码管之间连接了74HC573芯片,使得数码管上成功显示加减分和A、B两队的比分情形,该芯片起到了电流放大和程序锁存的作用。
(2)CC1101无线模块的电源输入。
由于该模块工作于电源电压之间,故采纳电源稳压模块对其进行稳压,从而使该无线模块能够正常工作。
(3)CC1101无线发送与接收模块之间信息的传送。
CC1101的发送器部份是基于RF频率直接合成的,将一个晶体连接至XOSC_Q1和XOSC_Q2。
由晶体振荡器产生合成器的参考频率,和ADC和数字部件的时钟,同时以一个四线的串行外设接口来进行配置和存取数据缓冲器。
另一方面,CC1101中具有一个低功耗中频接收机。
低噪声放大器将接收到的射频信号放大,并在进行积分求取的进程中降压转换至中频。
在IF下,I/Q信号被模拟数字转换器数字化,而且均以数字形式完成自动增益操纵、精准信道滤波、调制解调位和数据包同步。
二、硬件电路设计
51单片机最小系统
图2-1STC89C52单片机最小系统
本设计要紧采纳的是STC89C52芯片。
该芯片是由STC公司出产的一款性能强,功耗低,具有8K在系统可编程Flash存储器的八位微操纵器。
STC89C52芯片具有了传统51单片机所不具有的功能,尽管其利用的是经典的MCS-51内核,但它又做了很多的改良。
同时,STC89C52因其在单芯片上拥有8位CPU和在系统可编程Flash存储器,更是为那些嵌入式操纵应用系统提供了灵活有效的解决方案。
如图2-1所示为51单片机最小系统图,它由电源部份、复位电路部份、和晶振电路组成。
无线收发部份
CC1101模块简介
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的可编程输出功率、到500kBaud的可编程数据速度和卓越的接收机选择性和阻断性能,可用频带有:
300-348MHz、387-464MHz和779-928MHz。
(2)模拟特性
支持2-FSK、GFSK、MSK和OOK,灵活的ASK波形整形,成立时刻只需90μs,能够迅速地锁定频率合成器,关于很多跳频系统都超级适用,同时利用自动频率补偿调整频率合成器到实际接收信号的中心频率,而且拥有集成的模拟温度传感器。
(3)数字特性
支持数据包导向系统、校验地址、检测同步字、灵活的数据包长度和自动CRC处置;可用一次“突发”数据传输对所有寄放器进行编程,具有高效的串行外设接口,数字RSSI输出,可编程信道滤波器带宽,可编程载波监听指示器,可编程前导质量指示器;可用于增强随机噪声伪同步字检测的爱惜,支持发送前自动空闲信道评估,支持所有数据包的链路质量指示,可选数据自动白化和去白。
无线模块单片机接口
图2-2无线模块与单片机连接图
如图2-2所示、无线模块的SI、SO、CSN、GDO0、GDO二、SCLK别离与单片机的、、、、、相连。
通过这6个I/O口与CC1101芯片SPI总线进行数据的互换,进而完成收发等功能。
74HC573芯片介绍
74HC573芯片是一款具有三态输出的八路锁存器,用于驱动电容相对较高或阻抗相对较低的负载,实现缓冲寄放器、串并口和双向总线驱动器等。
当该芯片锁存许诺端,即LE端,为高逻辑电平常,输出端Q输出数据跟数据输入端D一致;当LE端为低逻辑电平常,输出端进入锁存状态,不管输入为何种电平,输出Q均维持上一次的电平状态,即维持预先设置好的数据。
74HC573芯片的输出使能端
(低电平有效),可用来设置输出口的工作状态。
当
为高电平常,不管锁存许诺端和数据输入端为何种电平,输出都是高阻态。
在处于高阻态的状态时,输出端无法进行读取也不能进行驱动总线,即芯片处于不可控状态。
其芯片引脚图如图2-3所示。
图2-374HC573芯片引脚图
触摸按键介绍
本次无线记分器设计采纳的是一款TTP226触摸式按键,KEY1-KEY8接口与TTP226的D0-D7输入接口连接,输出接口Q0-Q7与OUT1-OUT8接口相连,将其安置在记分器的无线发射端来操纵A、B两队的加减分。
这是一种接触板检测IC,一共提供了八个触摸按键,而且内含八个指示灯,每一个按键对应一个指示灯,当按下某个按键时,与其对应的指示灯就会亮起,证明该按键在工作。
在软件编程的时候,设置1键为A队的加分键、2键为A队的减分键,设置3键为B队的加分键、4键为B队的减分键。
TTP226触摸式按键再也不延续传统固定pad尺寸的直接按钮键,而且接触键在交直流应用中的特点是功耗较低、工作电压较宽。
其具体特点如下:
工作电压为~;在工作电压为3V时,工作电流典型值为80uA,最大值为160uA,输出刷新率约为55Hz;人体接触检测相对照较稳固,取代了传统直接切换的按键;由按键中的选项能够别离选择直接模式、矩阵模式和串行模式,直接模式下最多八个输入和八个输出。
在上电以后,TTP226触摸式按键有一段稳固时刻,在此期间触碰触摸键区功能无效,TTP226的是~,而且始终进行自动校准,当任何按键都不被触碰时,TTP226从头的校准周期是~。
如图2-4所示TTP226触摸式按键电路原理图。
图2-4TTP226触摸式按键电路原理图
数码管模块介绍
本次无线记分器设计采纳一个八位数码管显示模块和一个四位数码管显示模块来进行加、减分功能的显示和A、B两队的比分情形。
在无线发射端设计一个四位数码管来显示加减功能,当按下A队或B队加分键的时候,该数码管模块那么显示“Add”;当按下A队或B队减分键的时候,该数码管模块那么显示“dEL”。
该四位数码管模块的电路原理图如图3-4所示。
在无线接收端设计一个八位数码管来显示A、B两队的比分情形,初始值设置为“000--000”,别离通过A、B两队的加减分键来对照分情形进行调整,如A队得50分,B队得42分,那么数码管显示为“050--042”。
图2-5四位数码管模块电路原理图
各模块连接概述
关于无线发送端,采纳电源稳压模块对整个单片机系统进行稳压,单片机正常工作电压为5V,本设计中稳压在左右,也能够供单片机小系统正常工作。
设置单片机接口别离与CC1101模块的SCK、MOSI、GDO2、MISO、CSN、GDO0接口相连,由于CC1101模块需要的是的电源输入,故采纳电源稳压模块对无线发送模块进行稳压。
将接口与TTP226触摸按键的OUT1-OUT8接口相连,接口与74HC573芯片的D0-D7输入引脚相连,接口与芯片LE端相连,再将74HC573芯片的Q0-Q7输出引脚连向四位数码显示模块的A-DP接口,且将单片机接口别离与数码显示模块的另外四个接口相连。
无线发送端电路原理图见附录2。
关于无线接收端,稳压方面与无线发送端一致,设置单片机接口别离与CC1101模块的SCK、MOSI、GDO2、MISO、CSN、GDO0接口相连,一样由于CC1101模块需要的是的电源输入,故采纳电源稳压模块对无线接收模块进行稳压。
在无线接收端设置了两个74HC573芯片,将接口与其中一个74HC573芯片的D0-D7输入引脚相连,接口与芯片LE端相连,再将74HC573芯片的Q0-Q7输出引脚连向八位数码显示模块的A-DP接口。
而另外一个74HC573芯片的LE端与接口相连,输出接口Q0-Q7与数码显示模块的另外八个接口相连。
三、软件设计
软件设计综述
本设计软件设计方面的构思方式比较简练,容易明白得,方式也比较新颖,没有复杂的程序嵌套。
程序开始时先进行初始化,概念各个端口,而且对各函数进行声明,再对按键进行扫描,查看是不是有键按下,假设有键按下,判定是哪个键按下,第一判定是A队评分区的按键按下,仍是B队评分区的按键按下。
假设判定为A队评分区的按键按下,再判定是加分键,仍是减分键,假设为加分键,那么给A队进行加分处置;假设为减分键,那么给A队进行减分处置。
假设判定为B队评分区的按键按下,再判定是加分键,仍是减分键,假设为加分键,那么给B队进行加分处置;假设为减分键,那么给B队进行减分处置。
然后再对数码管进行扫描,加以显示;假设无键按下,那么不执行任何程序,直接终止。
主程序流程图如图4-1所示。
图3-1主程序流程图
C程序设计
该无线记分器设计一共设置了四个功能按键别离实现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。
四、硬件搭建及测试
程序的编写及烧录
本次设计采纳C语言进行程序编写,并利用Keil软件进行程序的编译,而软件调试要紧确实是依照编译时产生的错误进行查找和修改。
编写界面如4-1所示。
图4-1编写界面
程序编译操作步骤:
1、为该工程成立一个文件夹“无线发送”;
2、新建一个project文件“无线发送.uv4”,将其保留在文件夹“无线发送”中,并设置单片机型号,即目标器件为STC89C52;
3、编辑源程序,成立源文件“无线发送.c”,再保留在文件夹“无线发送”中;
4、在工程项目组中添加源文件“无线发送.c;
5、设置调试环境,选择调试模式为硬件仿真,将实物与运算机的USB连接,选择串口为COM1,设置串行口波特率为115200bps,烧录界面如图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;
}
elseif(RxBuf[0]==0xA3)//接收到A队减分信号
{
numA=numA-1;
}
elseif(RxBuf[0]==0xB2)//接收到B队加分信号
{
numB=numB+1;
}
elseif(RxBuf[0]==0xB3)//接收到B队减分信号
{
numB=numB-1;
}
}
Display_A();//A队
Display_B();//B队
}
}
附录2硬件调试成效图
无线记分器初始状态图
A队加分成效图
图4-5B队减分成效图