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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機控制的(方波 鋸齒波 三角波)信號發生器仿真與源碼

[復制鏈接]
跳轉到指定樓層
樓主
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. sbit csda=P2^2;
  5. sbit wr=P2^1;
  6. sbit s1=P3^2;
  7. sbit s2=P3^3;
  8. uchar k=0,p=0,delay=0;
  9. uchar bxxz=0;pinglv=0;
  10. uchar a=1,b=0,c=0,d=0;
  11. //正弦波數據
  12. uchar code sin[64]={
  13. 135,145,158,167,176,188,199,209,218,226,234,240,245,249,252,254,254,253,251,247,243,237,230,222,213,204,193,182,170,158,
  14. 146,133,121,108,96,84,72,61,50,41,32,24,17,11,7,3,1,0,0,2,5,9,14,20,28,36,45,55,66,78,90,102,114,128
  15. };
  16. //方波數據報表
  17. uchar code juxing[64]={
  18. 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
  19. 255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  20. };

  21. //鋸齒波數據
  22. uchar code juchi[64]={
  23. 0,4,8,12,16,20,24,28,32,36,40,45,49,53,57,61,65,69,73,77,81,85,89,93,97,101,105,109,113,117,121,125,130,134,138,142,
  24. 146,150,154,158,162,166,170,174,178,182,186,190,194,198,202,206,210,215,219,223,227,231,235,239,243,247,251,255
  25. };

  26. //三角波數據
  27. uchar code sanjiao[64]={
  28. 0,8,16,24,32,40,48,56,64,72,80,88,96,104,112,120,128,136,144,152,160,168,176,184,192,200,208,216,224,232,240,248,
  29. 248,240,232,224,216,208,200,192,184,176,168,160,152,144,136,128,120,112,104,96,88,80,72,64,56,48,40,32,24,16,8,0
  30. };
  31. void delay1()                  //延時
  32. {
  33.         int a,b;
  34.         for(a=1;a>0;a--)
  35.                 for(b=122;b>0;b--);
  36. }
  37. void int0() interrupt 0          //中斷處理,用于波型切換
  38. {       
  39.         EX0=0;
  40.         delay1();
  41.         if(s1==0)
  42.         {               
  43.                 bxxz++;
  44.                 if(bxxz==4)
  45.                 bxxz=0;
  46.                 switch(bxxz)
  47.                 {
  48.                         case 0 :
  49.                                 {a=1,b=0,c=0,d=0;}                //        正弦波
  50.                                 break;
  51.                         case 1 :
  52.                                 {a=0,b=1,c=0,d=0;}                //方波
  53.                                 break;
  54.                         case 2 :                                       
  55.                                 {a=0,b=0,c=1,d=0;}                  // 鋸齒波
  56.                                 break;       
  57.                         case 3 :
  58.                                 {a=0,b=0,c=0,d=1;}                  //        三角波
  59.                                 break;
  60.                 }
  61.                 delay1();
  62.                 while(!s1);       
  63.         }
  64.         while(!s1);
  65.         EX0=1;
  66. }
  67. void int1() interrupt 2
  68. {
  69.         EX1=0;       
  70.         delay1();
  71.         if(s2==0){               
  72.         p++;
  73.         if(p==8)
  74.         p=0;
  75.         switch(p)
  76.         {
  77.                 case 1 :
  78.                         pinglv=4;                //400Hz
  79.                         break;
  80.                 case 2 :
  81.                         pinglv=8;                //250Hz
  82.                         break;       
  83.                 case 3 :
  84.                         pinglv=16;          //140Hz
  85.                         break;
  86.                 case 4 :
  87.                         pinglv=32;         //75Hz
  88.                         break;
  89.                 case 5 :
  90.                         pinglv=64;         //40Hz
  91.                         break;
  92.                 case 6 :
  93.                         pinglv=125;                //20Hz
  94.                         break;
  95.                 case 7 :
  96.                         pinglv=255;                   //10Hz
  97.                         break;                               
  98.                 default :
  99.                         pinglv=0;                   //1000Hz
  100.                         break;
  101.                 }
  102.                 delay1();
  103.                 while(!s2);       
  104.         }
  105.         while(!s2);       
  106.         EX1=1;
  107. }

  108. void main()
  109. {
  110.         csda=0;
  111.         wr=0;
  112.         EA=1;
  113.         IT0=1;
  114.         EX0=1;
  115.         IT1=1;
  116.         EX1=1;
  117.         pinglv=15;
  118.         while(1)
  119.         {
  120.             
  121.                 while(a)               //產生正弦波
  122.                 {
  123.                         delay=pinglv; //獲取周期數據
  124.                         P0=sin[k];          //數據數P0口進行波形轉換
  125.                         k++;
  126.                         if(k==64)          //一個周期取64點波數據
  127.                         k=0;
  128.                         while(delay)  //延時處理         
  129.                     delay--;
  130.                 }
  131.                 while(b)                   //產生方波
  132.                 {
  133.                         delay=pinglv;
  134.                         P0=juxing[k];
  135.                         k++;
  136.                         if(k==64)
  137.                         k=0;
  138.                         while(delay)           
  139.                     delay--;
  140.                 }
  141.                 while(c)                   //產生鋸齒波
  142.                 {
  143.                         delay=pinglv;
  144.                         P0=juchi[k];
  145.                         k++;
  146.                         if(k==64)
  147. ……………………

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

所有資料51hei提供下載:
資料.rar (67.64 KB, 下載次數: 116)


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

使用道具 舉報

沙發
ID:289396 發表于 2018-5-2 09:06 | 只看該作者
請問這個怎么設置成占空比可調的呀
回復

使用道具 舉報

板凳
ID:335827 發表于 2018-5-23 12:58 | 只看該作者
我輸出來只有正弦波,請問在哪可以調出來別的波
回復

使用道具 舉報

地板
ID:433370 發表于 2018-12-7 10:20 | 只看該作者
很好,我想問一下圖開始運行動了一下怎么回事
回復

使用道具 舉報

5#
ID:433370 發表于 2018-12-7 10:35 | 只看該作者
w175628 發表于 2018-5-23 12:58
我輸出來只有正弦波,請問在哪可以調出來別的波

有一個改變波形的按鍵,
回復

使用道具 舉報

6#
ID:424947 發表于 2018-12-8 16:27 | 只看該作者
非常實用,很贊
回復

使用道具 舉報

7#
ID:449435 發表于 2018-12-18 22:49 來自手機 | 只看該作者
樓主有匯編語言的程序嗎
回復

使用道具 舉報

8#
ID:424947 發表于 2018-12-20 10:52 | 只看該作者
我想了解一下,只保留正弦波該怎樣做啊
回復

使用道具 舉報

9#
ID:453293 發表于 2018-12-24 18:59 | 只看該作者
幫助很大
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区在线 | 日产精品久久久一区二区福利 | 国产高清一区二区 | 影视先锋av资源噜噜 | 毛片在线看片 | 欧美精品国产精品 | 亚洲精品中文字幕在线观看 | 91玖玖| 精品久久久久国产免费第一页 | 久久综合一区 | 日本偷偷操 | 粉嫩国产精品一区二区在线观看 | 高清av电影 | 国产精品一区三区 | 国产一区二区在线观看视频 | 欧洲视频一区二区 | 欧美在线视频二区 | 国产亚洲精品精品国产亚洲综合 | 欧美综合一区二区三区 | 国产高清精品一区 | 一区二区久久电影 | 免费观看羞羞视频网站 | 亚洲精品国产综合区久久久久久久 | 成人一区二区三区 | 在线观看国产视频 | 亚洲国产一区二区三区在线观看 | 四虎成人精品永久免费av九九 | 国产一区二区三区四区五区加勒比 | 成人免费福利视频 | 欧美日韩成人在线 | 日日日日操 | 日本精品999| 国产玖玖 | 中文字幕在线观看一区 | 欧美一卡二卡在线 | 国产精品免费一区二区三区四区 | 久久久久九九九女人毛片 | 成人在线精品视频 | 在线观看你懂的网站 | 亚洲精品久久视频 | 国产在线成人 |