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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 13085|回復(fù): 13
打印 上一主題 下一主題
收起左側(cè)

[51單片機(jī)+仿真Proteus]利用模數(shù)轉(zhuǎn)換DAC0832輸出各種波形

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:102341 發(fā)表于 2019-1-28 14:31 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
使用DAC0832作為信號(hào)發(fā)生器輸出四種波形:方波、三角波、鋸齒波、梯形波。
基本思路:
第一個(gè)按鈕選擇波形:方波、三角波、鋸齒波、梯形波;
第二個(gè)按鈕增加幅值;
第三個(gè)按鈕減小幅值。仿真電路圖:


示波器效果如下:
方波:


三角波:

鋸齒波:

梯形波:


主程序<chengxu.c>:
  1. #include "reg52.h"
  2. #include "init.h"        //DAC0832初始化
  3. #include "single.h" //DAC0832用到的函數(shù)
  4. #include "delay.h"        //延時(shí)
  5. #include "Key.h"        //按鍵

  6. #define uchar unsigned char
  7. #define uint  unsigned int

  8. int main(void)
  9. {
  10.     uchar Model=0;        //0-方波 1-三角波 2-鋸齒波 3-梯形波
  11.     uint Count=0;        //計(jì)數(shù)器
  12.     uint Squ_Per=256;
  13.     uint Tri_Per=256;
  14.     uint Saw_Per=256;
  15.     uint Sin_Per=256;
  16.     init();
  17.     while(1)
  18.     {
  19.         while(Model==0) //方波
  20.         {   
  21.             Square_wave(Squ_Per,&Count);
  22.             Count+=4;
  23.             Squ_Per=Key_Plus(Squ_Per);
  24.             Squ_Per=Key_Subc(Squ_Per);
  25.             Model=Key_Model(Model,&Squ_Per,&Count); //每次退出當(dāng)前while時(shí)記得復(fù)原Period和Count的數(shù)據(jù)
  26.         }   
  27.         while(Model==1) //三角波
  28.         {
  29.             Triangle_wave(Tri_Per,&Count);
  30.             Count+=4;
  31.             Tri_Per=Key_Plus(Tri_Per);
  32.             Tri_Per=Key_Subc(Tri_Per);
  33.             Model=Key_Model(Model,&Tri_Per,&Count);
  34.         }
  35.         while(Model==2) //鋸齒波
  36.         {
  37.             Sawtooth_wave(Saw_Per,&Count);
  38.             Count+=4;
  39.             Saw_Per=Key_Plus(Saw_Per);
  40.             Saw_Per=Key_Subc(Saw_Per);
  41.             Model=Key_Model(Model,&Saw_Per,&Count);
  42.         }
  43.         while(Model==3) //波
  44.         {
  45.             Sin_wave(Sin_Per,&Count);
  46.             Count+=4;
  47.             Sin_Per=Key_Plus(Sin_Per);
  48.             Sin_Per=Key_Subc(Sin_Per);
  49.             Model=Key_Model(Model,&Sin_Per,&Count);
  50.         }
  51.     }
  52.      return 0;
  53. }
復(fù)制代碼
延時(shí)<delay.c>:
  1. void delay(unsigned int r)
  2. {
  3.         unsigned int i,j;
  4.         for(i=r;i>0;i--)
  5.         for(j=110;j>0;j--);
  6. }
復(fù)制代碼
延時(shí)頭文件<delay.h>:
  1. #ifndef __DELAY_H__
  2. #define __DELAY_H__

  3. #include <intrins.h>
  4. #define NOP() _nop_()

  5. void delay(unsigned int r);

  6. #endif
復(fù)制代碼
芯片初始化<init.c>:

  1. #include "reg52.h"
  2. sbit CS_DAC=P1^5; //DAC0832的片選端口
  3. sbit WR_DAC=P1^6; //DAC0832的數(shù)據(jù)寫(xiě)入端口

  4. extern void init(void)
  5. {
  6.     P0=0xff;
  7.     P1=0xff;
  8.     P2=0xff;
  9.     P3=0xff;
  10.     CS_DAC=0;//一直片選中DAC0832,低電平有效啊~
  11.     WR_DAC=0;//一直寫(xiě)入數(shù)據(jù)到DAC0832
  12. }
復(fù)制代碼
芯片初始化頭文件<init.h>:
  1. #ifndef __INIT_H__
  2. #define __INIT_H__

  3. extern void init(void);

  4. #endif
復(fù)制代碼
按鍵識(shí)別<key.c>:

  1. #include "reg52.h"
  2. #include "Key.h"
  3. #include "delay.h"

  4. sbit key1=P3^2;    //波形選擇按鍵
  5. sbit key2=P3^3;    //幅值增加按鍵
  6. sbit key3=P3^4;    //幅值減少按鍵

  7. //波形選擇
  8. unsigned char Key_Model(unsigned char Model,unsigned int *Pre,unsigned int *Count)
  9. {
  10.     if(key1==0)
  11.     {
  12.         delay(10);
  13.         if(key1==0)
  14.         {
  15.             Model=Model+1;
  16.             *Pre=256;
  17.             *Count=0;   
  18.         }
  19.     }
  20.     while(key1==0);
  21.     if(Model>3)
  22.     {
  23.         Model=0;
  24.     }
  25.     return Model;
  26. }
  27. //幅值增加
  28. unsigned int Key_Plus(unsigned int Per)
  29. {
  30.     if(key2==0)
  31.     {
  32.         delay(10);
  33.         if(key2==0)
  34.         {
  35.             Per=Per+8;   
  36.         }
  37.     }
  38.     while(key2==0);
  39.     if(Per>256)
  40.     {
  41.         Per=0;
  42.     }
  43.     return Per;        
  44. }
  45. //幅值減少
  46. unsigned int Key_Subc(unsigned int Per)
  47. {
  48.     if(key3==0)
  49.     {
  50.         delay(10);
  51.         if(key3==0)
  52.         {
  53.             Per=Per-8;   
  54.         }
  55.     }
  56.     while(key3==0);
  57.     if(Per<0)
  58.     {
  59.         Per=256;
  60.     }
  61.     return Per;        
  62. }
復(fù)制代碼
按鍵識(shí)別頭文件<key.h>:

  1. #ifndef __KEY_H__
  2. #define __KEY_H__

  3. unsigned char Key_Model(unsigned char Model,unsigned int *Pre,unsigned int *Count);
  4. unsigned int Key_Plus(unsigned int Per);
  5. unsigned int Key_Subc(unsigned int Per);

  6. #endif
復(fù)制代碼
繪制波形函數(shù)<single.c>:

  1. #include "reg52.h"
  2. #include "single.h"
  3. #include "delay.h"
  4. #define DATA P0
  5. //方波
  6. void Square_wave(unsigned int Per,unsigned int *Count)
  7. {
  8.     if(*Count>=Per) *Count=0;
  9.     if(*Count<Per/2)
  10.     {
  11.         DATA=0x00;
  12.     }   
  13.     else
  14.     {
  15.         DATA=0xFF;
  16.     }
  17. }
  18. //三角波
  19. void Triangle_wave(unsigned int Per,unsigned int *Count)
  20. {
  21.     if(*Count>=Per) *Count=0;
  22.     if(*Count<Per/2)
  23.     {
  24.         DATA=*Count;
  25.     }   
  26.     else
  27.     {
  28.         DATA=Per-*Count;
  29.     }   
  30. }
  31. //鋸齒波
  32. void Sawtooth_wave(unsigned int Per,unsigned int *Count)
  33. {
  34.     if(*Count>=Per) *Count=0;
  35.     if(*Count<Per)
  36.     {
  37.         DATA=*Count;
  38.     }        
  39. }
  40. //波
  41. void Sin_wave(unsigned int Per,unsigned int *Count)
  42. {
  43.     if(*Count>Per) *Count=0;
  44.     if(*Count<Per/2)
  45.     {
  46.         DATA=*Count;
  47.     }   
  48.     else if(*Count==Per/2)
  49.     {
  50.         delay(100);   
  51.     }
  52.     else if(*Count<Per)
  53.     {
  54.         DATA=Per-*Count;
  55.     }   
  56.     else if(*Count==Per)
  57.     {
  58.         delay(100);
  59.     }
  60. }
復(fù)制代碼
繪制波形函數(shù)頭文件<single.h>:
  1. #ifndef __SINGLE_H__
  2. #define __SINGLE_H__

  3. void Square_wave(unsigned int Per,unsigned int *Count);
  4. void Triangle_wave(unsigned int Per,unsigned int *Count);
  5. void Sawtooth_wave(unsigned int Per,unsigned int *Count);
  6. void Sin_wave(unsigned int Per,unsigned int *Count);

  7. #endif
復(fù)制代碼

資料51hei下載地址(Proteus仿真+代碼):
利用模數(shù)轉(zhuǎn)換DAC0832輸出各種波形.7z (578.99 KB, 下載次數(shù): 359)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:32289 發(fā)表于 2019-1-28 19:42 | 只看該作者
輸出通到多少頻率啊?
回復(fù)

使用道具 舉報(bào)

板凳
ID:102341 發(fā)表于 2019-1-28 23:34 | 只看該作者
rrqxx 發(fā)表于 2019-1-28 19:42
輸出通到多少頻率啊?

51芯片+12M晶振,CPU位1us,定時(shí)器描點(diǎn)256個(gè),每個(gè)20us,全部跑完5120us,頻率最大1/(5120/1000000)=195.3125Hz,從虛擬示波器格子也可大約估算出來(lái)都沒(méi)超過(guò)100Hz。
回復(fù)

使用道具 舉報(bào)

地板
ID:540111 發(fā)表于 2019-5-20 18:26 | 只看該作者
請(qǐng)問(wèn)這個(gè)這個(gè)可以加12864嗎/怎么加啊/
回復(fù)

使用道具 舉報(bào)

5#
ID:513931 發(fā)表于 2019-6-25 21:33 | 只看該作者
請(qǐng)問(wèn)這個(gè)可以同時(shí)輸出兩個(gè)不同的波形嗎?
回復(fù)

使用道具 舉報(bào)

6#
ID:139165 發(fā)表于 2020-5-7 07:34 | 只看該作者
厲害了,學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

7#
ID:516413 發(fā)表于 2020-5-22 11:09 | 只看該作者
這個(gè)厲害
回復(fù)

使用道具 舉報(bào)

8#
ID:889256 發(fā)表于 2021-3-14 16:35 | 只看該作者
波形是從哪個(gè)口輸出的呀
回復(fù)

使用道具 舉報(bào)

9#
ID:918224 發(fā)表于 2021-5-9 20:02 | 只看該作者
單片機(jī)頻率能改嗎
回復(fù)

使用道具 舉報(bào)

10#
ID:928166 發(fā)表于 2021-5-27 22:34 | 只看該作者
請(qǐng)教大神們,如何設(shè)計(jì)一個(gè)dac輸出可控電壓范圍0~10v,分辨率為0.1v嘛? 謝謝!
回復(fù)

使用道具 舉報(bào)

11#
ID:918467 發(fā)表于 2021-10-11 21:16 | 只看該作者
wxkn937 發(fā)表于 2019-5-20 18:26
請(qǐng)問(wèn)這個(gè)這個(gè)可以加12864嗎/怎么加啊/

我也在做這個(gè),我已經(jīng)用555產(chǎn)生波形了,但是不知道怎么用12864顯示,請(qǐng)問(wèn)你現(xiàn)在解決了嗎,可以幫我一下嗎,謝謝啦
回復(fù)

使用道具 舉報(bào)

12#
ID:971889 發(fā)表于 2021-10-24 08:36 來(lái)自手機(jī) | 只看該作者
周期為多少?
回復(fù)

使用道具 舉報(bào)

13#
ID:971889 發(fā)表于 2021-10-24 08:44 來(lái)自手機(jī) | 只看該作者
周期為多少?
回復(fù)

使用道具 舉報(bào)

14#
ID:828888 發(fā)表于 2022-4-20 13:27 | 只看該作者
程序要用Keil2打開(kāi)
仿真用Proteus7.5或者8.8版本才行
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久成 | 亚洲激情专区 | 日本一区二区在线视频 | 在线中文一区 | 欧美精品欧美精品系列 | 男女视频在线观看免费 | 欧美成人精品一区二区三区 | 天天草视频 | 女同久久另类99精品国产 | 精品欧美乱码久久久久久1区2区 | av天天澡天天爽天天av | 91看国产| 在线伊人网 | 91精品国产91久久久久久最新 | 看片一区 | 亚洲精品99 | 亚洲国产精品激情在线观看 | 日韩伦理一区二区三区 | 亚洲一区二区三区久久 | 日韩在线免费观看视频 | 91亚洲免费| 日本aa毛片a级毛片免费观看 | 中文字幕日韩欧美一区二区三区 | 蜜桃黄网 | 国产日韩欧美中文 | 欧美日韩在线精品 | 91久久久久久久久久久久久 | 嫩草视频在线看 | 国产精品揄拍一区二区 | 亚洲视频二区 | 亚洲精品久久久久久国产精华液 | 日本高清aⅴ毛片免费 | 欧美在线视频一区 | 成人精品毛片国产亚洲av十九禁 | av电影手机版 | 亚洲人成网亚洲欧洲无码 | 欧美成人激情视频 | 国产精品视频一区二区三区, | 99国产精品久久久 | 凹凸日日摸日日碰夜夜 | 亚洲视频a|