自学内容网 自学内容网

【单片机毕业设计选题24056】-基于STM32的八路抢答器设计

系统功能:

系统上电后显示“欢迎使用八路抢答系统请稍后”,两秒后进入正常页面显示。

第一行显示系统状态信息,第二行显示抢答计时时间,第三行显示设定的抢答时间,

第四行显示系统状态(空闲状态或计时状态)。

短按B3按键启动抢答

短按B4按键增加抢答设定时间

短按B5按键减小抢答设定时间

短按B7按键在抢答计时过程中停止抢答计时

系统操作过程:

短按B3按键启动抢答,TTS语音模块播报“抢答开始”,抢答计时开始,计时过程中

八路抢答键中的任意一路按键被按下后系统播报“X号抢答成功”后系统重新开始抢答

计时。如果在抢答时间内没有一路按键按下,超时后TTS语音播报“超时,抢答结束”。

在抢答计时过程中短按B7按键可重新开始抢答计时。

主要功能模块原理图:

电源时钟烧录接口:

单片机和按键输入电路:

传感器采集电路:

资料获取地址

系统主要功能模块代码

初始化代码:

  /* USER CODE BEGIN 1 */


  /* USER CODE END 1 */


  /* MCU Configuration--------------------------------------------------------*/


  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */

  HAL_Init();


  /* USER CODE BEGIN Init */

    InitVar();


  /* USER CODE END Init */


  /* Configure the system clock */

  SystemClock_Config();


  /* USER CODE BEGIN SysInit */


  /* USER CODE END SysInit */


  /* Initialize all configured peripherals */

  MX_GPIO_Init();

  MX_USART1_UART_Init();

  MX_USART3_UART_Init();

  /* USER CODE BEGIN 2 */

//在HAL库初始化串口1后调用

    HAL_Delay(100);

    SetUart1RxToInput();  

//uart1打开接收中断

    HAL_UART_Receive_IT(&huart1, (uint8_t*)&uart1RecBuff, 1); 

    HAL_Delay(50);

    InitOled();

    InitOledDisp();


  /* USER CODE END 2 */

系统控制代码:
 

//系统信息更新

void AnswerControl(void)

{

    char textBuf[200];


    switch(answerState)

    {

        case ANSWER_IDLE:

            if(answerStart==true)

            {

                answerStart = false;

                answerState = ANSWER_COUNT;

                sprintf(textBuf, "开始抢答");    

                Usart3_SendString((uint8_t*)textBuf,strlen((char*)textBuf));             

            }

            break;

        case ANSWER_COUNT:

            if(answerStop==true)   //中途停止

            {

                answerStop = false;

                getTimeVal = 0; 

                answerState = ANSWER_IDLE;

            }

            else

            {

                getTimeVal++;   //计数

                if(getTimeVal>=setTimeVal)  //计时时间到

                {

                    getTimeVal = 0; //清除抢答计数

                    answerState = ANSWER_IDLE;

                    sprintf(textBuf, "超时,抢答结束");    

                    Usart3_SendString((uint8_t*)textBuf,strlen((char*)textBuf));             

                }

                else    //读抢答按键

                {

                    if(ReadSwVal()!=0xFF)

                    {

                        getTimeVal = 0;

                        answerState = ANSWER_IDLE;

                    }

                }

            }

            break;

        default:

            break;

    }

}

OLED显示:
 

//处理OLED显示内容

void SystemDisplay(void)

{

    char textBuf[20];

    uint8_t i = 0;

    float tempVal = 0;

   

//第一行显示“系统状态信息”

    for(i=13; i<19; i++)

    {

        OledShowCN(16+(i-13)*16, 0, i);

    }

//第二行显示抢答计时时间  

    tempVal = getTimeVal/10;

    sprintf(textBuf,"GetTime:%4.1f", tempVal);

    OledShowString(0, 2, (uint8_t*)textBuf, OLED_FONT_8X16); //测试8*16字符

//第三行显示设定的抢答时间

    tempVal = setTimeVal/10;

    sprintf(textBuf,"SetTime:%4.1f", tempVal);

    OledShowString(0, 4, (uint8_t*)textBuf, OLED_FONT_8X16); //测试8*16字符

//第四行显示系统状态

    if(answerState==ANSWER_IDLE)

    {

        sprintf(textBuf,"System:Idle ");

    }

    else if(answerState==ANSWER_COUNT)

    {

        sprintf(textBuf,"System:Count");

    }

    OledShowString(0, 6, (uint8_t*)textBuf, OLED_FONT_8X16); //测试8*16字符

}

此设计提供的资料包含原理图PCB(包含PDF,AD,立创EDA三个版本),源代码,系统框图,主程序流程图,物料清单(包含使用到的器件手册),功能操作说明等。


原文地址:https://blog.csdn.net/mcu_fang/article/details/140340681

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!