PWM控制小车速度按键控制

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CCP2CON=0x3C; //使处于脉宽调制模式
T2CON=0x04; //启动TMR2开始计时
for( j=0;j<21;j++)
{
delay();
}
}
//------------------------------------------------------------------
//延时程序
}
//------------------------------------------------
//按键扫描程序
void scan()
{
for(;;) //循环扫描
{
if(RA0==0) //按键K1按下
{
delay(); //按键防抖
if(RA0==0)
{
if(sudu<0xf0)
sudu=sudu+0x08; //在速度允许范围内,若按键按下,脉宽增加,速度增加
elsewenku.baidu.com
sudu=0xff; //若超出速度允许范围,则以最高速运行,占空比为1
break; //确认按键按下,则跳出for循环
}
}
if(RA1==0)
{
delay();
if(RA1==0) //按键K2按下
{
if(sudu>0x5f)
sudu=sudu-0x08; //在速度允许范围内,若按键按下,脉宽减小,速度降低
else
sudu=0x5f; //若低于超出速度允许的最低值,则以最低速运行
break;
}
}
if(RA2==0)
{
delay();
if(RA2=0) //按键K3按下
{
PORTD=0x05; //倒车
break;
}
}
if(RA3==0)
{
delay();
if(RA3==0) //按键K4按下
{
PORTD=0x0a; //前进
//变量定义
int sudu=0x5f; //初值,该状态下小车基本不动
int j;
void delay(); //delay函数申明
void init(); //初始化
void scan(); //按键扫描程序申明
void display(int x); //小车走动给脉宽赋值
//------------------------------------------------
//初始化程序
void init()
{
ADCON1=0X07; //设置A口为普通I/O口
TRISA =0X0f; //低4位为输入
TRISC=0X00; //CCP1和CCP2定义为输出
TRISB=0X00; //没有用
TRISD=0X00; //设置D口全部为输出
PORTD=0X00; //先关闭所有显示
break;
}
}
}
}
//-------------------------------------------------
//结果显示程序
void display(int x)
{
CCPR1L=sudu; //电机1的脉宽赋值
CCP1CON=0x3C; //使处于脉宽调制模式
CCPR2L=sudu; //电机2的脉宽赋值
//主程序
void main()
{
init(); //调用初始化函数
while(1) //死循环
{
PR2=0xff; //PR2赋值,即周期值
scan(); //调用按键扫描程序
display(sudu); //调用PWM子程序
}
}
//------------------------------------------------
void delay() //延时程序
{
int i; //定义整形变量
for(i=6553;i>0;i--)
continue; //延时
}
//----------------PWM控制电机实现调速
//K1:加速;K2:减速K3:倒车K4:前进
#include<pic.h> //包含单片机内部资源预定义
__CONFIG(HS&WDTDIS&LVPDIS); //芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关
//---------------------------------------------------
相关文档
最新文档