精华内容
下载资源
问答
  • 在Proteus中单片机课设基于AT89C52单片机波形发生器仿真(四种波形)(同时输出种波形) 百度网盘链接 免费资源下载 proteus仿真免费下载 完成代码免费下载


    前言

      这篇文章是自己写的单片机课设,发这篇文章就当留个小纪念;如果说有什么不太好的地方还请大神请指出
    Keil C51的代码以及Proteus的仿真的百度网盘链接放到这里
      链接: 点我跳转点我点我点我
     (提取码:TYWL)


    提示:以下是本篇文章正文内容,下面案例可供参考

    一、课设任务是什么?

    1. 设计一款能产生3种以上波形的波形发生器
    2. 设计波形选择按钮(采用3个独立按键)
    3. 点阵显示波形图案;
    4. 能同时输出两种波形;
    5. 显示频率。

    二、如何解决这几个任务?

    1. 能产生3种以上波形
      分析:通过查阅资料,得知常用的波形有正弦波、方波、锯齿波、三角波四种波形其余的被称为任意波,因此我主要的目的便是输出四种波形.
    2. 能同时输出两种波形
      同时输出两个波形,就要轮转着用相同的8个I/O口来将波形取码输出到数模转换电路中,也就是对P0这个口时分复用.
      对于波形的取码,采用二维数组来存放数据.
    3. 设计波形选择按钮(采用3个独立按键)
      硬件方面:同时输出两个波形,意味着需要对两个波形进行调控,需要两个按键;开始设置波形与结束设置波形各一个按键,共四个按键实现波形选择.
      程序方面:初步构想是不在主函数中调用键盘扫描,而是在外部中断0服务程序中调用,中断时查询能够节省大部分资源.同时输出两个波形,意味着需要对两个波形进行调控,需要两个按键.再定义两个变量,一个按键对应一个变量就能够解决.
    4. 点阵显示波形图案
      硬件方面:Proteus中最小的点阵是8*8点阵,如果直接连接到51单片机上I/O口是肯定的不够用的,所以采用串口输出的方式.串并转换芯片采用74HC595;只需要6个引脚就能够控制16个引脚的8*8点阵
      程序方面:用一个二维数组来存储点阵显示的数据;为了节省C51的空间,就利用上面波形选择时候两个变量来控制这个二维数组.
    5. 显示频率
      硬件方面:P1口连接LCD1602的8个数据口,其他的命令位是在P2.6 P2.7
      程序方面:第一行(也就是write_com(0x80))显示波形输出端一的波形.第二行(就是执行write_com(0xc0))显示的是频率.

    三、仿真原理图


    四、代码

    4.1 LCD1602代码

    对于LCD1602来说,将它的代码和主函数放到同一个.c文件中会显得十分的累赘;对于这个波形发生器来说LCD显示只是辅助功能,所以放到一个独立的头文件中是一个不错的选择.

    /*LCD1602.h 是LCD1602头文件*/
    #ifndef _LCD1602_H_
    #define _LCD1602_H_
    #include<REG52.H>
    #define uint  unsigned int
    #define uchar unsigned char
    /*LCD1602位定义*/
    sbit lcdrs = P2^7;//RS : 0=输入指令;1=输入数据
    sbit lcden = P2^6;
    
    /*LCD1602函数声明*/
    void lcd_ram();					//向LCDRAM中写入八个字节的点阵数据,就会组成一个字符
    void init_lcd();				//初始化函数
    void write_com(uchar com);		//写命令函数
    void write_date(uchar date);	//写数据函数
    void delay_LCD56(uint xms);
    /*LCD1602要显示的字符*/
    uchar code table[];	//1-9
    uchar code table1[];//前面是Fout= 是0-9
    uchar code zifu[];
    #endif
    

    相关的LCD1602.c文件在链接里面有,这里就不再展示


    4.2 波形输出以及8*8点阵显示代码

     对于波形输出采用定时器中断的方式输出,通过设置定时/计数器的初值就能够控制波形的频率,对于以后功能的扩展是个不错的选择;

    void T0_time() interrupt 1
    {
    	TH0=a;//重新装填初值
    	TL0=b;
    	u++;	//u自加1
    	if(u>=64)	//如果u超过64,就要归零
    		u=0;	//这是因为各个波形的取值只有64个
    
    	/*开始输出第一个波形*/
    	WR1 = 1;
    	CS0 = 0;			 /*CS0低电平有效,选中第一个DAC0832*/
    	CS1 = 1;			 /*CS1低电平有效,第二个DAC0832未被选中*/
    	P0 = wave[flag_0][u];/*将数据通过P0口输出到数模转换电路中*/
    	WR1 = 0;
    	delay(20);
    	/*第一个波形输出完成*/
    	
    	/*8*8矩阵显示第一个波形*/
    	for(temp = 0;temp<4;temp++)
    	{
    		line_scan();
    		send_595(matrix[flag_0][temp]);
    		delay(3);
    		ST_CP_0 = 0;
    		ST_CP_0 = 1;	//上升沿,存储寄存器变为高电平
    		_nop_();
    		ST_CP_0 = 0;	//发送完
    	}
    	/*8*8矩阵显示第一个波形完成*/
    
    	/*开始输出第二个波形*/
    	WR1 = 1;
    	CS0 = 1;
    	CS1 = 0;
    	P0 = wave[flag_1][u];
    	WR1 = 0;
    	delay(20);
    	/*第二个波形输出完成*/
    	/*8*8矩阵显示第2个波形*/
    	for(temp = 0;temp<4;temp++)
    	{
    		line_scan();
    		send_595(matrix[flag_1][temp]);
    		delay(3);
    		ST_CP_0 = 0;
    		ST_CP_0 = 1;	//上升沿,存储寄存器变为高电平
    		_nop_();
    		ST_CP_0 = 0;	//发送完
    	}
    	/*8*8矩阵显示第2个波形完成*/
    }
    
    

    4.3 波形选择

    波形选择用的是外部中断0,节省资源;设置优先级高于定时器中断0,能够打断中断0的服务程序进行设置.

    void keyscan()
    {
       //当第一个键按下去
       if(s1 == 0)
       {
       	delay(1);
       	if(s1 == 0)
       	{
       		EA = 0;				//关闭总中断
       		while(!s1);		//等待松开按键
       		if(++flag_0==4)
       			flag_0=0;
       		display();		//展示函数
       		EA = 1;				//开总中断
       	}
       }
       //当第二个按键按下去
       if(s2==0)			
       {	 
       	delay(1);			//防抖动
       	if(s2==0)			//确认按键按下
       	{
       		EA=0;			//关闭总中断
       		while(!s2);		//等待按键松开
       		if(++flag_1==4)
       			flag_1=0;
       		EA=1;
       	}
       }	
    }
    void interrupt_0() interrupt 0 using 3
    {
       while (s3!=0)
       //等待S3按键按下,就跳出循环,结束中断服务程序
       {
       		keyscan();
       }
    }
    

    4.4 完整代码

      这篇文章是自己写的单片机课设,发这篇文章就当留个小纪念;如果说有什么不太好的地方还请大神请指出
    Keil C51的代码以及Proteus的仿真的百度网盘链接放到这里
      链接: 点我跳转点我点我点我
     (提取码:TYWL)


    结尾

    若有错误,欢迎私信指出

    展开全文
  • 利用单片机输出pwm波形对舵机进行控制,阐述了pwm的产生方法,以及周期定时
  • 51单片机定时器作PWM波形输出, ///Max_Init_value的大小将影响到PWM ///的频率,其与频率的关系如下: /// Max_Init_value=1/Freq*1000*1000 ///在标准51中,Max_Init_value的值不能 ///过高,因为定时器0的...
  • 利用单片机输出各种波形,有源程序和电路图,很经典
  • 、我们这次的课程设计是以单片机为基础,设计并开发能输出多种波形(正弦波、三角波、锯齿波、方波、梯形波等)且频率、幅度可变的函数发生器。
  • 51单片机输出pwm波形

    千次阅读 2016-08-31 13:52:51
    #define FOSC 11059200L #define T1MS (65536-FOSC/12/1000) unsigned char count_1; unsigned char count_2; unsigned char duty_cycle_1; unsigned char duty_cycle_2; sbit pwm_out_1 = P1^0;...sbit pwm_
    #define FOSC 11059200L
    
    #define T1MS (65536-FOSC/12/1000)

    unsigned char count_1;
    unsigned char count_2;
    unsigned char duty_cycle_1;
    unsigned char duty_cycle_2;
    sbit pwm_out_1 = P1^0;
    sbit pwm_out_2 = P1^1;
    void timer1_init()
    {
    TMOD = 0x01;
    TL0 = T1MS;
    TH0 = T1MS>>8;
    TR0 = 1;
    ET0 = 1;
    EA = 1;
    count_1 = count_2 = 0;
    }


    void timer1_isr() interrupt 1 using 1
    {
    TL0 = T1MS;
    TH0 = T1MS;
    count_1++;
    count_2++;
    if(count_1 == 100)
    count_1 = 0;
    if(count_2 == 100)
    count_2 = 0;
    count_1 > duty_cycle_1?(pwm_out_1 = 0):(pwm_out_1 = 1);
    count_2 > duty_cycle_2?(pwm_out_2 = 0):(pwm_out_2 = 1);

    }


    void main(void)
    {
    duty_cycle_1 = 50;
    duty_cycle_2 = 60;
    timer1_init();
    P2 = 0x0;
    while(1)
    {

    }
    return;
    }


    仿真结果


    展开全文
  • 利用C51单片机控制输出PWM(脉宽调制)波形从而控制温度的C语言程序
  • 很好很详细,做单片机控制电机时很有用,大家可以参考看看
  • 版本cvi2017+keil5+proteus8.6 串口采集单片机的温度,显示波形并excel输出采集的数据 串口通信自动获取串口号,控制器stc89c51 tc72测温
  • 通过STM8单片机串口输出组数据,然后通过串口波形显示软件实时显示单片机输出的数据。这种方法可以在ADC数据采集的时候实时显示数据波形,方便调试。
  • 32单片机(f103rc)输出正弦波形,在示波器上测出来,最大值和最小值为负值
  • 利用ATMEGA16单片机输出PWM波形控制温度的程序哪位大神有 啊![图片说明](https://img-ask.csdn.net/upload/201605/07/1462614869_61784.png)
  •   调试STM8单片机PWM功能的时候,经常会遇到一情况,就是PWM初始化设置完成之后,程序下载到单片机中,确没有任何波形输出。有时候代码是下载别的调试好的,但是在自己芯片上就是没有波形输出。这时要么骂双穿...

      调试STM8单片机PWM功能的时候,经常会遇到一种情况,就是PWM初始化设置完成之后,程序下载到单片机中,确没有任何波形的输出。有时候代码是下载别的调试好的,但是在自己芯片上就是没有波形输出。这时要么骂双穿代码的人忽悠人,上传的代码是错的,要么怀疑自己的单片机坏了。

      现在就来分析一下,命名代码正确,但是确没有波形输出这种情况要如何分析判断。

      首先来看一下PWM的初始化代码

    void TIM1_Init( void )
    {
        TIM1_CCMR2 = 0x60;          //TIM1 CH2 输出模式 PWM1
        TIM1_CCER1 |= 0x10;         //CC2为输出
        TIM1_PSCRH = 0x00;
        TIM1_PSCRL = 0x03;          //16M/(1+3)=4 M
        
        TIM1_ARRH = 1000 >> 8;       //设定自动重装载值高8位
        TIM1_ARRL = 1000;            //设置自动重装载值低8位
        
        TIM1_CCR2H = 500 >> 8;       //捕获比较寄存器高8位
        TIM1_CCR2L = 500;            //捕获比较寄存器低8位 占空比值
        
        TIM1_BKR = 0x80;            //刹车寄存器 使能OC1输出 定时器不工作时输出无效电平
        TIM1_CR1 |= 0x01;           //允许定时器中断
    }
    

      设置TIM1_CCMR2为0x60,也就是设置了定时器1的通道2为 PWM1 输出模式。接下来设置TIM1_CCER1寄存器值为0x10,设置了定时器1通道2输出使能。TIM1_PSCR寄存器用于设置定时器的分频器值,这里分频器值设置为3,计数器的时钟频率(f CK_CNT )等于f CK_PSC /( PSCR[15:0]+1)。 根据公式可以计算定时器的频率,系统频率为16M,所以定时器的频率为 16/(3+1)=4M,也就是定时器的工作频率为4M。TIM1_ARR寄存器用于设置自动重装载值,也就是输出PWM的频率,这里设置为1000,定时器的工作频率为4M,自动重转载值为1000,那么PWM输出的频率就为 4000000 / 1000 = 4000HZ,也就是说PWM的输出频率为4K,TIM1_CCR2寄存器用于设置通道2的比较值,也就是计数器会和这个值进行比较。当计数器的值大于这个值之后,输出的电平就会翻转。

    image.png

      通过官方的资料也可以看出,在PWM1模式下,当计数器的值小于TIM1_CCR的值时,输出有效电平,当计数器的值大于TIM1_CCR的值时,输出为无效电平。

      有效电平是在TIM1_CCER1中设置的。

    image.png
    为0时,默认为高电平有效,所以这里当计数器小于500时,输出高电平,当计数器值大于500时输出电平。

      最后通过TIM1_BKR设置输出使能,TIM1_CR1开启计数器。这样在定时器1通道2引脚就可以输出PWM波了。

      将示波器挂在PC7引脚上,观察波形,这时发现没有任何波形输出?难道PWM的初始化设置有问题? 这里初始化设置的没有任何问题。不过在使用STM8单片机的时候,要特别注意一点。就是单片机引脚的复用功能开启

      在STM8单片机中有一个选项字节,这个选项字节就是专门用于设置单片机IO引脚的复用功能重映射的,因为有的IO口好多个功能,那么具体每个IO口要使用哪个功能,就是由这个选项字节来设置的。

    image.png

    这个OPT2就是用来设置复用功能的,NOPT2是OPT2的反码。这个OPT2共有8个位,每一位用0和1来代表不同的功能。

    具体每一位代表的含义如下图所示:

    image.png

      这个OPT2默认值都为0,也就是说默认的引脚功能都为上面的一行。上面代码中使用的是定时器1通道2引脚,也就是TIM1_CH2,这个功能是通过AFR0位设置的。在表中可以看出AFR0位默认的功能是SPI引脚功能,而PWM需要的TIM功能,必须要将OPT0的第0位,也就是AFR0位设置位1才行。

      这个选项字的设置有两种方法,一种是通道在程序中添加选项字的设置代码,另一种是直接在烧写软件的界面设置。通过代码来设置选项字的方法这里就不介绍了,因为毕竟麻烦,而且容易出错。这里直接介绍使用烧写软件来设置。

    这里用到的烧写软件为ST Visual Programmer

    image.png

    打开后界面如下:

    image.png

    用这个软件向单片机烧写程序的时候就可以直接设置选项字了,将上面编写的代码编译。然后使用这个烧写软件打开编译生成的文件。

    image.png

    打开后,用鼠标单击软件下面的OPTIN BYTE选项,这时候就会打开这个代码的选项设置,此时软件上面就会显示AFR0—AFR7的默认选项。通过上面选项字节的表格分析可以知道,这里需要设置的是AFR0,用鼠标点一下AFR0这一行的最后边。

    0d4171c718536bd29b468985a8caf22.jpg
    image.png

    这时候就可以看到AFR0后面的选项就会出现一个向下的箭头,底下总共会出现两个选项,上面的选项也就是设置值为0时的选项,下面的选项是这是值为1时的选项,这里肯定要选择下面的选项。

    image.png

    这时可以看到下面的选项中就可以看到当前设置的功能为 PC5为 TIM2_CH1,PC6 为 TIM1_CH1, PC7 为 TIM1_CH2。同时最左边选项字节状态的第2位值,也变为了01。 说明定时器的功能已经设置成功了。这里要注意一点,这里选项字设置之后,PC5、PC6、PC7三个IO口的默认功能都会发生改变。

    设置好之后,直接将代码烧写到单片机中,这时就会发现,示波器上已经输出了波形。

    0d4171c718536bd29b468985a8caf22.jpg

    如果以后在调试代码的过程中发现单片机的工作不正常,首先要检测检查IO口使用的功能是不是需要开启重映射功能,确保重映射功能正常后,再检查其他地方。

    展开全文
  • 利用单片机设计一波形发生器,能产生方波,三角波和正弦波,采用1.3寸或者2.4寸OLED屏显示出波形,要求OLED能显示两屏,第一屏为汉字提示(1.方波,2三角波,3正弦...
  • 基于51单片机水龙头感应以及可调波形输出,lcd12864显示波形类型以及频率,幅度通过调节电位器进行控制输出频率在10hz-1khz之间,幅度可调正负5v.水龙头感应利用的是热释电红外传感器,当有人靠近传感器便会触发响应...
  • 概述:stm32的每个引脚都有其自带的特殊...此文章来详述使用stm32F051R8T6型号单片机,带有定时器输出功能的引脚来输出pwm波形,同理其他型号的单片机也可实现。并同时来控制直流电机转速,本文以adda公司生产的AD...

     

    概述:stm32的每个引脚都有其自带的特殊功能,有定时器输出功能的引脚可以输出pwm。如果没有的也可以io口模拟输出,如果非要较真的话,理论上可以算是每个引脚都能输出PWM,但一般我们都使用带定时器输出功能的io。此文章来详述使用stm32F051R8T6型号单片机,带有定时器输出功能的引脚来输出pwm波形,同理其他型号的单片机也可实现。并同时来控制直流电机转速,本文以adda公司生产的AD0212DB-G50直流风扇为例讲述。

    1.硬件条件

    保证单片机输出IO可以支持定时器功能。我板子上连接风扇的引脚为PC9,根据单片机手册PC9引脚带有定时器功能

    同理如下图的几个引脚都可以

    再次就不一一列举了,在是用不同型号的单片机时,参考单片机手册。

    2.stm32固件库

    上图分别是stm32定时器相关的库函数,和相关调用的定时器驱动子函数,用户自己定义。

    软硬件条件都准备好了,接下来就是pwm所需的相关配置。

    1.首先是输出管脚的IO口设置,PWM输出,自然会采用到IO口作为输出端口,在STM32F051系列中,IO端口可以复用为TIM定时器输出通道。

    采用PC9的复用功能AF1作为TIM3定时器的第4通道输出。

    2.设置定时器的参数,配置出频率为17.57 KHz的PWM波

    考虑time定时器的时钟频率。如果我们设置分频数为0,也就是说time定时器等于系统时钟,system_stm32f0xx.c中已经把系统频率设置在48MHZ,在startup_stm32f0xx.s中,首先运行了systemInit函数,因此可以确定time定时器运行在48MHZ。
    定时器产生的PWM的频率可以按照下面的公式进行计算:
    预定标的值TIM1_Period = (time定时器频率 / pwm的频率) - 1
    预定标的值实际上就是定时器运行多少次算一个PWM周期,这个在设置pwm频率中重要的参数。

    配置完整代码如下:

    /*==============================================================================
        函数名      : Fan_PWMConfigInit
        功能        : 风扇控制引脚输出pwm控制风扇转速
        输入参数说明: 无
        返回值说明  : 无
    ------------------------------------------------------------------------------*/
    void Fan_PWMConfigInit(void)
    {
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
        TIM_OCInitTypeDef TIM_OCInitStructure;
        s32 TimerPeriod, Channel1Pulse;
    
        /* 使能GPIO时钟 */ 
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
        /* 配置GPIO管脚参数设置*/ 
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; 
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; 
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; 
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; 
        GPIO_Init(GPIOC, &GPIO_InitStructure);
        /* GPIO管脚复用设置*/ 
        GPIO_PinAFConfig(GPIOC, GPIO_PinSource9, GPIO_AF_1); 
    
    
        /*计算预定标 的值,也就是多少个时钟计数为一个周期*/
        TimerPeriod = (SystemCoreClock / 17570 ) - 1;
        /*计算CCR1 跳转值 在占空比为50%时*/
        Channel1Pulse = (u16)(((u32)5 * (TimerPeriod - 1)) / 10);
    
        /* TIM3 时钟使能 */
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
        /* Time 定时基础设置*/
        TIM_TimeBaseStructure.TIM_Prescaler = 0;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 
        /* Time 定时设置为上升沿计算模式*/
        TIM_TimeBaseStructure.TIM_Period = TimerPeriod;
        TIM_TimeBaseStructure.TIM_ClockDivision = 0;
        TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
        TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
        /* 频道1的PWM 模式设置 */
        TIM_OCInitStructure.TIM_OCMode          = TIM_OCMode_PWM1;
        TIM_OCInitStructure.TIM_OutputState     = TIM_OutputState_Enable;
        TIM_OCInitStructure.TIM_OutputNState    = TIM_OutputNState_Enable;
        TIM_OCInitStructure.TIM_OCPolarity      = TIM_OCPolarity_Low;
        TIM_OCInitStructure.TIM_OCNPolarity     = TIM_OCNPolarity_High;
        TIM_OCInitStructure.TIM_OCIdleState     = TIM_OCIdleState_Set;
        TIM_OCInitStructure.TIM_OCNIdleState    = TIM_OCIdleState_Reset;
        TIM_OCInitStructure.TIM_Pulse = Channel1Pulse;      
        TIM_OC4Init(TIM3, &TIM_OCInitStructure);
        /* TIM3 计算器使能*/
        TIM_Cmd(TIM3, ENABLE);
        /* TIM3 主输出使能 */
        TIM_CtrlPWMOutputs(TIM3, ENABLE);
    
    }

    在需要改变风扇转速时,只需要改变占空比即可。

    /* 风扇控制 */
    static s32 CmdFanCtrl (TCmdTbl *cmdtp, s32 argc, s8 *argv[])
    {
        u8 byCmd;
        s32 Channel1Pulse;
        
        if (argc < 2)
    		return -1;
    
        byCmd = strtoul(argv[1], NULL, 0);
        switch(byCmd){
        case 1:
            Channel1Pulse = (u16)(((u32)875 * 2730) / 1000);
            break;
        case 2:
            Channel1Pulse = (u16)(((u32)75 * 2730) / 100);
            break;
        case 3:
            Channel1Pulse = (u16)(((u32)625 * 2730) / 1000);
            break;
        case 4:
            Channel1Pulse = (u16)(((u32)5 * 2730) / 10);
            break;
        case 5:
            Channel1Pulse = (u16)(((u32)375 * 2730) / 1000);
            break;
        case 6:
            Channel1Pulse = (u16)(((u32)25 * 2730) / 100);
            break;
        case 7:
            Channel1Pulse = (u16)(((u32)125 * 2730) / 1000);
            break;
        case 8:
            Channel1Pulse = (u16)(((u32)1 * 2730) / 100);
            break;
        }
    
        TIM_SetCompare4(TIM3, Channel1Pulse);
    
        return 0;
    }

    TIM_SetCompare4(TIM3, Channel1Pulse);该函数是改变对应TIM定时器对应通道占空比的函数,其中的2370是根据系统时间计算出来。使用不同的定时器和通道,可在stm32f0xx_tim.c中查找不同的库函数。

    下面是输出的pwm波形

     

    展开全文
  • 单片机为基础,设计并开发能输出多种波形(正弦波、三角波、锯齿波、梯形波等),且频率、幅度可变的函数发生器。
  • 单片机ATMEGA128控制5路PWM方波,按照74HC08逻辑编码输出15路PWM信号,一次按照迪文触摸屏点亮3颜色灯板的5路发光信号。ULN2003提供12V电压。每个灯板通过一个CMOS管IR3205输出功率。一个74HC08通过一路PWM,这路...
  • IAR开发环境下用STM8单片机生成3组不同的正弦波波形数据,并通过串口发送出来,并在串口波形软件上显示发送的波形
  • 用c语言写的程序,51控制dds输出不同的波形
  • android蓝牙接收单片机数据并绘制波形
  • DAC0832 8位DA 51单片机 三种波形 用51单片机控制DAC0832产生三种波形 好资料,包含了c程序 pcb图
  • 用STC89C52做主控,外加几个按钮做控制,来控制PWM波形,方波的个数。
  • 1波形:依次在四种波形之间切换 2频率_幅值切换:在频率和幅值调节之间切换 3加:每按一次频率按10Hz的步长递增,或幅值按1V的步长递增 4减:每按一次频率按10Hz的步长递减,或幅值按1V的步长递减 电路设计原理...
  • 种波形的产生,包括锯齿波、三角波、方波、正弦波。通过LCD液晶显示当前波形以及波形的频率。可以通过按键切换波形,并可以...006【毕业设计】基于51单片机波形发生器(四种波形) #include <reg52.h> ..
  • 正弦波 本文利用80C51单片机外接数模转换器和I/V转换电路,由用户通过按键选择输出实验中经常使用到的几基本波形:方波、锯齿波、正弦波。方波由80C51单片机内部自带的计数器/定时器产生,并由用户通过小键盘...
  • 绍了基于80C51单片机产生几基本波形的方法。采用微处理器兼容的14位数模转换器MAX7534,高速,稳定,具有良好的线性。用户通过按键选择输出需要的波形波形精度能够满足一般的使用条件。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,632
精华内容 2,652
关键字:

单片机输出三种波形