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

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

QQ登錄

只需一步,快速開始

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

51單片機(jī)通過編碼器脈沖值控制小車行駛距離 源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:596323 發(fā)表于 2019-8-6 20:02 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  大一時(shí)使用51單片機(jī)進(jìn)行控制小車走過的距離,現(xiàn)整理一下發(fā)個(gè)帖子湊一下黑幣,不喜輕噴。。
主要思路是利用單片機(jī)的外部中斷來讀出編碼器脈沖值,進(jìn)而通過獲得的脈沖值來控制行駛距離。
首先利用外部中斷測(cè)得車輪轉(zhuǎn)一圈獲得的脈沖,并測(cè)出車輪一圈長(zhǎng)度。再利用以上思路便能得出距離從而控制。
在控制小車轉(zhuǎn)過的角度時(shí)基本也是以上思路。

單片機(jī)源程序如下:
  1. #include "reg52.h"    //此文件中定義了單片機(jī)的一些特殊功能寄存器
  2. typedef unsigned int u16;
  3. typedef unsigned char u8;
  4. u16 Encodercout=0;//輪子轉(zhuǎn)一圈大概產(chǎn)生270個(gè)脈沖,輪子周長(zhǎng)為154mm,走過30度產(chǎn)生58個(gè)脈沖
  5. u16 wheelcount=0;
  6. u16 distance=1000;//定義變量為行駛距離,單位為mm
  7. u16 time=0;  // 定義占空比的變量
  8. sbit PWM1=P2^0;   //P2.0輸出右輪pwm  
  9. sbit PWM2=P2^1;          //輸出左輪pwm        右輪較快
  10. sbit motorl1=P2^2;
  11. sbit motorl2=P2^3;//右輪
  12. sbit motorr1=P2^4;
  13. sbit motorr2=P2^5;//左輪
  14. void motor();
  15. //void delay(u16 a)
  16. //{
  17. //        while(a--);
  18. //}
  19. void Int0Init()
  20. {
  21.         //設(shè)置INT0
  22.         IT0=1;//跳變沿出發(fā)方式(下降沿)
  23.         EX0=1;//打開INT0的中斷允許。      
  24.         EA=1;//打開總中斷      
  25. }
  26. void TimeInt()
  27. {
  28. TMOD=0x01;//定時(shí)器0工作方式1  

  29. TH0=0xfc;//(65536-10)/256;//賦初值定時(shí)  

  30. TL0=0x18;//(65536-10)%256;//1ms  

  31. EA=1;//開總中斷  

  32. ET0=1;//開定時(shí)器0中斷  

  33. TR0=1;//啟動(dòng)定時(shí)器0

  34. }
  35. //void UsartInit()
  36. //{
  37. //        SCON=0X50;                        //設(shè)置為工作方式1
  38. //        TMOD=0X20;                        //設(shè)置計(jì)數(shù)器工作方式2
  39. //        PCON=0X80;                        //波特率加倍
  40. //        TH1=0XF3;                                //計(jì)數(shù)器初始值設(shè)置,注意波特率是4800的
  41. //        TL1=0XF3;
  42. //        ES=1;                                                //打開接收中斷
  43. //        EA=1;                                                //打開總中斷
  44. //        TR1=1;                                        //打開計(jì)數(shù)器
  45. //}
  46. //void Usart() interrupt 4
  47. //{
  48. //   u8 receivedata;
  49. //  receivedata=SBUF;//接收寄存器
  50. //  RI=0;        //接受位清零
  51. //  SBUF = Encodercout;          //發(fā)送寄存器
  52. //  while(!TI); // 等待發(fā)送完成
  53. //  TI=0;        //發(fā)送位清零
  54. // receivedata = 0;
  55. //}

  56. void main()
  57. {
  58.    while(1)
  59.    {
  60.     Int0Init();
  61. //    UsartInit();
  62.         TimeInt();
  63.         if(wheelcount<=(distance/154))
  64.         {
  65.           motor();
  66.         }
  67.          else if(Encodercout<=(distance%154)/154*270)
  68.         {
  69.          motor();
  70.         }
  71.          else
  72.         {
  73.          motorl1=0;
  74.          motorr1=0;
  75.         }
  76.    }
  77. }
  78. void motor()
  79. {
  80. motorl1=1;
  81. motorl2=0;
  82. motorr1=1;
  83. motorr2=0;
  84.   }
  85. void tim0() interrupt 1  

  86. {  
  87. TH0=0xfc;//(65536-10)/256;//賦初值定時(shí)  

  88. TL0=0x18;//(65536-10)%256;1ms   

  89. time++;  
  90. if(time>=100)                                                                 
  91. time=0;     
  92. else if(time<=50) //輪占空比%30,可改 21:28
  93. {
  94.   PWM1=1;
  95.   PWM2=0;
  96. }

  97. else if(time>50&time<=99)
  98. {PWM1=0;
  99. PWM2=1;
  100. }//左輪占空比
  101. else if(time>99&time<100)
  102. {
  103. PWM1=0;
  104. PWM2=0;

  105. }
  106. }
  107. void Int0()        interrupt 0                //外部中斷0的中斷函數(shù)
  108. {
  109.         if(Encodercout>=270)
  110.         {
  111.           Encodercout=1;
  112.           Encodercout++;
  113.           wheelcount++;      
  114.         }
  115.         else
  116.     {
  117.      Encodercout++;
  118.     }
  119. }
復(fù)制代碼


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:625206 發(fā)表于 2019-10-16 18:54 | 只看該作者
為什么程序里有一部分內(nèi)容加//隱藏掉了?
回復(fù)

使用道具 舉報(bào)

板凳
ID:399179 發(fā)表于 2023-8-30 22:06 來自觸屏版 | 只看該作者
謝謝樓主分享!先收藏了有時(shí)間研究一下!
回復(fù)

使用道具 舉報(bào)

地板
ID:98926 發(fā)表于 2023-8-31 07:44 | 只看該作者
a5a5a5ss 發(fā)表于 2019-10-16 18:54
為什么程序里有一部分內(nèi)容加//隱藏掉了?

那是串口函數(shù) 因?yàn)橛貌坏?/td>
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 老女人丨91丨九色 | 毛片毛片毛片毛片毛片 | 亚洲成人免费在线观看 | 在线一区视频 | 欧美午夜精品一区二区三区 | 人人干人人爽 | 色婷婷在线视频 | 日韩毛片网 | 欧美精产国品一二三区 | 在线h片 | 欧美视频亚洲视频 | 亚洲一区二区在线播放 | 丰满少妇av | 免费成人在线观看视频 | 师生出轨h灌满了1v1 | 国产激情久久久 | 亚洲成人欧美 | 长河落日 | 亚洲欧美视频一区 | 久久99精品久久久久久 | 国产伦精品一区二区三区在线 | 日韩精品国产一区 | 4438成人网| 亚洲三级黄色片 | 中国a一片一级一片 | 日韩一区二区三 | 国产不卡在线视频 | 成年人视频免费看 | 国产suv一区二区 | 视频在线一区二区 | 爱爱免费小视频 | 国产一区二区三区在线 | 精品一区二区三 | 亚洲国产区 | 亚洲免费专区 | 美日韩一区| 国产免费无遮挡 | 亚洲一区二区久久 | 国产在线黄色 | 九九九热 | 一级片欧美|