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

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

QQ登錄

只需一步,快速開(kāi)始

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

51單片機(jī)智能小車PCB源程序 C51FPS.LIB浮點(diǎn)運(yùn)算庫(kù)下載

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:747099 發(fā)表于 2020-11-28 18:27 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
解壓C51FPS.rar
把C51FPS.LIB這個(gè)文件放到\Keil\C51\LIB下面,這個(gè)文件有浮點(diǎn)運(yùn)算

Altium Designer畫(huà)的原理圖和PCB圖如下:(51hei附件中可下載工程文件)


單片機(jī)源程序如下:
  1. #include <at89x51.h>        
  2. #include <intrins.h>

  3. #define  TX  P2_0
  4. #define  RX  P2_1

  5. #define Forward_L_DATA  180//當(dāng)前進(jìn)不能走直線的時(shí)候,請(qǐng)調(diào)節(jié)這兩個(gè)參數(shù),理想的時(shí)候是100,100,最大256,最小0。0的時(shí)候最慢,256的時(shí)候最快
  6. #define Forward_R_DATA  180        //例如小車前進(jìn)的時(shí)候有點(diǎn)向左拐,說(shuō)明右邊馬達(dá)轉(zhuǎn)速過(guò)快,那可以取一個(gè)值大一點(diǎn),另外一個(gè)值小一點(diǎn),例如 200  190
  7.                             //直流電機(jī)因?yàn)橹圃焐系恼`差,同一個(gè)脈寬下也不一定速度一致的,需要自己手動(dòng)調(diào)節(jié)

  8. /*****按照原圖接線定義******/
  9. sbit L293D_IN1=P1^2;
  10. sbit L293D_IN2=P1^3;
  11. sbit L293D_IN3=P1^6;
  12. sbit L293D_IN4=P1^7;

  13. sbit L293D_EN1=P1^4;
  14. sbit L293D_EN2=P1^5;

  15. sbit BUZZ=P2^3;


  16. void Delay400Ms(void);//延時(shí)400毫秒函數(shù)


  17. unsigned char disbuff[4]={0,0,0,0};//用于分別存放距離的值0.1mm、mm、cm和m的值

  18. void Count(void);//距離計(jì)算函數(shù)
  19.                           
  20. unsigned int  time=0;//用于存放定時(shí)器時(shí)間值
  21. unsigned long S=0;//用于存放距離的值
  22. bit  flag =0; //量程溢出標(biāo)志位
  23. bit  turn_right_flag;


  24. //**********************************************************
  25. //函數(shù)名稱:Delay1ms(unsigned int i)
  26. //函數(shù)功能:延時(shí)i*1ms的子程序(對(duì)應(yīng)于22.1184Mhz晶振)   
  27. //形式參數(shù):unsigned int i
  28. //行參說(shuō)明:無(wú)
  29. //返回參數(shù):無(wú)
  30. //使用說(shuō)明:i為要延時(shí)的時(shí)間長(zhǎng)度,單位是MS,最大可以延時(shí)65536 ms
  31. //**********************************************************
  32. void Delay1ms(unsigned int i)
  33. {
  34. unsigned char j,k;
  35. do{
  36.   j = 10;
  37.   do{
  38.    k = 50;
  39.    do{
  40.     _nop_();
  41.    }while(--k);     
  42.   }while(--j);
  43. }while(--i);

  44. }
  45. //**********************************************************
  46. //函數(shù)名稱:Delay10us(unsigned char i)
  47. //函數(shù)功能:延時(shí)i*10us的子程序(對(duì)應(yīng)于22.1184Mhz晶振)   
  48. //形式參數(shù):無(wú)
  49. //行參說(shuō)明:無(wú)
  50. //返回參數(shù):無(wú)
  51. //使用說(shuō)明:i為要延時(shí)的時(shí)間長(zhǎng)度,單位是US,最大可以延時(shí)250 ms
  52. //**********************************************************
  53. void Delay10us(unsigned char i)
  54. {
  55.    unsigned char j;
  56. do{
  57.   j = 10;
  58.   do{
  59.    _nop_();
  60.    }while(--j);
  61. }while(--i);
  62. }  

  63. //=========================================================================================================================
  64. void Forward()//           前進(jìn)
  65. {

  66.          L293D_IN1=1;
  67.          L293D_IN2=0;
  68.          L293D_IN3=1;
  69.          L293D_IN4=0;
  70. //     PWM_Set(255-Speed_Right,255-Speed_Left);
  71. }
  72. void Stop(void)        //剎車
  73. {

  74.      L293D_IN1=0;
  75.          L293D_IN2=0;
  76.          L293D_IN3=0;
  77.          L293D_IN4=0;
  78. //         PWM_Set(0,0);
  79. }
  80. void Turn_Retreat()         //后
  81. {
  82.     L293D_IN1=0;
  83.         L293D_IN2=1;
  84.         L293D_IN3=0;
  85.         L293D_IN4=1;
  86. //        PWM_Set(255-Speed_Right,255-Speed_Left);
  87. }

  88. void Turn_left()         //左
  89. {
  90.     L293D_IN1=0;
  91.         L293D_IN2=1;
  92.         L293D_IN3=1;
  93.         L293D_IN4=0;
  94. //        PWM_Set(255-Speed_Right,255-Speed_Left);
  95. }

  96. //=========================================================================================================================
  97. /********距離計(jì)算程序***************/
  98.     void Conut(void)
  99.         {
  100.          time=TH1*256+TL1;
  101.          TH1=0;
  102.          TL1=0;
  103.         
  104.          //此時(shí)time的時(shí)間單位決定于晶振的速度,外接晶振為11.0592MHZ時(shí),
  105.                     //time的值為0.54us*time,單位為微秒
  106.                                 //那么1us聲波能走多遠(yuǎn)的距離呢?1s=1000ms=1000000us
  107.                                 // 340/1000000=0.00034米
  108.                                 //0.00034米/1000=0.34毫米  也就是1us能走0.34毫米
  109.                                 //但是,我們現(xiàn)在計(jì)算的是從超聲波發(fā)射到反射接收的雙路程,
  110.                                 //所以我們將計(jì)算的結(jié)果除以2才是實(shí)際的路程

  111.         S=time*2;//先算出一共的時(shí)間是多少微秒。
  112.            S=S*0.17;//此時(shí)計(jì)算到的結(jié)果為毫米,并且是精確到毫米的后兩位了,有兩個(gè)小數(shù)點(diǎn)
  113.          if(S<=300)         //
  114.          {        
  115.             if(turn_right_flag!=1)
  116.                 {
  117.                     Stop();
  118.                     Delay1ms(5);//發(fā)現(xiàn)小車自動(dòng)復(fù)位的時(shí)候,可以稍微延長(zhǎng)一點(diǎn)這個(gè)延時(shí),減少電機(jī)反向電壓對(duì)電路板的沖擊。
  119.                 }
  120.                 turn_right_flag=1;
  121.                
  122.                 P1_7=0;
  123.                 P2_0=0;
  124.                 P0_6=0;

  125.                 Delay1ms(10);
  126.                
  127.                 P1_7=1;
  128.                 P2_0=1;
  129.                 P0_6=1;

  130.            // Turn_Right(120,120);
  131.            
  132.            Delay1ms(5);         // 關(guān)鍵點(diǎn)  延時(shí)5MS  
  133.          //  Delay1ms(500);           //后退500MS
  134.            Turn_left();
  135.            Delay1ms(10);           //左轉(zhuǎn)800MS

  136.          }
  137.          else
  138.          {
  139.             turn_right_flag=0;
  140.             //Forward(Forward_R_DATA,Forward_L_DATA);
  141.                 Forward();


  142.          }
  143.          //=======================================
  144.          if((S>=5000)||flag==1) //超出測(cè)量范圍
  145.          {        
  146.           flag=0;
  147.       //DisplayListChar(0, 1, table1);
  148.          }
  149.          else
  150.          {
  151.       disbuff[0]=S%10;
  152.           disbuff[1]=S/10%10;
  153.           disbuff[2]=S/100%10;
  154.           disbuff[3]=S/1000;
  155.          }
  156.         }

  157. /********************************************************/
  158.      void zd0() interrupt 3                  //T0中斷用來(lái)計(jì)數(shù)器溢出,超過(guò)測(cè)距范圍
  159.   {
  160.     flag=1;                         //中斷溢出標(biāo)志
  161.         RX=0;
  162.   }

  163. /********超聲波高電平脈沖寬度計(jì)算程序***************/
  164. void Timer_Count(void)
  165. {
  166.                  TR1=1;                            //開(kāi)啟計(jì)數(shù)
  167.              while(RX);                        //當(dāng)RX為1計(jì)數(shù)并等待
  168.              TR1=0;                                //關(guān)閉計(jì)數(shù)
  169.          Conut();                        //計(jì)算

  170. }
  171. /********************************************************/
  172.    void  StartModule()                          //啟動(dòng)模塊
  173.   {
  174.           TX=1;                                             //啟動(dòng)一次模塊
  175.       Delay10us(2);
  176.           TX=0;
  177.   }
  178. /********************************************************/

  179. /*************主程序********************/
  180. void main(void)
  181. {
  182.     unsigned char i;
  183.         unsigned int a;
  184.         //cmg88();//關(guān)數(shù)碼管
  185.         Delay1ms(400); //啟動(dòng)等待,等LCM講入工作狀態(tài)
  186. //        LCMInit(); //LCM初始化
  187.         Delay1ms(5);//延時(shí)片刻
  188.    TMOD=TMOD|0x10;//設(shè)T0為方式1,GATE=1;
  189.     EA=1;
  190.     TH1=0;
  191.     TL1=0;         
  192.     ET1=1;             //允許T0中斷
  193.                                    //開(kāi)啟總中斷
  194.         //===============================
  195.         //PWM_ini();
  196.         //===============================
  197.         turn_right_flag=0;
  198.         //=================================
  199. B:                for(i=0;i<50;i++) //判斷K3是否按下
  200.                 {
  201.                    Delay1ms(1);        //1ms內(nèi)判斷50次,如果其中有一次被判斷到K3沒(méi)按下,便重新檢測(cè)
  202.                    if(P3_5!=0 )//當(dāng)K3按下時(shí),啟動(dòng)小車
  203.                    goto B; //跳轉(zhuǎn)到標(biāo)號(hào)B,重新檢測(cè)
  204.                 }
  205.         //蜂鳴器響一聲
  206.         BUZZ=0;        //50次檢測(cè)K3確認(rèn)是按下之后,蜂鳴器發(fā)出“滴”聲響,然后啟動(dòng)小車。
  207.         Delay1ms(50);
  208.         BUZZ=1;//響50ms后關(guān)閉蜂鳴器
  209.         //=======================================================================================================================                        
  210.          while(1)
  211.           {
  212.                 RX=1;
  213.             StartModule();
  214.         for(a=951;a>0;a--)
  215.             {
  216.                   
  217.                if(RX==1)
  218.                    {
  219.            Timer_Count();
  220.                    }
  221.              }
  222.            }
  223. }
復(fù)制代碼

所有資料51hei提供下載:
03.7z (5.08 MB, 下載次數(shù): 125)

評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:170693 發(fā)表于 2024-6-24 21:18 | 只看該作者
下載-C51FBS.LIB文件備用。先謝謝樓主。
回復(fù)

使用道具 舉報(bào)

板凳
ID:170693 發(fā)表于 2024-6-24 21:25 | 只看該作者
需要用最新版的winrar解壓
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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