久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1506|回復: 0
打印 上一主題 下一主題
收起左側

寫的一個循跡小車程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:442350 發表于 2018-12-22 20:17 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<reg52.h>
typedef unsigned char u8;
typedef unsigned int  u16;
//占空比標志
u8 ZKB_QZ,ZKB_QY,ZKB_HZ,ZKB_HY,Q_Z,Q_Y,H_Z,H_Y;
//電機控制端口   P1
sbit IN1=P1^0;    //前 左 反轉                                       
sbit IN2=P1^1;    //前 左 正轉  
sbit IN3=P1^2;    //前 右 正轉
sbit IN4=P1^3;    //前 右 反轉
sbit IN11=P1^4;    //后 右 反轉
sbit IN22=P1^5;    //后 右 正轉
sbit IN33=P1^6;    //后 左 正轉
sbit IN44=P1^7;    //后 左 反轉
//紅外傳感器   P3
sbit hw_left=P3^7;
sbit hw_mid=P3^6;
sbit hw_right=P3^5;
//PWM調速端口    P0
sbit PWM_QZ=P0^1;  //前 左
sbit PWM_QY=P0^2;  //前 右
sbit PWM_HZ=P0^3;  //后 左  
sbit PWM_HY=P0^4;  //后 右
//延時函數
void delay(u16 num)
{
  u16 x,y;
  for(x=num;x>0;x--)
  for(y=110;y>0;y--)
  {
  ;                                         
  }
}
//定時器    初始化函數
void Z_D()   
{
TMOD=0x01;
TH0=(65536-100)/256;
TL0=(65536-100)%256 ;
EA=1;
ET0=1;
TR0=1;
PWM_QZ=1;  
    PWM_QY=1;  
    PWM_HZ=1;   
    PWM_HY=1;  
}
//中斷服務函數      
void time_service(void) interrupt 1   
{
Q_Z++,Q_Y++,H_Z++,H_Y++;       //進入中斷自加
    //前 右
if(Q_Y<ZKB_QY)       //如果小于設定值,使能端置1,否則置0
{
   PWM_QY=1;
}         
else {PWM_QY=0;}
if(Q_Y==40)        //如果i加到40;使能端取反,i置0
{
      PWM_QY=~PWM_QY;
   Q_Y=0;
}  

//前 左            
if(Q_Z<ZKB_QZ)       //如果小于設定值,使能端置1,否則置0
{
   PWM_QZ=1;
}         
else {PWM_QZ=0;}
if(Q_Z==40)        //如果i加到40;使能端取反,i置0
{
      PWM_QZ=~PWM_QZ;
   Q_Z=0;
}  

//后 右
if(H_Y<ZKB_HY)       //如果小于設定值,使能端置1,否則置0
{
   PWM_HY=1;
}               
else {PWM_HY=0;}
if(H_Y==40)        //如果i加到40;使能端取反,i置0
{
      PWM_HY=~PWM_HY;
   H_Y=0;
}  

    //后 左
if(H_Z<ZKB_HZ)       //如果小于設定值,使能端置1,否則置0
{
   PWM_HZ=1;
}               
else {PWM_HZ=0;}
if(H_Z==40)        //如果i加到40;使能端取反,i置0
{
      PWM_HZ=~PWM_HZ;
   H_Z=0;
}   
//定時器0重裝初值
TH0=(65536-100)/256;   
TL0=(65536-100)%256;
}
//前進
void go()
{
   ZKB_QZ=13;
ZKB_QY=8;
ZKB_HZ=15;
ZKB_HY=8;

  IN2=1;        //前 左 正轉      
     IN3=1;        //前 右 正轉
  IN22=0;    //后 右 正轉
     IN33=0;       //后 左 正轉
  
  IN1=0;        //前 左 反轉
  IN4=0;        //前 右 反轉
     IN11=1;    //后 右 反轉
     IN44=1;    //后 左 反轉
}
//后退
void back()
{
ZKB_QZ=6;
ZKB_QY=6;
ZKB_HZ=6;
ZKB_HY=6;

  IN2=0;        //前 左 正轉      
     IN3=0;        //前 右 正轉
  IN22=1;    //后 右 正轉
     IN33=1;       //后 左 正轉
  
  IN1=1;        //前 左 反轉
  IN4=1;        //前 右 反轉
     IN11=0;    //后 右 反轉
     IN44=0;    //后 左 反轉
}
//右轉
void right()
{
do
{
ZKB_QZ=15;
ZKB_QY=35;
ZKB_HZ=15;
ZKB_HY=35;

  IN2=0;        //前 左 反轉      
     IN3=1;        //前 右 反轉
  IN22=0;    //后 右 反轉
     IN33=1;       //后 左 反轉
  
  IN1=1;        //前 左 正轉
  IN4=0;        //前 右 正轉
     IN11=1;    //后 右 正轉
     IN44=0;    //后 左 正轉
}
while(hw_mid==1);
}
//左轉
void left()
{
do
{
ZKB_QZ=15;
ZKB_QY=35;
ZKB_HZ=15;
ZKB_HY=35;

  IN2=1;        //前 左 反轉      
     IN3=0;        //前 右 反轉
  IN22=1;    //后 右 反轉
     IN33=0;       //后 左 反轉
  
  IN1=0;        //前 左 正轉
  IN4=1;        //前 右 正轉
     IN11=0;    //后 右 正轉
     IN44=1;    //后 左 正轉
  }
  while(hw_mid==1);
}
void stop()     //停止函數
{
  IN2=0;        //前 左 正轉      
     IN3=0;        //前 右 正轉
  IN22=0;    //后 右 正轉
     IN33=0;       //后 左 正轉
  
  IN1=0;        //前 左 反轉
  IN4=0;        //前 右 反轉
     IN11=0;    //后 右 反轉
     IN44=0;    //后 左 反轉
}
void go_rignt()
{
ZKB_QZ=5;
ZKB_QY=5;
ZKB_HZ=5;
ZKB_HY=5;

  IN2=1;        //前 左 反轉      
     IN3=0;        //前 右 反轉
  IN22=1;    //后 右 反轉
     IN33=0;       //后 左 反轉
  
  IN1=0;        //前 左 正轉
  IN4=1;        //前 右 正轉
     IN11=0;    //后 右 正轉
     IN44=1;    //后 左 正轉
}
void go_left()
{
ZKB_QZ=5;
ZKB_QY=5;
ZKB_HZ=5;
ZKB_HY=5;

  IN2=0;        //前 左 反轉      
     IN3=1;        //前 右 反轉
  IN22=0;    //后 右 反轉
     IN33=1;       //后 左 反轉
  
  IN1=1;        //前 左 正轉
  IN4=0;        //前 右 正轉
     IN11=1;    //后 右 正轉
     IN44=0;    //后 左 正轉
}
void huigui()
{
  u8 num;
   for(num=2;num>0;num--)
  {
     if(hw_left==0 & hw_mid==1 & hw_right==1)            
                {
                go_rignt();
             }
   if(hw_left==1 & hw_mid==1 & hw_right==0)            
                {
                 go_left();
                }
  
  }
}
void X_J()  //循跡函數
{
u8 P_D;                                                      //定義判斷
//未檢測到黑線
if(hw_left==1 & hw_mid==1 & hw_right==1)
{
     P_D=0;
}                     
//中間檢測到黑線
if(hw_left==1 & hw_mid==0 & hw_right==1)              
    {
   P_D=1;
}
//左面檢測到黑線
if(hw_left==0 & hw_mid==1 & hw_right==1)            
    {
   P_D=2;
}
//右面檢測到黑線
if(hw_left==1 & hw_mid==1 & hw_right==0)            
    {
   P_D=3;
}
//全部都檢測到黑線后退
if(hw_left==0 & hw_mid==0 & hw_right==0)              
    {
   P_D=4;
}     
//中間和左面檢測到黑線
if(hw_left==0 & hw_mid==0 & hw_right==1)              
    {
   P_D=5;
}  
//中間和右面檢測到黑線
if(hw_left==1 & hw_mid==0 & hw_right==0)              
    {
   P_D=6;
}  
switch (P_D)
{      
  case 0: huigui();break; //情況0,停止
  case 1: go();    break; //情況1,前進
  case 2: left();  break; //情況2,左轉
  case 3: right(); break; //情況3,右轉
  case 4: back();  break; //情況4,后退
     case 5: left();  break; //情況5,左轉
     case 6: right(); break; //情況6,右轉
}
}
//主函數
void main()
{
Z_D();
delay(5);
while(1)
{
   X_J();
}
}


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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲第一福利视频 | 色婷婷综合久久久久中文一区二区 | 免费在线观看av的网站 | 羞羞的视频免费在线观看 | av片免费观看 | 日韩中出 | 欧美一级免费看 | 精品美女在线观看视频在线观看 | 久久免费精彩视频 | 99热热热热 | 久久久久国 | 蜜月aⅴ免费一区二区三区 99re在线视频 | 亚洲欧美bt | 粉色午夜视频 | 日本亚洲欧美 | 国产成人精品一区二区三区 | 国产视频精品在线观看 | 久久久久国产一区二区三区 | 91亚洲国产成人精品一区二三 | 亚洲专区在线 | 国产一区二区三区久久久久久久久 | 91成人精品 | 噜久寡妇噜噜久久寡妇 | 成人免费一级 | 91网在线观看 | 亚洲精品电影在线观看 | 国产综合视频 | 国产精品久久久久久久久动漫 | 久久夜视频 | 精品香蕉一区二区三区 | 日韩av网址在线观看 | 亚洲v日韩v综合v精品v | 中文字幕一区在线 | 国产精品久久国产精品 | 国产h在线 | 久久久成人网 | 欧美激情精品久久久久 | 久久精品国产99国产精品亚洲 | 精品不卡 | 最新91在线| 日韩图区 |