⑴ 怎么用单片机实现一个特定的波形,波形如下
上升沿和下降沿的时间也有要求吗?
如果没有要求就好办!
用一个单片机的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翻转就可以了。