標(biāo)題: 幫我看看單片機(jī)代碼到底是哪里出錯(cuò)了 求幫助 [打印本頁(yè)]

作者: 5899221    時(shí)間: 2020-7-6 21:25
標(biāo)題: 幫我看看單片機(jī)代碼到底是哪里出錯(cuò)了 求幫助
#include<REGX51.H>        //單片機(jī)頭文件,包含相關(guān)特殊寄存器物理映射
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};   //數(shù)碼管代碼表
char PWM=5;                        //占空比
char MOTO_STATE;        //電機(jī)狀態(tài)
char counter;
void delay(unsigned int a)        //延時(shí)函數(shù)
{
         while(a--);        
}
void INIT()         //初始化定時(shí)計(jì)數(shù)器
{
     TMOD=0x01;     //設(shè)計(jì)定時(shí)器為定時(shí)模式,方式為1
          TH0=(65536-1000)>>8;           //初值計(jì)算                          
         TL0=(65536-1000);
         TR0=1;                        //啟動(dòng)定時(shí)計(jì)數(shù)器0
         ET0=1;
         EA=1;                  
}
void key_scan()     //按鍵掃描
{                                                      
    if(!UP)
    {
       delay(1000);
       if(!UP)                //轉(zhuǎn)速加快
       {
             PWM++;if(PWM>9)PWM=9;   //轉(zhuǎn)速10檔
       }
       while(!UP);
        }
        if(!DOWN)                            //按下減速按鈕
    {
       delay(1000);
       if(!DOWN)               //轉(zhuǎn)速降低
       {
             PWM--;if(PWM<=0)PWM=0;  //轉(zhuǎn)速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)                                //轉(zhuǎn)速停止為0
           {
             MOTO_STATE=0;                        //電機(jī)停止運(yùn)轉(zhuǎn)
           }
           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();                       //調(diào)用INIT函數(shù)
  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    時(shí)間: 2020-7-7 16:53
按鍵掃描,一般做在定時(shí)中斷里邊




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1