标题: 帮我看看单片机代码到底是哪里出错了 求帮助 [打印本页]

作者: 5899221    时间: 2020-7-6 21:25
标题: 帮我看看单片机代码到底是哪里出错了 求帮助
#include<REGX51.H>        //单片机头文件,包含相关特殊寄存器物理映射
sbit UP=P1^0;     //按键加速
sbit DOWN=P1^1;     //按键减速
sbit RIGHT=P1^2;     
sbit LEFT=P1^3;      
sbit STOP=P1^4;      
sbit IN1=P2^5;
sbit IN2=P2^6;
sbit ENA=P2^7;                                                                                                               
unsigned char num[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};   //数码管代码表
char PWM=5;                        //占空比
char MOTO_STATE;        //电机状态
char counter;
void delay(unsigned int a)        //延时函数
{
         while(a--);        
}
void INIT()         //初始化定时计数器
{
     TMOD=0x01;     //设计定时器为定时模式,方式为1
          TH0=(65536-1000)>>8;           //初值计算                          
         TL0=(65536-1000);
         TR0=1;                        //启动定时计数器0
         ET0=1;
         EA=1;                  
}
void key_scan()     //按键扫描
{                                                      
    if(!UP)
    {
       delay(1000);
       if(!UP)                //转速加快
       {
             PWM++;if(PWM>9)PWM=9;   //转速10档
       }
       while(!UP);
        }
        if(!DOWN)                            //按下减速按钮
    {
       delay(1000);
       if(!DOWN)               //转速降低
       {
             PWM--;if(PWM<=0)PWM=0;  //转速0档
       }
       while(!DOWN);
        }
        if(!RIGHT)
    {
       delay(1000);
       if(!RIGHT)               
       {
             MOTO_STATE=1;  
       }
       while(!RIGHT);
        }
        if(!LEFT)
    {
       delay(1000);
       if(!LEFT)               
       {
             MOTO_STATE=2;  
       }
       while(!LEFT);
        if(!STOP)                            //按下停止按钮
    {
       delay(1000);
       if(!STOP)                                //转速停止为0
           {
             MOTO_STATE=0;                        //电机停止运转
           }
           while(!STOP);
        }
}         
   switch(MOTO_STATE)
   {
     case0:IN1=1;IN2=1;break;
         case1:IN1=1;IN2=0;break;
         case2:IN1=0;IN2=1;break;
         default:MOTO_STATE=0;break;
   }
void main()
{
    INIT();                       //调用INIT函数
  while(1);
   {
   key_scan();
   moto_ctrl();
   P3=num[PWM];
   }
}
void Timer0() interrupt 1
  {
    TH0=(65536-1000)/256;                                            
   TL0=(65536-1000)%256;                 //初值重装         
   counter++;
   if(counter>=5){counter=0;}
   if(counter<PWM)ENA=1;
   if(counter>=PWM)ENA=0;
  }



作者: xachf    时间: 2020-7-7 16:53
按键扫描,一般做在定时中断里边




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1