⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pca.c

📁 这个是做自动控制的小车的代码
💻 C
字号:
#include "common.h"
#include <stdlib.h>
#include "pca.h"
//bit  leftw_direct;
//bit  rightw_direct;
sbit P6_0=P6^0;          //en2
sbit P6_1=P6^1;          //en1
#define leftw_direct P6_1        //控制左轮方向
#define rightw_direct P6_0       //控制右轮方向
//uchar leftw_direct;
//uchar rightw_direct;
//sbit ECOM0=PCA0CPM0^6;

/********/
void pca0_ini()
{
    temppage = SFRPAGE;
    SFRPAGE=0x00;
	PCA0MD=0x08;//PCA采用系统时钟,且PCA溢出中断禁止
	PCA0CN=0x40;//启动PCA计数器
	EIE1|=0x08;//PCA中断使能,EPCA
    SFRPAGE=temppage;
}

/*****CEX0,CEX1为PWM输出*/
void pca0_cex0_ini()
{
   	temppage = SFRPAGE;
    SFRPAGE=0x00;
    PCA0CPM0=0X42; //CEX1为8bit PWM输出模式
    SFRPAGE=temppage;
}
void pca0_cex1_ini()
{   
   temppage = SFRPAGE;
   SFRPAGE=0x00;
   PCA0CPM1=0X42; //CEX1为8bit PWM输出模式
   SFRPAGE=temppage;
}

/************************/
void PWM_set(uchar vleft,uchar vright)
{                                    //占空比设置,高电平占空比为(256-vleft)/256
	    temppage = SFRPAGE;
		SFRPAGE = 0x00;
	    PCA0CPH0=vleft; 
		PCA0CPH1=vright;
	    SFRPAGE=temppage;
}

/**********************/
void drive_set(char vleft, char vright)//有符号字符型,取值范围-128~+127;
                                        //0,-128为速度最大,STOP速度最小,正数正转,负数反转
{      
       
	   uchar m_vleft,m_vright;
	   m_vleft=256-2*abs(vleft);
	   m_vright=256-2*abs(vright);
       temppage=SFRPAGE;
	   SFRPAGE=0x00;
       PCA0CPM0=0X42;
       PCA0CPM1=0X42;
	   SFRPAGE=temppage;
	   SFRPAGE = 0x0F;
	   if(vleft<0)
	    {
	        leftw_direct=0;
	    }
	   else
	    {
	        leftw_direct=1;
	    }
	
	   if(vright<0)
	   {
	        rightw_direct=0;
	   }
	   else
	   {
	        rightw_direct=1;
	   }
	
	   PWM_set(m_vleft,m_vright);  
}

void go_forward()
{
	   drive_set(110,0);
}

void go_back()
{
	   drive_set(-110,-110);
}

void turn_left()
{
	   drive_set(-110,110);
}

void turn_right()
{
  	    drive_set(110,-110);
}
void turnright90()
{
     drive_set(127,-127);
   	delay1ms(2000);
}
void turnleft90()
{
 drive_set(-110,110);
	delay1ms(2000);
}
void go_fast()
{
   		drive_set(0,0);
}
void stop()              //清零ECOMn来实现0%,即低电平输出 
{       
        temppage=SFRPAGE;
		SFRPAGE=0x00;
        PCA0CPM0=0X02;
        PCA0CPM1=0X02;
		SFRPAGE=temppage;
        
}

/*********CEX2,CEX3崭罕哐卮シ⒛J烬

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -