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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

最近寫了個單片機小車的程序分享一下

[復制鏈接]
跳轉到指定樓層
樓主
ID:463527 發表于 2019-6-17 10:13 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
喜歡32的朋友可以看一下 ,遙控的32小車程序

單片機源程序如下:
  1. #include "reg52.h"
  2. #include<intrins.h>       
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. uchar count;      //0.5ms次數標識
  6. uchar jd;         //角度標識

  7. sbit DJ0 = P1^0;
  8. sbit DJ1 = P1^1;
  9. sbit DJ2 = P1^2;
  10. sbit DJ3 = P1^3;

  11. sbit Trig = P2^2;                        //超聲波引腳
  12. sbit Echo = P2^3;
  13. unsigned int  time=0;
  14. unsigned long S=0;
  15. bit      flag =0;
  16. unsigned char disbuff[4]           ={ 0,0,0};

  17. sbit pwm = P2^4;          //PWM信號輸出
  18. sbit led = P1^4 ;          //led信號輸出
  19. uchar code table[]="I LOVE MCU!";
  20. sbit lcden=P2^6;        //液晶 使能
  21. sbit lcdrs=P2^7;        //液晶 數據命令

  22. void delay(uint z)                //延時函數
  23. {
  24.         uint x,y;
  25.         for(x=z;x>0;x--)
  26.                 for(y=110;y>0;y--);
  27. }

  28. void Stop()                                //小車停止
  29. {
  30.         DJ0 = 0;
  31.         DJ1 = 0;
  32.         DJ2 = 0;
  33.         DJ3 = 0;
  34.        
  35. }
  36. void XiaoChe_GO()           //小車前進
  37. {               
  38.         DJ0 = 0;
  39.         DJ1 = 1;
  40.         DJ2 = 0;
  41.         DJ3 = 1;       
  42.        
  43. }
  44. void XiaoChe_Back()           //小車后退
  45. {               
  46.         DJ0 = 1;
  47.         DJ1 = 0;
  48.         DJ2 = 1;
  49.         DJ3 = 0;       
  50. }
  51. void XiaoChe_Zuo()           //小車左轉
  52. {               
  53.         DJ0 = 1;
  54.         DJ1 = 0;
  55.         DJ2 = 0;
  56.         DJ3 = 1;       
  57. }
  58. void XiaoChe_You()           //小車右轉
  59. {               
  60.         DJ0 = 0;
  61.         DJ1 = 1;
  62.         DJ2 = 1;
  63.         DJ3 = 0;       
  64. }


  65. void write_com(uchar com)
  66. {
  67.         lcdrs=0;
  68.         P0=com;
  69.         delay(5);
  70.         lcden=1;
  71.         delay(5);
  72.         lcden=0;
  73. }
  74. void write_data(uchar date)
  75. {
  76.         lcdrs=1;
  77.         P0=date;
  78.         delay(5);
  79.         lcden=1;
  80.         delay(5);
  81.         lcden=0;
  82. }
  83. void init()
  84. {
  85.         lcden=0;
  86.         write_com(0x38);
  87.         write_com(0x0c);
  88.         write_com(0x06);
  89.         write_com(0x01);
  90. }
  91. void Time0_Init()          //定時器初始化
  92. {
  93.         TMOD = 0x11;           //定時器0工作在方式1   定時器1工作在方式1   
  94.         TH0  = 0xfe;
  95.         TL0  = 0x33;                   //11.0592MZ晶振,0.5ms
  96.         TH1 = 0;
  97.         TL1 = 0;
  98.        
  99.         EA=1;
  100.         ET0=1;
  101.         ET1=1;
  102.         TR0=1;                 //定時器開始  用于舵機轉向
  103. }
  104. /*
  105. void Time0_Int() interrupt 1 //中斷程序
  106. {
  107.                 TH0  = 0xfe;             //重新賦值
  108.                 TL0  = 0x33;
  109.     if(count<jd)              //判斷0.5ms次數是否小于角度標識
  110.       pwm=1;                  //確實小于,PWM輸出高電平
  111.     else
  112.       pwm=0;                  //大于則輸出低電平

  113.     count=(count+1);          //0.5ms次數加1
  114.     count=count%40;                          //次數始終保持為40 即保持周期為20ms
  115. }
  116. */
  117. void zd0() interrupt 3                  //T0中斷用來計數器溢出,超過測距范圍
  118.   {
  119.     flag=1;                                                         //中斷溢出標志
  120.   }

  121. void  StartModule()                          //啟動模塊
  122.   {
  123.           Trig=1;                                             //啟動一次模塊
  124.           _nop_();
  125.           _nop_();
  126.           _nop_();
  127.           _nop_();
  128.           _nop_();
  129.           _nop_();
  130.           _nop_();
  131.           _nop_();
  132.           _nop_();
  133.           _nop_();
  134.           _nop_();
  135.           _nop_();
  136.           _nop_();
  137.           _nop_();
  138.           _nop_();
  139.           _nop_();
  140.           _nop_();
  141.           _nop_();
  142.           _nop_();
  143.           _nop_();
  144.           _nop_();
  145.           Trig=0;
  146.   }

  147. void Conut(void)                        //計算結果
  148. {
  149.          time=TH1*256+TL1;
  150.          TH1=0;
  151.          TL1=0;
  152.        
  153.          S=(time*1.7)/10;     //算出來是MM
  154.         if((S>=700)||flag==1) //超出測量范圍顯示“-”
  155.          {
  156.                  flag=0;
  157.                  XiaoChe_GO();
  158.                  disbuff[0]=45;
  159.            disbuff[1]=45;
  160.            disbuff[2]=45;                         
  161.          }
  162.          else if(S < 100)
  163.          {
  164.                  XiaoChe_Zuo();
  165.                  delay(300);
  166.                  Stop();
  167.                  disbuff[0]=S%1000/100 + 0x30;
  168.            disbuff[1]=S%1000%100/10 + 0x30;
  169.            disbuff[2]=S%1000%10 %10 + 0x30;                 
  170.          }
  171.         else
  172.         {
  173.                  disbuff[0]=S%1000/100 + 0x30;
  174.            disbuff[1]=S%1000%100/10 + 0x30;
  175.            disbuff[2]=S%1000%10 %10 + 0x30;
  176.         }
  177.        
  178. }
  179. void main()
  180. {
  181.         int x=0;
  182.         uchar num;
  183.   Time0_Init();
  184.         init();
  185.         write_com(0x80);
  186.         for(num=0;num<11;num++)
  187.         {
  188.                 write_data(table[num]);
  189.                 delay(5);
  190.         }
  191. while(1)
  192. {
  193.                          x++;
  194.                          StartModule();
  195.              while(!Echo);                //當RX為零時等待
  196.              TR1=1;                            //開啟計數
  197.              while(Echo);                        //當RX為1計數并等待
  198.              TR1=0;                                //關閉計數
  199.        Conut();                        //計算
  200.                          write_com(0x80+0x40);
  201.                                 for(num=0;num<3;num++)
  202.                                 {
  203.                                         write_data(disbuff[num]);
  204.                                         delay(5);
  205.                                 }
  206.                          delay(50);
  207.                         jd = 1;
  208.                         count = 0;
  209.                         delay(100);         
  210.                         jd = 2;
  211.                         count = 0;
  212.                         delay(100);
  213.                         jd = 3;
  214.                         count = 0;
  215.                         delay(100);       
  216.                         jd = 4;
  217.                         count = 0;
  218.                         delay(100);
  219.                         jd = 5;
  220.                         count = 0;
  221.                         delay(100);
  222.                                
  223.                                
  224.                         if(x%2 == 0)
  225.                                 led = !led;
  226.                        

  227. }
  228. }
復制代碼


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

使用道具 舉報

沙發
ID:1 發表于 2019-6-17 14:49 | 只看該作者
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区在线观看免费视频 | 欧美日韩在线播放 | 精品国产乱码 | 国产伦精品一区二区三区高清 | 日韩视频在线免费观看 | 亚洲精品免费视频 | 亚洲精品视频一区 | 国产精品免费视频一区 | 亚洲成人免费视频在线观看 | 欧美一级免费黄色片 | 国产精品一码二码三码在线 | 久久久久国产 | 亚洲成av人片在线观看无码 | 99久久成人| 91视频国产一区 | 国产人成在线观看 | www97影院| 欧美日日| 日本免费一区二区三区视频 | 国产亚洲一区二区三区 | 毛片网站在线观看视频 | 一色桃子av一区二区 | 久久99精品久久久久久国产越南 | www日本在线观看 | 成人一区二区三区 | 91国产精品 | 六月成人网 | 国产精品久久久久久久免费观看 | 狠狠色综合久久丁香婷婷 | 欧美日韩成人影院 | 九九综合 | 精品免费在线 | 免费在线精品视频 | 欧美自拍一区 | 91精品国产色综合久久 | 国产精品久久久久久吹潮日韩动画 | 成人一区二区三区在线观看 | 亚洲午夜视频 | 天天躁日日躁xxxxaaaa | 日本成人午夜影院 | 久久久久中文字幕 |