久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6589|回復: 2
收起左側

單片機智能垃圾桶程序設計 GP2D12紅外測距+MPX4115壓力傳感器 Proteus仿真原理圖

[復制鏈接]
ID:738602 發表于 2021-8-12 16:18 | 顯示全部樓層 |閱讀模式
1,智能垃圾桶測量當前壓力,達到一定壓力值報警提示清空垃圾桶,通過ADC0832模塊轉換模擬量轉換成數字量。

2,距離傳感器通過測量當前人與垃圾桶的距離當在一定距離打開垃圾桶蓋,通過這些作為智能垃圾桶的檢測部分,蜂鳴器還有提示燈充當輔助作用。

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png

電路原理圖如下:
51hei.png

智能垃圾桶的51單片機源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h> //包含NOP空指令函數_nop_
  3. #include <stdio.h>
  4. #include "LCD1602.h"

  5. #define uchar unsigned char
  6. #define uint  unsigned int


  7. //------------------------------ADC0808的引腳------------------------------
  8. sbit eoc=P3^0;
  9. sbit oe =P3^1;
  10. sbit st =P3^2;

  11. //------------------------------ADC0832的引腳------------------------------
  12. sbit ADCS =P2^3;  //ADC0832 chip seclect
  13. sbit ADDI =P2^5;  //ADC0832 k in
  14. sbit ADDO =P2^5;  //ADC0832 k out
  15. sbit ADCLK =P2^4;

  16. sbit GREEN =P3^3;
  17. sbit RED =P3^4;
  18. sbit LOUD =P2^6;
  19. sbit Motor=P3^7;


  20. void delaynms(uint x);
  21. void ad0808(void);
  22. void display(void);
  23. void Delay_ms(unsigned int n);
  24. unsigned int Adc0832(unsigned char channel);
  25. void Display_weight(void);
  26. void Tishi(void);

  27. uint ad_0809,a1,a2,a3;
  28. uchar out,out1,weight1;
  29. unsigned int weight2;
  30. uchar table[]="distance:   ";
  31. uchar table1[]="Weight:   . g";

  32. void main()
  33. {
  34.   Init_LCD1602();
  35.     RED=0;
  36.     GREEN=0;
  37. while(1)
  38. {
  39.   ad0808();
  40.     display();
  41.     Display_weight();
  42.      Tishi();
  43. }
  44. }

  45. //-------------------------------給ad8080延時函數------------------------------
  46. void delaynms(uint x)   
  47. {
  48. while(x-->0)
  49.     {
  50.       unsigned char k;
  51.       for(k=10;k>0;k--);
  52.     }
  53. }
  54. //-------------------------------給GP2D12進行模數轉換----------------------------

  55. void ad0808()
  56. {
  57.   P1=0xff;//input
  58.   st=0;
  59.     eoc=1;
  60.   oe=1;//停止-----------
  61.   st=1;//清0
  62.   st=0;//啟動
  63.   delaynms(1);
  64.   while(!eoc);       //eoc等于零的話,在這里等待直到eoc=1,結束循環,向下執行
  65.   oe=0;//啟動-----------
  66.   out=P1;
  67.   oe=0;
  68. }

  69. //------------------------------顯示距離函數----------------------------

  70. void display()
  71. {
  72.     int i;
  73.     out1=out*0.7-4;
  74.     ad_0809=90-out1;
  75.   a1=(ad_0809)/100;  //the highest bit
  76.     table[9]=a1+0x30;
  77.   a2=(ad_0809)/10%10;
  78.     table[10]=a2+0x30;
  79.   a3=(ad_0809)%100%10;
  80.     table[11]=a3+0x30;
  81.     LCD1602_write_com(0xc0);
  82.     for(i=0;i<12;i++)
  83.     {
  84.         LCD1602_write_data(table[i]);
  85.     }
  86. }

  87. //----------------MS延時函數(12M晶振下測試)--------------------------------

  88. void Delay_ms(unsigned int n)
  89. {
  90.     unsigned int  i,j;
  91.     for(i=0;i<n;i++)
  92.         for(j=0;j<123;j++);
  93. }

  94. //-------------------顯示物體重量-------------------------------

  95. void Display_weight(void)
  96. {
  97.   unsigned int i;
  98.   float  press;
  99.     weight1=Adc0832(0);
  100.      if(14<weight1<243)                           
  101.          {   
  102.         int    vary=weight1;
  103.             press=((10.0/23.0)*vary)+9.3;
  104.             weight2=(int)(press*10);     
  105.         }
  106.         table1[7]=(weight2/1000)+0x30;
  107.         table1[8]=(weight2%1000)/100+0x30;
  108.         table1[9]=((weight2%1000)%100)/10+0x30;
  109.         table1[11]=((weight2%1000)%100)%10+0x30;
  110.     LCD1602_write_com(0x80);
  111.     for(i=0;i<12;i++)
  112.     {
  113.         LCD1602_write_data(table1[i]);
  114.     }
  115.    
  116. }
  117. //--------------------采集并返回--------------------------------
  118. unsigned int Adc0832(unsigned char channel)     //AD轉換,返回結果
  119. {
  120.     unsigned char i=0;
  121.     unsigned char j;
  122.     unsigned int dat=0;
  123.     unsigned char ndat=0;

  124.     if(channel==0)channel=2;
  125.     if(channel==1)channel=3;
  126.     ADDI=1;
  127.     _nop_();
  128.     _nop_();
  129.     ADCS=0;//拉低CS端
  130.     _nop_();
  131.     _nop_();
  132.     ADCLK=1;//拉高CLK端
  133.     _nop_();
  134.     _nop_();
  135.     ADCLK=0;//拉低CLK端,形成下降沿1
  136.     _nop_();
  137.     _nop_();
  138.     ADCLK=1;//拉高CLK端
  139.     ADDI=channel&0x1;
  140.     _nop_();
  141.     _nop_();
  142.     ADCLK=0;//拉低CLK端,形成下降沿2
  143.     _nop_();
  144.     _nop_();
  145.     ADCLK=1;//拉高CLK端
  146.     ADDI=(channel>>1)&0x1;
  147.     _nop_();
  148.     _nop_();
  149.     ADCLK=0;//拉低CLK端,形成下降沿3
  150.     ADDI=1;//控制命令結束
  151.     _nop_();
  152.     _nop_();
  153.     dat=0;
  154.     for(i=0;i<8;i++)
  155.     {
  156.         dat|=ADDO;//收數據
  157.         ADCLK=1;
  158.         _nop_();
  159.         _nop_();
  160.         ADCLK=0;//形成一次時鐘脈沖
  161.         _nop_();
  162.         _nop_();
  163.         dat<<=1;
  164.         if(i==7)dat|=ADDO;
  165.     }  
  166.     for(i=0;i<8;i++)
  167.     {
  168.         j=0;
  169.         j=j|ADDO;//收數據
  170.         ADCLK=1;
  171.         _nop_();
  172.         _nop_();
  173.         ADCLK=0;//形成一次時鐘脈沖
  174.         _nop_();
  175.         _nop_();
  176.         j=j<<7;
  177.         ndat=ndat|j;
  178.         if(i<7)ndat>>=1;
  179.     }
  180.     ADCS=1;//拉低CS端
  181.     ADCLK=0;//拉低CLK端
  182.     ADDO=1;//拉高數據端,回到初始狀態
  183.     dat<<=8;
  184.     dat|=ndat;
  185.     return(dat);            //return ad k
  186. }

  187. //-----------------------------提升模塊
  188. void Tishi()
  189. {
  190.     if(weight2>=400)
  191.     {
  192.     RED=1;
  193.     LOUD=~LOUD;
  194.     Delay_ms(1);
  195.     }
  196.     else
  197.     {
  198.         RED=0;
  199.     }
  200.     if((table[10]-0X30)*10+(table[11]-0x30)<=15)
  201.     {
  202.         GREEN=1;   
  203.         Motor=1;            

  204.     }
  205.     else
  206.     {
  207.         
  208.         GREEN=0;
  209.         Motor=0;
  210.     }
  211. }

復制代碼
51hei.png

仿真代碼51hei附件下載,僅供參考,Proteus工程文件是7.5版本的:
完成.7z (175.73 KB, 下載次數: 212)

評分

參與人數 1黑幣 +80 收起 理由
admin + 80 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:247623 發表于 2021-12-16 10:10 | 顯示全部樓層
大家不要下載,這個程序不對的,紅外測距不能實現測距功能。
回復

使用道具 舉報

ID:980899 發表于 2021-12-22 16:39 | 顯示全部樓層
yilinghai 發表于 2021-12-16 10:10
大家不要下載,這個程序不對的,紅外測距不能實現測距功能。

老哥,這個測距你會弄嗎,能不能教一下
回復

使用道具 舉報

無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91精品久久久久久久久中文字幕 | 免费亚洲一区二区 | 欧美久久久网站 | 中文字幕一区二区三区四区五区 | 91免费在线| 一级片毛片 | 日本三级精品 | 欧美日韩中文在线 | 亚洲一区在线日韩在线深爱 | 国产成人精品免费视频 | 美女午夜影院 | 国产精品69毛片高清亚洲 | 久久久久国产一区二区三区四区 | 99re在线播放 | 玖玖免费| 成人一级毛片 | 少妇一区二区三区 | 日韩电影免费在线观看中文字幕 | 国产精品精品3d动漫 | 日韩视频一区在线观看 | 伊人电影院av | 狠狠综合久久av一区二区小说 | 神马福利 | 无人区国产成人久久三区 | 国产一区在线免费 | 一区网站| 日韩欧美精品 | 亚洲欧美中文日韩在线v日本 | 欧美精品一区三区 | 亚洲精品一区二区在线观看 | 亚洲视频在线看 | 羞羞的视频网站 | 久久久久久久久久久爱 | 国产中文字幕在线观看 | 久久精品国产精品青草 | 亚洲风情在线观看 | 精品一区二区三区四区 | 久草在线免费资源 | 综合久久综合久久 | 成人一区在线观看 | 少妇黄色 |