欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

怎么用51單片機輸出一個1kHz的正弦波

[復制鏈接]
跳轉到指定樓層
樓主
ID:596741 發表于 2019-8-8 20:40 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
如題
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:399417 發表于 2019-8-9 08:14 | 只看該作者
要么單片機帶DA輸出,要么用一個DA芯片
回復

使用道具 舉報

板凳
ID:477152 發表于 2019-8-9 22:09 | 只看該作者
STC單片機有自帶DAC的哈
回復

使用道具 舉報

地板
ID:155507 發表于 2019-8-12 14:25 | 只看該作者
SPWM信號經低通濾波后可變換為正弦波,窄帶范圍內的方波經低通濾波后可變換為相應頻率的正弦波

如果不是你想要的頻率,那就 自己改一下數據 記得同時要替換數組里面的值

單片機SPWM波 產生正弦波的源程序及工具
http://www.raoushi.com/bbs/dpj-55510-1.html

  1. #include<reg52.h>
  2. #define uInt unsigned int
  3. #define uchar unsigned char
  4. uchar t_max = 10;                       //一個周期
  5. static uchar t = 0,i = 0;        //PWM計數
  6. /*
  7. uchar code SinParam[40]={  
  8. 0,3,6,9,13,16,19,22,25,28,31,34,37,40,43,45,
  9. 48,51,54,56,59,61,64,66,68,71,73,75,77,79,81,83,
  10. 84,86,88,89,90,92,93,94,95,96,97,98,98,99,99,100,
  11. 100,100,100,100,100,100,99,99,98,98,97,96,95,94,93,92,
  12. 90,89,88,86,84,83,81,79,77,75,73,71,68,66,64,61,
  13. 59,56,54,51,48,45,43,40,37,34,31,28,25,22,19,16,
  14. 13,9,6,3
  15. };
  16. */
  17. uchar code SinParam[20]={  
  18.   5,5,6,7,7,8,9,9,9,9,10,9,9,9,9,8,
  19. 7,7,6,5
  20. };


  21. // 200點正弦波樣本值

  22. void main(void)
  23. {
  24.         TMOD = 0x02;                                //定時器0,工作模式2,8位定時模式
  25.         TH0 = 146;                                //寫入預置初值(取值1-255,數越大PWM頻率越高)
  26.         TL0 = 146;                                //寫入預置值(取值1-255,數越大PWM頻率越高)
  27.         TR0 = 1;                                        //啟動定時器
  28.         ET0 = 1;                                        //允許定時器0中斷
  29.         EA = 1;                                        //允許總中斷

  30.         P2 = 0xff;                                //初始化P1

  31.         while(1)
  32.         {
  33.                 ;
  34.         }
  35. }


  36. timer0()interrupt 1 using 2
  37. {
  38.         t++;                                //每次定時器溢出加1

  39.         if(t < t_max && t >= SinParam[i])        //PWM周期                                          5
  40.                 {                                
  41.                         P2 = 0x00;                        //使LED燈亮
  42.                 }
  43.                 else if( t >= t_max)
  44.                 {
  45.                         t = 0;        //使t=0,開始新的PWM周期
  46.                         i++;                        
  47.                         P2 = 0xff;        
  48.                 }               
  49.    if(i >= 20) i = 0;
  50. }
復制代碼
回復

使用道具 舉報

5#
ID:579053 發表于 2019-8-12 17:24 | 只看該作者
用定時器輸出PWM
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表