久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9124|回復: 8
收起左側

基于STM32F103RCT6的串口數據采集(4路ADC+4路數字量)源程序

  [復制鏈接]
ID:360398 發表于 2018-6-27 16:55 | 顯示全部樓層 |閱讀模式
4路ADC+4路數字量。4路模擬信號+4路數字信號

被測電路設計

被測電路設計

測量結果

測量結果

基于STM32F103RCT6的串口數據采集程序

基于STM32F103RCT6的串口數據采集程序


單片機源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "usart.h"
  5. #include "lcd.h"
  6. #include "adc.h"
  7. #include "dma.h"
  8. #define  Channel_Number 4 // 通道數的宏定義

  9. #define KEY0  GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)
  10. #define KEY1  GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)
  11. #define KEY2  GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)
  12. #define KEY3  GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)



  13. #define KEY0_PRES 1       
  14. #define KEY1_PRES        2       
  15. #define KEY2_PRES        3       
  16. #define KEY3_PRES 4       

  17. u16  AD_Digital_Value[Channel_Number];                                        //AD采樣值
  18. float AD_Analog_Value[Channel_Number];                                        //AD模擬電壓值
  19. void KEY_Init(void)
  20. {
  21.         GPIO_InitTypeDef GPIO_InitStructure;

  22.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE,ENABLE);

  23.         GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;
  24.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  25.         GPIO_Init(GPIOE, &GPIO_InitStructure);

  26.         GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0;
  27.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
  28.         GPIO_Init(GPIOA, &GPIO_InitStructure);

  29. }
  30. u8 KEY_Scan1(u8 mode)
  31. {         
  32.         static u8 key_up=1;
  33.         if(mode)key_up=1;   
  34.         if(key_up&&(KEY0==0))
  35.         {
  36.                 delay_ms(10);
  37.                 key_up=0;
  38.                 if(KEY0==0)return KEY0_PRES;
  39. //                else if(KEY1==0)return KEY1_PRES;
  40. //                else if(KEY2==0)return KEY2_PRES;
  41. //                else if(KEY3==0)return KEY3_PRES;
  42.         }else if(KEY0==1)key_up=1;             
  43.         return 0;
  44. }
  45. u8 KEY_Scan2(u8 mode)
  46. {         
  47.         static u8 key_up=1;
  48.         if(mode)key_up=1;   
  49.         if(key_up&&(KEY1==0))
  50.         {
  51.                 delay_ms(10);
  52.                 key_up=0;
  53.                 if(KEY1==0)return KEY1_PRES;
  54. //                else if(KEY1==0)return KEY1_PRES;
  55. //                else if(KEY2==0)return KEY2_PRES;
  56. //                else if(KEY3==0)return KEY3_PRES;
  57.         }else if(KEY1==1)key_up=1;             
  58.         return 0;
  59. }
  60. u8 KEY_Scan3(u8 mode)
  61. {         
  62.         static u8 key_up=1;
  63.         if(mode)key_up=1;   
  64.         if(key_up&&(KEY2==0))
  65.         {
  66.                 delay_ms(10);
  67.                 key_up=0;
  68.                 if(KEY2==0)return KEY2_PRES;
  69.         }else if(KEY2==1)key_up=1;             
  70.         return 0;
  71. }
  72. u8 KEY_Scan4(u8 mode)
  73. {         
  74.         static u8 key_up=1;
  75.         if(mode)key_up=1;   
  76.         if(key_up&&(KEY3==0))
  77.         {
  78.                 delay_ms(10);
  79.                 key_up=0;
  80.                 if(KEY3==0)return KEY3_PRES;
  81. //                else if(KEY1==0)return KEY1_PRES;
  82. //                else if(KEY2==0)return KEY2_PRES;
  83. //                else if(KEY3==0)return KEY3_PRES;
  84.         }else if(KEY3==1)key_up=1;             
  85.         return 0;
  86. }
  87. int main(void)
  88. {
  89.                 u8 i;//定義一個變量
  90.                 char a1 = 0;
  91.                 char a2 = 0;
  92.                 char a3 = 0;
  93.                 char a4 = 0;
  94.                 KEY_Init();
  95.                 SystemInit();//延時初始化
  96.                 delay_init(72);             //延時初始化
  97.                 NVIC_Configuration();//中斷初始化
  98.                  uart_init(9600);//串口初始化
  99.                  LED_Init();//led燈初始化
  100.                 LCD_Init();//lcd液晶顯示屏初始化
  101.                 POINT_COLOR=RED;//設置字體為紅色                   
  102.                 POINT_COLOR=BLUE;//設置字體為藍色
  103.                 ADC1_Configuration();            //ADC初始化
  104.                 delay_ms(10);//延時
  105.                 DMA_Configuration(DMA1_Channel1,(u32)&ADC1->DR,(u32)AD_Digital_Value,Channel_Number );//DMA1通道1;外設為ADC1;
  106.                 DMA_Cmd(DMA1_Channel1, ENABLE);//啟動DMA通道
  107.                 ADC_SoftwareStartConvCmd(ADC1, ENABLE);//軟件啟動AD轉換
  108.         while (1)
  109.         {
  110.                 a1 = KEY_Scan1(1);
  111.                 a2 = KEY_Scan2(1);
  112.                 a3 = KEY_Scan3(1);
  113.                 a4 = KEY_Scan4(1);
  114.                
  115.                 while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待轉換結束
  116.           while(DMA_GetFlagStatus(DMA1_FLAG_TC1)==RESET);//等待傳輸完成否則第一位數據容易丟失
  117.                 DMA_ClearFlag(DMA1_FLAG_TC1); //清除通道 1 傳輸完成標志
  118.     for( i=0;i<Channel_Number;i++)
  119.                         {
  120.                                 AD_Analog_Value[i]=(float)AD_Digital_Value[i]*(3.3/4096); //將讀取到的值存入數組里面
  121.                         }
  122.                 printf("\r\n 模擬信號1:%d  模擬電壓1:%f \r\n",AD_Digital_Value[0],AD_Analog_Value[0]);        //串口打印出來通道1的電壓值以及測得的ad轉化的值
  123.                 printf("\r\n 模擬信號2:%d  模擬電壓2:%f \r\n",AD_Digital_Value[1],AD_Analog_Value[1]);        //串口打印出來通道2的電壓值以及測得的ad轉化的值       
  124.                 printf("\r\n 模擬信號3:%d  模擬電壓3:%f \r\n",AD_Digital_Value[2],AD_Analog_Value[2]);        //串口打印出來通道3的電壓值以及測得的ad轉化的值
  125.                 printf("\r\n 模擬信號4:%d  模擬電壓4:%f \r\n",AD_Digital_Value[3],AD_Analog_Value[3]);        //串口打印出來通道4的電壓值以及測得的ad轉化的值
  126.                 if(a1 == 1)
  127.                 {
  128.                                 printf("\r\n 數字信號通道1為1\r\n");       
  129.                 }
  130.                 if(a1 == 0)
  131.                 {
  132.                                 printf("\r\n 數字信號通道1為0\r\n");       
  133.                 }
  134.                 if(a2 == 1)
  135.                 {
  136.                                 printf("\r\n 數字信號通道2為1\r\n");       
  137.                 }
  138.                 if(a2 == 0)
  139.                 {
  140.                                 printf("\r\n 數字信號通道2為0\r\n");       
  141.                 }
  142.                 if(a3 == 1)
  143.                 {
  144.                                 printf("\r\n 數字信號通道3為1\r\n");       
  145.                 }
  146.                 if(a3 == 0)
  147.                 {
  148.                                 printf("\r\n 數字信號通道3為0\r\n");       
  149.                 }
  150.                 if(a4 == 1)
  151.                 {
  152.                                 printf("\r\n 數字信號通道4為1\r\n");       
  153.                 }
  154.                 if(a4 == 0)
  155.                 {
  156.                                 printf("\r\n 數字信號通道4為0\r\n");       
  157.                 }

  158. //                LED0=!LED0;
  159.                 delay_ms(100);       
  160.        
  161.         }
  162. }

復制代碼

所有資料51hei提供下載:
4路ADC 4路數字量 (1).7z (735.19 KB, 下載次數: 226)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:390650 發表于 2018-9-17 15:18 | 顯示全部樓層
有硬件電路圖嗎?
回復

使用道具 舉報

ID:465802 發表于 2019-1-10 14:21 | 顯示全部樓層
只能先看看。。黑幣不夠。
回復

使用道具 舉報

ID:465802 發表于 2019-1-10 14:22 | 顯示全部樓層
s360221867 發表于 2018-9-17 15:18
有硬件電路圖嗎?

這個外部電路很簡單的。直接把電壓接到單片機的ADC接口上去采集就好。
回復

使用道具 舉報

ID:66915 發表于 2019-1-15 16:37 | 顯示全部樓層
貌似不是很懂我,還需要繼續學習學習
回復

使用道具 舉報

ID:696937 發表于 2020-2-23 14:14 | 顯示全部樓層
正需要呀
回復

使用道具 舉報

ID:702600 發表于 2020-3-6 10:00 | 顯示全部樓層
多謝樓主分享,學習了。
回復

使用道具 舉報

ID:501920 發表于 2020-11-14 19:32 | 顯示全部樓層
你這是RBT6呀
回復

使用道具 舉報

ID:278170 發表于 2020-11-25 10:47 | 顯示全部樓層

正需要呀,多謝樓主分享,學習了。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩黄色一级片 | 精品一二三| 欧美激情精品久久久久久 | 伊人网综合在线观看 | 欧美成人一区二区三区 | 成人一区二区三区在线观看 | 日韩电影免费观看中文字幕 | 久久久久国产精品午夜一区 | 密色视频 | 色av一区二区 | 国产在线一| 欧美一级欧美三级在线观看 | 欧美日韩一 | 亚洲网站免费看 | 国产一级淫片a直接免费看 免费a网站 | 色播久久久 | 黄色片a级| 成人午夜激情 | 日韩欧美在线视频 | 亚洲国产精品久久久久秋霞不卡 | 青青草原综合久久大伊人精品 | 91毛片在线看 | 中文字幕不卡在线观看 | 成人在线观看黄 | 国产九九精品 | 亚洲一区二区免费 | 91网在线观看 | 91影库| 午夜久久久久久久久久一区二区 | 国产亚洲网站 | 伊人色综合久久天天五月婷 | 欧美日韩综合视频 | 91精品国产综合久久久密闭 | 亚洲在线免费观看 | 免费能直接在线观看黄的视频 | 国产欧美一区二区三区在线看 | 日韩一区二 | 国产精品成人国产乱一区 | 欧美性吧| 久久国产精品99久久久大便 | 91精品国产综合久久久久久蜜臀 |