毕业设计| STM32+UART HMI,玩扫雷游戏

发布时间:2023-04-26  

每年毕设,STM32出现的频率最高,很多都是“老实本分”的设计,但也有不走寻常路,比如今天分享的这个毕设——扫雷游戏。不知道这位同学在毕业答辩时,有没有被老师为难,当着这么多评委老师,来几盘扫雷,是不是很刺激。


系统的硬件:指南者开发板和4.2英寸的UATRT HMI串口屏组成,其实可以用最小的核心板,单片机外设也就用到了串口而已,但是要求使用开发板,只好有点浪费了。


软件部分:软件部分是这个项目的核心。

刚开始参考了网上一些扫雷代码。在单片机上很多地方不一样,但大体思路还是一样的,主要解决的就是与串口屏之间的通信协议,贴一段简单的通信代码。

具体完成功能:


1.扫雷基本功能


2.当周围的雷都标记完时,打开剩余未标记的格子


//串口接收中断

void USART1_IRQHandler(void)

{

  if(huart1.Instance->SR&(1<<5))//如果接收到了数据

  {

    buf=huart1.Instance->DR;

/接收选择的格子串口通信协议

    if(id_flag==1)

    {

      if(buf==0xff)

      {

        id_flag=0;

        count=0;

        select_id=buff[0];

        select_flag=1;

      }

      else

      {

        buff[count++]=buf;

      }

    }

    if(buf==0xaa)

    {

      id_flag=1;

    }

  }

/接收选择的格子串口通信协议

  

/打开一个安全格子串口通信协议

  if(buf==0xbb)

  {

    safe_flag=1;

  }

/打开一个安全格子串口通信协议

  

/重新开始串口通信协议

  if(buf==0xcc)

  {

    refreshall_flag=1;

  }

/重新开始安全格子串口通信协议

  

/标记炸弹串口通信协议

  if(buf==0xdd)

  {

    zhadan_flag=~zhadan_flag;  //屏幕点击一次标记炸弹就取反一次,如点击一次表示开始标记炸弹,点击第二次表示取消标记炸弹

  }

/标记炸弹安全格子串口通信协议

}

与串口屏的通信协议,使用的hal库,用cubemx辅助开发。串口屏的开发有专门的软件就叫UART HMI。再贴一个自己写的的串口屏通信代码(适用于hal库)。


/*

UART HMI 串口屏通信函数 HMISendnum1,2,3分别是不同的字符串与数字的拼接

后面的参数是串口号,适用于hal库

*/


void HMISendnum1(char *str1,int nums,UART_HandleTypeDef uart)      

{

  HAL_StatusTypeDef Flag;

  uint8_t b=0xff,i;

  char buf1[10];

  sprintf(buf1, "%s%d", str1, nums);

  Flag=HAL_UART_Transmit(&uart,(uint8_t*)buf1,strlen(buf1),0xffffffff);

  while(Flag!=HAL_OK);

  for(i=0;i<3;i++)

  {

    if(b!=0)

     {

      HAL_UART_Transmit(&uart,&b,1,0xff);

      while(Flag!=HAL_OK);

    }

    else 

      return ;

  } 

}


void HMISendnum2(char *str1,int nums,char *str2,UART_HandleTypeDef uart)      

{

  HAL_StatusTypeDef Flag;

  uint8_t b=0xff,i;

  char buf1[10];

  sprintf(buf1, "%s%d%s", str1, nums,str2);

  Flag=HAL_UART_Transmit(&uart,(uint8_t*)buf1,strlen(buf1),0xffffffff);

  while(Flag!=HAL_OK);

  for(i=0;i<3;i++)

  {

    if(b!=0)

     {

      HAL_UART_Transmit(&uart,&b,1,0xff);

      while(Flag!=HAL_OK);

    }

    else 

      return ;

  } 

}

void HMISendnum3(char *str1,int nums1,char *str2,int nums2,UART_HandleTypeDef uart)      

{

  HAL_StatusTypeDef Flag;

  uint8_t b=0xff,i;

  char buf1[10];

  sprintf(buf1, "%s%d%s%d", str1, nums1,str2,nums2);

  Flag=HAL_UART_Transmit(&uart,(uint8_t*)buf1,strlen(buf1),0xffffffff);

  while(Flag!=HAL_OK);

  for(i=0;i<3;i++)

  {

    if(b!=0)

     {

      HAL_UART_Transmit(&uart,&b,1,0xff);

      while(Flag!=HAL_OK);

    }

    else 

      return ;

  } 

}


//控制串口屏的文本控件,輸入字符串命令,后面是通信的串口号

void HMISendtxt(char *str,UART_HandleTypeDef uart)      

{

  HAL_StatusTypeDef Flag;

  uint8_t b=0xff,i;

  Flag=HAL_UART_Transmit(&uart,(uint8_t*)str,strlen(str),0xff);

  while(Flag!=HAL_OK);

  for(i=0;i<3;i++)

  {

    if(b!=0)

     {

      HAL_UART_Transmit(&uart,&b,1,0xffffffff);

      while(Flag!=HAL_OK);

    }

    else 

      return ;

  } 

}


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>