找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2065|回复: 1
收起左侧

蓝牙遥控小车单片机代码与app,亲测,可行!易懂奥

[复制链接]
ID:302652 发表于 2018-10-22 17:43 | 显示全部楼层 |阅读模式
0.png

单片机源程序如下:
  1. #include <reg52.h>
  2. #include "stdio.h"
  3. #include <intrins.h>
  4. #define uchar unsigned char
  5. #define uint  unsigned int

  6. unsigned int a;
  7. unsigned int Time;
  8. unsigned int S;
  9. baojing=5;

  10. sbit N1 = P1^0;
  11. sbit N2 = P1^1;
  12. sbit N3 = P1^2;
  13. sbit N4 = P1^3;

  14. sbit T=P2^0;
  15. sbit R=P2^1;

  16. sbit rs=P2^2;         //1602数据/命令选择引脚
  17. sbit rw=P2^3;         //1602读写引脚                
  18. sbit e =P2^4;         //1602使能引脚


  19. void delay_1ms(uint q)
  20. {
  21.         uint i,j;
  22.         for(i=0;i<q;i++)
  23.                 for(j=0;j<120;j++);
  24. }


  25. void count()
  26. {
  27.   Time=TH0*256+TL0;
  28.   TH0=0;
  29.   TL0=0;
  30.   S=(Time*1.7)/100;
  31. }



  32. void ceju()
  33. {
  34.    T=1;
  35.    _nop_();_nop_();
  36.    _nop_();_nop_();
  37.    _nop_();_nop_();
  38.    _nop_();_nop_();
  39.    _nop_();_nop_();
  40.    _nop_();_nop_();
  41.    T=0;
  42.    while(!R);
  43.    TR0=1;
  44.    while(R);
  45.    TR0=0;
  46. }

  47. void write_com(uchar com)
  48. {               
  49.         rs=0;
  50.                 rw=0;
  51.                 e=0;
  52.                 P0=com;
  53.                 e=1;
  54.                 delay_1ms(5);
  55.                 e=0;               
  56. }

  57. void write_data(uchar dat)
  58. {
  59.             rs=1;
  60.             rw=0;
  61.             e=0;
  62.             P0=dat;
  63.             e=1;
  64.                 delay_1ms(5);
  65.                 e=0;               
  66. }

  67. void write_zfc(uchar *p)
  68. {
  69.    while(*p!=0)
  70.    write_data(*p++);
  71. }

  72. void init_1602()
  73. {
  74.         write_com(0x38);
  75.         write_com(0x0c);
  76.         write_com(0x06);
  77.         delay_1ms(25);
  78.         write_com(0x80);
  79.         write_zfc("juli:");
  80.         write_com(0x80+0x40);          
  81.         write_zfc("danger:");
  82.         write_com(0x80+12);          
  83.         write_zfc("cm");   
  84.         write_com(0x80+0x40+12);          
  85.         write_zfc("cm");

  86. }

  87. void display()
  88. {
  89.     uchar bai,shi,ge;
  90.         bai=S/100;
  91.         shi=S%100/10;
  92.     ge=S%10;            
  93.     write_com(0x80+9);
  94.         write_data(0x30+bai);  
  95.         write_data(0x30+shi);
  96.         write_data(0x30+ge);
  97. }

  98. void display1()
  99. {       
  100.            uchar tbai,tshi,tge;
  101.         tbai=baojing/100;
  102.         tshi=baojing%100/10;
  103.     tge=baojing%10;            
  104.     write_com(0x80+0x40+9);
  105.         write_data(0x30+tbai);  
  106.         write_data(0x30+tshi);
  107.         write_data(0x30+tge);
  108. }   
  109.                           
  110. void go()
  111. {
  112.   N1 = 1;
  113.   N2 = 0;
  114.   N3 = 1;
  115.   N4 = 0;
  116. }

  117. void back()
  118. {
  119.   N1 = 0;
  120.   N2 = 1;
  121.   N3 = 0;
  122.   N4 = 1;
  123. }

  124. void right()
  125. {
  126.   N1 = 1;
  127.   N2 = 0;
  128.   N3 = 0;
  129.   N4 = 0;
  130. }

  131. void left()
  132. {
  133.   N1 = 0;
  134.   N2 = 0;
  135.   N3 = 1;
  136.   N4 = 0;
  137. }

  138. void stay()
  139. {
  140.   N1 = 0;
  141.   N2 = 0;
  142.   N3 = 0;
  143.   N4 = 0;
  144. }

  145. void chuangkou_Init9600()
  146. {
  147.         SCON = 0X50;                        //设置为工作方式1
  148.         TMOD = 0X21;                        //设置计数器工作方式2
  149.         TH1 = 0XFD;                                //计数器初始值设置,注意波特率是9600的
  150.         TL1 = 0XFD;
  151.         TH0 = 0X00;                                //计数器初始值设置,注意波特率是9600的
  152.         TL0 = 0X00;
  153.         ES = 1;                                                //打开接收中断
  154.         EA = 1;                                                //打开总中断
  155.         TR0 = 1;
  156.         TR1 = 1;                                        //打开计数器
  157. }

  158. void Usart() interrupt 4
  159. {
  160.       if(RI)
  161.           {     
  162.         RI=0;             //清除接收中断标志位
  163.             a=SBUF;
  164.             SBUF=a;     //将接收到的数据放入到发送寄存器
  165.             while(!TI);         //等待发送数据完成
  166.             TI=0;
  167.           }                 //清除发送完成标志位
  168. }



  169. void main()
  170. {         
  171.      init_1602();
  172.      chuangkou_Init9600();
  173.          

  174.          while(1)
  175.          {
  176.                        
  177.           switch(a)
  178.           {
  179.             case 0X01: go();      break;
  180.                 case 0X02: back();    break;
  181.                 case 0X03: left();    break;
  182.                 case 0X04: right();   break;
  183.                 default:  stay();            break;
  184.           }
  185.            ceju();
  186.            count();
  187.           
  188.                  
  189.           
  190.           
  191.           
  192.              display();
  193.              display1();
  194.           
  195.          }
  196.   
  197. }
复制代码

所有资料51hei提供下载:
2_蓝牙遥控小车-成功.zip (807.42 KB, 下载次数: 18)
回复

使用道具 举报

ID:1 发表于 2018-10-22 18:02 | 显示全部楼层
补全原理图或者详细说明一下电路连接即可获得100+黑币
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表