欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機循跡小車程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:601581 發表于 2020-11-4 15:18 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include <reg52.h>
# define uchar unsigned char
# define uint unsigned int
//定義單片機不同的I/O口來進行信號的輸入與輸出
sbit  in1=P3^7;
sbit  in2=P3^6;
sbit  in3=P3^5;
sbit  in4=P3^4;

sbit  c1=P2^7;
sbit  c2=P2^6;
sbit  c3=P2^5;
sbit  c4=P2^4;
sbit  c5=P2^3;
sbit  c6=P2^2;
sbit  c7=P2^1;
sbit  c8=P2^0;
sbit  c9=P1^6;
sbit  c10=P1^5;         //循跡10個燈

sbit D = P3^3;      

uchar  stop=0;
uchar  count=0;     
uchar  temp = 0;   
uchar  SE = 0;   
uchar speed_left = 0;     
uchar speed_right = 0;  

void time0_init(void)   
{
        TMOD=0x01;   //對定時器0的模式進行選擇0001 即gate為0即T0只受TR0控制 C/T為0即為定時器  01對應16位的定時器
        TH0=0xFF;    //寄存器的高8位 1111 1111
        TL0=0xea;   //寄存器的低8位  1110 1010
        TR0=1;      //啟動定時器0
        ET0=1;      //打開T0的中斷
        EA=1;       //打開全局中斷
}
uchar judge(void)    //檢測情況判斷
{
          if((c1==0)&&(c2==0)&&(c3==0)&&(c4==0)&&(c5==1)&&(c6==1)&&(c7==0)&&(c8==0)&&(c9==0)&&(c10==0))
                return 1;
    else        if((c1==0)&&(c2==0)&&(c3==0)&&(c4==0)&&(c5==1)&&(c6==0)&&(c7==0)&&(c8==0)&&(c9==0)&&(c10==0))
                return 2;
         else        if((c1==0)&&(c2==0)&&(c3==0)&&(c4==0)&&(c5==0)&&(c6==1)&&(c7==0)&&(c8==0)&&(c9==0)&&(c10==0))
                return 3;
         else        if((c1==0)&&(c2==0)&&(c3==0)&&(c4==1)&&(c5==1)&&(c6==0)&&(c7==0)&&(c8==0)&&(c9==0)&&(c10==0))
                return 4;
         else        if((c1==0)&&(c2==0)&&(c3==0)&&(c4==0)&&(c5==0)&&(c6==1)&&(c7==1)&&(c8==0)&&(c9==0)&&(c10==0))
                return 5;
        else        if((c1==0)&&(c2==0)&&(c3==0)&&(c4==1)&&(c5==0)&&(c6==0)&&(c7==0)&&(c8==0)&&(c9==0)&&(c10==0))
                return 6;
        else        if((c1==0)&&(c2==0)&&(c3==0)&&(c4==0)&&(c5==0)&&(c6==0)&&(c7==1)&&(c8==0)&&(c9==0)&&(c10==0))
                return 7;
        else        if((c1==0)&&(c2==0)&&(c3==1)&&(c4==1)&&(c5==0)&&(c6==0)&&(c7==0)&&(c8==0)&&(c9==0)&&(c10==0))
                return 8;
        else        if((c1==0)&&(c2==0)&&(c3==0)&&(c4==0)&&(c5==0)&&(c6==0)&&(c7==1)&&(c8==1)&&(c9==0)&&(c10==0))
                return 9;
        else        if((c1==0)&&(c2==0)&&(c3==1)&&(c4==0)&&(c5==0)&&(c6==0)&&(c7==0)&&(c8==0)&&(c9==0)&&(c10==0))
                return 10;
        else        if((c1==0)&&(c2==0)&&(c3==0)&&(c4==0)&&(c5==0)&&(c6==0)&&(c7==0)&&(c8==1)&&(c9==0)&&(c10==0))
                return 11;
        else        if((c1==0)&&(c2==1)&&(c3==1)&&(c4==0)&&(c5==0)&&(c6==0)&&(c7==0)&&(c8==0)&&(c9==0)&&(c10==0))
                return 12;
else        if((c1==0)&&(c2==0)&&(c3==0)&&(c4==0)&&(c5==0)&&(c6==0)&&(c7==0)&&(c8==1)&&(c9==1)&&(c10==0))
                return 13;
        else        if((c1==0)&&(c2==1)&&(c3==0)&&(c4==0)&&(c5==0)&&(c6==0)&&(c7==0)&&(c8==0)&&(c9==0)&&(c10==0))
                return 14;
        else        if((c1==0)&&(c2==0)&&(c3==0)&&(c4==0)&&(c5==0)&&(c6==0)&&(c7==0)&&(c8==0)&&(c9==1)&&(c10==0))
                return 15;
        else        if((c1==1)&&(c2==1)&&(c3==0)&&(c4==0)&&(c5==0)&&(c6==0)&&(c7==0)&&(c8==0)&&(c9==0)&&(c10==0))
                return 16;
else if((c1==0)&&(c2==0)&&(c3==0)&&(c4==0)&&(c5==0)&&(c6==0)&&(c7==0)&&(c8==0)&&(c9==1)&&(c10==1))
                return 17;
else if((c1==1)&&(c2==0)&&(c3==0)&&(c4==0)&&(c5==0)&&(c6==0)&&(c7==0)&&(c8==0)&&(c9==0)&&(c10==0))
                return 18;
        else        if((c1==0)&&(c2==0)&&(c3==0)&&(c4==0)&&(c5==0)&&(c6==0)&&(c7==0)&&(c8==0)&&(c9==0)&&(c10==1))
                return 19;
        else        if((c1==1)&&(c2==1)&&(c3==1)&&(c4==1)&&(c5==1)&&(c6==1)&&(c7==1)&&(c8==1)&&(c9==1)&&(c10==1))
                return 20;
        else
                 return 0;
}

uchar dadt,dadt_1;
void main(void)
{
               
                uchar wark = 0;
                time0_init();
                speed_left = 50;
                speed_right = 50;
                SE =15;
        
                while(1)
                {
      dadt=judge();
                        if(dadt == 0)
                        dadt=dadt_1;
                        dadt_1=dadt;
                        switch(dadt)
                        {
                        case 1:SE =15;speed_left =85;speed_right =85; break;
                        case 2:SE =15;speed_left =80;speed_right =85; break;         
                        case 3:SE =15;speed_left =85;speed_right =80; break;
                        case 4:SE =14;speed_left =70;speed_right =85; break;
            case 5:SE =16;speed_left =85;speed_right =70; break;         
                                
                        case 6:SE =14;speed_left =60;speed_right =75; break;
                        case 7:SE =16;speed_left =75;speed_right =60; break;
                        case 8:SE =13;speed_left =57;speed_right =75; break;
                        case 9:SE =17;speed_left =75;speed_right =57; break;
                                
                        case 10:SE =12;speed_left =45;speed_right =75; break;
                        case 11:SE =18;speed_left =75;speed_right =55; break;
                        case 12:SE =12;speed_left =55;speed_right =80; break;
                        case 13:SE =18;speed_left =75;speed_right =63; break;
                                
                    case 14:SE =11;speed_left =53;speed_right =80;  break;         
                    case 15:SE =19;speed_left =75;speed_right =58; break;         
                        case 16:SE =11;speed_left =55;speed_right =80; break;         
                        case 17:SE =19;speed_left =80;speed_right =55; break;
                                
                        case 18:SE = 11;speed_left =55;speed_right =80; break;
                        case 19:SE = 19;speed_left =80;speed_right =55; break;
            case 20:SE = 15;speed_left =85;speed_right =85;stop++;break;
                        default:
        break;
                        }                 
                }        
}

void T0_time() interrupt 1   //中斷函數
{
        TR0=0;
        TH0=0xff;      //255
        TL0=0Xea;      //234
        temp++;
        if(temp>=833)                        //202           //1000
   {
         temp=0;
   }
  if(temp<=SE)
   {
    D=1;
   }
   else
   {
     D=0;
   }
         count++;
        if(count>100)
        count=0;
        if(count<speed_left)
        {
                in1=1;
                in2=0;
        }
        else
        {
                in1=0;
                in2=0;
        }
        if(count<speed_right)
        {
                in3=1;
                in4=0;
        }
    else
        {
                in3=0;
                in4=0;
        }
        TR0=1;        
}

程序.zip

102.48 KB, 下載次數: 15, 下載積分: 黑幣 -5

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

使用道具 舉報

沙發
ID:328014 發表于 2020-11-11 18:02 | 只看該作者
這個能發一下原理圖嗎?不知道電路連接啊
回復

使用道具 舉報

無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表