Funpack4-2 - 基于PIC16F13145 Curiosity Nano设计的多路抢答器设计
该项目使用了PIC16F13145 Curiosity Nano,实现了多路抢答器的设计,它的主要功能为:抢答锁定、复位功能、抢答人员LED显示、裁判的LED提示。
标签
Funpack活动
PIC16F13145
多路抢答器
CLB
鲍飞.
更新2025-07-01
8

项目总结:基于PIC16F芯片的多路抢答器设计

项目描述

项目介绍
本项目使用PIC16F13145 Curiosity Nano 评估套件实现了一个多路抢答器系统。通过片内Configurable Logic Block (CLB)和程序相结合的方式,完成以下功能:

  1. 抢答锁定 :当任意一路按键按下时,系统锁定当前抢答状态,其他按键输入无效。
  2. 复位功能 :按下复位键后,系统进入下一轮抢答状态,并在随机时间后重新开放抢答。
  3. 抢答人员LED显示 :当第一个抢答者按下按键抢答成功后,对应的LED会亮起。
  4. 裁判的LED提示 :复位后,所有LED熄灭,经过一个随机时间延迟后,LED亮起表示抢答开始。

设计思路

  • 利用PIC16F芯片的CLB模块,基于硬件的数字逻辑,实现快速且可预测的响应时间,用于处理按键输入的优先级判断及锁定功能。
  • 使用定时器和随机数生成算法控制抢答开始的时间。
  • 借助LED指示灯直观显示抢答结果

硬件介绍

核心硬件

1.主控芯片:PIC16F13145

  • 内置CLB模块,用于实现快速按键优先级判断。
  • 集成多个GPIO引脚,连接按键和LED灯。

2.按键模块 :4个独立按键,分别对应3个抢答通道。其中1个裁判的按键,按下后随机时间内开始抢答

3.彩灯模块 :4个独立LED,用于显示抢答成功者的编号。其中1个裁判LED灯,用于表示抢答开始

4.硬件连接

  • 按键输入通过GPIO引脚接入PIC16F芯片,使用内部上拉防止浮空。
  • LED灯通过GPIO直接驱动,每个LED对应一个抢答通道。
    image.png
    下面是面包板上的硬件连接示意图:
    image.png

image.png

软件流程图

image.png

CLB:
image.png

code:

 /*
* MAIN Generated Driver File
*
* @file main.c
*
* @defgroup main MAIN
*
* @brief This is the generated driver implementation file for the MAIN driver.
*
* @version MAIN Driver Version 1.0.2
*
* @version Package Version: 3.1.2
*/

/*
? [2025] Microchip Technology Inc. and its subsidiaries.

Subject to your compliance with these terms, you may use Microchip
software and any derivatives exclusively with Microchip products.
You are responsible for complying with 3rd party license terms
applicable to your use of 3rd party software (including open source
software) that may accompany Microchip software. SOFTWARE IS ?AS IS.?
NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS
SOFTWARE, INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT,
MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT
WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY
KIND WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF
MICROCHIP HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE
FORESEEABLE. TO THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP?S
TOTAL LIABILITY ON ALL CLAIMS RELATED TO THE SOFTWARE WILL NOT
EXCEED AMOUNT OF FEES, IF ANY, YOU PAID DIRECTLY TO MICROCHIP FOR
THIS SOFTWARE.
*/
#include "mcc_generated_files/system/system.h"
#include <stdlib.h>
#include <time.h>

int start_time = 0;

//500
void Time0_IRQ(void)
{
//LED0_Toggle();
}
void KeyRes_IRQ(void)
{
if(!start_time){
LED0_SetHigh();
start_time = ((rand()%5)+1);
}
}
void D_Reset(void)
{
CLB1_SWIN_Write16(0xFF);
NOP(); __delay_ms(250u);
CLB1_SWIN_Write16(0x00);
NOP(); __delay_ms(250u);
}

/*
Main application
*/
int count = 0;
int main(void)
{
SYSTEM_Initialize();
KEY0_SetInterruptHandler(KeyRes_IRQ);
TMR0_OverflowCallbackRegister(Time0_IRQ);
// If using interrupts in PIC18 High/Low Priority Mode you need to enable the Global High and Low Interrupts
// If using interrupts in PIC Mid-Range Compatibility Mode you need to enable the Global and Peripheral Interrupts
// Use the following macros to:

// Enable the Global Interrupts
INTERRUPT_GlobalInterruptEnable();

// Disable the Global Interrupts
//INTERRUPT_GlobalInterruptDisable();

// Enable the Peripheral Interrupts
INTERRUPT_PeripheralInterruptEnable();

// Disable the Peripheral Interrupts
//INTERRUPT_PeripheralInterruptDisable();

srand((unsigned int)(time(NULL)));
TMR0_Start();
LED0_SetLow();
D_Reset();

while(1)
{
while(start_time){
start_time--;
__delay_ms(1000);

if(!start_time){
LED0_SetLow();
D_Reset();
}
}
}
}

功能展示

项目中遇到的难题和解决方法

  1. 问题 :随机延时不够随机。
    • 解决方法 :使用系统时间作为随机数种子,提高随机性,但还是伪随机数。
  2. 问题 :CLB模块配置复杂。
    • 解决方法 :参考官方文档和示例代码,逐步调试配置参数。
  3. 问题 :CLB构建的时候,网络ERR
    image.png
    • 解决方法1 :在防火墙的高级设置中添加软件的出站规则为允许。关闭防火墙。关闭代理。依旧报网络错误,发现只有在打开软件第一次进行Synthesize的时候可以正常使用。
    • 解决方法2 :因为经常要开关软件来构建调试很麻烦,所以先使用数电模拟器将功能仿真好

活动心得

总结 :本项目通过合理利用PIC16F芯片的资源,成功实现了多路抢答器的设计,达到了预期目标。

  1. 深入理解了PIC16F芯片的CLB功能及其在硬件逻辑加速中的应用
  2. 学会了结合硬件和软件来实现一些交互功能
  3. 复习回顾了数电知识,比如与或非等逻辑门
附件下载
serial.X (2).zip
PIC代码
团队介绍
个人
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号