【Proteus仿真】【32单片机】STM32单片机PWM波系统设计

目录

一、主要功能

二、使用步骤

三、硬件资源

四、软件设计

五、实验现象

联系作者

一、主要功能

1、LCD显示当前输出的PWM波形占空比。
2、按键设置输出的PWM波占空比值。

二、使用步骤

系统运行后,LCD1602显示当前输出的PWM波的占空比;
通过按键调节输出的PWM波的占空比。

三、硬件资源

1、32单片机核心模块
2、按键模块
3、LCD1602显示模块

四、软件设计

#include "exti.h"
#include "key.h"
#include "delay.h"
#include "usart.h"
#include "1602.h"


extern u16 PWM_L; //PWM_L值

//外部中断0服务程序
void EXTIX_Init(void)
{
	
 
		EXTI_InitTypeDef EXTI_InitStructure;
		NVIC_InitTypeDef NVIC_InitStructure;

    KEY_Init();	 //	按键端口初始化

  	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);	//使能复用功能时钟

	
    //GPIOB13 中断线以及中断初始化配置   下降沿触发
  	GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource13);
  	EXTI_InitStructure.EXTI_Line=EXTI_Line13;	//KEY1
  	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;	
  	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿触发
  	EXTI_InitStructure.EXTI_LineCmd = ENABLE;		
  	EXTI_Init(&EXTI_InitStructure);	 	//根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
		
	  NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;			//使能按键KEY1所在的外部中断通道
  	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;	//抢占优先级0, 
  	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;					//子优先级0
  	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;								//使能外部中断通道
  	NVIC_Init(&NVIC_InitStructure); 	

   //GPIOB14	  中断线以及中断初始化配置 下降沿触发 //KEY2
  	GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource14);
  	EXTI_InitStructure.EXTI_Line=EXTI_Line14;
  	EXTI_Init(&EXTI_InitStructure);	  	//根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
	
  	NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;			//使能按键KEY2所在的外部中断通道
  	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;	//抢占优先级1, 
  	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;					//子优先级1
  	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;								//使能外部中断通道
  	NVIC_Init(&NVIC_InitStructure); 

		//GPIOB15	  中断线以及中断初始化配置 下降沿触发 //KEY3
  	GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource15);
  	EXTI_InitStructure.EXTI_Line=EXTI_Line15;
  	EXTI_Init(&EXTI_InitStructure);	  	//根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
	
  	NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;			//使能按键KEY3所在的外部中断通道
  	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;	//抢占优先级1, 
  	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;					//子优先级1
  	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;								//使能外部中断通道
  	NVIC_Init(&NVIC_InitStructure); 
}


//外部中断
void EXTI15_10_IRQHandler(void)
{
	delay_ms(50);
	
	if(KEY2 == 0)
	{

			if(PWM_L<1000)
				PWM_L=PWM_L+10;
			LcdWriteCom(0x80+0x40+9); //第二行
			LcdWriteData(PWM_L/1000+0x30);
			LcdWriteData(PWM_L%1000/100+0x30);
			LcdWriteData(PWM_L%100/10+0x30);		
		while(KEY2 == 0);
	}
	if(KEY3 == 0)
	{

			if(PWM_L>0)
				PWM_L=PWM_L-10;
			LcdWriteCom(0x80+0x40+9); //第二行
			LcdWriteData(PWM_L/1000+0x30);
			LcdWriteData(PWM_L%1000/100+0x30);
			LcdWriteData(PWM_L%100/10+0x30);                 
		while(KEY3 == 0);
	}
	if(EXTI_GetITStatus(EXTI_Line13) != RESET)//判断中断标志线是否13
	{				
		EXTI_ClearITPendingBit(EXTI_Line13); //清除LINE13上的中断标志位
	}
  if(EXTI_GetITStatus(EXTI_Line14) != RESET)//判断中断标志线是否14
	{				
		EXTI_ClearITPendingBit(EXTI_Line14); //清除LINE14上的中断标志位
	}		
  if(EXTI_GetITStatus(EXTI_Line15) != RESET)//判断中断标志线是否15
	{	
		EXTI_ClearITPendingBit(EXTI_Line15); //清除LINE15上的中断标志位
	}
	 
}



#include "delay.h"
#include "sys.h"
#include "1602.h"
#include "exti.h"
#include "key.h"
#include "pwm.h"
 
#include "Tool.h"

u16 PWM_L=250;     //PWM值
void Delay(int num)
{
	while(num--) ;
}

void display_data(void)///显示
{	
	LcdWriteCom(0x0C);	  		                            //取消光标闪烁	

	LcdWriteCom(0x80+0x40+9); //第二行
	LcdWriteData(PWM_L/1000+0x30);
	LcdWriteData(PWM_L%1000/100+0x30);
	LcdWriteData(PWM_L%100/10+0x30);
}


int main()
{	
	
	delay_init();	    	 //延时函数初始化
	LCD1602_Init();      //lcd函数初始化
	NVIC_Configuration(); 	 //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 
	TIM2_PWM_Init();//PWM波初始化
	EXTIX_Init();//外部中断初始化 
	TOOL_Init();         //工具初始化
	display_data();///显示
	
	
	while(1) 
	{	
		TIM2_SET_Compare(PWM_L-1);//占空比百分
	}	  
}














五、实验现象

B站演示视频:

A006 基于STM32单片机PWM波形系统仿真_哔哩哔哩_bilibili本项目使用Proteus8仿真STM32单片机的PWM波系统使用LCD1602液晶、按键。系统运行后,LCD1602显示当前输出的PWM波的占空比;通过按键调节输出的PWM波的占空比。主要功能如下:1、LCD显示当前输出的PWM波形占空比。2、按键设置输出的PWM波占空比值。, 视频播放量 0、弹幕量 0、点赞数 0、投硬币枚数 0、收藏人数 0、转发人数 0, 视频作者 单片机设计室, 作者简介 Q:215138327 V:Kinpar 承接51,32单片机设计定做,51,32单片机protues仿真,实物,程序等。,相关视频:重大好消息啊,制造业不外迁了,要向内地和西部转移了,基于STM32单片机DS18B20温度检测系统仿真,基于STM32单片机DHT11温湿度检测系统仿真,创造历史:SpaceX首次成功实现筷子加火箭!!又是马斯克的公司!!,【STM32单片机-A004】【Proteus仿真】超声波测距系统,西门子领导层大变动,汇川技术首次被认为是战略竞争对手,龙翔之九天对星舰5飞做出逆天评价,大头在亚锦赛中祭出了乒坛当今最先进的技术!,专家 : 马斯克一定不懂通信技术,基于STM32单片机温湿度光敏检测系统仿真https://www.bilibili.com/video/BV1ANmLYkETQ/

联系作者

作者B站链接:https://space.bilibili.com/3493294220773802

专注于51单片机、STM32、Proteus、物联网软件开发,PCB设计。

作者:qq_215138327

物联沃分享整理
物联沃-IOTWORD物联网 » 【Proteus仿真】【32单片机】STM32单片机PWM波系统设计

发表回复