找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3321|回復(fù): 1
收起左側(cè)

單片機(jī)四路低頻方波脈沖輸出,可調(diào)脈寬 帶仿真和源程序

[復(fù)制鏈接]
ID:145237 發(fā)表于 2016-10-30 18:45 | 顯示全部樓層 |閱讀模式
歷時一周,做的四路低頻方波脈沖輸出,可調(diào)脈寬。
附件包括c程序以及Proteus仿真
原創(chuàng),多多指教,謝謝

下面是proteus仿真原理圖:

按鍵加5%脈寬,通道一改為10%脈寬

按鍵加5%脈寬,通道一改為10%脈寬
QQ截圖20161030183931.png

通道一5%脈寬

通道一5%脈寬


51單片機(jī)源程序:
  1. #include <REG52.H>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit LEVEL00=P1^0;//LEVEL,P1.2引腳上的電平值
  5. sbit LEVEL01=P1^1;//LEVEL,P1.2引腳上的電平值
  6. sbit LEVEL02=P1^2;//LEVEL,P1.2引腳上的電平值
  7. sbit LEVEL03=P1^3;//LEVEL,P1.2引腳上的電平值
  8. sbit P14=P1^4;//LEVEL,P1.2引腳上的電平值
  9. sbit P15=P1^5;//LEVEL,P1.2引腳上的電平值
  10. uchar highcount00,highcount01,highcount02,highcount03;        //記錄高電平定時次數(shù)
  11. const uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,}; /*顯示0~9*/
  12. uint x,y,z,m;
  13. uint n0,n1;
  14. uint count;
  15. void delay()
  16. {
  17.   uint i,j;
  18.   for(i=0;i<256;i++);
  19.     for(j=0;j<256;j++);
  20. }
  21. void stop(void) interrupt 0 using 1
  22. {
  23. TR0=!TR0;
  24. if(TR0==1)
  25. {x=x+10;y=y+10;z=z+10;m=m+10;count=count+5;
  26. if(count==95){x=0;y=0;z=0;m=0;count=0;}}
  27. }
  28. void sto(void) interrupt 2 using 3
  29. {
  30. if(TR0==1)
  31. {x=x-10;y=y-10;z=z-10;m=m-10;count=count-5;
  32. if(count<=0){x=0;y=0;z=0;m=0;count=0;}}
  33. }
  34. void timer0isr(void) interrupt 1 using 2
  35. {
  36.         TH0 = 0xD8;
  37.         TL0 = 0xF0;   //重置計(jì)數(shù)初值
  38.         highcount00++;           //溢出次數(shù)加1
  39.         if(highcount00== x)
  40.                 LEVEL00 = 0;  
  41.         if(highcount00== 200)
  42.         {
  43.                 LEVEL00 = 1;
  44.                 highcount00 = 0;
  45.         }
  46.         highcount01++;           //溢出次數(shù)加1
  47.         if(highcount01== y)
  48.                 LEVEL01 = 0;  
  49.         if(highcount01== 200)
  50.         {
  51.                 LEVEL01 = 1;
  52.                 highcount01 = 0;
  53.         }
  54.                 highcount02++;           //溢出次數(shù)加1
  55.         if(highcount02== z)
  56.                 LEVEL02 = 0;  
  57.         if(highcount02== 200)
  58.         {
  59.                 LEVEL02 = 1;
  60.                 highcount02 = 0;
  61.         }
  62.                 highcount03++;           //溢出次數(shù)加1
  63.         if(highcount03== m)
  64.                 LEVEL03 = 0;  
  65.         if(highcount03== 200)
  66.         {
  67.                 LEVEL03 = 1;
  68.                 highcount03 = 0;
  69.         }

  70. }

  71. void main(void)
  72. {

  73. x=10;y=20;z=30;m=40;
  74. count=5;
  75. IT0=1;
  76. IT1=1;
  77. EX1=1;
  78. EX0=1;
  79.         highcount00 = 0;          //記錄高電平定時次數(shù)
  80.         highcount01 = 0;
  81.         highcount02 = 0;
  82.         highcount03 = 0;
  83.         TMOD = 0x01;  //設(shè)定T/C0工作在定時器方式1
  84.         LEVEL00 = 1;        //初始電平為高
  85.         LEVEL01 = 1;        //初始電平為高
  86.         LEVEL02 = 1;        //初始電平為高
  87.         LEVEL03 = 1;        //初始電平為高
  88.         TH0 = 0xD8;
  89.         TL0 = 0xF0;         //裝載計(jì)數(shù)初值
  90.         EA = 1;                 //開總中斷
  91.         ET0 = 1;         //開T/C0中斷
  92.     TR0 = 1;         //啟動T/C0
  93.         while(1)
  94.         {n0=count/10;
  95.         n1=count%10;
  96.     P2=tab[n0];
  97.     P14=1;
  98.     delay();
  99.     P14=0;
  100.     P2=tab[n1];
  101.     P15=1;
  102.     delay();
  103.     P15=0;
  104. }


  105. }
復(fù)制代碼
0.png
所有資料打包下載:
四路低頻方波脈沖可調(diào)脈寬.rar (64.76 KB, 下載次數(shù): 28)

評分

參與人數(shù) 1黑幣 +70 收起 理由
admin + 70 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:123133 發(fā)表于 2016-11-24 16:32 | 顯示全部樓層
嚇我一跳,我還以為是單片機(jī)輸出祝四路可調(diào)頻率的方波呢,
看來51是無法實(shí)現(xiàn)4路頻率可調(diào)的方波的額
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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