#include"sys.h"
#include"delay.h"
#include"timer1.h"
#include"led.h"
#include"lcd.h"
#include"rtc.h"
#include"adc.h"
#include"usart.h"
#include"key.h"
//#include<math.h>
float led0pwmval=70; //设置确定占空比的值
u16 dir=995; //设定值
float a; //最终采样值
float temp; //定义转换后的采样值
float adcx; //定义采样的原始值
u8 key;
int keykey()
{
key=KEY_Scan(0); //得到键值0
if(key)
{
switch(key)
{
case KEY0_PRES:
dir=dir+10;
break;
case KEY1_PRES:
dir=dir-10;
break;
}
}
delay_ms(10);
return dir;
}
int main(void)
{
Stm32_Clock_Init(336,8,2,7); //设置时钟168M Hz
delay_init(168); //延时初始化
uart_init(84,115200); //初始化串口波特率为115200
LED_Init(); //初始化与LED连接的硬件接口
// LED0=0; //先点亮红灯
TIM1_PWM_Init(100-1,56-1); //3MHz(即168MHz/56)的计数频率,30KHz(即1/200MHz)的PWM,周期固定为100us0
LCD_Init();
Adc_Init(); //Adc初始化,开启Adc1_CH5
KEY_Init(); //初始化与按键连接的硬件接口
POINT_COLOR=RED;
LCD_ShowString(150,180,200,16,24,"ADC TEST");
LCD_ShowString(150,210,200,16,24,"EXPLORER STM32F4");
LCD_ShowString(150,240,200,16,24,"2016/08/17");
LCD_ShowString(150,290,200,16,24,"KEY0:dir+");
LCD_ShowString(150,320,200,16,24,"KEY1:dir-");
LCD_ShowString(150,380,200,16,24,"T:100");
POINT_COLOR=BLACK ; //设置字体为黑色
LCD_ShowString(150,440,300,16,24,"ADC1_CH5_VAL:0000");
LCD_ShowString(150,470,300,16,24,"ADC1_CH5_VOL: . V");
LCD_ShowString(150,540,300,16,24,"a:");
LCD_ShowString(150,570,300,16,24,"dir:");
LCD_ShowString(150,600,300,16,24,"led0pwmval:");
LED0_PWM_VAL=led0pwmval;
while(1)
{
/*AD采样*/
adcx=Get_Adc_Average(ADC_CH5,20); //获取通道5的装换值,20次取平均
LCD_ShowxNum(305,440,adcx,4,24,0); //显示ADC采样后的原始的值
temp=(float)adcx*(3.3/4096); //(3.3V电压分成4096份)获取计数后的带小数的实际电压值,比如3.1111
adcx=temp; //赋值整数部分给adcx变量,因为adcx为u16整型
LCD_ShowxNum(305,470,adcx,1,24,0); //显示电压值的整数部分,3.1111的话,就显示3
temp-=adcx; //把已经显示的整数部分去掉,留下小数部分,比如3.1111-3=-0.1111
temp*=1000; //小数部分乘以1000,比如0.1111就转换为111.1,相当于保留3位小数
LCD_ShowxNum(325,470,temp,3,24,0x80); //显示小数部分(前面转换为了整型显示),这里显示的就是111
LED0=!LED0;
delay_ms(10);
a=adcx*1000+temp;
LCD_ShowxNum(200,540,a,4,24,0);
LCD_ShowxNum(250,570,dir,4,24,0);
LED0_PWM_VAL=led0pwmval;
// zkb=(100-led0pwmval)/100;
// led0pwmval=100-((100*Voutideal*zkb)/temp);
/*输出PWM*/
// TIM14_PWM_Init(500-1,84-1); //1Mhz的计数频率,2Khz的PWM.
TIM1_PWM_Init(100-1,56-1); //3MHz(即168MHz/56)的计数频率,30KHz(即1/200MHz)的PWM,周期固定为100us0
LED0_PWM_VAL=led0pwmval;
if((a-dir)>10)
{
LED0_PWM_VAL=led0pwmval--;
if((a-dir)==10||(a-dir)<10)
led0pwmval=50;
LED0_PWM_VAL=led0pwmval;
LCD_ShowxNum(305,600,led0pwmval,4,24,0);
keykey();
}
else if((dir-a)>10)
{
LED0_PWM_VAL=led0pwmval++;
if((dir-a)==10||(dir-a)<10)
led0pwmval=50;
LED0_PWM_VAL=led0pwmval;
LCD_ShowxNum(305,600,led0pwmval,4,24,0);
keykey();
}
if(a==dir) //如果采样的值与设定的值相等
{
LED0_PWM_VAL=led0pwmval;
LCD_ShowxNum(305,600,led0pwmval,4,24,0);
keykey();
}
}
}
|