找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 17338|回复: 12
收起左侧

GP2D12红外测距传感器 单片机程序及PROTEUS仿真 实测可用

  [复制链接]
ID:262 发表于 2016-8-15 13:44 | 显示全部楼层 |阅读模式
GP2D12红外测距传感器的PROTEUS仿真原理图如下:
0.png

QQ图片20130612140336.jpg QQ图片20130612140346.jpg QQ图片20130612140349.jpg


GP2D12红外测距传感器的单片机程序:
  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.    */

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


  122.                    while(1)
  123.                 {
  124.                

  125.             math(adc0804());
  126.                

  127.                 write_com(0x80+5);
  128.         
  129.                 write_data(table[bai]);
  130.                 write_data(table[shi]);
  131.                 write_data(table[ge]);
  132.                         delayms(500);
  133.                
  134.                 }
  135.         
  136. }
复制代码

0.png

注意仿真工程只能用Proteus7.5这个版本,其他版本均无法仿真,必须要Proteus7.5才能用,如果你没有安装此版本的话就不必下载了
Keil代码与Proteus7.5仿真下载: GP2D12仿真文件.zip (165.48 KB, 下载次数: 415)

评分

参与人数 1黑币 +5 收起 理由
zzwk123456 + 5 很给力!

查看全部评分

回复

使用道具 举报

ID:262 发表于 2021-12-24 04:42 | 显示全部楼层
李12117 发表于 2017-5-3 23:02
仿真时说没找到gp2d12这个元件怎么办?

楼主说了,这个文件只能用Proteus7.5打开才可以,其他版本都仿真,我测试也是这样的,其他版本打开 1602都是无显示,下图是用Proteus7.5打开的效果
51hei.gif
回复

使用道具 举报

ID:196291 发表于 2017-5-3 23:02 | 显示全部楼层
仿真时说没找到gp2d12这个元件怎么办?
回复

使用道具 举报

ID:223290 发表于 2017-8-22 10:06 | 显示全部楼层
仿真上LCD1602显示的167是1.67V,GP2D12显示的54是54cm吗?
回复

使用道具 举报

ID:240017 发表于 2017-10-16 19:40 来自手机 | 显示全部楼层
好资料,51黑有你更精彩!!!
回复

使用道具 举报

ID:196311 发表于 2017-10-19 09:58 | 显示全部楼层
下载学习,谢谢分享
回复

使用道具 举报

ID:310742 发表于 2018-4-18 11:31 | 显示全部楼层
学习了,谢谢分享
回复

使用道具 举报

ID:269851 发表于 2018-12-17 19:57 | 显示全部楼层
学习了,谢谢分享
回复

使用道具 举报

ID:352562 发表于 2019-6-21 22:46 | 显示全部楼层
学习学习
回复

使用道具 举报

ID:625195 发表于 2019-10-16 18:32 来自手机 | 显示全部楼层
红外测距传感器与STC89C52怎么链接
回复

使用道具 举报

ID:643554 发表于 2019-11-18 09:18 来自手机 | 显示全部楼层
怎么进行操作,数码管灯不亮
回复

使用道具 举报

ID:987987 发表于 2021-12-9 11:19 | 显示全部楼层
你好,我下载了你的GP2D12仿真文件,怎么不能仿真啊,是因为没有lcd的程序文件吗?
回复

使用道具 举报

ID:262 发表于 2021-12-24 04:47 | 显示全部楼层
小叔叔 发表于 2019-11-18 09:18
怎么进行操作,数码管灯不亮

这个是用LCD1602来显示的
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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