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
|