找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 828|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

為什么我這個(gè)單片機(jī)程序燒進(jìn)去小車沒反應(yīng)能?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1091511 發(fā)表于 2023-11-25 16:34 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#include<reg52.h>
#include"pwm.h"
void main()
{
    unsigned char i;
    P1=0X00; //關(guān)電車電機(jī)                    
B:  for(i=0;i<50;i++)
    {
       delay(1);        
       if(P3^7!=0)
       goto B;
    }
    BUZZ=0;        //50次檢測(cè)K4確認(rèn)是按下之后,蜂鳴器發(fā)出“滴”聲響,然后啟動(dòng)小車。
        delay(50);
        BUZZ=1;//響50ms后關(guān)閉蜂鳴器
    TMOD=0X01;
    TH0= 0XFc;                  //1ms定時(shí)
    TL0= 0X18;
    TR0= 1;
    ET0= 1;
    EA = 1;        //工作模式設(shè)定
    while(1)
    {   //有信號(hào)為0,無信號(hào)為1
        if(Left_led == 1 && Left_led == 1)
        {
            run();
        }
        else if(Left_led == 0 && Right_led == 1)
        {
            rightrun();
        }
        else if(Left_led == 1 && Right_led == 0)
        {
            leftrun();
        }
        else
        {
            backrun();
            delay(500);
            leftrun();
            delay(20);
        }
    }

}

#ifndef _PWM_H_
#define _PWM_H_

sbit IN1 = P1^2;
sbit IN2 = P1^3;
sbit IN3 = P1^6;
sbit IN4 = P1^7;
sbit EN1 = P1^4;
sbit EN2 = P1^5;
sbit BUZZ = P2^3;//蜂鳴器

#define Left_led   P3^5//左傳感器
#define Right_led  P3^4//右傳感器
#define Left_pwm   P1^5//左電機(jī)使能
#define Right_pwm  P1^4//右電機(jī)使能

#define Left_moto_go {IN1=0,IN2=1;}//左電機(jī)前進(jìn)
#define Left_moto_back {IN1=1,IN2=0;}//左電機(jī)后退
#define Right_moto_go {IN3=1,IN4=0;}//右電機(jī)前進(jìn)
#define Right_moto_back {IN3=0,IN4=1;}//右電機(jī)后退
#define Left_moto_stop {EN2 = 0;}//左電機(jī)停止
#define Right_moto_stop {EN1 = 0;}//右電機(jī)停止

unsigned char Left_val_pwm = 0;
unsigned char Right_val_pwm = 0;
unsigned char Left_compare_pwm = 0;//左電機(jī)占空比
unsigned char Right_compare_pwm = 0;//右電機(jī)占空比
unsigned int  time = 0;

//延時(shí)函數(shù)
void delay(unsigned int k)
{   
     unsigned int x,y;
         for(x=0;x<k;x++)
           for(y=0;y<2000;y++);
}

//前進(jìn)
void  run()
{
     Left_compare_pwm=10;         //速度調(diào)節(jié)變量 0-20。。。0最小,20最大
        Right_compare_pwm=10;
         Left_moto_go ;   //左電機(jī)往前走
         Right_moto_go ;  //右電機(jī)往前走
}

//后退
void  backrun()
{
     Left_compare_pwm=8;         //速度調(diào)節(jié)變量 0-20。。。0最小,20最大
         Right_compare_pwm=8;
         Left_moto_back;   //左電機(jī)往后退
         Right_moto_back;  //右電機(jī)往后退
}

//左轉(zhuǎn)
void  leftrun()
{         
         Right_compare_pwm=8;
         Right_moto_go;  //右電機(jī)往前走
     Left_moto_stop;  //左電機(jī)停止
}

//右轉(zhuǎn)
void  rightrun()
{
         Left_compare_pwm=8;
     Left_moto_go  ;   //左電機(jī)往前走
         Right_moto_stop   ;  //右電機(jī)        
}

//左電機(jī)pwm調(diào)速
void pwm_moto_left()
{
    if(Left_val_pwm >20)
        Left_val_pwm = 0;
    if(Left_val_pwm <= Left_compare_pwm)
       Left_pwm = 1;
    else
        Left_pwm = 0;
}

//右電機(jī)pwm調(diào)速
void pwm_moto_right()
{
    if(Right_val_pwm >20)
        Right_val_pwm = 0;
    if(Right_val_pwm <=Right_compare_pwm)
        EN1 = 1;
    else
        EN1 = 0;
}

void timer0() interrupt 1
{
    TH0=0XFc;          //1Ms定時(shí)
        TL0=0X18;
        time++;
    Left_val_pwm++;
    Right_val_pwm++;
    pwm_moto_right();
    pwm_moto_left();
}
#endif

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表