利用c语言编程在stm32上输出信号控制电压放大与滤波系统和显示功能

全部原有的函数文件取自stm32上的规格参数表

程控系统硬件部分由vca810和max292两块可控芯片组成,前端配有快速运放电路


#include "led.h"

#include "delay.h"
#include "sys.h"
#include "pwm.h"
#include "lcd.h"
#include "key.h"
#include "usart.h"
#include "dac.h"
#include "adc.h"


//ALIENTEK Mini STM32¿ª·¢°å·¶Àý´úÂë8
//PWMÊä³öʵÑé   
//¼¼ÊõÖ§³Ö£ºwww.openedv.com
//¹ãÖÝÊÐÐÇÒíµç×ӿƼ¼ÓÐÏÞ¹«Ë¾




 int main(void)
 {
 
float temp;
 //u8 t=0;  
u16 dacval=0;
u16 adcx;  
u16 led0pwmval=0;  //¸ßµçƽµÄ¼ÆÊý´ÎÊý  
//u8 dir=1;  
 
u16 arr=0; //·ÖƵ¼ÆÊý
 
u16 keyval=0; //°´¼üµÄ´ÎÊý
u8 t=0; // ·À¶¶Ê±¼ä³õʼ
u8 key;
 
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// ÉèÖÃÖжÏÓÅÏȼ¶·Ö×é2
delay_init();     //ÑÓʱº¯Êý³õʼ»¯  
uart_init(9600); //´®¿Ú³õʼ»¯Îª9600
LED_Init();   //³õʼ»¯ÓëLEDÁ¬½ÓµÄÓ²¼þ½Ó¿Ú
  LCD_Init();   //³õʼ»¯LCD
KEY_Init(); //°´¼ü³õʼ»¯
  Adc_Init();   //ADC³õʼ»¯
Dac1_Init(); //DACͨµÀ1³õʼ»¯
 
 LED0=0;





POINT_COLOR=RED;//ÉèÖÃ×ÖÌåΪºìÉ« 
LCD_ShowString(60,50,200,16,16,"20153100001");
LCD_ShowString(60,70,200,16,16,"20153100104");
LCD_ShowString(60,90,200,16,16,"vca810/max292");
LCD_ShowString(60,110,200,16,16,"2017/12/2");
LCD_ShowString(0,130,300,16,16,"WK_UP:+fc KEY1:+-db KEY0:-fc");
//ÏÔʾÌáʾÐÅÏ¢      
POINT_COLOR=BLUE;//ÉèÖÃ×ÖÌåΪÀ¶É«
LCD_ShowString(60,150,200,16,16,"DAC VAL:");      
LCD_ShowString(60,170,200,16,16,"DAC VOL:0.000V");      
LCD_ShowString(60,190,200,16,16,"ADC VOL:0.000V");
  LCD_ShowString(60,210,200,16,16,"G=-40db");   //ΪÁËgÔÚÒ»¿ªÊ¼Îȶ¨ÏÔʾ
DAC_SetChannel1Data(DAC_Align_12b_R, 0);//????0    
 
 


//TIM1_PWM_Init(899,0);//²»·ÖƵ¡£PWMƵÂÊ=72000/(899+1)=80Khz 




    while(1)
{
t++;
key=KEY_Scan(0);

if(key==KEY1_PRES)
{
if(dacval<2635)dacval+=155;
if(dacval==2635)dacval=0;
DAC_SetChannel1Data(DAC_Align_12b_R, dacval);//??DAC?
}


if(key==WKUP_PRES)
{  
if(keyval<20)keyval+=1;
//DAC_SetChannel1Data(DAC_Align_12b_R, dacval);//??DAC?
}else if(key==KEY0_PRES)
{
if(keyval>1)keyval-=1;
//else keyval=1;                         //Õâ¾ä»°µÄ×÷Óôý¶¨ ²»Çå³þÊÇ·ñ»á¶ÔºóÃæ´úÂëÓÐÓ°Ïì
 //DAC_SetChannel1Data(DAC_Align_12b_R, dacval);//??DAC?
}



if(t==10||key==KEY0_PRES||key==WKUP_PRES||key==KEY1_PRES) //WKUP/KEY1°´ÏÂÁË,»òÕß¶¨Ê±Ê±¼äµ½ÁË
{  
  adcx=DAC_GetDataOutputValue(DAC_Channel_1);//??????DAC??
LCD_ShowxNum(124,150,adcx,4,16,0);     //ÏÔʾDAC¼Ä´æÆ÷Öµ
temp=(float)adcx*(3.3/4096); //µÃµ½DACµçѹֵ
adcx=temp;
  LCD_ShowxNum(124,170,temp,1,16,0);     //ÏÔʾµçѹֵÕûÊý²¿·Ö
  temp-=adcx;
temp*=1000;
LCD_ShowxNum(140,170,temp,3,16,0X80); //ÏÔʾµçѹֵµÄСÊý²¿·Ö
  adcx=Get_Adc_Average(ADC_Channel_1,10); //µÃµ½ADCת»»Öµ  
temp=(float)adcx*(3.3/4096); //µÃµ½ADCµçѹֵ
adcx=temp;
  LCD_ShowxNum(124,190,temp,1,16,0);     //ÏÔʾµçѹֵÕûÊý²¿·Ö
  temp-=adcx;
temp*=1000;
LCD_ShowxNum(140,190,temp,3,16,0X80); //ÏÔʾµçѹֵµÄСÊý²¿·Ö
//LED0=!LED0;  



switch(dacval)
{
case 0: LCD_ShowString(60,210,200,16,16,"G=-40db"); break;
case 155: LCD_ShowString(60,210,200,16,16,"G=-35db"); break;
case 310: LCD_ShowString(60,210,200,16,16,"G=-30db"); break;
case 465: LCD_ShowString(60,210,200,16,16,"G=-25db"); break;
case 620: LCD_ShowString(60,210,200,16,16,"G=-20db"); break;
case 775: LCD_ShowString(60,210,200,16,16,"G=-15db"); break;
case 930: LCD_ShowString(60,210,200,16,16,"G=-10db"); break;
case 1085: LCD_ShowString(60,210,200,16,16,"G= -5db"); break;
case 1240: LCD_ShowString(60,210,200,16,16,"G= -0db"); break;
case 1395: LCD_ShowString(60,210,200,16,16,"G= +5db"); break;
case 1550: LCD_ShowString(60,210,200,16,16,"G=+10db"); break;
case 1705: LCD_ShowString(60,210,200,16,16,"G=+15db"); break;
case 1860: LCD_ShowString(60,210,200,16,16,"G=+20db"); break;
case 2015: LCD_ShowString(60,210,200,16,16,"G=+25db"); break;
case 2170: LCD_ShowString(60,210,200,16,16,"G=+30db"); break;
case 2325: LCD_ShowString(60,210,200,16,16,"G=+35db"); break;
case 2480: LCD_ShowString(60,210,200,16,16,"G=+40db"); break;

 default:   LCD_ShowString(60,210,200,16,16,"G=-0db"); 
}


switch(keyval)
{
case 1: LCD_ShowString(60,230,200,16,16,"fc= 1khz"); arr=719;led0pwmval=360;  break;
case 2: LCD_ShowString(60,230,200,16,16,"fc= 2khz"); arr=359;led0pwmval=180; break;
case 3: LCD_ShowString(60,230,200,16,16,"fc= 3khz");arr=239;led0pwmval=120; break;
case 4: LCD_ShowString(60,230,200,16,16,"fc= 4khz"); arr=179;led0pwmval=90;break;
case 5: LCD_ShowString(60,230,200,16,16,"fc= 5khz"); arr=143;led0pwmval=72;break;
case 6: LCD_ShowString(60,230,200,16,16,"fc= 6khz"); arr=119;led0pwmval=60;break;
case 7: LCD_ShowString(60,230,200,16,16,"fc= 7khz"); arr=102;led0pwmval=51;break;
case 8: LCD_ShowString(60,230,200,16,16,"fc= 8khz"); arr=89;led0pwmval=45;break;
case 9: LCD_ShowString(60,230,200,16,16,"fc= 9khz"); arr=79;led0pwmval=40;break;
case 10: LCD_ShowString(60,230,200,16,16,"fc=10khz"); arr=71;led0pwmval=36;break;
case 11: LCD_ShowString(60,230,200,16,16,"fc=11khz"); arr=64;led0pwmval=32;break;
case 12: LCD_ShowString(60,230,200,16,16,"fc=12khz"); arr=59;led0pwmval=30;break;
case 13: LCD_ShowString(60,230,200,16,16,"fc=13khz"); arr=54;led0pwmval=27;break;
case 14: LCD_ShowString(60,230,200,16,16,"fc=14khz"); arr=50;led0pwmval=25;break;
case 15: LCD_ShowString(60,230,200,16,16,"fc=15khz"); arr=47;led0pwmval=24;break;
case 16: LCD_ShowString(60,230,200,16,16,"fc=16khz"); arr=44;led0pwmval=22;break;
case 17: LCD_ShowString(60,230,200,16,16,"fc=17khz"); arr=41;led0pwmval=21;break;
case 18: LCD_ShowString(60,230,200,16,16,"fc=18khz"); arr=39;led0pwmval=20;break;
case 19: LCD_ShowString(60,230,200,16,16,"fc=19khz"); arr=37;led0pwmval=19;break;
case 20: LCD_ShowString(60,230,200,16,16,"fc=20khz"); arr=35;led0pwmval=18;break;

 default:   LCD_ShowString(60,210,200,16,16,"  "); 
}
 TIM1_PWM_Init(arr,0);//²»·ÖƵ¡£PWMƵÂÊ=72000/(899+1)=80Khz 



t=0;
}  
//delay_ms(10);  
//if(dir)led0pwmval++;
//else led0pwmval--;  
  //if(led0pwmval>300)dir=0;
//if(led0pwmval==0)dir=1;    
TIM_SetCompare1(TIM1,led0pwmval);   //¿ØÖÆÕ¼¿Õ±È timΪarr·ÖƵ led0pwmvalΪ¸ßµçƽ¼ÆÊý¸öÊý 50%Ó¦¸ÃÊÇarrµÄÒ»°ë


//u8 led0pwmval=0;  //¸ßµçƽµÄ¼ÆÊý´ÎÊý  
//u8 dir=1;
 





}

你可能感兴趣的:(C语言)