毕业设计| STM32+UART HMI,玩扫雷游戏
2023-04-26 来源:zhihu
每年毕设,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 ;
}
}
上一篇:毕业设计| 两轮自平衡小车
- 意法半导体中国本地造STM32微控制器启动规模量产
- 意法半导体全新STM32C5系列,重新定义入门级微控制器性能与价值,赋能万千智能设备
- 使用 Keil Studio for Visual Studio Code开发 STM32 设备
- 基于机智云与STM32的智能拐杖安全监测系统在养老物联网中的应用
- 内置全栈安全,一站式满足CRA法案与IEC 62443标准——米尔STM32MP257核心板
- 如何用 STM32 FLASH 实现等效 100 万次擦写的 EEPROM 功能?
- 实战解析:通过一个小项目掌握STM32所有外设
- STM32学了两年半,却还是不会做项目
- 意法半导体推出最新STM32MP21微处理器,兼具高性价比、低功耗、高灵活性
- 基于STM32的矿井作业环境监测系统设计与实现
- 六大全新产品系列推出,MCX A微控制器家族迎来创新
- 意法半导体全新STM32C5系列,重新定义入门级微控制器性能与价值,赋能万千智能设备
- 从控制到系统:TI利用边缘AI重塑嵌入式MCU的边界
- 模组复用与整机重测在SRRC、CCC、CTA/NAL认证中的实践操作指南
- 有源晶振与无源晶振的六大区别详解
- 英飞凌持续巩固全球微控制器市场领导地位
- 使用 Keil Studio for Visual Studio Code开发 STM32 设备
- 蓝牙信道探测技术原理与开发套件实践
- LoRa、LoRaWAN、NB-IoT与4G DTU技术对比及工业无线方案选型分析
- Microchip 推出生产就绪型全栈边缘 AI 解决方案,赋能MCU和MPU实现 智能实时决策




