前言
传统的抢答器大多采用有线连接方式,存在线路复杂、安装困难、性能不可靠等问题。同时,这些抢答器在数据传输过程中往往缺乏校验机制,容易导致数据出错或乱码。此外,传统的抢答器功能相对单一,无法满足现代竞赛活动对多样化和智能化功能的需求。
为了解决上述问题,本研究设计了一种基于STM32单片机的多路无线射频抢答器。STM32单片机以其高性能、低功耗和丰富的外设接口,为抢答器的设计提供了强大的技术支持。通过采用无线射频技术,实现了抢答器和接收器之间的数据通信,从而避免了传统有线连接的弊端。同时,本研究还在数据传输中添加了校验码,以确保数据的准确性和完整性。
本研究设计的抢答器不仅具备基本的抢答功能,还支持多路抢答、实时显示抢答结果、声音提示等多种功能。其中,多路抢答功能可以满足多个参赛者或团队同时参与竞赛的需求;实时显示抢答结果功能可以让观众和裁判清晰地看到抢答者的身份和抢答时间;声音提示功能则可以在抢答成功或抢答时间结束时发出声音提醒,进一步增强了抢答器的实用性和互动性。
一、本设计主要实现哪些很“开门”功能?
1、4个手持抢答器/发射器,锂电池或干电池供电,低功耗处功能
2、一个接收器主控,主控DC5V供电,低功耗处功能
3、无线通讯采用射频通讯,NRF2401/433MHZ通讯
4、主控接收器具备待倒计时数据显示
5、主控接收器具备语音播报提示功能,可播报哪路抢答器最先抢答成功
6、接收器具备可调制开关,设置抢答时间等
7、整套系统设计规划合理,PCB排版布线合理完善
如果你喜欢探索,评论区留下邮箱,程序源码和电路图等资料发你一起学习!
如果你不会设计,急需此设计做任务等,可私信!
二、电路设计原理图
1.电路图采用Altium Designer进行设计:
1、通过STM32F103C8T6单片机作为系统主控,最小系统电路是整个电路的核心。
2、设计了无线抢答器发射系统和接收系统,两套系统
3、 使用无线433HZ射频/NRF2401无线遥控,模块与单片机进行数据引脚协议解析。
4、通过数码管显示抢答器位号以及抢答倒计时,模块数码管驱动芯片单进行单总线连接。
5、使用智能语音播报模块播报信息,模块与单片机使用串口连接。
6、通过锂电池或干电池供电,单片机设置为低功耗模式。
7、使用无线按键发射,将报文压缩加防错掩码,发送出去,模块与单片机采用FACK总线通讯
8、使用无线接收,将报文解压加检验模块与单片机采用FACK/ACK加码总线通讯。
三、实物设计图
四、程序源代码设计
int main(void)
{
// u8 F_answer = 0;
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
uart_init(9600); //串口初始化为9600
LED_Init();
RadioFrequencyRx_Init();
CMS1650_Init();
TIM2_Int_Init(0xFFFF,72-1);
TIM3_Int_Init(0xFFFF,72-1);
TIM4_Int_Init(0xFFFF,72-1);
delay_ms(300); //延时一段时间,否则开显示无响应
//关显示是都关闭,开显示的话,位选不去操作的话,它会默认都亮起来
CMS1650_WriteByte(0x48,0x51);//开显示:3级亮度
CMS1650_WriteByte(0x68,0x7f);
CMS1650_WriteByte(0x6A,0x7f);
CMS1650_WriteByte(0x6C,0x7f);
CMS1650_WriteByte(0x6E,0x7f);//开机8888
delay_ms(500);
CMS1650_WriteByte(0x68,0x00);
CMS1650_WriteByte(0x6A,0x00);
CMS1650_WriteByte(0x6C,0x00);
CMS1650_WriteByte(0x6E,0x3f);//显示倒计时时间界面 0
while(1)
{
while(F_control)
{
HostDecoding();
}
if(Time2_Number == 0)//计时0s到
{
F_answer = 1;//抢答解码
LEDREAD = 0;LEDGREAN = 1;
Time4_Number = 0;
TIM_SetCounter(TIM4,0); //计数清零
TIM_Cmd(TIM4, ENABLE); //定时器开始计时
}
Display_Time(Time2_Number);//显示倒计时
while(F_answer)
{
AnswerDecoding();
}
}
五、获取资料内容
//如需要设计,添加下方VX