【STM32单片机】汉诺塔游戏

文章目录

  • 一、功能简介
  • 二、软件设计
  • 三、实验现象
  • 联系作者


一、功能简介

本项目使用STM32F103C8T6单片机控制器,IIC OLED液晶、按键等。

主要功能:
系统运行后,OLED显示游戏画面,可通过K1或K3键选择关卡,K2键开始。


二、软件设计

/*
作者:嗨小易(技术交流QQ群:570487280)

*/



int main(void)
{	
	OLED_Init();
	OLED_Clear();
	Key_Init();
	Timer_Init();
	OLED_ShowCN_STR(0,64,0,3);
	OLED_ShowCN_STR(2,64,3,4);
	OLED_ShowChar(3,10,60);
	OLED_ShowChar(3,16,62);
	OLED_ShowNum(3,13,Plate_Num,1);
	Show_Plate_Num(0,Plate_Num);
	while(1)
	{
		Key_Num=Key_GetNum();
		if(Key_Num)
		{
			if(Game_Interface==0)
			{
				if(Key_Num==1)
				{
					if(Plate_Num==3)
					{
						Plate_Num=3;
					}
					else
					{
						Plate_Num--;
					}
					OLED_ShowNum(3,13,Plate_Num,1);
					Show_Plate_Num(0,Plate_Num);
				}
				else if(Key_Num==3)
				{
					if(Plate_Num==6)
					{
						Plate_Num=6;
					}
					else
					{
						Plate_Num++;
					}	
					OLED_ShowNum(3,13,Plate_Num,1);
					Show_Plate_Num(0,Plate_Num);
				}
				else if(Key_Num==2)
				{
					Game_Interface=1;
					OLED_Clear();
					Show_Plate_Num(1,Plate_Num);
					Hanoi_Init();
					TIM_Cmd(TIM2,ENABLE);
				}
			}
			else if(Game_Interface==1)
			{
				if(Key_Num==1)
				{
					OLED_ShowChar(1,1,62);
					OLED_ShowChar(1,5,32);
					OLED_ShowChar(1,9,32);
				}
				else if(Key_Num==2)
				{
					OLED_ShowChar(1,5,62);
					OLED_ShowChar(1,1,32);
					OLED_ShowChar(1,9,32);
				}
				else if(Key_Num==3)
				{
					OLED_ShowChar(1,9,62);
					OLED_ShowChar(1,1,32);
					OLED_ShowChar(1,5,32);
				}
				Count++;
				if(Count==1)
				{
					Pole_One=--Key_Num;
				}
				else if(Count==2)
				{
					Pole_Two=--Key_Num;
				}
			}
		}
		if(Game_Interface==1)
		{
			if(Count==2)
			{
				if(Motion_Plate(Pole_One,Pole_Two)){}
				else
				{
					Renovate_Pole();
					Step++;
				}
				OLED_ShowNum(4,14,Step,3);
				if(Judge_Victory(Plate_Num)!=0)
				{
					OLED_Clear();
					TIM_Cmd(TIM2,DISABLE);
					Game_Interface=2;
				}
				Pole_One=3;Pole_Two=3;Count=0;
			}
		}
		else if(Game_Interface==2)
		{
			OLED_ShowString(1,1,"Victory");
			OLED_ShowString(1,13,"Time");
//			OLED_ShowString(2,13,"0000");
			OLED_ShowString(3,13,"Step");
			OLED_ShowNum(4,14,Step,3);
//			Key_Num=Key_GetNum();
			if(Key_Num)
			{
				Game_Interface=0;
				min=0;
				sec=0;
				Step=0;
				OLED_Clear();
				OLED_ShowCN_STR(0,64,0,3);
				OLED_ShowCN_STR(2,64,3,4);
				OLED_ShowChar(3,10,60);
				OLED_ShowChar(3,16,62);
				OLED_ShowNum(3,13,Plate_Num,1);
				Show_Plate_Num(0,Plate_Num);
			}
		}
		if(Game_Interface!=0)
		{
			OLED_ShowNum(2,13,min,2);
			OLED_ShowNum(2,15,sec,2);
		}
	}
}
void TIM2_IRQHandler(void)
{
	if(TIM_GetITStatus(TIM2,TIM_IT_Update)==SET)
	{
		sec++;
		if(sec==60)
		{
			min++;
			if(min>99){min=0;}
			sec=0;
		}
		TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
	}
}



三、实验现象

B站演示视频:https://space.bilibili.com/444388619

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


联系作者

专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/271263.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

开源分布式搜索引擎ElasticSearch结合内网穿透远程连接

文章目录 前言1. Windows 安装 Cpolar2. 创建Elasticsearch公网连接地址3. 远程连接Elasticsearch4. 设置固定二级子域名 前言 简单几步,结合Cpolar 内网穿透工具实现Java 远程连接操作本地分布式搜索和数据分析引擎Elasticsearch。 Cpolar内网穿透提供了更高的安全性和隐私保…

麒麟V10arm桌面版的安装包在麒麟V10服务器版安装

安装过后,可执行程序可能运行不了,看起来就像没识别为可执行程序。在终端运行,会发现其实是缺少了某些库,比如libicui18n.so.66、libicuuc.so.66、libicudata.so.66和libm.so.6库版本不对。 报这个错:error while loa…

如何使用 pnpm 实现前端 Monorepo项目管理

前言 随着软件开发项目变得越来越庞大和复杂,如何有效管理和维护代码库成为了一个重要的问题。一种流行的解决方案是 Monorepo,也就是在一个版本控制系统中管理所有的项目代码。 什么是 Monorepo Monorepo 是一种项目代码管理方式,指单个仓…

internet download manager 6.42怎么删除卸载,2024最新idm卸载不干净怎么解决

internet download manager 6.42简称为IDM,这是一款非常好用的下载软件,很多小伙伴都在使用。如果后续我们不再需要使用该软件,小伙伴们知道具体该如何将其卸载掉吗,其实卸载方法是非常简单的,只需要进行几个非常简单的…

分布式核心技术之分布式锁

文章目录 为什么要使用分布锁?分布式锁的三种实现方法基于数据库实现分布式锁基于缓存实现分布式锁基于 ZooKeeper 实现分布式锁知识扩展:如何解决分布式锁的羊群效应问题? 三种实现方式对比 分布式互斥,领悟了其“有你没我&#…

绝地反击,不做背锅侠!

那么作为运维人员,如何摆脱以上背黑锅的尴尬局面呢?堡垒机当然是破解此局面的绝杀大招。 1.统一登录入口 提供统一入口,集中管理和分配账户密码、所有运维人员只能登录堡垒机才能访问服务器,梳理“人与服务器”之间的关系&#…

新版Microsoft Edge和google chrome谁才是浏览器的王者?

Microsoft Edge是一款现代化的浏览器,它拥有众多功能和强大的性能,为用户带来更加流畅的浏览体验。 Edge最近推出了分屏功能,支持一个窗口同时显示两个选项卡,这可以大大提高生产力和多任务处理能力。 一、结合平时的使用经历&…

2024 年网络安全展望:未来是什么?

为了建立强大的网络安全计划,组织必须首先了解整体威胁环境不断变化的性质。 人工智能在成为安全团队的帮助之前,将为网络犯罪分子带来巨大的福音。 网络犯罪分子和不良行为者将受益于先进人工智能工具的广泛部署,然后他们的目标才能建立人…

【计算机网络】—— 奈氏准则和香农定理

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:"没有罗马,那就自己创造罗马~" 目录 失真 - 信号的变化 ​编辑影像失真的因素: ​编辑信道带宽: 码间串扰…

使用Go语言编写基本的HTTP服务器

你是否曾经想过自己动手编写一个Web服务器?那种可以接收来自全世界的请求,然后回应一些“Hello, World!”之类的消息的服务器?如果你有这个想法,那么Go语言就是你的最佳伙伴。让我们一起踏上这段奇妙的探险之旅吧! 首…

Docker部署Nexus Maven私服并实现远程访问Nexus界面

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《linux深造日志》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 1. Docker安装Nexus2. 本地访问Nexus3. Linux安装Cpolar4. 配置Nexus界面公网地址5. 远程访问 Nexus界面6. 固定N…

【HarmonyOS开发】探究Hap与App包的结构与区别

1、Hap与App包的区别 OpenHarmony 可以进行两种形式(Hap和App)的打包,HAP是用于本地调试的,APP包是用于上架发布的。 根据不同的设备类型,一个APP包可以包含多个HAP包。 下面从两个角度进行分析 1.1 编译构建角度 编…

百度Apollo五步入门自动驾驶:Dreamview与离线数据包分析(文末赠送apollo周边)

🎬 鸽芷咕:个人主页 🔥 个人专栏:《linux深造日志》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! ⛳️ 粉丝福利活动 ✅参与方式:通过连接报名观看课程,即可免费获取精美周边 ⛳️活动链接&#xf…

matlab设置colorbar标题的两种方式

%% 第一种 figure; A rand(3,4,3); A1 A(:,:,1); A2 A(:,:,2); A3 A(:,:,3); contourf(A1,A2,A3,30); colormap(jet);colorbar; my_handlecolorbar; my_handle.Label.String depth/km; my_handle.Label.FontSize 15;%% 第二种 figure; A rand(3,4,3); A1 A(:,:,1); A2 …

FinGPT:金融大语言模型 | 开源日报 No.127

verdaccio/verdaccio Stars: 15.0k License: MIT Verdaccio 是一个轻量级的 Node.js 私有代理仓库。 以下是 Verdaccio 的核心优势和关键特性: 零配置:无需复杂设置即可快速启动私有 npm 注册表。本地化管理:通过内置小型数据库进行简单而…

【STM32单片机】电子木鱼设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用STM32F103/F407单片机控制器,TFTLCD触摸屏、蜂鸣器等。 主要功能: 系统运行后,TFTLCD显示画面,可触摸木鱼区域,功德计数加1&#xf…

【操作系统】探究进程奥秘:显示进程列表的解密与实战

​🌈个人主页:Sarapines Programmer🔥 系列专栏:Linux专栏:《探秘Linux | 操作系统解密》⏰诗赋清音:月悬苍穹泛清辉,梦随星河徜徉辉。情牵天际云千层,志立乘风意自飞。 ​ 目录 &a…

2023年国赛高教杯数学建模E题黄河水沙监测数据分析解题全过程文档及程序

2023年国赛高教杯数学建模 E题 黄河水沙监测数据分析 原题再现 黄河是中华民族的母亲河。研究黄河水沙通量的变化规律对沿黄流域的环境治理、气候变化和人民生活的影响,以及对优化黄河流域水资源分配、协调人地关系、调水调沙、防洪减灾等方面都具有重要的理论指导…

Visual Studio2022配置ReSharper C++ 常用设置

如需安装免费的可以在下面留言,看到即回复 文章目录 Visual Studio2022配置ReSharper C 常用设置配置Visual Studio2022,使其能够按回车进行补全配置ReSharper C 设置自动弹出配置ReSharper C 的快捷键ReSharper C 去掉注释拼写使用中文注释 如何关闭新版…

C语言中函数调用和嵌套

函数是C语言的基本组成元素 函数调用 根据函数在程序中出现的位置有下列三种函数调用方式: 将函数作为表达式调用 将函数作为表达式调用时,函数的返回值参与表达式的运算,此时要求函数必须有返回值 int retmax(100,150); 将函数作为语句…