#include "stc15.h" #include "intrins.h" #define uchar unsigned char #define uint unsigned int void delay_ms(uint x); void PCA_Init(); void main(void) { uchar i = 10; P1M1 = 0x00; P1M0 = 0x00; P12=0; P13=0; PCA_Init(); while(1) { } } void Delay10ms() //@11.0592MHz { unsigned char i, j; i = 108; j = 145; do { while (--j); } while (--i); } void Delay1ms() //@11.0592MHz { unsigned char i, j; nop(); nop(); nop(); i = 11; j = 190; do { while (--j); } while (--i); } /***************************************************************** ¹¦ÄÜÃèÊö£ºÑÓʱº¯Êý Èë¿Ú²ÎÊý£ºuint16 x £¬¸ÃֵΪ1ʱ£¬ÑÓʱ1ms ·µ»ØÖµ£ºÎÞ *****************************************************************/ void delay_ms(uint x) { uint j,i; for(j=0;j<x;j++) { for(i=0;i<1100;i++); } } void PCA_Init(void) { CCON = 0x00; CMOD = 0x02; CL = 0x00; CH = 0xFF; CCAPM0 = 0x42; PCA_PWM0 = 0x00; CCAP0L = 256-2560.25; CCAP0H = 2562560.25; CCAPM1 = 0x42; PCA_PWM1 = 0x00; CCAP1L = 256-2560.75; CCAP1H = 256-256*0.75; }使用PCA的PWM输出功能实现CCP0和CCP1输出频率合适,占空比不同的两路PWM信号驱动两路直流电机,使得两路直流电机转速不同。 附加:在实现以上功能的基础上,使用按键对其中1路直流电机进行调速。写出代码并能成功实现运行
时间: 2023-07-06 22:40:00 浏览: 113
单片机STC15F2K60S2 四路UART串口测试程序源代码.zip
5星 · 资源好评率100%
以下是基于原代码的按键调速代码:
```c
#include "stc15.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
sbit KEY = P3^2; // 定义按键所在引脚
void delay_ms(uint x);
void PCA_Init();
void adjust_speed(); // 调速函数
void main(void) {
P1M1 = 0x00;
P1M0 = 0x00;
P12=0;
P13=0;
PCA_Init();
while(1) {
adjust_speed(); // 调速
}
}
void Delay10ms() //@11.0592MHz
{
unsigned char i, j;
i = 108;
j = 145;
do {
while (--j);
} while (--i);
}
void Delay1ms() //@11.0592MHz
{
unsigned char i, j;
nop();
nop();
nop();
i = 11;
j = 190;
do {
while (--j);
} while (--i);
}
/*****************************************************************
函数功能:延时函数
函数参数:uint16 x,延时时间,单位1毫秒
函数返回:无
*****************************************************************/
void delay_ms(uint x) {
uint j,i;
for(j=0;j<x;j++) {
for(i=0;i<1100;i++);
}
}
/*****************************************************************
函数功能:PCA初始化函数
函数参数:无
函数返回:无
*****************************************************************/
void PCA_Init(void) {
CCON = 0x00;
CMOD = 0x02;
CL = 0x00;
CH = 0xFF;
CCAPM0 = 0x42;
PCA_PWM0 = 0x00;
CCAP0L = 256-256*0.25;
CCAP0H = 256*0.25;
CCAPM1 = 0x42;
PCA_PWM1 = 0x00;
CCAP1L = 256-256*0.75;
CCAP1H = 256-256*0.75;
}
/*****************************************************************
函数功能:调速函数
函数参数:无
函数返回:无
*****************************************************************/
void adjust_speed() {
if(KEY == 0) { // 如果按键按下
CCAP0L = 256-256*0.5; // 调整CCP0的占空比为50%
delay_ms(10); // 延时10ms,防止按键抖动
while(KEY == 0); // 等待按键松开
}
}
```
这段代码在原有代码的基础上添加了按键检测和调速函数。按键检测使用了单片机的GPIO输入功能,将按键所在的引脚P3.2定义为一个变量KEY,并在调速函数中检测KEY的状态。当按键按下时,调整CCP0的占空比为50%。调速完成后,延时10ms等待按键抖动结束,再等待按键松开后返回主循环。
阅读全文