test.c
来自「STM32控制倒立摆」· C语言 代码 · 共 178 行
C
178 行
#include <stm32f10x_lib.h>
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "key.h"
#include "exti.h"
#include "wdg.h"
#include "timer.h"
#include "lcd.h"
#include "rtc.h"
#include "wkup.h"
#include "adc.h"
#include "dma.h"
#include "24cxx.h"
#include "flash.h"
#include "touch.h"
#include "24l01.h"
#include "mmc_sd.h"
#include "remote.h"
#include "stdlib.h"
#include "math.h"
#define basicpwm0 5000//4380 4350 4330 4300 4270 4240 好治 //5000//3550//4700// 5050//5000
#define basicpwm1 4900//4380 4370 4320 4300 4270 4320好治 //4200//3200//4905//4900
#define basicpwm2 4800 //4000//3300//5150//4800
#define basicpwm3 4700 //4500//3400//4850//5300//4700
#define basicpwm4 //4600hz //3900//3350//4900//5100
#define basicpwm5 //4500haoz //4400//3450//4950//5200
#define PI 3.14
u16 adcx,key,ad[20]; // 角度
u16 admax=10,admin=3000,adsum=0;
double jiaodu,anglemax=2640.0,anglemin=710.0,anglemid=1675.0,angle;
int adcc()
{ int i=0,j=0; //adcx=Get_Adc(ADC_CH0);
admax=10;
admin=3000;
adsum=0;
for(i=0;i<19;i++)
{ ad[i]=ad[i+1];}
ad[19]=Get_Adc(ADC_CH0);
for(i=0;i<20;i++)
{if(ad[i]<admin)admin=ad[i];
if(ad[i]>admax)admax=ad[i];
adsum+=ad[i]; }
adcx=(adsum-admin-admax)/18;
angle=(adcx-anglemid)/(anglemax-anglemid) ;
jiaodu=asin(angle)/PI*180;
delay_ms(5);j=jiaodu-2.8;
return j;
}
void dianji()
{
u8 key1;
u16 i=0;
u8 m=0;
printf(" %d",LED0_PWM_VAL);
while(1)
{ LCD_ShowNum(60,130,adcc()-3,16,16);//显示角度
if(key1==104)
{ LCD_ShowNum(60,130,adcc()-3,16,16);break;//显示角度
}
else
{
if(Remote_Rdy)
{ key1=Remote_Process();
switch(key1)
{
case 48:
LED0_PWM_VAL-=10; printf(" %d",LED0_PWM_VAL); delay_ms(10000);//if(adcc()>=12){LCD_ShowString(60,130," ");}//printf("%d ",adcc()-1);//return adcx1 ;
LCD_ShowNum(60,130,adcc()-3,16,16);//显示角度
break;
case 24:
LED0_PWM_VAL+=10; printf(" %d",LED0_PWM_VAL); delay_ms(10000); //printf("%d ",adcc()-1);
LCD_ShowNum(60,130,adcc()-3,16,16);//显示角度
break;
case 122:
LED0_PWM_VAL-=30; printf(" %d",LED0_PWM_VAL); //printf("%d ",adcc()-1);
LCD_ShowNum(60,130,adcc()-3,16,16);//显示角度
break;
case 16:
LED0_PWM_VAL+=30; printf(" %d",LED0_PWM_VAL); // printf("%d ",adcc()-1);
LCD_ShowNum(60,130,adcc()-3,16,16); break;
case 56:
LED0_PWM_VAL-=50; printf(" %d",LED0_PWM_VAL); //printf("%d ",adcc()-1);
LCD_ShowNum(60,130,adcc()-3,16,16);
break;
case 90:
LED0_PWM_VAL+=50; printf(" %d",LED0_PWM_VAL); //printf("%d ",adcc()-1);
LCD_ShowNum(60,130,adcc()-3,16,16);
break;
}
}
}
}
}
// }
int main(void)
{ u8 i;
int m;
Stm32_Clock_Init(9);//系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口1初始化
LCD_Init(); //初始化液晶
LED_Init();
KEY_Init();
Adc_Init();
Remote_Init(); //初始化红外接收
PWM_Init(9000,79);
POINT_COLOR=RED; //设置字体为红色
LCD_ShowString(60,50,"show angle"); //LED初始化
LED0_PWM_VAL=9000;
for(i=0;i<100;i++)
{adcc();}
while(1)
{
if(Remote_Rdy)
{
key=Remote_Process();
switch(key)
{
case 104: //////////////////功能1
while(1)
{// LCD_Clear(WHITE);
if(adcc()>=0){
LCD_ShowChar(1,130,'+',16,0);
LCD_ShowNum(60,130,adcc()-2,16,16);//显示角度
}
else {m=-adcc();
LCD_ShowChar(1,130,'-',16,0);
LCD_ShowNum(60,130,m-2,16,16);//printf("%d ",m);
}
key=Remote_Process();if(key==152)break;
}
case 152: //////////////
{
while(1)
{ //Remote_Rdy=0;
LED0_PWM_VAL=4600;delay_ms(1000); //LCD_ShowNum(60,130,adcc()-1,16,16);
dianji();
//LCD_ShowNum(60,130,adcc()-3,16,16); printf("%d ",adcc()-1);
}
}
}
}
}
}
/* POINT_COLOR=RED;//设置字体为红色
LCD_ShowString(60,50,"Mini STM32");
LCD_ShowString(60,70,"REMOTE TEST");
LCD_ShowString(60,90,"ATOM@ALIENTEK");
LCD_ShowString(60,110,"2011/1/1");
LCD_ShowString(30,130, "KEYVAL:");
LCD_ShowString(130,130,"KEYCNT:");
LCD_ShowString(30,150, "SYMBOL:"); */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?