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 + -
显示快捷键?