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

標題: 單片機DAC0832波形發生器實驗報告 [打印本頁]

作者: m0ck    時間: 2017-12-1 15:06
標題: 單片機DAC0832波形發生器實驗報告
一個能產生正弦波、方波、三角波、梯形波、鋸齒波的波形發生器。
基本實現:5個按鍵,每按一次按鍵后輸出對應波形
                5個led指示對應波形
                示波器中顯示2~3個周期波形時,正弦波波形要光滑              
                雙極性電壓輸出,電壓幅值可調.
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)

實驗報告
實驗名稱:波形發生器
班級:應物142
小組成員:董世豪 謝士輝 孫志偉 趙輝 孫豪

單片機實驗——DA轉換實驗

DA轉換器是將數字量轉換為模擬量的電路,主要用于數據傳輸系統、自動測試設備、醫療信息處理、電視信號的數字化、圖像信號的處理和識別、數字通信和語音信息處理等。按數字量輸入方式:并行輸入和串行輸入DA轉換器。按模擬量輸出方式:電流輸出和電壓輸出DA轉換器。按DA轉換的分辯率:低分辯率、中分辯率和高分辯率DA轉換器。學習并熟悉如何設置DA轉換對于科學研究等將產生重要影響。

1實驗目的

      ( 4 )  設計一個能產生正弦波、方波、三角波、梯形波、鋸齒波的波形發生器。

2 D/A轉換器工作原理

任D/A是將數字量轉換成模擬量的器件,D/A的輸出是電壓或電流信號。衡量D/A性能的主要參數是:

分辨率:即輸出模擬量的最小變化量。
滿刻度誤差:即輸入為全1時,實際輸出電壓與理想值之差。
輸出范圍
轉換時間:從轉換器的輸入改變到輸出穩定的時間間隔。
是否容易與CPU接口。
3 DAC0832工作方式
DAC0832三種工作方式

D/A轉換

D/A芯片DAC0832的應用:DAC0832是8位              D/A芯片,片內帶數據鎖存器,電流輸出。該系列產品包括DAC0830——32,它們可以完全相互代換。它由8位輸入鎖存器、8位DAC寄存器、8位D/A轉換電路及轉換控制電路組成

ADC0808引腳如圖,各引腳功能如下:

4.0 電路圖

4.1轉換電路


4.2波形指示


4.3按鍵電路


4.4單片機電路

  




4.5 運行結果

三角形
方波
鋸齒波
梯形波
正弦波

5. 總結

方波擬合成功,其他波形擬合存在問題。


單片機源程序如下:
  1. #include "reg52.h"
  2. #include <math.h>

  3. #define ADC_PORT P2 //如圖,ADC0832連接端口

  4. //老師要求的5種波
  5. #define W_SINE 0
  6. #define W_SQU 1
  7. #define W_TRI 2
  8. #define W_TRA 3
  9. #define W_SAW 4

  10. #define PI 3.1415926f //圓周率好像是這個數

  11. //簡化類型符寫法
  12. typedef unsigned char u8;
  13. typedef unsigned int u16;
  14. typedef unsigned long u32;

  15. sbit ADC_CS_WR=P3^0; //如圖,ADC0832使能口

  16. //老師要求的5個LED,接P0口
  17. sbit LED0=P0^0;
  18. sbit LED1=P0^1;
  19. sbit LED2=P0^2;
  20. sbit LED3=P0^3;
  21. sbit LED4=P0^4;

  22. //圖給出的5個按鍵
  23. sbit KEY0=P1^0;
  24. sbit KEY1=P1^1;
  25. sbit KEY2=P1^2;
  26. sbit KEY3=P1^3;
  27. sbit KEY4=P1^4;

  28. //全局變量
  29. u8 mode;//模式:正弦波……
  30. u16 freq;//頻率
  31. u8 time;//計次參數
  32. u8 AM;//調幅


  33. void Timer0Init(void);
  34. void scanKey(void);
  35. void sys_init(void);

  36. void sine_wave(u8 location);//正弦波
  37. void squ_wave(u8 location);//方……
  38. void tri_wave(u8 location);//三……
  39. void tra_wave(u8 location);//梯……
  40. void saw_wave(u8 location);//鋸……

  41. void Timer0Init(void)                //100微秒@12.000MHz
  42. {
  43.         TMOD &= 0xF0;                //設置定時器模式
  44.         TMOD |= 0x02;                //設置定時器模式
  45.         TL0 = 0x9C;                //設置定時初值
  46.         TH0 = 0x9C;                //設置定時重載值
  47.         TF0 = 0;                //清除TF0標志
  48.         TR0 = 1;                //定時器0開始計時
  49.         EA = 1;         //開總中斷
  50.         ET0 = 1;        //開定時器0中斷
  51. }

  52. void scanKey(void)//按鍵掃描
  53. {
  54.         if(KEY0==0)
  55.         {
  56.                 mode=0;
  57.                 P0=0xFF;//滅所有燈
  58.                 LED0=0;
  59.         }
  60.         
  61.         if(KEY1==0)
  62.         {
  63.                 mode=1;
  64.                 P0=0xFF;//滅所有燈
  65.                 LED1=0;
  66.         }
  67.         
  68.         if(KEY2==0)
  69.         {
  70.                 mode=2;
  71.                 P0=0xFF;//滅所有燈
  72.                 LED2=0;
  73.         }
  74.         
  75.         if(KEY3==0)
  76.         {
  77.                 mode=3;
  78.                 P0=0xFF;//滅所有燈
  79.                 LED3=0;
  80.         }
  81.         
  82.         if(KEY4==0)
  83.         {
  84.                 mode=4;
  85.                 P0=0xFF;//滅所有燈
  86.                 LED4=0;
  87.         }
  88. }

  89. void sys_init(void)//系統初始化
  90. {
  91.         time=0;
  92.         ADC_CS_WR=0;
  93.         ADC_PORT=0;
  94.         mode=0;//默認輸出正弦波
  95.         freq=100;//默認頻率100Hz
  96.         AM=255;//最大幅度
  97. }
  98. void sine_wave(u8 location)//輸出正弦波
  99. {
  100.         double x=(double)location/50*PI;//把0-100放縮到0-2派(pai,沒有那個符號,好難受(╯﹏╰))
  101.         u8 y=(sin(x)*(AM/2)+(AM/2));//算出y,并放縮到0-254(因為ADC范圍0-AM,感覺這個芯片好落后)
  102.         ADC_PORT=y;
  103. }

  104. void squ_wave(u8 location)//方……
  105. {
  106.         if(location<50)
  107.                 ADC_PORT=AM;
  108.         else
  109.                 ADC_PORT=0x0;//這個好簡單
  110. }

  111. void tri_wave(u8 location)//三……
  112. {
  113.         //為了簡化,在單周期輸出V字形
  114.         u8 y;
  115.         if(location<50)
  116.                 y=(50-location)*AM/50;
  117.         else
  118.                 y=(location-50)*AM/50;
  119.         ADC_PORT=y;
  120.         //偶函數,信不?當然你說奇函數也沒錯
  121. }
  122. void tra_wave(u8 location)//梯……
  123. {
  124.         u8 y;
  125.         if(location<25)
  126.                 y=0xFF;
  127.         else if(location<50)
  128.                 y=(50-location)*AM/25;
  129.         else if(location<75)
  130.                 y=0;
  131.         else
  132.                 y=(location-75)*AM/25;
  133.         ADC_PORT=y;
  134. }
  135. void saw_wave(u8 location)//鋸……
  136. {
  137.         ADC_PORT=location*AM/100;
  138.         //用(100-location)也以變成反向鋸齒
  139. }

  140. void Timer0Work() interrupt 1 //中斷服務函數
  141. {
  142.         switch(mode)
  143. ……………………

  144. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼


所有資料51hei提供下載:
323 實驗三波形發生器.rar (673.88 KB, 下載次數: 818)



作者: byk123    時間: 2018-6-13 09:44
謝謝樓主分享...............
作者: iam家偉    時間: 2018-6-16 12:58
求樓主分享
作者: ywyw123456    時間: 2018-6-27 11:02
不錯 兄嘚
作者: xingwenyuan123    時間: 2018-6-27 21:52
挺不錯的
作者: xingwenyuan123    時間: 2018-6-27 21:52

求樓主分享
作者: 123521    時間: 2018-7-20 12:32
兄弟,波形失真了
作者: 邢偉    時間: 2018-10-8 22:54
123521 發表于 2018-7-20 12:32
兄弟,波形失真了

怎么更改呢??
作者: 邢偉    時間: 2018-10-8 22:55
怎么更改呢??
作者: a673261839    時間: 2018-10-9 09:15
mark            
作者: feiji666    時間: 2018-12-4 17:06
非常實用,感謝分享
作者: hlyaxyh    時間: 2019-1-1 17:31
感謝大佬的奉獻
作者: SYIFENG    時間: 2019-3-22 16:25
感謝大佬的奉獻
作者: 花少北    時間: 2019-3-24 19:44
感謝大佬,非常有用
作者: MINTPlanetarian    時間: 2019-3-25 21:30
謝謝樓主分享!
作者: RoyBiu    時間: 2019-4-25 15:51
感謝樓主分享
作者: xiqianban    時間: 2019-5-26 09:46
真好!非常感謝
作者: adfs55    時間: 2019-5-28 13:55
波形失真了怎么處理啊?
作者: xiaojingang    時間: 2019-5-29 15:44
優秀,我咋沒想出來
作者: 15134643765    時間: 2019-6-28 19:32
感謝大佬的貢獻。
作者: zytzytzytzyt    時間: 2019-10-28 13:46
感謝樓主分享
作者: sxj1999    時間: 2019-11-6 23:11
感謝大佬

作者: lyace    時間: 2019-11-29 10:35
電壓幅值怎么調

作者: 是慕梓啊    時間: 2020-5-30 15:39
樓主的程序教教我怎么寫?
作者: lvdongxu123    時間: 2020-5-30 16:34
感謝樓主分享 受益匪淺
作者: 1971059251    時間: 2020-5-30 18:09
不錯啊兄弟
作者: unknownk    時間: 2020-5-30 18:09
上邊5月30那兩人,咱是不是一個師傅哇

作者: AStronomia    時間: 2020-6-18 16:50

感謝樓主分享
作者: WCKWCK    時間: 2020-6-21 10:45
大佬牛皮
作者: puddinl    時間: 2021-3-12 02:14
感謝!學到了
作者: a185980800    時間: 2021-4-24 08:52
老哥這正弦波能擬合到多高頻率
作者: pmy    時間: 2021-7-12 09:14
樓主,請問void sine_wave(u8 location);這個函數后面的括號里定義的location是啥意思




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 精品福利一区二区三区 | 国产999精品久久久久久 | 欧美日韩高清 | 亚洲一区二区三区四区五区午夜 | 国产精品久久久久久网站 | 亚洲免费视频网址 | 美女日批免费视频 | 91免费看片 | 精品免费在线 | 成人h视频| 欧美一a一片一级一片 | 久久国产免费看 | 久久久免费少妇高潮毛片 | 一区二区三区亚洲 | 成人av激情 | 美女逼网站 | 亚洲成av人影片在线观看 | 日本在线网站 | 日韩精品网站 | 免费看一级毛片 | 精品一区二区久久久久久久网站 | 国产欧美一区二区三区免费 | 国内久久| 亚洲欧美日韩精品久久亚洲区 | 日韩中文字幕在线视频观看 | 风间由美一区二区三区在线观看 | 久久久久国产一区二区三区 | 国产成人午夜高潮毛片 | zzzwww在线看片免费 | 成人免费一区二区三区视频网站 | 国产天堂 | 九九热免费看 | 国产成人精品一区二区在线 | 精品亚洲一区二区三区四区五区 | 91大神在线看 | 草比网站| 午夜无码国产理论在线 | 久久青 | 日韩成人在线视频 | 夜夜夜久久久 | 欧美成人一区二区三区片免费 |