本程序是在基于STC12C5A60S2芯片基础上采用硬件PCA/PWM模块编写。
STC12C5A60S2.h头文件:
工程功能 :PWM输出
** MCU:STC12C5A60S2
** 晶振:11.0592MHz
* 配置PCA模块为8位PWM输出模式,PCA计数脉冲设置为Timer0的溢出频率,配置步骤如下:
* 1、PCA模块0在空闲模式下扔然计数,选择T0计数溢出频率为PCA模块0的计数脉冲,禁止PCA0的溢出中断,即CMOD=0X84;
* 2、不使用PCA中断,将PCA各模块中断请示标志清除,即CCON=0X00;
* 3、PCA计数器清0,即使CH=CL=0;
* 4、T0设置为工作方式2,8位自动重装模式,即TMOD=0X02;
* 5、将计数初值装入T0;
* 6、开启T0计数器,开启PCA0计数器,即TR0=1; CR=1;
* 7、PWM输出端口为P1.3,另一端接直流电机使用ULN2003驱动
* 8、启动后电机转速最慢。
主程序如下,有意向的同学可以在此基础再增加控制功能。
#include<STC12C5A60S2.h>
#include<PWM.h>
#define uint unsigned int
#define uchar unsigned char
sbit K2 =P2^0; //PWM值减小键
sbit K1 =P2^1; //PWM值增大键
sbit BEEP =P3^7 ; //蜂鸣器
sbit mt =P1^3; //PWM输出接入直流电机
void delay(unsigned char t) //10us延时子程序
{
while(t--) ;
}
void Delay_ms(uchar ms) //延时函数
{
uchar i ;
while(ms--)
{
for(i=0 ; i<114 ; i++) ;
}
}
void Beep() // 蜂鸣器子程序
{
unsigned char i ;
for (i=0 ;i<100 ;i++)
{
delay(100);
BEEP = !BEEP; //Beep取反
}
BEEP = 1; //关闭蜂鸣器
Delay_ms(100);
}
void main()
{
PCA_init();
Timer0_init();
while(1) //在while(1)循环中通过连续改变CCAP0H改变PWM0输出的PWM信号的占空比,PWM信号在P1.3脚输出
{ //修改后的代码使用按键直接加减CCAP0H的值来改变PWM0输出的PWM信号的占空比,加/减到最大/小时FMQ响,
do
{
if(CCAP0H!=0x02)
{
CCAP0H--;
Delay_ms(60);
}
else Beep();
}
while(K2==0);
do
{
if(CCAP0H!=0xFF)
{
CCAP0H++;
Delay_ms(60);
}
else Beep();
}
while(K1==0);
}
}
全部代码51hei下载地址:
STC12C5A60S2_按键控制PWM输出占空比控制电机转速.rar
(4.33 KB, 下载次数: 90)
|