祥云平台网站建设,360网站卖东西怎么做的,网站在哪做,重庆网站建设技术托管基本说明
本章使用芯片#xff1a;STC8H8K64U核心板
芯片手册#xff1a;点此查看
Keil 开发环境配置#xff1a;点此查看
本章学习内容#xff1a;利用库函数#xff0c;开发C程序#xff0c;实现呼吸灯效果。 代码实例
需求#xff1a;使用串口来控制呼吸灯效果STC8H8K64U核心板
芯片手册点此查看
Keil 开发环境配置点此查看
本章学习内容利用库函数开发C程序实现呼吸灯效果。 代码实例
需求使用串口来控制呼吸灯效果如果串口接收的数据为1则奇数灯亮如为0则偶数位灯亮。
#include NVIC.h
#include GPIO.h
#include Config.h
#include Switch.h
#include STC8H_PWM.h
#include UART.h
#include Delay.h#define PEROID MAIN_Fosc/1000 //主频周期
#define LED_SW P45 //总开关接的P45引脚要设置为低电平
#define LED1 P27
#define LED2 P26
#define LED3 P15
#define LED4 P14
#define LED5 P23
#define LED6 P22
#define LED7 P21
#define LED8 P20PWMx_Duty duty;void GPIO_Config(){GPIO_InitTypeDef init;init.ModeGPIO_OUT_PP;//推挽输出init.PinGPIO_Pin_5;GPIO_Inilize(GPIO_P4, init);init.PinGPIO_Pin_7 | GPIO_Pin_6 |GPIO_Pin_3 |GPIO_Pin_2 |GPIO_Pin_1 |GPIO_Pin_0 ;GPIO_Inilize(GPIO_P2, init);init.PinGPIO_Pin_5 | GPIO_Pin_4;GPIO_Inilize(GPIO_P1, init);}void UART_Config(){COMx_InitDefine init;init.UART_Mode UART_8bit_BRTx; init.UART_BRT_UseBRT_Timer1; init.UART_BaudRate115200; init.MorecommunicateDISABLE; init.UART_RxEnableENABLE; init.BaudRateDoubleDISABLE; UART_Configuration(UART1, init);// UART会触发中断所以要在NVIC中找到中断并配置优先级URAT关系到写数据所以优先级要高于其他任务NVIC_UART1_Init(ENABLE, Priority_3);// 切换引脚本实验电路板默认就是PIN脚30、31 也可以不写但有多组时必须配置UART1_SW(UART1_SW_P30_P31) }void PWM_Config(){PWMx_InitDefine init;init.PWM_ModeCCMRn_PWM_MODE1; //模式通常选择模式1或者模式2init.PWM_PeriodPEROID-1;//周期时间, 0~65535 init.PWM_Duty0; //PWM占空比时间, 0~Period init.PWM_DeadTime0; init.PWM_EnoSelectENO1P| ENO1N| ENO2P| ENO2N| ENO3P| ENO3N| ENO4P| ENO4N; init.PWM_CEN_EnableENABLE; init.PWM_MainOutEnableENABLE;// 配置PWMA和PWM1、PWM2、PWM3、PWM4PWM_Configuration(PWMA,init);PWM_Configuration(PWM1,init);PWM_Configuration(PWM2,init);PWM_Configuration(PWM3,init);PWM_Configuration(PWM4,init);// 初始化PWMA的中断NVIC_PWM_Init(PWMA, DISABLE, Priority_0);//切换PWM引脚PWM1_SW(PWM1_SW_P20_P21);PWM2_SW(PWM2_SW_P22_P23);PWM3_SW(PWM3_SW_P14_P15);PWM4_SW(PWM4_SW_P26_P27);
}void main(){int percent0; //单片机中要使用的变量必须定义在离函数名最近的位置否则编译时会报错未定义或重复定义int direction1;EAXSFR(); //扩展寄存器访问使能 使用PWM功能必须配置且要配置在前面否则可能无呼吸效果EA1; //中断使能GPIO_Config();UART_Config();PWM_Config();// 总开关LED_SW0;//点亮所有灯LED1 LED2 LED3 LED4 LED5 LED6 LED7 LED8 0;while (1){// 倒计时5次确保缓冲区内此时没正在接收数据if (COM1.RX_TimeOut0 --COM1.RX_TimeOut0){// 判断缓冲区有数据if (COM1.RX_Cnt0){if (RX1_Buffer[0]0){direction1;} else if (RX1_Buffer[0]1){direction-1;}// 让duty_percent一直在0-100来回往返if (percent100){percent100;}else if(percent0){percent0;}percent direction;// 修改PWM的duty并更新duty.PWM1_DutyPEROID*percent/100;duty.PWM2_DutyPEROID*percent/100;duty.PWM3_DutyPEROID*percent/100;duty.PWM4_DutyPEROID*percent/100;UpdatePwm(PWMA, duty);//缓冲区数据拿完后要将数据长度置为0COM1.RX_Cnt0;//设置延时delay_ms(250);delay_ms(250);}}}}}