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

QQ登錄

只需一步,快速開始

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

DAC0832多波形發(fā)生(可調(diào)頻等)單片機(jī)代碼+仿真

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
1、可通過按鍵隨意切換DAC0832輸出波形;
2、可通過按鍵實(shí)現(xiàn)頻率可調(diào);
3、可通過按鍵實(shí)現(xiàn)占空比可調(diào)。




51單片機(jī)源程序如下:
  1. #ifndef __0832_h__
  2. #define __0832_h__

  3. unsigned char i,sqar_num=128; //最大值100,默認(rèn)值50
  4. unsigned char cho=0;         //0:正弦波。1:方波。2:三角波。3:鋸齒波。
  5. unsigned char num=0;
  6. unsigned char TIME0_H=0xff,TIME0_L=0xd9;      //定時(shí)器0的初值設(shè)置;全局變量.對(duì)應(yīng)正弦波,鋸齒波50HZ
  7. sbit chg=   P1^0;                                                           //三角波100Hz.
  8. sbit freq_u=P1^1;
  9. sbit freq_d=P1^2;
  10. sbit duty_u=P1^3;
  11. sbit duty_d=P1^4;
  12. sbit cs    =P3^7;
  13. bit flag=0;
  14. unsigned int FREQ=50;//初始化頻率,50HZ

  15. //調(diào)節(jié)部分——頻率
  16. void freq_ud(void)
  17. {
  18.    unsigned int temp;
  19.    if(freq_d==0)
  20.         {  FREQ--;         }
  21.    else if(freq_u==0)
  22.          { FREQ++;         }
  23.   
  24.    if(cho==1|cho==3) //鋸齒波256次中斷一周期,特殊處理下。否則他的頻率是100(+\-)n*2Hz.
  25.          {
  26.           temp=0xffff-3906/FREQ;  //方波,三角波默認(rèn)為100hz,切換后頻率也為50HZ 65336-10^6/(256*FREQ)
  27.           TIME0_H=temp/256;
  28.       TIME0_L=temp%256;
  29.          }
  30.    else if(cho==0|cho==3){         //正弦波 三角波默認(rèn)周期50hz  65536-10^6//(512*FREQ)
  31.    temp=0xffff-1953/FREQ;
  32.    TIME0_H=temp/256;
  33.    TIME0_L=temp%256;
  34.    }
  35. }
  36. //調(diào)節(jié)部分——方波的占空比
  37. void duty_ud(void)  //方波也采用512次中斷構(gòu)成一個(gè)周期。
  38. {
  39.    if(duty_d==0&sqar_num>0)
  40.            sqar_num--;
  41.    else if(duty_u==0&sqar_num<255)
  42.           sqar_num++;


  43. }
  44. //波形發(fā)生函數(shù)
  45. void sint(void)
  46. {
  47.      if(!flag)
  48.      {
  49.         cs=0;P2=sin_num[num++];cs=1;
  50.                 if(num==0){num=255;flag=1;}
  51.             }
  52.     else if(flag)
  53.     {
  54.            cs=0;P2=sin_num[num--];cs=1;
  55.            if(num==255){num=0;flag=0;}
  56.          
  57.          }
  58. }
  59. void square(void)
  60. {
  61.     if(i++<sqar_num)  {cs=0;P2=0XFF;cs=1;}
  62.         else{cs=0;P2=0X00;cs=1;}
  63. }
  64. void triangle(void)
  65. {
  66.   cs=0;P2=num++;cs=1;
  67. }
  68. void stw(void)
  69. {
  70.    if(~flag)
  71.      {
  72.         cs=0;P2=num++;cs=1;
  73.                 if(num==0){num=255;flag=1;}
  74.             }
  75.    else if(flag)
  76.      {
  77.            cs=0;P2=num--;cs=1;
  78.            if(num==255){num=1;flag=0;}
  79.          
  80.          }
  81. }
  82. //按鍵中斷處理程序。
  83. void it0() interrupt 0
  84. {
  85.    if(chg==0) { if(++cho==4) {cho=0;num=0;}        }         //num=0;所有數(shù)據(jù)從新開始,保證波形的完整性
  86.    else if(freq_u==0|freq_d==0)
  87.      {freq_ud();}
  88.    else if (cho==1&(duty_d==0|duty_u==0))
  89.      {duty_ud();}
  90.    else ;
  91. }
  92. //定時(shí)器中斷處理程序。
  93. void intt0() interrupt 1
  94. {

  95. //TH0=0x00;TL0=0x00;sinx();

  96.   switch(cho)
  97.   {

  98.           case 0:{TH0=TIME0_H;TL0=TIME0_L;sint()    ;break;}  //正弦波//每半周期256取樣。
  99.         case 1:{TH0=TIME0_H;TL0=TIME0_L;square();  break;}        //方波   //為了提高方波的最高頻率,只有犧牲占空比的最小可調(diào)值。分100份 每次1%。
  100.         case 2:{TH0=TIME0_H;TL0=TIME0_L;triangle();break;}        //三角波
  101.           case 3:{TH0=TIME0_H;TL0=TIME0_L;stw();     break;}        //鋸齒波
  102.         default: ;
  103.   
  104.   }

  105. }

  106. #endif



  107. ……………………

  108. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
多波形發(fā)生(可調(diào)頻等).rar (54.62 KB, 下載次數(shù): 67)



評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:294934 發(fā)表于 2018-3-22 10:00 | 只看該作者
幫了大忙謝謝
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表