99久久全国免费观看_国产一区二区三区四区五区VM_久久www人成免费看片中文_国产高清在线a视频大全_深夜福利www_日韩一级成人av

  • 回復
  • 收藏
  • 點贊
  • 分享
  • 發新帖

stm8 AD轉換雙路程序

/**
  ******************************************************************************
  * @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數組存放A/D采樣值,voltageADC為數字濾波后的結果 unsigned int ADCValue[10] = {0},ADCValue1[10] = {0},voltageADC = 0,voltageADC1 = 0; //voltage為電壓計算結果,單位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口數碼管段選,PE口數碼管位選 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配置為: -連續轉換模式 -通道0(PB0) -fADC = fmaster/2 -觸發模式為定時器 -觸發關 -數據右對齊 -選擇通道0上的施密特觸發器 -施密特觸發器關*/ 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) { //連續轉換10次 ADC2_ConversionConfig(ADC2_CONVERSIONMODE_CONTINUOUS, ADC2_CHANNEL_0, ADC2_ALIGN_RIGHT); ADConvert(); //數字濾波 DigitalFiltering(); //連續轉換10次 ADC2_ConversionConfig(ADC2_CONVERSIONMODE_CONTINUOUS, ADC2_CHANNEL_1, ADC2_ALIGN_RIGHT); ADConvert1(); //數字濾波 DigitalFiltering1(); i = 200; while(i --) Display(); } } void ADConvert(void) { unsigned char count = 0; //連續轉換 ADC2->CR1 |= 0x02; ADC2_StartConversion(); while(count < 10) { //等待轉換結束 while(ADC2_GetFlagStatus() == RESET); //清除轉換結束標志位 ADC2_ClearFlag(); ADCValue[count] = ADC2_GetConversionValue(); count++; } //關閉連續轉換 ADC2->CR1 &= ~0X02; } void ADConvert1(void) { unsigned char count = 0; //連續轉換 ADC2->CR1 |= 0x02; ADC2_StartConversion(); while(count < 10) { //等待轉換結束 while(ADC2_GetFlagStatus() == RESET); //清除轉換結束標志位 ADC2_ClearFlag(); ADCValue1[count] = ADC2_GetConversionValue(); count++; } //關閉連續轉換 ADC2->CR1 &= ~0X02; } void DigitalFiltering(void) { unsigned char i,j; unsigned int temp; //對數組排序 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; } } } //舍棄最大和最小的兩個數,然后求平均值 voltageADC = 0; for(i = 2;i<=7;i++) voltageADC += ADCValue[i]; voltageADC /= 6; } void DigitalFiltering1(void) { unsigned char i,j; unsigned int temp; //對數組排序 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; } } } //舍棄最大和最小的兩個數,然后求平均值 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; //拆分數據,使用數碼管顯示 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; //使用數碼管顯示電壓值,單位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采樣是質的變化,而兩路采樣AD和三路才是大同小異。

0
回復
2014-05-14 19:31
@dapeng
不錯,不得不頂
謝謝~
0
回復
新月GG
LV.10
7
2014-05-15 09:12
@SKY丶輝煌
嘿嘿,我這就是鳳毛麟角,還是得多跟您學習啊。這個是我們做校賽的時候電流采樣的程序,覺得挺有意義的。一路AD采樣和兩路AD采樣是質的變化,而兩路采樣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求平均可以采用算數平均法,也可以采用加權平均法,后者會理想一點
0
回復
SKY丶輝煌
LV.10
12
2014-05-16 21:10
@daihui713
AD求平均可以采用算數平均法,也可以采用加權平均法,后者會理想一點

是的,算法不同

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

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

0
回復
主站蜘蛛池模板: 欧美成人高清ww | 探花bt| 深夜视频国产 | 亚洲女同成av人片在线观看 | 9797色 | 免费人成视频网站在线18 | 成人午夜看片网址 | a一级黄色| 日本精品一区二区三区视频 | 久久精品亚洲精品无码金尊 | 免费乱码人妻系列无码专区 | 久久久国产一区二区 | 久久国产精品人妻丝袜 | 综合欧美亚洲日本 | 国内精品国产三级国产 | 欧美肉大捧一进一出免费视频 | 午夜嘿嘿嘿在线观看 | 天天看天天射 | 艳妇乳肉豪妇荡乳AV无码福利 | 国产福利萌白酱在线观看视频 | YY111111少妇影院免费观看 | 性久久久久久久久久久 | 亚洲а∨天堂久久精品2021 | 人人爽人人澡人人高潮 | 精品乱码久久久久久中文字幕 | 亚洲成年在线 | 视频在线在亚洲 | 精品国产子伦久久久久久小说 | 国产午夜亚洲精品午夜鲁丝片 | 国产精品无码在线 | 天天做天天爱天天爽综合网 | 98超碰在线 | 免费在线观看色视频 | 手机av在线播放 | 精品久久伊人99热超碰 | 最近中文字幕免费MV在线视频 | 久久精品这里热有精品 | 国产色综合视频 | 国产美女精品视频线免费播放软件 | 亚洲第一天堂网 | 黄色免费看片 |