粘贴一段STC15W4K32S4的PWM程序,希望大家喜欢,里面用了SI7021温湿度传感器,提供全部源码
单片机源程序如下:
- #include <STC15F2K60S2.H>
- #include <STC15_PWM.H>
- #define EAXSFE() P_SW2 |= 0x80; //CPU访问外部扩展
- #define EAXRAM() P_SW2 &= 0x7F; //CPU访问内部RAM
- unsigned int PWM_Duty = 600;
- int PWM_Right_Duty = 100,PWM_Left_Duty = 100;
- unsigned int PWM_Freq = 2200;
- void PWM_init()
- {
- PWMCFG = 0; //PWM配置寄存器 全部初始低电平
- EAXSFE();
- PWMCKS = 0x00;//不分频,分频数=低四位加一
- PWM2CR = 0x08;
- PWM3CR = 0x00;
- P2M0 |= (1<<7);
- P2M0 |= (1<<1);
- PWM2T1H = PWM3T1H = 0;
- PWM2T1L = PWM3T1L = 0;
- PWM_Flash_Freq(PWM_Freq);
- PWM_Flash_Duty(PWM_Duty);
- EAXRAM();
- /////////////////////////////////////
- PWMCR = 0x83; //PWM选择控制寄存器
- //PWMCR 启用PWMn对应为置“1” ,
- //ENPWM/ECBI/EN7/EN6/EN5/EN4/EN3/EN2/
- // 1 0 0 0 0 0 1 1
- //////////////////////////////////////
- }
- void PWM2_Flash_Duty(uint Duty)
- {
- PWM_Right_Duty = Judgment_value(Duty);
- EAXSFE();
- PWM2T2H = PWM_Duty / 256;
- PWM2T2L = PWM_Duty % 256;
- EAXRAM();
- }
- void PWM3_Flash_Duty(uint Duty)
- {
- PWM_Left_Duty = Judgment_value(Duty);
- EAXSFE();
- PWM3T2H = PWM_Duty / 256;
- PWM3T2L = PWM_Duty % 256;
- EAXRAM();
- }
- void PWM_Flash_Duty(uint Duty)
- {
- PWM_Duty = Judgment_value(Duty);
- EAXSFE();
- PWM2T2H = PWM3T2H = PWM_Duty / 256;
- PWM2T2L = PWM3T2L = PWM_Duty % 256;
- EAXRAM();
- }
- void PWM_Flash_Freq(uint Freq)
- {
- Freq = Judgment_value(Freq);
- EAXSFE();
- PWMCH = Freq / 256;
- PWMCL = Freq % 256;
- EAXRAM();
- }
- uint Judgment_value(uint value)
- {
- if(value>(PWM_Freq-20))
- value=PWM_Freq-20;
- if(value<11)
- value=20;
- return value;
- }
复制代码
所有资料51hei提供下载:
防火控制.rar
(747.29 KB, 下载次数: 31)
|