• 大小: 43KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-09
  • 语言: 其他
  • 标签: fsf  

资源简介

一个定时器实现定时,一个实现计数,从而实现电机的测速

资源截图

代码片段和文件信息


#include “STC12C5A.H“
#include  “oled.h“
#define T 49604 //定时器  50ms
#define uchar unsigned char
#define uint  unsigned int

#define  xunsu  15   //1-DS
#define  DS 181 //最高速
#define  XS 176 //限速



sbit in=P3^5;
sbit BM1=P1^0;
sbit BM2=P1^7;

sbit in1=P1^1;//左电机
sbit in2=P1^2;
sbit in3=P1^5;//右电机
sbit in4=P1^6;


unsigned long xyzq;  //  编码器用

void BM_display(uint xyunsigned long dat)
{
OLED_ShowNum(x+24ydat%10000412);
if(dat>9999)
OLED_ShowNum(xydat/10000412);

}


void init() //初始化定时器
{
x=y=q=0;
TMOD=0X51;
TH0=(65536-T)/256;
TL0=(65536-T)%256;
EA=1;
ET0=1;
ET1=1;
TR0=TR1=1;

}

void T0_time()interrupt 1     //定时25ms
{
TH0=(65536-T)/256;
TL0=(65536-T)%256;
x++;
z++;

}
void T1_time()interrupt 3     //计数
{
TH0=0;
TL0=0;
y++;
}

void delay(uint i) //延时ms
{
uint j;
for(;i>0;i--)
for(j=0;j<220;j++);
}


////////////////////////////////    
//       电机占空比       //
      //
void pwm_left(uint a)   //
{   //
if(a>XS)   //
a=XS;   //
CCAP0H=CCAP0L=DS-a;       //    
}   //
void pwm_right(uint b)   //
{   //
if(b>XS)   //
b=XS;   //
CCAP1H=CCAP1L=DS-b;       //
}   //
////////////////////////////////

/////////////////////////////////////////////////////


void js(int leftright) // 循迹电机控制
{

 if(left>0)
 {
 in1=0;
 in2=1;
 }
 if(left==0)
 {
 in1=0;
 in2=0;
 }
 if(left<0)
 {
  in1=1;
in2=0;
left=-left;
 }

 if(right>0)
 {
 in3=0;
 in4=1;
 }
 if(right==0)
 {
 in3=0;
 in4=0;
 }
 if(right<0)
 {
 in3=1;
 in4=0;  
 right=-right;
 }


    pwm_left(left);
 pwm_right(right);
}
/////////////////////////////////////////////

void xj(int ab)  // 竞速电机控制
{
 if(b>0)
 {
 in1=1;
 in2=0;
 }
 if(b<0)
 {
  in1=0;
in2=1;
b=-b;
 }
 if(b==0)
 {
 in1=0;
 in2=0;
 }
   if(a>0)
 {
 in3=1;
 in4=0;
 }
 if(a<0)
 {
 in3=0;
 in4=1;  
 a=-a;
 }
 if(a==0)
 {
 in3=0;
 in4=0;
 }
    pwm_left(b);
 pwm_right(a);
}


void main()
{

pwm_init();
P0M1=0x00;
P0M0=0x09;
OLED_Init();
OLED_Clear();
delay(5000);
init();
BM1=1;
BM2=0;
while(1)
{  

//     BM_display(00w);
// BM_display(02q);
if(x==40)
{
TR0=TR1=0;
q=(TH1*256+TL1+y*65536)/4+q;
TL0=TH0=TL1=TH1=0;
x=0;
y=0;
TR0=TR1=1;

}
if(z==160)   //     4s
{
TR0=TR1=0;
TL0=TH0=TL1=TH1=0;
x=0;
y=0;
BM_display(00q);
q=0;
go(ww);
BM_display(02w);
w--;
if(w==5)
w=189;
z=0;
delay(1000);
TR0=TR1=1;
}

}


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-10-19 15:33  测速程序\
     文件       22491  2017-10-18 22:31  测速程序\测速
     文件        9494  2017-10-18 22:31  测速程序\测速.LST
     文件       23185  2017-10-18 22:31  测速程序\测速.M51
     文件       25528  2017-10-18 22:31  测速程序\测速.OBJ
     文件        2854  2017-10-19 14:32  测速程序\测速.c
     文件       11145  2017-10-18 22:31  测速程序\测速.hex
     文件          25  2017-10-18 22:31  测速程序\测速.lnp
     文件         184  2017-10-19 15:33  测速程序\测速.plg
     文件       70647  2018-07-05 17:11  测速程序\测速.uvgui.lenovo
     文件        4957  2018-07-05 17:10  测速程序\测速.uvopt
     文件       13775  2018-07-05 17:10  测速程序\测速.uvproj
     文件       56029  2017-10-19 15:33  测速程序\测速_uvopt.bak
     文件           0  2017-10-12 13:42  测速程序\测速_uvproj.bak

评论

共有 条评论