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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2340|回復: 0
打印 上一主題 下一主題
收起左側

stm32f4xxDAC實驗源碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:340141 發表于 2018-5-28 21:40 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
stm32f4xxDAC實驗代碼
實驗現象:
    本實驗利用按鍵(KEY1/KEY_UP兩個按鍵,或USMART)控制STM32F4內部DAC模塊的通道1來輸出電壓,通過ADC1的
    通道5采集DAC的輸出電壓,在LCD模塊上面顯示ADC獲取到的電壓值以及DAC的設定輸出電壓值等信息。同時可以通
    過usmart調用Dac1_Set_Vol函數,來直接設置DAC輸出電壓。
   
注意事項:
    1,4.3寸和7寸屏需要比較大電流,USB供電可能不足,請用外部電源適配器(推薦外接12V 1A電源).
    2,本例程在LCD_Init函數里面(在ILI93xx.c),用到了printf,如果不初始化串口1,將導致液晶無法顯示!!
    3,ADC和DAC的參考電壓默認通過P7連接在VDDA上面(3.3V),所以默認參考電壓是3.3V  
    4,通過跳線帽短接多功能接口(P12)的ADC和DAC,即可實現自測試(AD讀取DA值,顯示在LCD上)

單片機源程序如下:
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "led.h"
  5. #include "lcd.h"
  6. #include "adc.h"
  7. #include "dac.h"
  8. #include "key.h"


  9. int main(void)
  10. {
  11.         u16 adcx;
  12.         float temp;
  13.         u8 t=0;         
  14.         u16 dacval=0;
  15.         u8 key;       
  16.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置系統中斷優先級分組2
  17.         delay_init(168);      //初始化延時函數
  18.         uart_init(115200);                //初始化串口波特率為115200
  19.        
  20.         LED_Init();                                        //初始化LED
  21.         LCD_Init();                                        //LCD初始化
  22.         Adc_Init();                                 //adc初始化
  23.         KEY_Init();                                 //按鍵初始化
  24.         Dac1_Init();                                 //DAC通道1初始化       
  25.         POINT_COLOR=RED;
  26.         LCD_ShowString(30,50,200,16,16,"Explorer STM32F4");       
  27.         LCD_ShowString(30,70,200,16,16,"DAC TEST");       
  28.         LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
  29.         LCD_ShowString(30,110,200,16,16,"2014/5/6");         
  30.         LCD_ShowString(30,130,200,16,16,"WK_UP:+  KEY1:-");         
  31.         POINT_COLOR=BLUE;//設置字體為藍色               
  32.         LCD_ShowString(30,150,200,16,16,"DAC VAL:");             
  33.         LCD_ShowString(30,170,200,16,16,"DAC VOL:0.000V");             
  34.         LCD_ShowString(30,190,200,16,16,"ADC VOL:0.000V");
  35.        
  36.   DAC_SetChannel1Data(DAC_Align_12b_R,dacval);//初始值為0       
  37.         while(1)
  38.         {
  39.                 t++;
  40.                 key=KEY_Scan(0);                          
  41.                 if(key==WKUP_PRES)
  42.                 {                 
  43.                         if(dacval<4000)dacval+=200;
  44.                         DAC_SetChannel1Data(DAC_Align_12b_R, dacval);//設置DAC值
  45.                 }else if(key==2)       
  46.                 {
  47.                         if(dacval>200)dacval-=200;
  48.                         else dacval=0;
  49.                         DAC_SetChannel1Data(DAC_Align_12b_R, dacval);//設置DAC值
  50.                 }         
  51.                 if(t==10||key==KEY1_PRES||key==WKUP_PRES)         //WKUP/KEY1按下了,或者定時時間到了
  52.                 {          
  53.                         adcx=DAC_GetDataOutputValue(DAC_Channel_1);//讀取前面設置DAC的值
  54.                         LCD_ShowxNum(94,150,adcx,4,16,0);                //顯示DAC寄存器值
  55.                         temp=(float)adcx*(3.3/4096);                                 //得到DAC電壓值
  56.                         adcx=temp;
  57.                         LCD_ShowxNum(94,170,temp,1,16,0);                //顯示電壓值整數部分
  58.                         temp-=adcx;
  59.                         temp*=1000;
  60.                         LCD_ShowxNum(110,170,temp,3,16,0X80);            //顯示電壓值的小數部分
  61.                         adcx=Get_Adc_Average(ADC_Channel_5,10);                //得到ADC轉換值          
  62.                         temp=(float)adcx*(3.3/4096);                                //得到ADC電壓值
  63.                         adcx=temp;
  64.                         LCD_ShowxNum(94,190,temp,1,16,0);               //顯示電壓值整數部分
  65.                         temp-=adcx;
  66.                         temp*=1000;
  67.                         LCD_ShowxNum(110,190,temp,3,16,0X80);           //顯示電壓值的小數部分
  68.                         LED0=!LED0;          
  69.                         t=0;
  70.                 }            
  71.                 delay_ms(10);         
  72.         }       
  73. }

復制代碼

所有資料51hei提供下載:
DAC實驗.zip (545.31 KB, 下載次數: 8)


評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久影视 | 国产精品久久久久久婷婷天堂 | 欧美综合色 | 天天做日日做 | 久久精品69 | 成人九区 | 久久久蜜桃 | 99热这里有精品 | 久久免费国产视频 | 91污在线| 国产精品久久久久不卡 | 玖玖视频网 | 午夜精品视频 | 亚洲一区不卡在线 | 精品国产91乱码一区二区三区 | chinese中国真实乱对白 | 国产免费一级片 | 久久精品国产免费一区二区三区 | 91一区二区三区 | 99精品免费久久久久久久久日本 | 国产免费高清 | 一区二区视频 | 九九视频网| 911精品美国片911久久久 | 亚洲九九色 | 91在线视频精品 | 成人性生交大片免费看r链接 | 亚洲视频在线观看免费 | 九九色综合 | 国产一区二区不卡 | 国产91久久久久蜜臀青青天草二 | 日日夜夜av | 国产精品久久久久久久久免费高清 | 精品日韩一区二区 | 黄网免费看 | 亚洲 欧美 另类 综合 偷拍 | 中文久久| 日本不卡一区二区三区在线观看 | 国内精品久久久久 | 国产免费拔擦拔擦8x高清 | 日韩中文字幕一区二区 |