STM32项目分享:基于stm32的自动升降棋系统

"我们不做一锤子买卖,只做技术成长的长期伙伴!"

目录

一、视频展示

二、项目简介

三、原理图设计

四、PCB硬件设计

五、程序设计

六、资料分享


一、视频展示

基于stm32的自动升降棋系统 -视频分享

二、项目简介

题目:基于stm32的自动升降棋系统

主控:STM32

oled显示

雨滴传感器

步进电机(转动模拟升旗)

JQ8400语音播报

遥控模块

功能:

1、可以一键升旗降旗(升旗时播放国歌,降旗不播放)

2、可以一键升降半旗(不播放)

3、雨滴传感器检测到下雨,自动降旗。

4、屏幕显示当前旗子状态。

5、步进电机正转二圈代表升旗到顶,一圈代表半旗,反之同理。

三、原理图设计

四、PCB硬件设计

五、程序设计

复制代码
#include "stm32f10x.h"                  // Device header
#include "delay.h"
#include "lcd.h"
#include "IOput.h"
#include "usart.h"
#include "timer.h"
#include "STEPMOTOR.h"
#include "jq8400.h"   
#include "IRC.h"
#include "adc.h"

extern u8 res;

u8 rain,on_flag=0,half=0;
u8 show_flag,show1_flag,max_wd=30,dec_wd=20,max_sd=60,dec_sd=40;

void beep_()
{
	BEEP=0;
	Delay_50ms(200);
	BEEP=1;
}


int main (void)
{
	delay_init();
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	
	OLED_Init();
	delay_ms(1);
	OLED_Clear();
	output_init();
	input_init();
	TIM2_Int_Init(71,9999);
	stepmotor_init();
	USART_Config();
	Drv_Hw_Init ();
	Adc_Init();
	while(1)
	{
		Med_Hw_ReadKeyValue();
		rain= 100- Get_Adc_Average(0,10)*100/4096;
		key_scan(1,0,0);
		if(set_flag==1)
		{
			beep_();
			set_flag=0;
			show_flag++;
			if(show_flag>=1)
			{
			show_flag=0;
			}
		}
		if(show_flag==0)
		{
			OLED_ShowCH(0,0,"  自动升旗系统  ");
			OLED_ShowCH(0,2,"雨情:");
			OLED_ShowNum(40,2,rain,2,16);
//			OLED_ShowNum(64,2,remote_val,2,16);
			OLED_ShowCH(0,4,"全旗:");
			OLED_ShowCH(0,6,"半旗:");
			if((add_flag==1 || remote_val==15) && half==0)
			{
				beep_();
				remote_val=0;
				add_flag=0;
				on_flag++;
				if(on_flag>=2)
					on_flag=0;
				OLED_ShowCH(40,4,"运行中");
				if(on_flag==1)
				{
					playsong(1);
					MotorCW(1200,1280);
					MotorStop();
				}
				else if(on_flag==0)
				{
					MotorCCW(1200,1280);
					MotorStop();
				}
			}
			else
			{
				if(remote_val==15)
					remote_val=0;
				add_flag=0;
			}
			if(on_flag==1)
			{
				OLED_ShowCH(40,4,"升起  ");
			}
			else
			{
				OLED_ShowCH(40,4,"收起  ");
			}
			if((dec_flag==1 || remote_val==16 ) && on_flag==0)
			{
				beep_();
				remote_val=0;
				dec_flag=0;
				half++;
				if(half>=2)
					half=0;
				OLED_ShowCH(40,6,"运行中");
				if(half==1)
				{
					MotorCW(1200,640);
					MotorStop();
				}
				else if(half==0)
				{
					MotorCCW(1200,640);
					MotorStop();
				}
			}
			else
			{
				remote_val=0;
				dec_flag=0;
			}
			
			if(half==1)
			{
				OLED_ShowCH(40,6,"升起  ");
			}
			else
			{
				OLED_ShowCH(40,6,"收起  ");
			}
			
			if(rain>=50 && on_flag==1)
			{
				on_flag=0;
				MotorCCW(1200,1280);
				MotorStop();
			}
			else if(rain>=50 && half==1)
			{
				half=0;
				MotorCCW(1200,640);
				MotorStop();
			}
			
			
		}
		
	}
}

六、资料分享

点击即可查看当前资料分享。

相关推荐
悠哉悠哉愿意11 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
Lester_110111 天前
STM32霍尔传感器输入口设置为复用功能输入口时,还能用GPIO函数直接读取IO的状态吗
stm32·单片机·嵌入式硬件·电机控制
LCG元11 天前
低功耗显示方案:STM32L0驱动OLED,动态波形绘制与优化
stm32·嵌入式硬件·信息可视化
三佛科技-1873661339711 天前
120W小体积碳化硅电源方案(LP8841SC极简方案12V10A/24V5A输出)
单片机·嵌入式硬件
z203483152011 天前
STM32F103系列单片机定时器介绍(二)
stm32·单片机·嵌入式硬件
古译汉书11 天前
【IoT死磕系列】Day 7:只传8字节怎么控机械臂?学习工业控制 CANopen 的“对象字典”(附企业级源码)
数据结构·stm32·物联网·http
Alaso_shuang11 天前
STM32 核心输入、输出模式
stm32·单片机·嵌入式硬件
脚后跟11 天前
AI助力嵌入式物联网项目全栈开发
嵌入式硬件·物联网·ai编程
2501_9181269111 天前
stm32死锁是怎么实现的
stm32·单片机·嵌入式硬件·学习·个人开发
z203483152011 天前
STM32F103系列单片机定时器介绍(一)
stm32·单片机