⑴ 怎麼用單片機實現一個特定的波形,波形如下
上升沿和下降沿的時間也有要求嗎?
如果沒有要求就好辦!
用一個單片機的I/O口上下各拉一個相同阻值的電阻
1.IO設為輸入
2.延時,
3.I/O設置為輸出,輸出高
4.延時,
5.I/O設為輸入
6.延時
7.I/O設置為輸出,輸出高
8.延時
8.I/O設置為輸出,輸出底
9.延時
1-9步循環輸出就是所要波形了
1.如果上升和下降沿時間都有要求,要產生如果後面那個波形那樣相同時間上升下降沿的斜邊,那就上面的方法不行,就得用D/A轉換才能產生。
2.如果對波形的幅值有所要求,上面的方法也不行,也只能用D/A轉換才能產生。
3.上面的方法只能產生5V 1/2的偏壓,因為單片機I/O口輸出是5V的,即產生0V,+5V和-5V
⑵ 單片機產生波形時,怎麼控制波形的幅值和頻率
如果用定時器做的波形發生,那麼頻率可以在定時器里設置,比如多久產生一個中斷,電平翻轉一次。如果用軟體產生,那麼改寫延時長度就可以了。幅值的問題由於單片機IO口只能輸出H/L電平,那你就去用電阻或者二極體分壓。
⑶ 51單片機 c語言 怎麼實現控制波形輸出的幅值
【1】幅值的高低控制,通常需要藉助於可編程放大電路(運放)來實現。所有單片機不是用來放大的。更不是C語言解決的問題。需要去了解具體的放大電路形式及51介面電路。
【2】還有一個概念是DAC輸出再經過運放輸出。比如波形發生器的實現。51也沒有這個模塊。需要藉助於外部擴展DAC來實現。
【3】51單片機一種簡單的電壓調節辦法是輸出PWM方波,通過RC電路濾波,可以得到一個可調電壓(0-5V)。一種應用是這個可調電壓拿來控制一個壓控振盪器。
⑷ 為什麼示波器波形重疊應該調什麼
使波形穩定顯示,一般來說是調觸發電平。但看你的情況應該是你可能使用通道1做為觸發源,來觀察通道2的波形,如果通道1和2
的信號頻率有偏差,必定會導致通道2的信號波形向左或右移動。如果需要穩定觀察通道2的波形,可以將觸發源選到通道2上就可以了,不知道我的回答是否解決你的問題。
⑸ 我想用單片機(89c51)來實現兩個函數程序的同時運行,不知如何實現請教廣大朋友,謝謝
你這個應該是兩個功能同時實現,漸亮漸暗是用延時實現的PWM,而燈的閃爍其實就是單片機的輸出為矩形波,兩個功能同時實現時,就是在矩形波的波峰波谷時期加入了PWM。兩個波形的疊加(將兩個功能柔和在一起)。在燈漸亮漸暗子程序中,一個for循環for(i=1;i<2000;i=i+100)其實就是一個PWM的周期,是相同的、一定的,那麼就可以利用判斷是第幾個周期來決定該周期是否要閃爍,還是關閉(也就是利用了PWM的周期來確定矩形波的周期)。
這個循環for(j=0;j<1;j++)是不是可以去掉呢。。。。。。。。
修改後的程序:調試過了(燈的埠改為P0了)
#include<reg51.h>
sbit green=P0^0;
sbit blue=P0^1;
sbit red=P0^2;
sbit shan=P0^3;
sbit shan2=P0^4;
void delay(int i)
{
while(--i)
{
;
}
}
void bianse1(void)//這個函數程序是控制燈漸亮漸暗
{
int i;
for(i=1;i<2000;i=i+100)
{
if(i%200==0)shan=~shan; /*經過200個PWM周期燈的亮滅交替,改變這個參數可以改變燈的閃爍頻率*/
green=0;
blue=0;
red=0;
delay(i);
green=1;
blue=1;
red=1;
delay(2000-i);//紅,綠,藍一起上升
}
for(i=2000;i>0;i=i-100)
{
if(i%200==0)shan=~shan;
blue=1;
green=1;
red=1;
delay(2001-i);
red=0;
green=0;
blue=0;
delay(i);//紅藍綠下降
}
}
void bianse2(void)//這個函數程序是控制燈漸亮漸暗
{
int i;
for(i=1;i<2000;i=i+100)
{
if(i%200==0)shan2=~shan2;
green=0;
blue=0;
red=0;
delay(i);
green=1;
blue=1;
red=1;
delay(2000-i);//紅,綠,藍一起上升
}
for(i=2000;i>0;i=i-100)
{
if(i%200==0)shan2=~shan2;
blue=1;
green=1;
red=1;
delay(2001-i);
red=0;
green=0;
blue=0;
delay(i);//紅藍綠下降
}
}
void shanshuo(void)//這個函數程序是控制燈閃爍
{
int i,k;
for(k=0;k<10;k++)
{
shan=0;
delay(5000);
shan=1;
delay(4000);
}
for(i=0;i<10;i++)
{
shan2=0;
delay(5000);
shan2=1;
delay(4000);
}
}
void main(void)
{
shan=1;
shan2=1;
while(1)
{
bianse1();
bianse2(); /*****兩個燈的交替閃爍*****/
green=1;
blue=1;
red=1;
//shanshuo();
}
}
⑹ 51單片機如何將撥碼開關產生的序列變為波形輸出
用8芯排線將DA的D0-D7介面與數據匯流排區D0-D7任一介面相連。實現一頻率可控波形發生器,用撥碼開關作為輸入,接P1口,撥動開關可以控制信號的頻率來輸出。
⑺ 51單片機產生波形
#include"reg52.h"
sbit PWM=P1^0;//定義輸出腳
unsigned char s;
void main()
{
TMOD=0x01; //定時器0工作方式1
TH0=(65536-10000)/256; //12M晶振10MS計時常數
TL0=(65536-10000)%256;
EA=1; //開總中斷
ET0=1; //開定時器0中斷
TR0=1;
PWM = 0; //啟動定時器0
while(1);
}
//中斷函數,啟動後每10MS進入一次中斷
void T0_time(void) interrupt 1
{
TH0=(65536-10000)/256; //12M晶振10MS計時常數
TL0=(65536-10000)%256;
s++;
if((s==100)&&(PWM == 0))
{
s=0;
PWM = 1;
}
if((s==200)&&(PWM == 1))
{
s=0;
PWM = 0;
}
}
這個可以不??
⑻ 如何用單片機產生兩路波形相同相位不同的PWM波
用一個定時器就可以。然後在不同時間對pwm翻轉就可以了。