标题: GP2D12传感器,来进行激光,红外线测距仿真 含单片机数模转换程序 [打印本页]

作者: heicad    时间: 2016-8-15 13:53
标题: GP2D12传感器,来进行激光,红外线测距仿真 含单片机数模转换程序
本帖最后由 heicad 于 2016-8-15 13:55 编辑

用GP2D12传感器,来进行激光,红外线测距,用51单片机,ADC0809进行数模转换

自己亲手做的,亲测可用.

附:PROTEUS仿真电路文件,KEIL C 语言源代码,
  1. #include <reg52.h>
  2. #include <intrins.h> //包含NOP空指令函数_nop_
  3. #include<stdio.h>
  4. typedef unsigned char BYTE;
  5. typedef unsigned int WORD;
  6. typedef bit BOOL;

  7. #define uchar unsigned char
  8. #define uint  unsigned int

  9. sbit eoc=P3^0;
  10. sbit oe =P3^1;
  11. sbit st =P3^2;

  12. sbit clk=P3^6;

  13. sbit rs=P0^7;
  14. sbit rw=P0^6;
  15. sbit ep=P0^5;

  16. uchar code table[]="0123456789";


  17. uchar code tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x0,0x0};//数码管共阴级显示0~9

  18. uint ad_0809,a1,a2,a3;
  19. uchar out;



  20. void delaynms(uint x);
  21. void display();
  22. void ad0809();


  23. void delayms(uint x)
  24. {
  25.         uint i,j;
  26.         for(i=x;i>0;i--)
  27.                 for(j=110;j>0;j--);
  28. }

  29. void delay (int m)
  30. {
  31. unsigned char i,j;
  32. for (i=0;i<m;i++)
  33. for (j=0;j<253;j++);
  34. }

  35. BOOL lcd_bz()
  36. {
  37.   BOOL result;
  38.   rs=0;           // 读忙信号
  39.   rw=1;
  40.   ep=1;
  41.   _nop_();
  42.   _nop_();
  43.   _nop_();
  44.   _nop_();
  45.   result = (BOOL)(P2&0x80);
  46.   ep=0;
  47.   result ;
  48. }

  49. lcd_wcmd (BYTE cmd)
  50. {
  51.   while (lcd_bz());
  52.   rs=0;
  53.   rw=0;
  54.   ep=0;
  55.   _nop_();
  56.   _nop_();
  57.   P2=cmd ;
  58.   _nop_();
  59.   _nop_();
  60.   _nop_();
  61.   _nop_();
  62.   ep=1;
  63.   _nop_();
  64.   _nop_();
  65.   _nop_();
  66.   _nop_();
  67.   ep=0;
  68. }

  69. lcd_pos (BYTE pos)
  70. {
  71.   lcd_wcmd (pos|0x80);
  72. }

  73. lcd_wdat (BYTE dat)
  74. {
  75.    while (lcd_bz());
  76.   rs=1;
  77.   rw=0;
  78.   ep=0;
  79.   _nop_();
  80.   _nop_();
  81.   P2=dat ;
  82.   _nop_();
  83.   _nop_();
  84.   _nop_();
  85.   _nop_();
  86.   ep=1;
  87.   _nop_();
  88.   _nop_();
  89.   _nop_();
  90.   _nop_();
  91.   ep=0;
  92. }

  93. lcd_init ()
  94. {
  95.   lcd_wcmd (0x38);
  96.   delay (1);
  97.   lcd_wcmd (0x0c);
  98.   delay (1);
  99.   lcd_wcmd (0x06);
  100.   delay (1);
  101.   lcd_wcmd (0x01);
  102.   delay (1);
  103. }

  104. void main()
  105. {
  106.   lcd_init ();
  107.   delay (10);

  108.                    
  109. TMOD=0X01;
  110. TH0=(65536-2)/256;
  111. TL0=(65536-2)%256;
  112. EA=1;
  113. ET0=1;
  114. TR0=1;

  115. while(1)
  116. {
  117.   ad0809();
  118.   ad_0809=out;
  119.   display();

  120.     lcd_pos (7);
  121.   lcd_wdat(table[a1]);

  122.    lcd_pos (8);
  123. lcd_wdat(table[a2]);

  124.     lcd_pos (9);
  125. lcd_wdat(table[a3]);



  126.   }
  127. }

  128. void T0_time()interrupt 1
  129. {
  130. TH0=(65536-2)/256;
  131. TL0=(65536-2)%256;
  132. clk=~clk;

  133. }

  134. void delaynms(uint x)       
  135. {
  136. while(x-->0)
  137.        
  138.         {
  139.           unsigned char k;
  140.           for(k=10;k>0;k--);
  141.         }
  142. }


  143. void display()
  144. {
  145.   a1=(ad_0809*49/25)/100;  //the highest bit
  146.   a2=(ad_0809*49/25)/10%10;
  147.   a3=(ad_0809*49/25)%100%10;
  148. }



  149. void ad0809()
  150. {

  151.   P1=0xff;//input
  152.   oe=0;
  153.   st=0;
  154.   st=1;//清0
  155.   st=0;//启动
  156.   delaynms(1);
  157.   while(!eoc);           //eoc等于零的话,在这里等待直到eoc=1,结束循环,向下执行
  158.   oe=1;
  159.   out=P1;
  160.   oe=0;
  161. }


复制代码





adc0809 1602YL可用版01.zip

99.36 KB, 下载次数: 368, 下载积分: 黑币 -5


作者: 1560233113    时间: 2016-12-14 08:54
很想要呀
作者: 陈建圩    时间: 2016-12-14 16:28
非常实用哦,谢谢
作者: zqy181818    时间: 2017-3-29 23:05
实用,感谢你的分享
作者: 赵铎    时间: 2017-3-30 11:48
大神,有问题啊
作者: 2592174953    时间: 2017-7-1 17:16
用红外测会动的小球怎么破?

作者: cjjcjj1    时间: 2017-7-1 17:38
提示: 作者被禁止或删除 内容自动屏蔽
作者: bingo大幅度    时间: 2017-7-29 21:26
正好学习要用
作者: zui123    时间: 2017-9-12 10:10
66666666666利害了
作者: zui123    时间: 2017-9-12 10:11
厉害了我的歌 给个通过
作者: duanxin    时间: 2017-9-27 14:55
本帖最后由 duanxin 于 2017-9-27 19:24 编辑

可以加入报警模块吗?而且有警告,怎么修改呀,说的什么逻辑冲突
作者: Philoming    时间: 2018-4-22 20:35

本帖最后由 duanxin 于 2017-9-27 19:24 编辑


可以加入报警模块吗?
作者: okk酱    时间: 2018-5-23 16:58
Philoming 发表于 2018-4-22 20:35
本帖最后由 duanxin 于 2017-9-27 19:24 编辑

你也是做激光防撞报警系统的毕设嘛,感觉和我想问的一样耶
作者: lhe    时间: 2018-6-2 20:23
为什么资料里的adc0809和proteus里的不一样
作者: zxj0709    时间: 2018-6-10 19:45
学校正在学习单片机 正好用的到 谢谢楼主分享
作者: 没人性    时间: 2018-8-20 19:17
谢谢 楼主 分享 楼主NB
作者: xiaosusama    时间: 2018-9-19 09:46
正需要,借鉴一下
作者: 钱钱钱强强    时间: 2018-10-20 16:08
zqy181818 发表于 2017-3-29 23:05
实用,感谢你的分享

有32单片机的吗
作者: cucucun    时间: 2019-3-16 09:51
小白来学习学习了
作者: 175的大V    时间: 2019-4-10 00:49
谢谢分享谢谢分享
作者: 153227095    时间: 2019-4-11 14:22
谢谢楼主分享,楼主辛苦了
作者: wyk554    时间: 2019-5-1 15:22
非常感谢
作者: 天翊    时间: 2019-5-1 20:44
楼主,我怎么仿真不出数据啊?
作者: 小周周zxz    时间: 2019-5-18 15:48
很实用呀
作者: prettygirl    时间: 2019-7-7 11:03
三个测距的话是不是就可以直接三遍重复一下
作者: life_阳子    时间: 2019-11-26 10:40
液晶显示的数据和GP2D12的数据不一样啊
作者: 嘿,波西    时间: 2019-12-11 10:13
有文件吗
作者: baixiaosheng    时间: 2019-12-11 12:07
感谢大佬分享
作者: BC-Adas    时间: 2019-12-18 10:51
文件可以用吗?
作者: 584053658    时间: 2020-3-29 21:14
液晶显示器显示的是什么

作者: 妾劝君丶莫笑    时间: 2020-4-6 20:08
这个显示的是电压值吧
作者: qinjin    时间: 2020-4-7 20:59
谢谢分享
作者: aktuan007    时间: 2020-4-23 22:28
楼主厉害,向你学习
作者: chest    时间: 2020-5-14 17:33
???这不就是把传感器的输出电压显示在液晶屏上吗???
作者: jhy1396    时间: 2020-6-4 16:49
怎么打开啊

作者: ymq124    时间: 2022-4-28 18:15
这个要怎么调试,一打开显示066,然后LCD就不显示数值了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1