找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机智能小车,红外加超声波避障加测速里程,内加算法

[复制链接]
ID:280254 发表于 2019-11-16 23:48 | 显示全部楼层 |阅读模式
智能小车,红外加超声波避障加测速里程,内加算法,用上51的4个中断优先级了,
  1. #include <reg52.h>
  2. #include "lcd1602.h"
  3. #include "IRLED.h"
  4. #include "CarControl.h"
  5. #include "SuperWave.h"
  6. #include "SysTicks.h"
  7. #include "MeasureSpeed.h"
  8. sfr IPH     = 0XB7;//优先级配置寄存器
  9. #define uchar unsigned char
  10. #define uint unsigned int
  11. sbit IRIN = P3^3;         //红外接收器数据线
  12. extern uchar IRLedValue ;//红外遥控器值
  13. /***************************************

  14. 定时器0:计数器模式,用于计算码盘脉冲个数
  15. 定时器1:定时器模式,用于计算超声波距离
  16. 定时器2:定时器模式,用于系统滴答计时,与产生PWM波
  17. 外部中断1:红外接收中断

  18. 优先级:
  19. 外部中断1 >  定时器2 >  定时器1  >  定时器0
  20. *****************************************/
  21. bit IsCarRunning=0;//车是否在跑
  22. void main()
  23. {
  24. uchar i;
  25. PT0=1; //提升外部中断1高于定时器0
  26. IPH|=0x22;//提升定时器2优先级仅次于外部中断1

  27. LCD1602_Init();
  28. IRLED_Init();
  29. Car_Init();
  30. SuperWave_Init();
  31. SysTicks_Init();
  32. MeasureSpeed_Init();
  33. LCD1602_ShowString(0,0,"Num:");
  34. while(1)
  35. {
  36.   SuperWave_GetCount();
  37.   
  38.    Delay_ms(10);
  39. }
  40. }
  41. #include <reg52.h>
  42. #include "lcd1602.h"
  43. #define uchar unsigned char
  44. #define uint unsigned int
  45. #define LCD1602_DATA P0
  46. sbit lcden=P2^7; //使能控制
  47. sbit lcdrs=P2^5; //命令数据输入
  48. sbit lcdrw=P2^6; //命令数据输入

  49. void Delay_ms(unsigned int ms)
  50. {
  51. unsigned int x,y;
  52. for(x=ms;x>0;x--)
  53.   for(y=110;y>0;y--);
  54. }

  55. bit LCD1602_Busy()   
  56. {
  57. bit busy;
  58. lcdrs=0;
  59. lcdrw=1;
  60. lcden=1;
  61. Delay_ms(2);
  62. busy=(bit)(LCD1602_DATA&0x80);
  63. lcden=0;
  64. return(busy);
  65. }
  66.   
  67. void LCD1602_Wcmd(unsigned char buffer)
  68. {
  69. while(LCD1602_Busy());
  70. lcdrs = 0;
  71. lcdrw = 0;
  72. lcden = 0;
  73. LCD1602_DATA = buffer;
  74. lcden = 1;
  75. Delay_ms(5); //1ms 3ms
  76. lcden = 0;
  77. }
  78. void LCD1602_Wdata(unsigned char  dat)
  79. {
  80. while(LCD1602_Busy());
  81. lcdrs = 1;
  82. lcdrw = 0;
  83. lcden = 0;
  84. LCD1602_DATA = dat;
  85. lcden = 1;
  86. Delay_ms(5);
  87. lcden = 0;
  88. }
  89. void LCD1602_Init()
  90. {
  91.   LCD1602_Wcmd(0x38);//数据8位
  92. Delay_ms(5);
  93. LCD1602_Wcmd(0x0e);//开启显示屏及光标
  94. Delay_ms(5);
  95. LCD1602_Wcmd(0x06);//输入模式:位增,不移
  96. Delay_ms(5);
  97. LCD1602_Wcmd(0x01);//清零
  98. Delay_ms(5);
  99. }
  100. void LCD1602_ShowString(unsigned char x,unsigned char y,unsigned char dat[])
  101. {
  102. uchar i=0;
  103. if(y==0)
  104.   LCD1602_Wcmd(0x80+x);//0x80+1
  105. else if(y==1)
  106.   LCD1602_Wcmd(0xc0+x);//0xc0+1
  107. while(dat[i]!='\0')
  108. {
  109.   LCD1602_Wdata(dat[i]);
  110.   Delay_ms(2);
  111.   i++;
  112. }
  113. }
  114. #include <reg52.h>
  115. #include "ultrasonic.h"
  116. #include "delay.h"
  117. #include "lcd.h"
  118. void getsuper(void)
  119. {
  120. trig = 1;
  121. DelayUs2x(5);
  122. trig = 0;
  123. while(!echo);
  124. TR1 = 1;
  125. while(echo);
  126. TR1 = 0;
  127. time = TH1*256 + TL1;
  128. TH1 = 0;
  129. TL1 = 0;

  130. sss=(time*1.7)/100;
  131. LCD1602_Dis_OneChar(1, 1, sss%1000/100+0x30);
  132. LCD1602_Dis_OneChar(2, 1, sss%100/10+0x30);
  133. LCD1602_Dis_OneChar(3, 1, sss%10+0x30);
  134. LCD1602_Dis_OneChar(4, 1, 'c');
  135. LCD1602_Dis_OneChar(5, 1, 'm');

  136. }

复制代码

超声波避障+蓝牙遥控智能小车.zip

44.76 KB, 下载次数: 16, 下载积分: 黑币 -5

回复

使用道具 举报

ID:1 发表于 2019-11-20 17:24 | 显示全部楼层
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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