性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

  • 回復
  • 收藏
  • 點贊
  • 分享
  • 發(fā)新帖

stm8 AD轉(zhuǎn)換雙路程序

/**
  ******************************************************************************
  * @file    Project/main.c 
  * @author  MCD Application Team
  * @version V2.0.0
  * @date    25-February-2011
  * @brief   Main program body
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * 

© COPYRIGHT 2011 STMicroelectronics

****************************************************************************** */ /* Includes ------------------------------------------------------------------*/ #include "stm8s.h" /* Private defines -----------------------------------------------------------*/ unsigned char const shumaguan[] = {0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90}; //ADCValue數(shù)組存放A/D采樣值,voltageADC為數(shù)字濾波后的結(jié)果 unsigned int ADCValue[10] = {0},ADCValue1[10] = {0},voltageADC = 0,voltageADC1 = 0; //voltage為電壓計算結(jié)果,單位mV unsigned int voltage = 0; unsigned int voltage1 = 0; unsigned int voltage11 = 0; /* Private function prototypes -----------------------------------------------*/ void ADConvert(void); void DigitalFiltering(void); void ADConvert1(void); void DigitalFiltering1(void); void Display(void); void Delay(unsigned int t); /* Private functions ---------------------------------------------------------*/ void main(void) { unsigned char i; //PG口數(shù)碼管段選,PE口數(shù)碼管位選 GPIO_Init(GPIOG,GPIO_PIN_ALL,GPIO_MODE_OUT_PP_HIGH_FAST); GPIO_Init(GPIOE,GPIO_PIN_ALL,GPIO_MODE_OUT_PP_HIGH_FAST); GPIO_Init(GPIOB,GPIO_PIN_ALL,GPIO_MODE_IN_FL_NO_IT); /*ADC2配置為: -連續(xù)轉(zhuǎn)換模式 -通道0(PB0) -fADC = fmaster/2 -觸發(fā)模式為定時器 -觸發(fā)關(guān) -數(shù)據(jù)右對齊 -選擇通道0上的施密特觸發(fā)器 -施密特觸發(fā)器關(guān)*/ ADC2_Init(ADC2_CONVERSIONMODE_CONTINUOUS, ADC2_CHANNEL_0|ADC2_CHANNEL_1, ADC2_PRESSEL_FCPU_D2, ADC2_EXTTRIG_TIM, DISABLE, ADC2_ALIGN_RIGHT, ADC2_SCHMITTTRIG_CHANNEL0, DISABLE); /* Infinite loop */ while (1) { //連續(xù)轉(zhuǎn)換10次 ADC2_ConversionConfig(ADC2_CONVERSIONMODE_CONTINUOUS, ADC2_CHANNEL_0, ADC2_ALIGN_RIGHT); ADConvert(); //數(shù)字濾波 DigitalFiltering(); //連續(xù)轉(zhuǎn)換10次 ADC2_ConversionConfig(ADC2_CONVERSIONMODE_CONTINUOUS, ADC2_CHANNEL_1, ADC2_ALIGN_RIGHT); ADConvert1(); //數(shù)字濾波 DigitalFiltering1(); i = 200; while(i --) Display(); } } void ADConvert(void) { unsigned char count = 0; //連續(xù)轉(zhuǎn)換 ADC2->CR1 |= 0x02; ADC2_StartConversion(); while(count < 10) { //等待轉(zhuǎn)換結(jié)束 while(ADC2_GetFlagStatus() == RESET); //清除轉(zhuǎn)換結(jié)束標志位 ADC2_ClearFlag(); ADCValue[count] = ADC2_GetConversionValue(); count++; } //關(guān)閉連續(xù)轉(zhuǎn)換 ADC2->CR1 &= ~0X02; } void ADConvert1(void) { unsigned char count = 0; //連續(xù)轉(zhuǎn)換 ADC2->CR1 |= 0x02; ADC2_StartConversion(); while(count < 10) { //等待轉(zhuǎn)換結(jié)束 while(ADC2_GetFlagStatus() == RESET); //清除轉(zhuǎn)換結(jié)束標志位 ADC2_ClearFlag(); ADCValue1[count] = ADC2_GetConversionValue(); count++; } //關(guān)閉連續(xù)轉(zhuǎn)換 ADC2->CR1 &= ~0X02; } void DigitalFiltering(void) { unsigned char i,j; unsigned int temp; //對數(shù)組排序 for(i = 2;i >= 1;i--) { for(j = 0;j<(i-1);j++) { if(ADCValue[j] > ADCValue[j+1]) { temp = ADCValue[j]; ADCValue[j] = ADCValue[j+1]; ADCValue[j+1] = temp; } } } //舍棄最大和最小的兩個數(shù),然后求平均值 voltageADC = 0; for(i = 2;i<=7;i++) voltageADC += ADCValue[i]; voltageADC /= 6; } void DigitalFiltering1(void) { unsigned char i,j; unsigned int temp; //對數(shù)組排序 for(i = 2;i >= 1;i--) { for(j = 0;j<(i-1);j++) { if(ADCValue1[j] > ADCValue1[j+1]) { temp = ADCValue1[j]; ADCValue1[j] = ADCValue1[j+1]; ADCValue1[j+1] = temp; } } } //舍棄最大和最小的兩個數(shù),然后求平均值 voltageADC1 = 0; for(i = 2;i<=7;i++) voltageADC1 += ADCValue1[i]; voltageADC1 /= 6; } void Display(void) { unsigned char displayArray[8],i; voltage = (unsigned int)((unsigned long)voltageADC * 24155UL / 1023UL); voltage1 = (unsigned int)((unsigned long)voltageADC1 * 5064UL / 1023UL); voltage11 = (0.0142968 * voltage1 - 36.228) * 1000; //拆分數(shù)據(jù),使用數(shù)碼管顯示 displayArray[7] = voltage11 / 1000; displayArray[6] = (voltage11 % 1000) / 100; displayArray[5] = (voltage11 % 100) / 10; displayArray[4] = voltage11 % 10; displayArray[3] = voltage / 10000; displayArray[2] = (voltage % 10000) / 1000; displayArray[1] = (voltage % 1000) / 100; displayArray[0] = voltage % 100/10; //使用數(shù)碼管顯示電壓值,單位mV GPIO_Write(GPIOG,shumaguan[displayArray[7]] & 0x7F); GPIO_Write(GPIOE,0x7F); Delay(100); GPIO_Write(GPIOG,shumaguan[displayArray[6]]); GPIO_Write(GPIOE,0xbF); Delay(100); GPIO_Write(GPIOG,shumaguan[displayArray[5]]); GPIO_Write(GPIOE,0xdF); Delay(100); GPIO_Write(GPIOG,shumaguan[displayArray[4]]); GPIO_Write(GPIOE,0xEF); Delay(100); GPIO_Write(GPIOG,shumaguan[displayArray[3]]); GPIO_Write(GPIOE,0xF7); Delay(100); GPIO_Write(GPIOG,shumaguan[displayArray[2]] & 0x7F); GPIO_Write(GPIOE,0xFb); Delay(100); GPIO_Write(GPIOG,shumaguan[displayArray[1]]); GPIO_Write(GPIOE,0xFd); Delay(100); GPIO_Write(GPIOG,shumaguan[displayArray[0]]); GPIO_Write(GPIOE,0xFe); Delay(100); GPIO_Write(GPIOE,0xFF); Delay(100); } void Delay(unsigned int t) { while(t--); } #ifdef USE_FULL_ASSERT /** * @brief Reports the name of the source file and the source line number * where the assert_param error has occurred. * @param file: pointer to the source file name * @param line: assert_param error line source number * @retval : None */ void assert_failed(u8* file, u32 line) { /* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ /* Infinite loop */ while (1) { } } #endif /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
全部回復(12)
正序查看
倒序查看
2014-05-13 19:34
希望可以幫助到有需要的朋友。
0
回復
2014-05-13 21:42
@SKY丶輝煌
希望可以幫助到有需要的朋友。
柴兄的帖子不錯,支持一個!
0
回復
dapeng
LV.5
4
2014-05-14 08:29

不錯,不得不頂

0
回復
2014-05-14 19:27
@yueyunno1
柴兄的帖子不錯,支持一個!

嘿嘿,我這就是鳳毛麟角,還是得多跟您學習啊。

這個是我們做校賽的時候電流采樣的程序,覺得挺有意義的。一路AD采樣和兩路AD采樣是質(zhì)的變化,而兩路采樣AD和三路才是大同小異。

0
回復
2014-05-14 19:31
@dapeng
不錯,不得不頂
謝謝~
0
回復
新月GG
LV.10
7
2014-05-15 09:12
@SKY丶輝煌
嘿嘿,我這就是鳳毛麟角,還是得多跟您學習啊。這個是我們做校賽的時候電流采樣的程序,覺得挺有意義的。一路AD采樣和兩路AD采樣是質(zhì)的變化,而兩路采樣AD和三路才是大同小異。

不明覺厲

0
回復
cltwolf
LV.5
8
2014-05-15 11:52

學習學習,雖然沒玩過STM8。但從輝煌兄這程序看,看起來很高大上的樣子。

0
回復
2014-05-15 12:41
@新月GG
不明覺厲
0
回復
SKY丶輝煌
LV.10
10
2014-05-15 12:42
@cltwolf
學習學習,雖然沒玩過STM8。但從輝煌兄這程序看,看起來很高大上的樣子。
謝謝兄弟!
0
回復
daihui713
LV.6
11
2014-05-16 17:17
AD求平均可以采用算數(shù)平均法,也可以采用加權(quán)平均法,后者會理想一點
0
回復
SKY丶輝煌
LV.10
12
2014-05-16 21:10
@daihui713
AD求平均可以采用算數(shù)平均法,也可以采用加權(quán)平均法,后者會理想一點

是的,算法不同

0
回復
紅果
LV.1
13
2017-05-23 20:50
@SKY丶輝煌
是的,算法不同

正在學STM8,正在搞三路adc,正需要,多謝奉獻。

0
回復
發(fā)