51单片机点灯入门教程——3. PWM占空比实现震动牙刷功能

基本说明

本章使用芯片:STC8H8K64U核心板

芯片手册:点此查看

Keil 开发环境配置:点此查看

本章学习内容:利用库函数,开发C程序,实现电动牙刷2档切换效果。

代码实例

#include "GPIO.h"
#include "NVIC.h"
#include "Switch.h"
#include "STC8H_PWM.h"
#include "delay.h"

#define PERIOD  MAIN_Fosc/1000

void GPIO_Config(){
		GPIO_InitTypeDef init;
	init.Mode=GPIO_OUT_PP;		//IOģʽ,  		GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
	init.Pin=GPIO_Pin_1;		//Ҫ���õĶ˿�

	GPIO_Inilize(GPIO_P0,&init);	
}

void PWM_Config(){
	PWMx_InitDefine init;
	init.PWM_Mode = CCMRn_PWM_MODE1;			CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2
	init.PWM_Period=PERIOD-1;		// 0~65535
	init.PWM_Duty=0;			// 0~Period
	init.PWM_DeadTime=0;	//0~255
	init.PWM_EnoSelect=ENO6P;			ENO1P,ENO1N,ENO2P,ENO2N,ENO3P,ENO3N,ENO4P,ENO4N / ENO5P,ENO6P,ENO7P,ENO8P
	init.PWM_CEN_Enable=ENABLE;		// ENABLE,DISABLE
	init.PWM_MainOutEnable=ENABLE;//  ENABLE,DISABLE
	
	PWM_Configuration(PWM6, &init);
	PWM_Configuration(PWMB, &init);
	PWM6_SW(PWM6_SW_P01);
}
PWMx_Duty duty;

void main(){
	int low=30;
	int high=100;
	EAXSFR();
	GPIO_Config();
	PWM_Config();
	while(1){
			duty.PWM6_Duty = PERIOD*low/100;
			UpdatePwm(PWMB, &duty);
		delay_ms(200);
		delay_ms(200);
		delay_ms(200);
		delay_ms(200);
		delay_ms(200);

			duty.PWM6_Duty = PERIOD*high/100;
			UpdatePwm(PWMB, &duty);
			delay_ms(200);
		delay_ms(200);
		delay_ms(200);
		delay_ms(200);
		delay_ms(200);				
	
	}
}



你可能感兴趣的:(单片机开发(IC,Development),51单片机,单片机,嵌入式硬件)