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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于單片機循跡小車Proteus仿真+程序

[復制鏈接]
跳轉到指定樓層
樓主
分享一個簡單的循跡小車的程序
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. //----------------------------------------------------------
  2. //----文件:自動循跡小車源代碼
  3. //----直流電機的開環控制keil c51 源代碼
  4. //----------------------------------------------------------
  5. //--------------------調用庫函數----------------
  6. #include        <AT89X52.h>
  7. #include        <xiaoche.h>
  8. #include        <xunji.c>
  9. #include        <stop.c>
  10. #include        <keyboard.c>
  11. #include        <bizhang.c>
  12. #include        <pwmout.c>

  13. //----------------------------------------------------------
  14. //函數名稱:main      
  15. //用戶主函數               
  16. //函數功能:主函數
  17. //----------------------------------------------------------
  18. void main()
  19. {
  20.           WDT_CONTR=0x3b;
  21.           timer_init();                //初始化
  22.           while(1)
  23.         {
  24.           keyboard();                //鍵盤掃描
  25.           jieshou();                //遙控信號檢測,要與傳感器實物連接才能正常使用.
  26.           xunji();                        //循跡檢測
  27.           bizhang();                //避礙物檢測
  28.           stop();                        //目標站點檢測
  29.           WDT_CONTR=0x3b;          //喂狗
  30.         }
  31. }
復制代碼
  1. //-------------------------------------------------------
  2. //----函數名稱: timer_init
  3. //----函數功能: 初始化設置定時器
  4. //-------------------------------------------------------
  5. void timer_init()
  6. {
  7.                 flag=0;flag3=0;
  8.                 key=0xFF;
  9.             TMOD=0x20;                                                //定時器1為模式2(8位自動重裝)
  10.                 TF1=0;                                                        //清中斷標志
  11.                 TH1=timer_data;                                        //保證定時時長為0.1ms
  12.                 TL1=TH1;
  13.                 ET1=1;                                                        //允許T0中斷
  14.                 TR1=1;                                                        //開始計數
  15.                 EA=1;                                                        //中斷允許
  16.                 ENA=0;                                                        //電機禁止
  17.             PWM_t=PWM_t0;                                        //看門狗復位后速度恢復
  18.             flag=flag4;                                                //看門狗復位后小車狀態恢復
  19. }
  20. //----------------------------------------------------------
  21. //----函數名稱: intTime0
  22. //----函數功能: 定時器中斷處理程序
  23. //----------------------------------------------------------
  24. void IntTime1()interrupt 3        using        2
  25. {
  26.       time_count++;
  27.                   if(flag3)number++;
  28.                 if(number==6000){number=0;number1++;}
  29.                 if(number1==8){flag3=0;number1=0;flag=flag2;}        
  30.                   if(flag==0)ENA=0;                                //小車停止,flag=0,小車停止標志
  31.                 if(flag==1)                                                //小車前進,flag=1,小車前進標志
  32.         {
  33.                 ENA=1;                                                        //PWM波輸出使能
  34.                 DR=0;                                                        //直流電機一端接低電平
  35.                 DR2=0;                                                        //直流電機一端接低電平
  36.                 if(kind==0)                                                //沒有傳感器檢測到黑線,走直線
  37.         {        if(time_count<PWM_t)
  38.                 {PWM=1;PWM2=1;}
  39.                 else
  40.                 {PWM=0;PWM2=0;}
  41.                 }
  42.                 if(kind==1)                                                //左邊第一個傳感器檢測到黑線
  43.         {        
  44.                         if(time_count<(PWM_t-20))
  45.                 {PWM=1;}
  46.                 else
  47.                 {PWM=0;}                        
  48.                         if(time_count<PWM_t)
  49.                 {PWM2=1;}
  50.                 else
  51.                 {PWM2=0;}
  52.                 }
  53.                 if(kind==2)                                                //左邊第二個傳感器檢測到黑線
  54.         {        
  55.                         if(time_count<3)
  56.                 {PWM=1;}
  57.                 else
  58.                 {PWM=0;}                        
  59.                         if(time_count<PWM_t)
  60.                 {PWM2=1;}
  61.                 else
  62.                 {PWM2=0;}
  63.                 }
  64.                 if(kind==3)                                                //右邊第一個傳感器檢測到黑線
  65.         {        
  66.                         if(time_count<(PWM_t-20))
  67.                 {PWM2=1;}
  68.                 else
  69.                 {PWM2=0;}                        
  70.                         if(time_count<PWM_t)
  71.                 {PWM=1;}
  72.                 else
  73.                 {PWM=0;}
  74.                 }
  75.                 if(kind==4)                                                //右邊第二個傳感器檢測到黑線
  76.         {        
  77.                         if(time_count<3)
  78.                 {PWM2=1;}
  79.                 else
  80.                 {PWM2=0;}                        
  81.                         if(time_count<PWM_t)
  82.                 {PWM=1;}
  83.                 else
  84.                 {PWM=0;}
  85.                 }
  86.         }
  87.                 if(flag==2)                                                //小車倒退,flag=2,小車倒退標志
  88.         {
  89.                 ENA=1;
  90.                 PWM=0;
  91.                 PWM2=0;
  92.                 if(kind==0)                                                //沒有傳感器檢測到黑線,走直線
  93.             {        if(time_count<PWM_t)
  94.                         {DR=1;DR2=1;}
  95.                         else
  96.                         {DR=0;DR2=0;}
  97.                 }
  98.                 if(kind==1)                                                //左邊第一個傳感器檢測到黑線
  99.             {        
  100.                         if(time_count<(PWM_t-20))
  101.                 {DR=1;}
  102.                 else
  103.                 {DR=0;}                        
  104.                         if(time_count<PWM_t)
  105.                 {DR2=1;}
  106.                 else
  107.                 {DR2=0;}
  108.                 }
  109.                 if(kind==2)                                                //左邊第二個傳感器檢測到黑線
  110.             {        
  111.                         if(time_count<3)
  112.                 {DR=1;}
  113.                 else
  114.                 {DR=0;}                        
  115.                         if(time_count<PWM_t)
  116.                 {DR2=1;}
  117.                 else
  118.                 {DR2=0;}
  119.                 }
  120.                 if(kind==3)                                                   //右邊第一個傳感器檢測到黑線
  121.             {        
  122.                         if(time_count<(PWM_t-20))
  123.                 {DR2=1;}
  124.                 else
  125.                 {DR2=0;}                        
  126.                         if(time_count<PWM_t)
  127.                 {DR=1;}
  128.                 else
  129.                 {DR=0;}
  130.                 }
  131.                 if(kind==4)                                                  //右邊第二個傳感器檢測到黑線
  132.             {        
  133.                         if(time_count<3)
  134.                 {DR2=1;}
  135.                 else
  136.                 {DR2=0;}                        
  137.                         if(time_count<PWM_t)
  138.                 {DR=1;}
  139.                 else
  140.                 {DR=0;}
  141.                 }
  142.         }
  143.       if(time_count >= PWM_T)                          //每輸出一個PWM波計數器清一次零,也即PWM波周期長度
  144.         {
  145.          time_count=0;
  146.         }
  147. }
復制代碼

Proteus7.5版本的dsn文件與Keil2代碼 51hei附件下載:
pwm.7z (377.47 KB, 下載次數: 91)

評分

參與人數 1黑幣 +30 收起 理由
admin + 30 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:908826 發表于 2021-12-7 09:53 | 只看該作者
媽耶,你這是怎么改的背景,好科幻的樣子
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美福利网站 | 欲色av| 91麻豆精品国产91久久久久久久久 | 在线超碰| 国产美女h视频 | 二区三区在线观看 | 久久久精品一区二区三区四季av | 岛国精品 | 五月天婷婷综合 | 91xxx在线观看 | 1000部精品久久久久久久久 | 毛片a级 | 久久久久香蕉视频 | 久久久久久久久久久久久九 | 欧美天堂在线观看 | 香蕉国产在线视频 | 亚洲国产精品一区二区三区 | 国产三级| 国产一级免费视频 | 红桃视频一区二区三区免费 | 亚洲精品视频一区二区三区 | 日韩精品一区二区三区视频播放 | 欧美精品一区二区三 | 色婷婷久久久久swag精品 | 91超碰caoporn97人人 | 国产区精品视频 | 久久精品99 | 激情黄色在线观看 | 一区天堂| 91香蕉视频在线观看 | 午夜爱爱网| 亚洲aⅴ精品 | 欧美精品在欧美一区二区 | 久久精品成人热国产成 | 欧美日韩电影一区二区 | 欧美日韩精品一区 | 午夜精品一区二区三区在线视频 | 一区二区三区在线免费观看 | 亚洲欧洲成人av每日更新 | 精品视频免费在线 | 精品乱子伦一区二区三区 |