標題: 模數轉換芯片DAC0832產生鋸齒波 三角波發(fā)生器 proteus仿真及源碼 [打印本頁]

作者: 51黑ff    時間: 2016-10-10 16:16
標題: 模數轉換芯片DAC0832產生鋸齒波 三角波發(fā)生器 proteus仿真及源碼
51單片機驅動模數轉換芯片DAC0832產生鋸齒波 三角波的proteus仿真原理圖:

單片機源程序:
  1. /********************************************************************
  2. 51黑電子論壇
  3. *********************************************************************/
  4. #include<reg52.h>                 //庫文件
  5. #define uchar unsigned char//宏定義無符號字符型
  6. #define uint unsigned int  //宏定義無符號整型
  7. /********************************************************************
  8.                             初始定義
  9. *********************************************************************/
  10. sbit P3_2=P3^2;
  11. sbit P3_3=P3^3;
  12. unsigned char keycnt=0;
  13. unsigned char tcnt=0; //鍵值判斷
  14. bit sjz=0; //產生三角波時用到的標志

  15. void delayl() //延時子程序
  16. {
  17.         unsigned char i,j;
  18.         for(i=20;i>0;i--)
  19.         for(j=248;j>0;j--);
  20. }

  21. void KEY() //按鍵掃描程序
  22. {
  23.   if(P3_2==0)
  24.   {
  25.     delayl(); //延時跳過按下時的抖動
  26.     if(P3_2==0)
  27.     {                     
  28.      keycnt=0; //定時器產生鋸齒波標志
  29.      TR0=0; //暫時停止波形輸出
  30.      TH0=0x256-40; //對TH0 TL0 賦值
  31.      TL0=0x256-40;
  32.      TR0=1; //開始定時,產生鋸齒波
  33.      while(P3_2==0); //如果一直按著鍵,則等待松鍵開
  34.      delayl(); //延時跳過松開后的抖動
  35.     }
  36.    }

  37.   if(P3_3==0)
  38.   {
  39.     delayl(); //延時跳過按下時的抖動
  40.     if(P3_3==0)
  41.     {
  42.      keycnt=1; //定時器產生三角波標志
  43.      TR0=0; //暫時停止波形輸出
  44.      TH0=0x256-40; //對TH0 TL0 賦值
  45.      TL0=0x256-40;
  46.      TR0=1; //開始定時 產生三角波
  47.      }
  48.    while(P3_2==0); //如果一直按著鍵,則等待松鍵開
  49.    delayl(); //延時跳過松開后的抖動
  50. }
  51. }

  52. void t0(void) interrupt 1 using 0 //定時中斷服務函數
  53. {
  54.    if(keycnt==0) //產生鋸齒波
  55.    {
  56.      P0=tcnt;
  57.      tcnt=+0x0a; //步進0.2V/一次中斷
  58.      if(tcnt==0xfb)
  59.        tcnt=0;
  60.    }

  61.    if(keycnt==1) //產生三角波
  62.    {
  63.      if(sjz==0)
  64.      {
  65.        P0=tcnt;
  66.        tcnt=+0x0a;//步進0.2V/一次中斷
  67.        if(tcnt==0xfa)
  68.          sjz=1;
  69.       }
  70.       if(sjz==1)
  71.       {
  72.        P0=tcnt;
  73.        tcnt=-0x0a;
  74.        if(tcnt==0)                     
  75.        sjz=0;
  76.      }
  77.     }
  78. }
  79. void main(void)
  80. {
  81.   TMOD=0x02; //定時器工作在方式2
  82.   ET0=1;
  83.   EA=1;
  84.   while(1)
  85.    KEY();
  86. }
復制代碼



仿真工程文件及所有完整程序等資料下載地址(壓縮包一共有45個單片機仿真,全部下載后找到第013個項目即可):
http://www.torrancerestoration.com/bbs/dpj-56298-1.html

作者: 亙黑鹿    時間: 2016-11-2 22:44
示波器呢?
作者: stt980516    時間: 2018-11-12 23:00
可以使用嗎
作者: MyWifeKotori    時間: 2020-3-13 13:58
示波器呢。。?
作者: hh002    時間: 2023-5-28 01:22
示波器:沒我也可以有波?




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1