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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

用STC89C52做的藍牙小車 HC05+pwm+尋跡+單片機源碼

  [復制鏈接]
跳轉到指定樓層
樓主


制作成功的小車實物圖如下:




單片機源程序如下:

  1. # include "reg51.h"
  2. # include "pwm.h"

  3. uchar flag,i,receive;
  4. uchar code table1[]="GO";
  5. uchar code table2[]="Back";
  6. uchar code table3[]="Left";
  7. uchar code table4[]="Right";
  8. uchar code table0[]="Stop";
  9. uchar code table5[]="2016111130";
  10. uchar code table6[]="Welcome to Lanya";

  11. sbit RS=P2^2;
  12. sbit RW=P2^3;
  13. sbit E=P2^4;


  14. void delay_50us(uint us)
  15. {
  16.     uint i,k;
  17.           for (i=us;i>0;i--)
  18.              for (k=100;k>0;k--);
  19. }
  20. void write_data(uint dat)  //定義寫數據函數
  21. {
  22.       RS=1;
  23.           RW=0;
  24.           E=0;
  25.           P0=dat;            //送入數據
  26.       delay_50us(10);
  27.           E=1;
  28.       delay_50us(10);
  29.           E=0;               //到此數據送入完畢
  30. }        
  31. void write_com(uchar com)   //定義寫指令函數
  32. {
  33.          RS=0;
  34.          RW=0;
  35.          E=0;
  36.          P0=com;            //送入指令
  37.      delay_50us(10);
  38.          E=1;
  39.      delay_50us(10);
  40.          E=0;               //到此指令送入完畢
  41. }
  42. void lcd1602inti(void)     //函數聲明
  43. {
  44.       delay_50us(100);  //延時15ms
  45.           write_com(0x38);  //不檢測忙信號
  46.           delay_50us(100);  //延時5ms
  47.           write_com(0x38);  //不檢測忙信號
  48.           delay_50us(100);  //延時5ms
  49.           write_com(0x38);  //不檢測忙信號
  50.           write_com(0x38);  //顯示模式設置
  51.       write_com(0x08);  //顯示關閉
  52.           write_com(0x01);  //顯示清屏
  53.           write_com(0x06);  //顯示光標移動設置
  54.           write_com(0x0c);  //顯示開及光標設置
  55. }

  56. void display()               
  57. {   
  58.         uchar i;
  59.         lcd1602inti();
  60.     write_com(0x83);
  61.         for(i=0;i<10;i++)
  62.         {
  63.             write_data(table5[i]);   //table1[]="2016111130";
  64.     }
  65.     write_com(0xC0);
  66.         for(i=0;i<16;i++)
  67.         {
  68.            write_data(table6[i]);   //table2[]="Welcome to Lanya";
  69.     }
  70. }
  71. void Usartinit()           //初始化
  72. {
  73.         
  74.         TMOD=0x21;                //設置定時器1的工作方式2   0010 0000  GATE C/T    8位初值自動重裝8位定時器
  75.                         //GATE  C/T M1 M0   GATE  C/T M1 M0   C/T位為1為計數模式  C/T位為0為定時模式
  76.         PCON=0x80;            //波特率加倍     電源管理寄存器
  77.     TH1=0xf3;                //給定時器重裝初值
  78.         TL1=0xf3;       //這里的波特率必須加倍  不加倍的話 通訊不成功 本人目前還不知道原因
  79.                     //由于開發板使用的晶振頻率是12M,非標準頻率,在設置波特率時很容易產生誤差,而導致串口通信出現亂碼或者失敗
  80.                     //目前來說,選擇波特率4800,SMOD=1波特率加倍的方式,誤差率僅為0.16%,為12M晶振中最小的誤差
  81.         TH0=0XEC;       //5ms定時   
  82.         TL0=0X78;   
  83.         TR0=1;  
  84.         ET0=1;
  85.     TR1=1;                //開定時器1
  86.     SM0=0;                //選擇串口工作方式1,常用
  87.         SM1=1;   
  88.     REN=1;                //開串口接收   此時接收器一所選擇的波特率16倍速率采樣RXD移交的電平 開始接收信息
  89.     ES=1;                //串行中斷總開關
  90.         EA=1;                //開總中斷
  91. }        
  92. void main()
  93. {
  94.         lcd1602inti();
  95.         Usartinit();   //調用初始化函數進行初始化
  96.     display();
  97.     while(1)
  98.         {
  99.       if(flag==1)//不斷的檢測標志位是否被置1  被置1說明已經執行了中斷服務程序,即已經接數據,否則一直檢測flag的狀態
  100.           {
  101.        switch(receive)
  102.                 {
  103.                    case 1:    run();  
  104.                             ES=0;   //接下來要發送數據 先要使ES=0關閉串口中斷 等數據發送完后再打開串口中斷
  105.                         for(i=0;i<2;i++)
  106.                                {
  107.                                    SBUF=table1[i];
  108.                                    while(!TI);   //等待是否發送完成 因為發送完成后TUI會有硬件置1
  109.                                   TI=0;                 //清除發送完成標志位  手動清0
  110.                          }                  
  111.                  ES=1;                                 
  112.                          flag=0;                          
  113.                           break;
  114.             case 2:   backrun();        
  115.                  ES=0;
  116.                                  for(i=0;i<4;i++)
  117.                               {
  118.                                        SBUF=table2[i];
  119.                                            while(!TI);
  120.                                            TI=0;        
  121.                                    }                  
  122.                                  ES=1;
  123.                              flag=0;                  
  124.                                                break;
  125.               case 3:  leftrun();        
  126.                   ES=0;
  127.                                for(i=0;i<4;i++)
  128.                           {
  129.                                                 SBUF=table3[i];
  130.                                                 while(!TI);
  131.                                                 TI=0;        
  132.                                  }                  
  133.                    ES=1;                                 
  134.                                  flag=0;                          
  135.                               break;
  136.                case 4:   rightrun();
  137.                    ES=0;
  138.                                    for(i=0;i<5;i++)
  139.                                         {
  140.                                             SBUF=table4[i];
  141.                                             while(!TI);
  142.                                             TI=0;        
  143.                                         }                 
  144.                                         ES=1;
  145.                                         flag=0;                  
  146.                                                   break;
  147.                case 0:   stoprun();         
  148.                                     ES=0;
  149.                                         for(i=0;i<4;i++)
  150.                                         {
  151.                                                  SBUF=table0[i];
  152.                                                  while(!TI);
  153.                                                  TI=0;        
  154.                                         }               
  155.                     ES=1;                                                        
  156.                             flag=0;         
  157.                   }                  
  158.            }
  159.           }
  160.    
  161. }
  162. void Usart() interrupt 4        //一旦有數據接入,串行口中斷觸發
  163. {
  164.    receive=SBUF-48;     //當REN為1時  開始接收數據 將接收到的值賦予receive   這里的是ACSII 所以要減去48
  165.    RI=0;                //當RI=0   將接收數據存入SBUF寄存器中  清除接收中斷標志位  有內部硬件置1,項CPU發出中斷請求 在中斷服務程序中,必須用軟件將其清零, 取消此中斷申請
  166.    flag=1;                            //將標志位置1  這個是方便在主程序中查詢判斷是否已經接收到數據
  167. }


  168. ……………………

  169. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
藍牙+pwm可用 勿刪.zip (43.08 KB, 下載次數: 413)



評分

參與人數 4黑幣 +64 收起 理由
imssu + 5 很給力!
kikiikllll + 5 贊一個!
793603160 + 4 哇,很棒啊,一開始玩這個,挺好玩的
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:121019 發表于 2017-10-12 23:27 | 只看該作者
相當厲害了
回復

使用道具 舉報

板凳
ID:69115 發表于 2017-12-2 02:08 | 只看該作者
這個小車很好玩
回復

使用道具 舉報

地板
ID:243552 發表于 2017-12-3 21:42 來自手機 | 只看該作者
成本100左右
回復

使用道具 舉報

5#
ID:268704 發表于 2018-1-3 14:07 | 只看該作者
這個里面有單獨的pwm輸出波沒呀?
回復

使用道具 舉報

6#
ID:166208 發表于 2018-4-12 12:19 | 只看該作者
張帥帥 發表于 2018-1-3 14:07
這個里面有單獨的pwm輸出波沒呀?

有的  當然要有啊
回復

使用道具 舉報

7#
ID:46475 發表于 2018-4-13 08:59 | 只看該作者
這個牛逼
回復

使用道具 舉報

8#
ID:230975 發表于 2018-4-13 09:44 | 只看該作者
原理圖也有嗎
回復

使用道具 舉報

9#
ID:275384 發表于 2018-4-14 14:18 | 只看該作者
很酷,我現在也在做這個,得到了啟發
回復

使用道具 舉報

10#
ID:311115 發表于 2018-4-19 18:54 | 只看該作者
2515361695 發表于 2018-4-12 12:19
有的  當然要有啊

尋跡程序呢。。。
回復

使用道具 舉報

11#
ID:382301 發表于 2018-8-2 20:06 | 只看該作者
謝謝樓主,正好在做這個
回復

使用道具 舉報

12#
ID:56932 發表于 2019-4-11 11:06 | 只看該作者
最近想做一個一個,參考一下
回復

使用道具 舉報

13#
ID:305511 發表于 2019-4-13 20:49 | 只看該作者
樓主太棒了,謝謝分享!
回復

使用道具 舉報

14#
ID:372154 發表于 2019-5-31 17:55 | 只看該作者
好資料 ,謝謝
回復

使用道具 舉報

15#
ID:541842 發表于 2019-6-16 11:05 | 只看該作者
強啊,小白看這個,正好
回復

使用道具 舉報

16#
ID:611378 發表于 2019-9-14 15:18 | 只看該作者
用戶軟件啟動內部看門狗后:     復位關看門狗
ALE pin 仍為 ALE
內部時鐘頻率:11.998408M.
外部時鐘頻率:11.998408M.
IAP read MCU ID is error!
回復

使用道具 舉報

17#
ID:620872 發表于 2019-10-9 09:08 | 只看該作者
只需要藍牙模塊
回復

使用道具 舉報

18#
ID:555907 發表于 2019-11-19 14:31 | 只看該作者
很不錯
回復

使用道具 舉報

19#
ID:907553 發表于 2023-5-12 11:26 | 只看該作者
有沒有手機軟件控制的
回復

使用道具 舉報

20#
ID:1091382 發表于 2023-9-10 17:03 | 只看該作者
看兄弟這操作,這紅外避障模板可以綁十個嗎?來個全方位避障。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人午夜精品 | 亚洲欧美日韩电影 | 免费在线观看黄视频 | 精品欧美激情在线观看 | 国产高清亚洲 | 日韩精品在线免费观看 | 国产伦精品一区二区三区精品视频 | 午夜精品久久久久久久99黑人 | 久久国产精品无码网站 | 日韩欧美中文字幕在线观看 | 一区二区三区精品视频 | 日本视频中文字幕 | 国产精品久久精品 | 欧美日韩一二三区 | 欧美精品一区二区三区蜜臀 | 电影午夜精品一区二区三区 | 欧美一区二区三区 | 五月婷婷中文 | 亚洲成人网在线播放 | 国产精品久久久久久久久久久免费看 | 日韩成人av在线 | 国产日韩精品一区 | av一区二区三区在线观看 | 国产日韩av一区二区 | 国产精品亚洲成在人线 | 国产精品久久久久久久久久久久冷 | 亚洲视频在线看 | 亚洲国产精品一区二区第一页 | 一区二区日本 | 久久在线视频 | 一区二区三区高清不卡 | 国产又色又爽又黄又免费 | 一区二区三区亚洲精品国 | 亚洲精品国产综合区久久久久久久 | 欧美一区二区在线观看 | 黄色大片在线免费观看 | 午夜小影院 | 欧美一页 | 日韩三级免费网站 | 亚洲性爰 | 中文一区二区 |