找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6443|回复: 8
打印 上一主题 下一主题
收起左侧

单片机智能小车测速模块+码盘计数+测速传感器模块+测试程序

  [复制链接]
跳转到指定楼层
楼主
ID:514158 发表于 2019-11-7 23:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. /******************************************************************************************
  2. 程序名:检查小车行使距离-LCD1602
  3. 编写人:Yayi                                                  
  4. /******************************************************************************************/

  5. #include <STC12C5A60S2.H>//头文件
  6. #include <LCD1602.h>

  7. sbit IN1=P1^0;
  8. sbit IN2=P1^1;
  9. sbit IN3=P1^2;
  10. sbit IN4=P1^3;

  11. unsigned int motor1=0;         //计左电机码盘脉冲值
  12. unsigned int motor2=0;         //计右电机码盘脉冲值
  13. unsigned int speed1=0;         //计左电机码盘脉冲值
  14. unsigned int speed2=0;         //计右电机码盘脉冲值
  15. unsigned int k=0;

  16. void Forward(void)
  17. {
  18.         IN1=1;
  19.         IN2=0;
  20.         IN3=0;
  21.         IN4=1;
  22. }

  23. /********************************************************************************************
  24. 定时器0初始化
  25. /********************************************************************************************/
  26. void T0_init (void)
  27. {
  28.         TMOD = 0x01;         //高4位控制T1,低4位控制T0
  29.         EA = 1;                //中断总开关
  30.         TH0 = 0;         //16位计数寄存器T0高8位
  31.         TL0 = 0;        //16位计数寄存器T0低8位
  32.         ET0 = 1;         //T0中断开关
  33.         TR0 = 1;         //T0启动开关
  34. }

  35. /*********************************************************************************************
  36. 外部中断INT0、INT1初始化函数
  37. /********************************************************************************************/
  38. void INT_init (void)
  39. {
  40.         EA = 1;                        //中断总开关  
  41.         EX0 = 1;                 //允许外部中断0中断
  42.         IT0 = 1;                 //1:下沿触发  0:低电平触发
  43.         EX1 = 1;
  44.         IT1        = 1;
  45. }

  46. /*********************************************************************************************
  47. 主程序
  48. /********************************************************************************************/
  49. void main(void)
  50. {               
  51.         LCD1602_Init();
  52.         LCD1602_Frist();
  53.         INT_init();
  54.         T0_init();
  55.         Forward();
  56.         while (1)
  57.         {
  58.                 print(line_one,0,'M');
  59.                 print(line_one,1,'o');
  60.                 print(line_one,2,'t');
  61.                 print(line_one,3,'o');
  62.                 print(line_one,4,'r');
  63.                 print(line_one,5,'1');
  64.                 print(line_one,6,':');
  65.                 print(line_one,7,speed1/1000+0x30);
  66.                 print(line_one,8,speed1/100%10+0x30);
  67.                 print(line_one,9,speed1/10%10+0x30);
  68.                 print(line_one,10,speed1%10+0x30);
  69.                 print(line_one,11,' ');
  70.                 print(line_one,12,'C');
  71.                 print(line_one,13,'M');
  72.                 print(line_one,14,'/');
  73.                 print(line_one,15,'S');

  74.                 print(line_two,0,'M');
  75.                 print(line_two,1,'o');
  76.                 print(line_two,2,'t');
  77.                 print(line_two,3,'o');
  78.                 print(line_two,4,'r');
  79.                 print(line_two,5,'2');
  80.                 print(line_two,6,':');
  81.                 print(line_two,7,speed2/1000+0x30);
  82.                 print(line_two,8,speed2/100%10+0x30);
  83.                 print(line_two,9,speed2/10%10+0x30);
  84.                 print(line_two,10,speed2%10+0x30);
  85.                 print(line_two,11,' ');
  86.                 print(line_two,12,'C');
  87.                 print(line_two,13,'M');
  88.                 print(line_two,14,'/');
  89.                 print(line_two,15,'S');
  90.                 DELAY_MS(250);
  91.                 LCD1602_WriteCMD(CMD_clear);
  92.                 }
  93. }

  94. /*********************************************************************************************
  95. 外部中断INT0计算电机1的脉冲
  96. /********************************************************************************************/
  97. void intersvr1(void) interrupt 0 using 1
  98. {
  99.         motor1++;               
  100. }
  101. /*********************************************************************************************
  102. 外部中断INT1计算电机2的脉冲
  103. /********************************************************************************************/
  104. void intersvr2(void) interrupt 2 using 3
  105. {
  106.         motor2++;
  107. }

  108. /********************************************************************************************
  109. 定时器0中断函数
  110. 注意:这里的speed为简单书写,逻辑公式过程应该为
  111. speed2=小车轮子周长/码盘格式*1秒的码盘脉冲格数
  112. 定时器做出的效果为算出一秒内的距离
  113. /********************************************************************************************/
  114. void T0 (void) interrupt 1  using 2
  115. {
  116.         TH0=(65536-1000)/256;        //16位计数寄存器T0高8位,尝试修改1000成其他值
  117.         TL0=(65536-1000)%256;        //16位计数寄存器T0低8位,尝试修改1000成其他值
  118.         k++;                        //k自加1
  119.         if(k==1000)               
  120.         {
  121.                 k=0;                        //重新定义k的值
  122.                 speed1=motor1;
  123.                 speed2=motor2;
  124.                 motor1=0;                 //重新定义motor1的值
  125.                 motor2=0;                //重新定义motor1的值
  126.         }               
  127. }
复制代码
  1. /******************************************************************************************
  2. 程序名:检查小车行使距离-LCD1602                                                 
  3. /******************************************************************************************/

  4. #include <STC12C5A60S2.H>//头文件
  5. #include <LCD1602.h>

  6. sbit IN1=P1^0;
  7. sbit IN2=P1^1;
  8. sbit IN3=P1^2;
  9. sbit IN4=P1^3;

  10. unsigned int motor1=0;         //计左电机码盘脉冲值
  11. unsigned int motor2=0;         //计右电机码盘脉冲值

  12. void Forward(void)
  13. {
  14.         IN1=1;
  15.         IN2=0;
  16.         IN3=0;
  17.         IN4=1;
  18. }

  19. /*********************************************************************************************
  20. 外部中断INT0、INT1初始化函数
  21. /********************************************************************************************/
  22. void INT_init (void)
  23. {
  24.         EA = 1;                        //中断总开关  
  25.         EX0 = 1;                 //允许外部中断0中断
  26.         IT0 = 1;                 //1:下沿触发  0:低电平触发
  27.         EX1 = 1;
  28.         IT1        = 1;
  29. }

  30. /*********************************************************************************************
  31. 主程序
  32. /********************************************************************************************/
  33. void main(void)
  34. {               
  35.         LCD1602_Init();
  36.         LCD1602_Frist();
  37.         INT_init();
  38.         Forward();
  39.         while (1)
  40.         {
  41.                 print(line_one,1,'M');
  42.                 print(line_one,2,'o');
  43.                 print(line_one,3,'t');
  44.                 print(line_one,4,'o');
  45.                 print(line_one,5,'r');
  46.                 print(line_one,6,'1');
  47.                 print(line_one,7,':');
  48.                 print(line_one,8,motor1/1000+0x30);
  49.                 print(line_one,9,motor1/100%10+0x30);
  50.                 print(line_one,10,motor1/10%10+0x30);
  51.                 print(line_one,11,motor1%10+0x30);
  52.                 print(line_one,12,'C');
  53.                 print(line_one,13,'M');

  54.                 print(line_two,1,'M');
  55.                 print(line_two,2,'o');
  56.                 print(line_two,3,'t');
  57.                 print(line_two,4,'o');
  58.                 print(line_two,5,'r');
  59.                 print(line_two,6,'2');
  60.                 print(line_two,7,':');
  61.                 print(line_two,8,motor2/1000+0x30);
  62.                 print(line_two,9,motor2/100%10+0x30);
  63.                 print(line_two,10,motor2/10%10+0x30);
  64.                 print(line_two,11,motor2%10+0x30);
  65.                 print(line_two,12,'C');
  66.                 print(line_two,13,'M');
  67.                 DELAY_MS(250);
  68.                 LCD1602_WriteCMD(CMD_clear);
  69.                 }
  70. }

  71. /*********************************************************************************************
  72. 外部中断INT0计算电机1的脉冲
  73. /********************************************************************************************/
  74. void intersvr1(void) interrupt 0 using 1
  75. {
  76.         motor1++;        
  77.         if(motor1>=9999)
  78.                 motor1=0;        
  79. }
  80. /*********************************************************************************************
  81. 外部中断INT1计算电机2的脉冲
  82. /********************************************************************************************/
  83. void intersvr2(void) interrupt 2 using 3
  84. {
  85.         motor2++;
  86.         if(motor2>=9999)
  87.                 motor2=0;
  88. }
复制代码

智能小车测速模块+码盘计数+测速传感器模块+送测试程序.rar

1.97 MB, 下载次数: 138, 下载积分: 黑币 -5

51小车测速+码盘计数

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏7 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:927341 发表于 2021-7-31 11:47 | 只看该作者
测速用的是哪个模块
回复

使用道具 举报

板凳
ID:956087 发表于 2021-7-31 21:50 | 只看该作者
冯666 发表于 2021-7-31 11:47
测速用的是哪个模块

测速传感器模块  lm393

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:939423 发表于 2021-8-1 10:54 | 只看该作者
那小车的速度能控制吗?
用什么控制的?
小车的转向速度也不一样?也能控制吗?
小车的方向能改变吗?用什么设备来控制?
回复

使用道具 举报

5#
ID:514158 发表于 2022-8-9 19:01 | 只看该作者
lhpsnd 发表于 2021-8-1 10:54
那小车的速度能控制吗?
用什么控制的?
小车的转向速度也不一样?也能控制吗?

PWM
红外遥控,自动行驶是避障模块和超声波模块
回复

使用道具 举报

6#
ID:1042050 发表于 2022-8-14 10:22 | 只看该作者
码盘是光电的吗
回复

使用道具 举报

7#
ID:1042050 发表于 2022-8-15 10:42 | 只看该作者
可以仿真吗?
回复

使用道具 举报

8#
ID:260819 发表于 2022-8-19 12:57 | 只看该作者
正做这个项目,,参考了,谢谢
回复

使用道具 举报

9#
ID:260656 发表于 2022-10-18 00:00 | 只看该作者
向高手学习,虽然还好多还不懂。。。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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