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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STM32F103內部DAC使用源碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:322834 發表于 2018-5-15 13:02 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
大容量的 STM32F103 具有內部 DAC,無線傳感器網絡實驗平臺 TDL-02 選擇的是
STM32F103ZET6 屬于大容量產品,所以是帶有 DAC 模塊的。
STM32 的 DAC 模塊(數字/模擬轉換模塊)是 12 位數字輸入,電壓輸出型的 DAC。DAC 可以配置為 8 位或 12 位模式,也可以與 DMA 控制器配合使用。DAC 工作在 12 位模式時,數據可以設置成左對齊或右對齊。DAC 模塊有 2 個輸出通道,每個通道都有單獨的轉換器。在雙
DAC 模式下,2 個通道可以獨立地進行轉換,也可以同時進行轉換并同步地更新 2 個通道的輸出。DAC 可以通過引腳輸入參考電壓 VREF+以獲得更精確的轉換結果。

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



  9. int main(void)
  10. {         
  11.         u16 adcx;
  12.         float temp;
  13.         u8 t=0;         
  14.         u16 dacval=0;
  15.         u8 key;
  16.         delay_init();                     //延時函數初始化          
  17.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置中斷優先級分組為組2:2位搶占優先級,2位響應優先級
  18.         uart_init(115200);                 //串口初始化為115200
  19.         KEY_Init();                          //初始化按鍵程序
  20.         LED_Init();                             //LED端口初始化
  21.         LCD_Init();                                  //LCD初始化
  22.         Adc_Init();                                  //ADC初始化
  23.         Dac1_Init();                                //DAC初始化

  24.         POINT_COLOR=RED;//設置字體為紅色        
  25.         LCD_ShowString(60,50,200,16,16,"Sensor STM32");       
  26.         LCD_ShowString(60,70,200,16,16,"Temperature TEST");       
  27.         LCD_ShowString(60,90,200,16,16,"Waroyal@DezLinc");
  28.         LCD_ShowString(60,110,200,16,16,"2015/9/2");
  29.         LCD_ShowString(60,130,200,16,16,"KEY2:+  KEY3:-");       
  30.         //顯示提示信息                                                                                             
  31.         POINT_COLOR=BLUE;//設置字體為藍色
  32.         LCD_ShowString(60,150,200,16,16,"DAC VAL:");             
  33.         LCD_ShowString(60,170,200,16,16,"DAC VOL:0.000V");             
  34.         LCD_ShowString(60,190,200,16,16,"ADC VOL:0.000V");
  35.        
  36.         DAC_SetChannel1Data(DAC_Align_12b_R, 0);//初始值為0                         
  37.         while(1)
  38.         {
  39.                 t++;
  40.                 key=KEY_Scan(0);                          
  41.                 if(key==KEY2_PRES)
  42.                 {                 
  43.                         if(dacval<4000)dacval+=200;
  44.                         DAC_SetChannel1Data(DAC_Align_12b_R, dacval);//設置DAC值       
  45.                 }else if(key==KEY3_PRES)       
  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==KEY2_PRES||key==KEY3_PRES) //WKUP/KEY1按下了,或者定時時間到了
  52.                 {          
  53.                         adcx=DAC_GetDataOutputValue(DAC_Channel_1);//讀取前面設置DAC的值
  54.                         LCD_ShowxNum(124,150,adcx,4,16,0);             //顯示DAC寄存器值
  55.                         temp=(float)adcx*(3.3/4096);                        //得到DAC電壓值
  56.                         adcx=temp;
  57.                         LCD_ShowxNum(124,170,temp,1,16,0);             //顯示電壓值整數部分
  58.                         temp-=adcx;
  59.                         temp*=1000;
  60.                         LCD_ShowxNum(140,170,temp,3,16,0X80);         //顯示電壓值的小數部分
  61.                         adcx=Get_Adc_Average(ADC_Channel_1,10);                //得到ADC轉換值          
  62.                         temp=(float)adcx*(3.3/4096);                        //得到ADC電壓值
  63.                         adcx=temp;
  64.                         LCD_ShowxNum(124,190,temp,1,16,0);             //顯示電壓值整數部分
  65.                         temp-=adcx;
  66.                         temp*=1000;
  67.                         LCD_ShowxNum(140,190,temp,3,16,0X80);         //顯示電壓值的小數部分
  68.                         LED0=!LED0;          
  69.                         t=0;
  70.                 }            
  71.                 delay_ms(10);       

  72.         }
  73. }

復制代碼

所有資料51hei提供下載:
DAC實驗.rar (325.65 KB, 下載次數: 71)


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:470646 發表于 2019-1-19 18:12 | 只看該作者
怎么不行啊,天哪,大哥哥救救我
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 不卡视频一区二区三区 | 久久av一区| 欧美日韩精品一区二区三区视频 | 国产在线不卡视频 | 国产清纯白嫩初高生视频在线观看 | 粉嫩av久久一区二区三区 | 国产一区| 日日天天 | 九九视频在线观看 | 日韩中文字幕在线视频 | 亚洲精品一区二区二区 | 欧美中文字幕一区二区三区亚洲 | 国产成人综合久久 | 97免费在线视频 | 欧美一区二区在线观看 | 中文字幕动漫成人 | av电影一区二区 | 精品一区二区久久久久久久网精 | 日本不卡一区二区三区在线观看 | 黑人精品欧美一区二区蜜桃 | 欧美精品被 | 91国产视频在线观看 | 国产精品视频一区二区三 | 中文字幕一区二区三区乱码在线 | 欧美日韩电影免费观看 | 欧美综合一区二区三区 | 男女视频在线观看网站 | 国产欧美一区二区三区日本久久久 | 国产精品视频免费播放 | 亚洲国产成人av好男人在线观看 | 国产一区2区 | 毛片一区二区三区 | 久久亚洲欧美日韩精品专区 | 成人av影院 | 国偷自产av一区二区三区 | 亚洲视频不卡 | 午夜婷婷激情 | 亚洲高清网| 久久久久国产视频 | 91成人免费看片 | 欧美男人天堂 |