皮皮网

【电商源码大全】【vector的源码】【在线拜佛源码】51单片机方波发生器源码_51单片机方波信号发生器

2024-11-18 17:37:57 来源:今日指标提示源码

1.基于单片机的单片单片信号发生器的设计,输出方波,机方机方正弦波,波发波信三角波,生器生器锯齿波,源码频率可调。单片单片电商源码大全原理是机方机方如何哒?怎么取点
2.你好 ---可否用stc51单片机控制 NE555 脉冲发生器 输出方波
3.单片机8051设计简易波形发生器,要求能产生正弦波,波发波信方波,生器生器三角波,源码通过键盘可改变输出信号的单片单片频率和幅度
4.周期在100ns内的方波信号发生器怎么用单片机做出来?提供个思路

51单片机方波发生器源码_51单片机方波信号发生器

基于单片机的信号发生器的设计,输出方波,机方机方正弦波,波发波信三角波,生器生器锯齿波,源码频率可调。原理是如何哒?怎么取点

       单片机硬件有PCA模块的,或者是PWM发生器的型号,也有没有的,你采用的芯片有没有这些硬件?

       正弦波:

       如果有,以PCA模块为例,vector的源码可以作为DA使用,使用前根据datasheet配置好PCA。在头文件中有math.h,里面有sin(X)函数,可以在程序中直接使用,使用前在主函数重要包含math.H这个文件。然后每个点采样输出即可,频率可调可以通过不同方法实现,如果是要做信号发生器,推荐使用一个电位器,在线拜佛源码通过AD采集电压,将采集值作为你输出函数的系数即可,亦可以通过串口发送指令等方式实现,前提要在使用前将AD或者串口配置好。

       如果没有硬件模块,也可以用普通IO口模拟,思路如下,经过y=sinx函数求得的结果,经过算法转化成二进制(主要是将小数转化成二进制的算法),推荐转化成8的app登录源码整数倍位,比如8位二进制或者位二进制。转化结束后将结果给IO口输出即可,频率也可采取上述方法设定。

       三角波:

       如果有DA,将DA的输入值按一定时间自增,到达峰值后按一定时间自减。前文中的“一定时间”设定的足够小,可以近似认为是三角波。三角波输出频率就是周期,在具体到操作层面时,apt 下载源码可以将输出函数前加上一个时间系数,还是通过调节正弦波的频率的方式调节。

       木有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);

       }

       //显示结束

       /