- #include "sys.h"
- #include "delay.h"
- #include "led.h"
- #include "pwm.h"
- #include "key.h"
- #include "myiic.h"
- #include "oled.h"
- #include "tim.h"
- #include "adc.h"
- extern u8 TIM5CH1_CAPTURE_STA; //输入捕获状态
- extern u32 TIM5CH1_CAPTURE_VAL; //输入捕获值
- int main(void)
- {
- u16 led0pwmval=500,led0pwmval1=500,led=0;
- u16 Autoreload=500-1;
- float temp;
- u8 dir=1;
- u8 key; //保存键值
- u8 i=0;
- u16 adcx;
- float adcpower;
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
- delay_init(168); //初始化延时函数
- LED_Init(); //初始化LED端口
- KEY_Init(); //初始化与按键连接的硬件接口
- IIC_Init(); //IIC初始化
- OLED_Init(); //初始化OLED
- Adc_Init(); //初始化ADC
- TIM14_PWM_Init(500-1,42-1); //84M/84=1Mhz的计数频率,重装载值500,所以PWM频率为 1M/500=2Khz.
- TIM13_PWM_Init(500-1,42-1);
- TIM11_PWM_Init(500-1,84-1);
- TIM10_PWM_Init(500-1,84-1);
- while(1)
- {
- delay_ms(10);
- key=KEY_Scan(0); //得到键值
- OLED_GN();
- if(key)
- {
- do{ key=KEY_Scan(0);
- switch(key)
- {
- case KEY0_PRES: i=1;break;
- case KEY2_PRES: i=2;break;
- case WKUP_PRES: dir=!dir;break;
- case KEY1_PRES:
- { if(dir)
- {
- led0pwmval=led0pwmval-20;
- if(led0pwmval<Autoreload)TIM_SetCompare1(TIM11,led0pwmval); //占空比增加
- }
- else if(!dir)
- {
- led0pwmval=led0pwmval+20;
- if(led0pwmval>0)TIM_SetCompare1(TIM11,led0pwmval); //占空比减小
- }
- break;
- }
- }
- }while(i==0);
-
- do{key=KEY_Scan(0);
- switch(key)
- {
- case KEY0_PRES: i=0; break;
- case KEY2_PRES: i=2;break;
- case WKUP_PRES:dir=!dir;break;
- case KEY1_PRES:
- {if(dir)
- { led=led+20;
- led0pwmval1=led0pwmval1-20;
- if(led0pwmval1<Autoreload)TIM_SetCompare1(TIM14,led0pwmval1); //修改比较值,修改占空比
- /////////////////////////////////////////////////////////////////////////////////////////////
- adcx=Get_Adc_Average(ADC_Channel_5,20);//获取通道5的转换值,20次取平均
- adcpower=(float)adcx*(3.3/4096)*10;
- OLED_FloatNum(53,0, adcpower);
- if(led<Autoreload)temp=(float)led*100/Autoreload; //占空比
- OLED_FloatNum(60,19, temp);
- temp=(float)1000/Autoreload; //频率计算
- OLED_FloatNum(45,21, temp);
- }
- else if(!dir)
- {led=led-20;
- led0pwmval1=led0pwmval1+20;
- if(led0pwmval1>0)TIM_SetCompare1(TIM14,led0pwmval1); //修改比较值,修改占空比
- /////////////////////////////////////////////////////////////////////////////////////////////
- adcx=Get_Adc_Average(ADC_Channel_5,20);//获取通道5的转换值,20次取平均
- adcpower=(float)adcx*(3.3/4096)*10;
- OLED_FloatNum(53,0, adcpower);
- temp=(float)led*100/Autoreload; //占空比
- if(led>0)OLED_FloatNum(60,19, temp);
- temp=(float)1000/Autoreload; //频率计算
- OLED_FloatNum(45,21, temp);
- }
- break;
- }
-
- }
- } while(i==1);
- //////////////////////////////////////////////////////////////////////////////////////////
- do{ key=KEY_Scan(0);
- switch(key)
- {
- case KEY0_PRES: i=0;break;
- case KEY2_PRES: i=1;break;
- case WKUP_PRES: dir=!dir;break;
- case KEY1_PRES:
- if(dir)
- {Autoreload=Autoreload+100;
- if(Autoreload<=1000)TIM_SetAutoreload(TIM14, Autoreload); //修改重装载值,改变频率
- /////////////////////////////////////////////////////////////////////////
- adcx=Get_Adc_Average(ADC_Channel_5,20);//获取通道5的转换值,20次取平均
- adcpower=(float)adcx*(3.3/4096)*10;
- OLED_FloatNum(53,0, adcpower);
- temp=(float)led*100/Autoreload; //占空比
- OLED_FloatNum(60,19, temp);
- temp=(float)1000/Autoreload; //频率计算
- OLED_FloatNum(45,21, temp);
- }
- else if(!dir)
- {Autoreload=Autoreload-100;
- if(Autoreload>0)TIM_SetAutoreload(TIM14, Autoreload); //修改重装载值,修改频率
- ////////////////////////////////////////////////////////////////////////////////////
- adcx=Get_Adc_Average(ADC_Channel_5,20);//获取通道5的转换值,20次取平均
- adcpower=(float)adcx*(3.3/4096)*10;
- OLED_FloatNum(53,0, adcpower);
- temp=(float)led*100/Autoreload; //占空比
- OLED_FloatNum(60,19, temp);
- temp=(float)1000/Autoreload; //频率计算
- OLED_FloatNum(45,21, temp);
- ////////////////////////////////////////////////////////////////////////
- }
- break;
- }
-
-
- } while(i==2);
- }else delay_ms(10);
- }
- }
复制代码
|