標(biāo)題: GP2D12傳感器,來進(jìn)行激光,紅外線測距仿真 含單片機(jī)數(shù)模轉(zhuǎn)換程序 [打印本頁]

作者: heicad    時(shí)間: 2016-8-15 13:53
標(biāo)題: GP2D12傳感器,來進(jìn)行激光,紅外線測距仿真 含單片機(jī)數(shù)模轉(zhuǎn)換程序
本帖最后由 heicad 于 2016-8-15 13:55 編輯

用GP2D12傳感器,來進(jìn)行激光,紅外線測距,用51單片機(jī),ADC0809進(jìn)行數(shù)模轉(zhuǎn)換

自己親手做的,親測可用.

附:PROTEUS仿真電路文件,KEIL C 語言源代碼,
  1. #include <reg52.h>
  2. #include <intrins.h> //包含NOP空指令函數(shù)_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};//數(shù)碼管共陰級(jí)顯示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;           // 讀忙信號(hào)
  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;//啟動(dòng)
  156.   delaynms(1);
  157.   while(!eoc);           //eoc等于零的話,在這里等待直到eoc=1,結(jié)束循環(huán),向下執(zhí)行
  158.   oe=1;
  159.   out=P1;
  160.   oe=0;
  161. }


復(fù)制代碼





adc0809 1602YL可用版01.zip

99.36 KB, 下載次數(shù): 368, 下載積分: 黑幣 -5


作者: 1560233113    時(shí)間: 2016-12-14 08:54
很想要呀
作者: 陳建圩    時(shí)間: 2016-12-14 16:28
非常實(shí)用哦,謝謝
作者: zqy181818    時(shí)間: 2017-3-29 23:05
實(shí)用,感謝你的分享
作者: 趙鐸    時(shí)間: 2017-3-30 11:48
大神,有問題啊
作者: 2592174953    時(shí)間: 2017-7-1 17:16
用紅外測會(huì)動(dòng)的小球怎么破?

作者: cjjcjj1    時(shí)間: 2017-7-1 17:38
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
作者: bingo大幅度    時(shí)間: 2017-7-29 21:26
正好學(xué)習(xí)要用
作者: zui123    時(shí)間: 2017-9-12 10:10
66666666666利害了
作者: zui123    時(shí)間: 2017-9-12 10:11
厲害了我的歌 給個(gè)通過
作者: duanxin    時(shí)間: 2017-9-27 14:55
本帖最后由 duanxin 于 2017-9-27 19:24 編輯

可以加入報(bào)警模塊嗎?而且有警告,怎么修改呀,說的什么邏輯沖突
作者: Philoming    時(shí)間: 2018-4-22 20:35

本帖最后由 duanxin 于 2017-9-27 19:24 編輯


可以加入報(bào)警模塊嗎?
作者: okk醬    時(shí)間: 2018-5-23 16:58
Philoming 發(fā)表于 2018-4-22 20:35
本帖最后由 duanxin 于 2017-9-27 19:24 編輯

你也是做激光防撞報(bào)警系統(tǒng)的畢設(shè)嘛,感覺和我想問的一樣耶
作者: lhe    時(shí)間: 2018-6-2 20:23
為什么資料里的adc0809和proteus里的不一樣
作者: zxj0709    時(shí)間: 2018-6-10 19:45
學(xué)校正在學(xué)習(xí)單片機(jī) 正好用的到 謝謝樓主分享
作者: 沒人性    時(shí)間: 2018-8-20 19:17
謝謝 樓主 分享 樓主NB
作者: xiaosusama    時(shí)間: 2018-9-19 09:46
正需要,借鑒一下
作者: 錢錢錢強(qiáng)強(qiáng)    時(shí)間: 2018-10-20 16:08
zqy181818 發(fā)表于 2017-3-29 23:05
實(shí)用,感謝你的分享

有32單片機(jī)的嗎
作者: cucucun    時(shí)間: 2019-3-16 09:51
小白來學(xué)習(xí)學(xué)習(xí)了
作者: 175的大V    時(shí)間: 2019-4-10 00:49
謝謝分享謝謝分享
作者: 153227095    時(shí)間: 2019-4-11 14:22
謝謝樓主分享,樓主辛苦了
作者: wyk554    時(shí)間: 2019-5-1 15:22
非常感謝
作者: 天翊    時(shí)間: 2019-5-1 20:44
樓主,我怎么仿真不出數(shù)據(jù)?
作者: 小周周zxz    時(shí)間: 2019-5-18 15:48
很實(shí)用呀
作者: prettygirl    時(shí)間: 2019-7-7 11:03
三個(gè)測距的話是不是就可以直接三遍重復(fù)一下
作者: life_陽子    時(shí)間: 2019-11-26 10:40
液晶顯示的數(shù)據(jù)和GP2D12的數(shù)據(jù)不一樣啊
作者: 嘿,波西    時(shí)間: 2019-12-11 10:13
有文件嗎
作者: baixiaosheng    時(shí)間: 2019-12-11 12:07
感謝大佬分享
作者: BC-Adas    時(shí)間: 2019-12-18 10:51
文件可以用嗎?
作者: 584053658    時(shí)間: 2020-3-29 21:14
液晶顯示器顯示的是什么

作者: 妾?jiǎng)窬寄?nbsp;   時(shí)間: 2020-4-6 20:08
這個(gè)顯示的是電壓值吧
作者: qinjin    時(shí)間: 2020-4-7 20:59
謝謝分享
作者: aktuan007    時(shí)間: 2020-4-23 22:28
樓主厲害,向你學(xué)習(xí)
作者: chest    時(shí)間: 2020-5-14 17:33
???這不就是把傳感器的輸出電壓顯示在液晶屏上嗎???
作者: jhy1396    時(shí)間: 2020-6-4 16:49
怎么打開啊

作者: ymq124    時(shí)間: 2022-4-28 18:15
這個(gè)要怎么調(diào)試,一打開顯示066,然后LCD就不顯示數(shù)值了




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1