标题:
2019电设电磁项目 STM32代码分享
[打印本页]
作者:
非一般速度
时间:
2020-1-27 10:00
标题:
2019电设电磁项目 STM32代码分享
2019年电子设计大赛电磁题目参考代码,本人参加所用,附作品实物照片一张哈哈,分享学习。电磁采用多匝线圈绕成,用大容量电容充放电。单片机采用stm32f103rct6,电磁发射控制采用继电器,显示使用oled,使用矩阵键盘进行功能切换和设置。
51hei.png
(843.33 KB, 下载次数: 76)
下载附件
2020-1-27 16:28 上传
单片机源程序如下:
#include "stm32f10x.h"
#include "timer.h"
#include "led.h"
#include "oled.h"
#include "key.h"
#include "delay.h"
#include "Duoji_PWM.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "adc.h"
#include "oled.h"
#include "bmp.h"
#include "pwm.h"
#include "hc05.h"
//#include "usart2.h"
#include "jidianqi.h"
#include "math.h"
#define ADC_Channel 7
#define key_clear {key_7=0,key_8=0,key_9=0,key_4=0,key_5=0,key_6=0,key_1=0,key_2=0,key_3=0,key_0=0,kaishi=0,change_d=0,change_a=0,done=0,saomiao=0;saomiao2=0;}
extern u8 num;
unsigned char key_7=0,key_8=0,key_9=0,kaishi=0;
unsigned char key_4=0,key_5=0,key_6=0,change_d=0;
unsigned char key_1=0,key_2=0,key_3=0,change_a=0;
unsigned char done=0,key_0=0,saomiao=0,saomiao2=0;
unsigned int Compare_ang=110,Compare_dis=83;
unsigned int Compare_ang_done,Compare_dis_done;
extern u32 distance1;
//距离角度
unsigned int distance=0,angle=0;
unsigned int dis_1=0,dis_2=0,dis_3=0;
unsigned int ang_1=0,ang_2=0;
extern void Key1_init(void);
extern void Key2_init(void);
void JTAG_Set(u8 mode2) //配置JTAG/SW
{
u32 temp;
temp=mode2;
temp<<=25;
RCC->APB2ENR|=1<<0; //开启辅助时钟
AFIO->MAPR&=0XF8FFFFFF; //清除MAPR的[26:24]
AFIO->MAPR|=temp; //配置JTAG/SW模式
}
int main(void)
{
// u16 adc0,adc1,adc2,adc3;
JTAG_Set(0x02); //关闭JTAG调试接口,因为JTAG接口占用了B3、B4、A15。用户想要更改到的OLED接口可能与JTAG接口冲突,所以关闭JTAG。
JTAG_Set(0x01); //开启SWD调试接口。DIO:A13,CLK:A14
delay_init(); //延时函数初始化
LED_Init(); //初始化与LED连接的硬件接口
Adc_Init(); //ADC初始化
OLED_Init();
delay_init();
TIM3_Cap_Init(4999,7199);
uart_init(9600); //串口初始化为9600
HC05_Init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
TIM1_PWM_Init(1439,999);
TIM8_PWM_Init(1439,999);
uart_init(9600);
jidianqi_Init();
TIM3_Cap_Init(0XFFFF,72-1);
// TIM_SetCompare1(TIM1,Compare_ang);
// TIM_SetCompare1(TIM8,Compare_dis);
chongdian;
kaipao;
while(1)
{
OLED_P6x8Str(0,0,"mode:",F6x8);
OLED_P6x8Str(0,20,"distance:",F6x8);
OLED_P6x8Str(0,30,"angle:",F6x8);
OLED_P6x8Str(0,40,"distance11:",F6x8);
Read_Distane();
OLED_ShowNum(80,40,distance1,4,F6x8);
num=KEY_Scan();
switch(num)
{
// case 1: key_7=1;break;
// case 2: key_8=1;break;
// case 3: key_9=1;break;
case 16: kaishi=1;break;
// case 5: key_4=1;break;
// case 6: key_5=1;break;
// case 7: key_6=1;break;
case 15: change_d=1;break;
// case 9: key_1=1;break;
case 10: saomiao2=1;break;
case 13: saomiao=1;break;
case 14: change_a=1;break;
// case 10: done=1;break;
case 12: done=1;break;
// case 15: key_7=1;break;
// case 16: key_7=1;break;
}
// LCD_ShowNum(20,20,num,3,12);
OLED_ShowNum(0,60,num,1,F6x8);
// distance=90;
// OLED_ShowNumber(40,40,(u16)distance,5,12);
// num=0;
Compare_ang=83+(int)angle*0.89;
Compare_dis=45+asin(distance/1.5)/2;
if(kaishi==1)
{
// //30-190 中心110 190、30 180度 范围 83~137
// TIM_SetCompare1(TIM1,190);
// delay_ms(1000);
// TIM_SetCompare1(TIM1,30);
// delay_ms(1000);
// //25~150 水平45,垂直望天120
// TIM_SetCompare1(TIM8,120);
// delay_ms(1000);
// TIM_SetCompare1(TIM8,45);
// delay_ms(1000);
// key_clear;
TIM_SetCompare1(TIM1,Compare_ang);
delay_ms(1000);
TIM_SetCompare1(TIM8,Compare_dis);
delay_ms(1000);
chongdian_stop;
//tiao
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
chongdian;
kaipao_stop;
kaipao;
key_clear;
}
if(saomiao==1)
{
Compare_ang=83;
while(1)
{ Read_Distane();OLED_ShowNum(80,40,distance1,4,F6x8);
TIM_SetCompare1(TIM1,Compare_ang);
delay_ms(800);
Compare_ang+=10;
if(Compare_ang==133)
while(Compare_ang!=83)
{ Read_Distane();OLED_ShowNum(80,40,distance1,4,F6x8);
TIM_SetCompare1(TIM1,Compare_ang);
delay_ms(800);Compare_ang-=10;
if(distance1<=3500&&distance1>=2500)
{ OLED_P6x8Str(40,60,"find!",F6x8);
goto K1;}
}
}
K1:chongdian_stop;
//tiao
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
chongdian;
kaipao_stop;
kaipao;
OLED_CLS_y(40);
key_clear;
}
//发挥题三
if(done==1)
{
OLED_P6x8Str(0,0,"mode:",F6x8);
OLED_P6x8Str(40,0,"manual operation",F6x8);
Compare_ang_done=110;
delay_ms(1000);
Compare_dis_done=45;
delay_ms(1000);
key_clear;
while(done!=1)
{
while(1)
{
num=KEY_Scan();
if(num!=0)
{ delay_ms(50);
num=KEY_Scan();
if(num!=0)
{num=KEY_Scan();
while(KEY_Scan()!=0) ;
goto M1;
}
}
}
M1:
if(num==4)
{Compare_ang_done=Compare_ang_done+8;TIM_SetCompare1(TIM1,Compare_ang_done);delay_ms(1000);num=0;}
if(num==6)
{Compare_ang_done=Compare_ang_done-8;TIM_SetCompare1(TIM1,Compare_ang_done);delay_ms(1000);num=0;}
if(num==8)
{ Compare_dis_done=Compare_dis_done-8; TIM_SetCompare1(TIM8,Compare_dis_done);delay_ms(1000);num=0;}
if(num==5)
{ Compare_dis_done=Compare_dis_done+8; TIM_SetCompare1(TIM8,Compare_dis_done);delay_ms(1000);num=0;}
}
key_clear;
OLED_CLS_y(0);
}
//扫描2
if(saomiao2==1)
{
TIM_SetCompare1(TIM8,45);
Compare_ang=137;
while(1)
{ Read_Distane();OLED_ShowNum(80,40,distance1,4,F6x8);
TIM_SetCompare1(TIM1,Compare_ang);
delay_ms(800);
Compare_ang-=10;
if(Compare_ang==87)
while(Compare_ang!=137)
{ Read_Distane();OLED_ShowNum(80,40,distance1,4,F6x8);
TIM_SetCompare1(TIM1,Compare_ang);
delay_ms(800);Compare_ang+=10;
if(distance1<=3500&&distance1>=2500)
{ OLED_P6x8Str(40,60,"find!",F6x8);
goto K2;}
}
}
K2:chongdian_stop;
//tiao
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
chongdian;
kaipao_stop;
kaipao;
OLED_CLS_y(40);
key_clear;
}
if(change_d==1)
{
OLED_P6x8Str(0,0,"mode:",F6x8);
OLED_P6x8Str(40,0,"change distance",F6x8);
while(KEY_Scan()!=0) ;
num=0;
while(1)
{
num=KEY_Scan();
if(num!=0)
{ delay_ms(50);
num=KEY_Scan();
if(num!=0)
{num=KEY_Scan();
dis_1=num;}
while(KEY_Scan()!=0) ;
goto L1;
}
}
L1: OLED_ShowNum(60,20,dis_1,1,F6x8);
delay_ms(100);
num=0;
while(1)
{
num=KEY_Scan();
if(num!=0)
{ delay_ms(50);
num=KEY_Scan();
if(num!=0)
{num=KEY_Scan();
dis_2=num;}
while(KEY_Scan()!=0);
goto L2;
}
}
L2: OLED_ShowNum(70,20,dis_2,1,F6x8);
delay_ms(100);
num=0;
while(1)
{
num=KEY_Scan();
if(num!=0)
{ delay_ms(50);
num=KEY_Scan();
if(num!=0)
{num=KEY_Scan();dis_3=num;
}
while(KEY_Scan()!=0);
goto L3;
}
}
L3: OLED_ShowNum(80,20,dis_3,1,F6x8);
num=0;
distance=100*dis_1+10*dis_2+dis_3;
// OLED_P6x8Str(0,40,"hand",F6x8);
// OLED_ShowNumber(40,40,distance,5,12);
key_clear;
OLED_CLS_y(0);
// OLED_P6x8Str(30,60,"clear successful",F6x8);
}
if(change_a==1)
{
OLED_P6x8Str(0,0,"mode:",F6x8);
OLED_P6x8Str(40,0,"change angle",F6x8);
while(KEY_Scan()!=0) ;
num=0;
while(1)
{
num=KEY_Scan();
if(num!=0)
{ delay_ms(50);
num=KEY_Scan();
if(num!=0)
{num=KEY_Scan();
ang_1=num;}
while(KEY_Scan()!=0) ;
goto A1;
}
}
A1: OLED_ShowNum(60,30,ang_1,1,F6x8);
delay_ms(100);
num=0;
while(KEY_Scan()!=0) ;
num=0;
while(1)
{
num=KEY_Scan();
if(num!=0)
{ delay_ms(50);
num=KEY_Scan();
if(num!=0)
{num=KEY_Scan();
ang_2=num;}
while(KEY_Scan()!=0) ;
goto A2;
}
}
A2: OLED_ShowNum(70,30,ang_2,1,F6x8);
delay_ms(100);
num=0;
angle=ang_1*10+ang_2;
key_clear;
OLED_CLS_y(0);
// OLED_P6x8Str(30,60,"clear successful",F6x8);
TIM_SetCompare1(TIM1,Compare_ang);
delay_ms(1000);
TIM_SetCompare1(TIM8,Compare_dis);
delay_ms(1000);
}
}
}
复制代码
所有资料51hei提供下载:
电磁项目.7z
(228.44 KB, 下载次数: 13)
2020-1-27 16:31 上传
点击文件名下载附件
代码
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1