找回密码
 立即注册

QQ登录

只需一步,快速开始

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

GP2D12红外模块测量距离

[复制链接]
跳转到指定楼层
楼主
ID:166237 发表于 2017-2-23 19:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大神,我想问一下如何利用单片机实现GP2D12红外模块测量距离,并且利用数码管显示出距离
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:166229 发表于 2017-2-23 19:08 | 只看该作者
keil软件编写程序然后生成hex文件,可以用PROTUES先进行仿真
回复

使用道具 举报

板凳
ID:166237 发表于 2017-2-23 21:16 | 只看该作者
彬彬有你 发表于 2017-2-23 19:08
keil软件编写程序然后生成hex文件,可以用PROTUES先进行仿真

不知道怎么编程,不知道GP2D12红外模块的时序图这些,找了很久都没找到
回复

使用道具 举报

地板
ID:155507 发表于 2017-2-23 22:14 | 只看该作者
GP2D12 红外线测距输出是模拟信号,要输入到单片机就需要经过模数(AD)转换,可以考虑加AD转换芯片,当然有些单片机本身是有模拟输入口的,由内部进行AD转换。

看看网上找到的这个能用不?

  1. #include"reg52.h"
  2. #include<intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. sbit cs = P3^2;
  6. long int read=0;
  7. sbit wela = P2^7;
  8. sbit dula = P2^6;
  9. sbit lcden=P3^4;
  10. sbit lcdrs=P3^5;
  11. uchar bai,shi,ge,num;
  12. uchar table[] ="123456789";
  13. void delayms(uint z)
  14. {
  15.         uint x,y;
  16.         for(x=z;x>0;x--)
  17.         for(y=110;y>0;y-- );
  18. }
  19. void write_com(uchar com)
  20. {        
  21.         lcdrs=0;
  22.         P0=com;
  23.         delayms(5);
  24.         lcden=1;
  25.         delayms(5);
  26.         lcden=0;
  27. }
  28. void write_data(uchar date)
  29. {
  30.         lcdrs=1;
  31.         P0=date;
  32.         delayms(5);
  33.         lcden=1;
  34.         delayms(5);
  35.         lcden=0;
  36. }
  37. void init()
  38. {
  39.         dula=0;
  40.         wela=0;
  41.         lcden=0;
  42.         write_com(0x38);
  43.         write_com(0x0c);
  44.         write_com(0x06);
  45.         write_com(0x01);
  46. }
  47. void delay(uint a)           //  a 个1us延时
  48. {
  49.         for(;a > 0;a --)
  50.         _nop_();_nop_();
  51. }
  52. void T0_time() interrupt 1
  53. {
  54.         cs = 0;
  55.         RD = 0;
  56.         read = P1;
  57.         INT0 = 1;
  58. }
  59. uint adc0804()
  60. {
  61.         TMOD=0X01;
  62.         TH0=(65536-45872)/256;
  63.         TL0=(65536-45872)/256;
  64.         EA=1;
  65.         ET0=1;
  66.         TR0=1;
  67.         INT0 = 1;
  68.         cs = 0;
  69.         WR = 0;
  70.         delay(255);
  71.         cs = 1;
  72.         WR = 1;
  73.         delay(200);               
  74.         read = read * 196 /100;
  75.         return read;
  76.        
  77. }
  78. void math(uint x)
  79. {
  80.         bai = x / 100;
  81.         shi = x /10 % 10;
  82.         ge = x % 10;
  83. }
  84. void display()
  85. {         
  86.                
  87.                 math(adc0804());
  88.                
  89.                 dula=1;
  90.                 P0 = table[bai+10];
  91.                 dula=0;
  92.                 P0=0xff;
  93.                 wela = 1;
  94.                 P0 = 0xfe;
  95.                 wela=0;
  96.                 delay(7000000);
  97.                                
  98.                 dula=1;
  99.                 P0 = table[shi];
  100.                 dula=0;
  101.                 P0=0xff;
  102.                 wela = 1;
  103.                 P0 = 0xfd;
  104.                 wela=0;
  105.                 delay(7000000);
  106.                                
  107.                 dula=1;
  108.                 P0 = table[ge];
  109.                 dula=0;
  110.                 P0=0xff;
  111.                 wela = 1;
  112.                 P0 = 0xfb;
  113.                 wela=0;
  114.                 delay(7000000);
  115.                
  116. }

  117. void main()
  118. {
  119.         cs=0;
  120.         init();           

  121.         while(1)
  122.         {
  123.                
  124.                 math(adc0804());
  125.                
  126.                 write_com(0x80+5);
  127.                
  128.                 write_data(table[bai]);
  129.                 write_data(table[shi]);
  130.                 write_data(table[ge]);
  131.                 delayms(500);
  132.                
  133.         }       
  134. }
复制代码
回复

使用道具 举报

5#
ID:123289 发表于 2017-2-23 23:16 | 只看该作者
单片机、GP2D12红外模块、数码管,研读这三样东西的规格书,而后再动手。
回复

使用道具 举报

6#
ID:166237 发表于 2017-2-24 19:43 | 只看该作者
angmall 发表于 2017-2-23 22:14
GP2D12 红外线测距输出是模拟信号,要输入到单片机就需要经过模数(AD)转换,可以考虑加AD转换芯片,当然有 ...

谢谢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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