1.基于单片机的单片单片信号发生器的设计,输出方波,机方机方正弦波,波发波信三角波,生器生器锯齿波,源码频率可调。单片单片openmp源码分析原理是机方机方如何哒?怎么取点
2.你好 ---可否用stc51单片机控制 NE555 脉冲发生器 输出方波
3.单片机8051设计简易波形发生器,要求能产生正弦波,波发波信方波,生器生器三角波,源码通过键盘可改变输出信号的单片单片频率和幅度
4.周期在100ns内的方波信号发生器怎么用单片机做出来?提供个思路
基于单片机的信号发生器的设计,输出方波,机方机方正弦波,波发波信三角波,生器生器锯齿波,源码频率可调。原理是如何哒?怎么取点
单片机硬件有PCA模块的,或者是PWM发生器的型号,也有没有的,你采用的芯片有没有这些硬件?
正弦波:
如果有,以PCA模块为例,hbuilder手机站源码可以作为DA使用,使用前根据datasheet配置好PCA。在头文件中有math.h,里面有sin(X)函数,可以在程序中直接使用,使用前在主函数重要包含math.H这个文件。然后每个点采样输出即可,频率可调可以通过不同方法实现,如果是要做信号发生器,推荐使用一个电位器,哈勃网站源码监测通过AD采集电压,将采集值作为你输出函数的系数即可,亦可以通过串口发送指令等方式实现,前提要在使用前将AD或者串口配置好。
如果没有硬件模块,也可以用普通IO口模拟,思路如下,经过y=sinx函数求得的结果,经过算法转化成二进制(主要是将小数转化成二进制的算法),推荐转化成8的装扮游戏 js源码整数倍位,比如8位二进制或者位二进制。转化结束后将结果给IO口输出即可,频率也可采取上述方法设定。
三角波:
如果有DA,将DA的输入值按一定时间自增,到达峰值后按一定时间自减。前文中的“一定时间”设定的足够小,可以近似认为是三角波。三角波输出频率就是周期,在具体到操作层面时,表白程序vb源码可以将输出函数前加上一个时间系数,还是通过调节正弦波的频率的方式调节。
木有DA···还是和正弦波类似,通过算法将输出值转化成二进制,然后送给IO口
方波:
这个最简单,将IO口定时切换高低电平即可,你定的时间就将成为你输出的频率。
如果有PCA模块,可配置成定时翻转模式,比较方便~
锯齿波是不是和方波类似啊?
你好 ---可否用stc单片机控制 NE 脉冲发生器 输出方波
你这单片机只是控制电路的关闭,那有点大材小用了。虽然只是这么一个动作,照样也得写程序的。
按你说的,用单片机一个I/O脚直接控制的第4脚是没有问题的,但要写程序来控制这一个I/O脚的输出。
还有一个条件是,电路也得用5V电源,与单片机要共地。
其实,就用单片机,就可以实现电路的功能,输出占空比可调模块方波矩形波信号,是小菜一碟,何必再用呢。再说了,只用也行啊,就不用单片机啦,用一个开关控制的第4脚就行了,可以控制的输出与关闭呀。
单片机设计简易波形发生器,要求能产生正弦波,方波,三角波,通过键盘可改变输出信号的频率和幅度
这个网上资料很多的,你可以参考下的,我前几天也做了个,proteus仿真的,程序如下,希望能帮到你的,有问题可以交流下的
#include<reg.h>
unsigned char i,sqar_num=; //最大值,默认值
unsigned char cho=0; //0:正弦波。1:方波。2:三角波。3:锯齿波。
unsigned char num=0;
unsigned char TIME0_H=0xff,TIME0_L=0xdc; //定时器0的初值设置;全局变量.对应正弦波,锯齿波HZ
sbit chg= P1^0;
sbit freq_u=P1^1;
sbit freq_d=P1^2;
sbit duty_u=P1^3;
sbit duty_d=P1^4;
sbit cs =P3^7;
bit flag=0;
unsigned int FREQ=;//初始化频率,HZ
unsigned char flag1;
sbit rs=P1^5;
sbit lcdcs=P1^7;
sbit cd=P3^0;
unsigned char TempBuffer[7];
unsigned char value1[]={ "Frequency:"};
void delay(unsigned int ms)
{
unsigned int i,j;
for (j=0;j<ms;j++)
for (i=0;i<;i++);
}
unsigned char code sin_num[]={
0x,0x,0x,0x,0x8b,0x8e,0x,0x,0x,0x9a,0x9d,0xa0,0xa3,0xa6,
0xa9,0xac,0xaf,0xb2,0xb6,0xb9,0xbc,0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,
0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,
0xee,0xef,0xf1,0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,
0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,
0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,0xd8,0xd6,
0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,
0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x,0x,0x,0x,0x8d,0x,0x,
0x,0x,
0x,0x7c,0x,0x,0x,0x6f,0x6c,0x,0x,0x,0x,0x5d,
0x5a,0x,0x,0x,0x4e,0x4c,0x,0x,0x,0x,0x3d,0x3a,0x,0x,
0x,0x,0x2e,0x2b,0x,0x,0x,0x,0x,0x1e,0x1c,0x1a,0x,0x,
0x,0x,0x,0x,0x0e,0x0d,0x0b,0,0x,0x,0x,0x,0x,0x,
0x,0x,0x,0x,0x,0x,0x,0x,0x,0x,0x,0x,0x,0x,
0x,0x,0x,0x,0x,0x,0x,0x,0x,0x,0x,0x,0,0x0b,
0x0d,0x0e,0x,0x,0x,0x,0x,0x,0x1a,0x1c,0x1e,0x,0x,0x,
0x,0x,0x2b,0x2e,0x,0x,0x,0x,0x3a,0x3d,0x,0x,0x,0x,
0x4c,0x4e,0x,0x,0x,0x5a,0x5d,0x,0x,0x,0x,0x6c,0x6f,0x,
0x,0x,0x7c,0x
/* ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,7,3,1,0,0,2,5,9,,,,,,,,,,,,
*/
};
unsigned code sanjiao_num[]=
{
0,2,4,6,8,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,, ,,,,,
,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,8,6,4,2,0,
};
//调节部分——频率
void freq_ud(void)
{
unsigned int temp;
if(freq_d==0)
{ FREQ--; }
else if(freq_u==0)
{ FREQ++; }
temp=0xffff-/FREQ; //切换后频率为HZ -^6/(*FREQ)
// temp=0xffff-/FREQ;
TIME0_H=temp/;
TIME0_L=temp%;
}
//调节部分——方波的占空比
void duty_ud(void) //方波也采用次中断构成一个周期。
{
if(duty_d==0&sqar_num>0)
sqar_num--;
else if(duty_u==0&sqar_num<)
sqar_num++;
}
//波形发生函数
void sint(void)
{
// char num=0;
// if(!flag)
{
cs=0;P2=sin_num[num++];cs=1;
if(num==){ num=0;}
}
/* else if(flag)
{
cs=0;P2=sin_num[num--];cs=1;
if(num==0){ num=0;flag=0;}
} */
}
void square(void)
{
if(i++<sqar_num) { cs=0;P2=0XFF;cs=1;}
else{ cs=0;P2=0X;cs=1;}
}
void triangle(void)
{
cs=0;P2=num++;cs=1;
}
void stw(void)
{
cs=0;P2=sanjiao_num[num++];cs=1;
if(num==){ num=0;flag=1;}
}
//显示开始
void write_command(unsigned char command)
{
rs=0;
P0=command;
lcdcs=1;
lcdcs=0;
}
void write_data(unsigned char data0)
{
rs=1;
P0=data0;
lcdcs=1;
lcdcs=0;
}
void init_()
{
delay(1);
write_command(0x);
delay(1);
write_command(0x0c);
delay(1);
write_command(0x);
delay(1);
}
//显示结束
/