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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 10727|回復(fù): 16
打印 上一主題 下一主題
收起左側(cè)

超聲波測(cè)距+溫度+報(bào)警的單片機(jī)代碼

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:419294 發(fā)表于 2018-11-22 18:53 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
可以測(cè)當(dāng)前距離,當(dāng)超過(guò)閾值距離時(shí),蜂蜜器報(bào)警,并且實(shí)時(shí)顯示溫度數(shù)據(jù)

制作出來(lái)的實(shí)物圖如下:


單片機(jī)源程序如下:
  1. #include<reg52.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. int num=0;
  6. unsigned char table[]={"0123456789"};//顯示的數(shù)值
  7. //   1602的引腳定義
  8. sbit RW=P2^5;
  9. sbit RS=P2^6;  
  10. sbit E=P2^7;   

  11. //報(bào)警引腳定義
  12. sbit feng=P2^4;
  13. sbit led=P1^2;

  14. sbit key1=P1^0;
  15. sbit key2=P1^1;

  16. int numm=0,nnum=0;

  17. void delayms(unsigned int ms)
  18. {
  19.         unsigned char i=100,j;
  20.         for(;ms;ms--)
  21.         {
  22.                 while(--i)
  23.                 {
  24.                         j=10;
  25.                         while(--j);
  26.                 }
  27.         }
  28. }

  29. bit flag;           //溫度變量
  30. uint temp;
  31. sbit ds=P1^3;  //溫度引腳

  32. //超聲波位定義
  33. sbit Trig = P2^1;
  34. sbit Echo = P2^0;
  35. uint time=0;
  36. unsigned long S=0;
  37. bit flagg=0;

  38. void delay2(uchar p)
  39.         {
  40.           uchar l,k;
  41.            for(l=p;l>0;l--)
  42.               for(k=110;k>0;k--);
  43.         }

  44. void delay(uchar z)
  45. {
  46.     while(z--);
  47. }

  48. //溫度初始化函數(shù)                        
  49. void ds_reste()         
  50. {
  51.         ds=1;
  52.         delay(5);
  53.         ds=0;
  54.         delay(80);
  55.         ds=1;
  56.         delay(14);
  57.         if(ds==0)                 //判斷ds總線被拉低
  58.         flag=1;
  59.         else
  60.         flag=0;
  61.         delay(20);
  62. }

  63. //讀一位字節(jié)
  64. bit ds_read_byte()        
  65. {
  66.          bit dat;
  67.          ds=0;               
  68.          _nop_();
  69.          _nop_();
  70.          ds=1;
  71.          _nop_();
  72.          dat=ds;         
  73.          delay(10);
  74.          return dat;
  75. }

  76. //讀一位字節(jié)
  77. uchar ds_read()        
  78. {
  79.         uchar i,j,k;
  80.       for(i=0;i<8;i++)
  81.         {
  82.         j=ds_read_byte();
  83.         k=(j<<7)|(k>>1);
  84.         }
  85.          return k;
  86. }

  87. //寫入數(shù)據(jù)
  88. void ds_write(uchar dat)
  89. {
  90.          uchar i;
  91.          for(i=0;i<8;i++)
  92.     {
  93.          ds=0;
  94.          _nop_();
  95.          ds=dat&0x01;
  96.          delay(6);
  97.          ds=1;
  98.          dat=dat>>1;
  99.         }
  100.          delay(6);
  101. }

  102. //讀取溫度
  103. uint read_temp()         
  104. {
  105.         uchar a,b;
  106.         ds_reste();
  107.         ds_write(0xcc);
  108.         ds_write(0xbe);
  109.         a=ds_read();
  110.         b=ds_read();
  111.         temp=b;
  112.         temp=temp<<8;
  113.         temp=temp|a;
  114.         temp=temp*0.0625*10+0.5;                 
  115.         return temp;
  116. }

  117. //寫入命令1602
  118. void write_com(uchar com)           
  119. {
  120.         RS=0;
  121.         RW=0;
  122.         E=0;
  123.         P0=com;           
  124.         delay2(5);
  125.         E=1;
  126.         delay2(5);
  127.         E=0;
  128. }

  129. //寫入數(shù)據(jù) 1602
  130. void write_data(uchar date)        
  131. {
  132.         RS=1;
  133.         RW=0;
  134.         E=0;
  135.         P0=date;               
  136.         delay2(5);
  137.         E=1;
  138.         delay2(5);
  139.         E=0;
  140. }

  141. //1602初始化顯示
  142. void init()                                 
  143. {
  144.     RS=0;
  145.         write_com(0x38);
  146.          write_com(0x0c);
  147.          write_com(0x06);
  148.         write_com(0x01);
  149.         write_com(0x80);
  150. }

  151. //溫度在1602上顯示出來(lái)
  152. void display(uint tempp)           
  153. {  
  154.          write_com(0x80+0x0b);                        
  155.          write_data(table[tempp/100]);         
  156.          delay2(0);
  157.   
  158.          write_com(0x80+0x0c);
  159.          write_data(table[tempp%100/10]);           
  160.          delay2(0);        

  161.             write_com(0x80+0x0d);
  162.          write_data('.');                           
  163.          delay2(0);
  164.    
  165.             write_com(0x80+0x0e);
  166.          write_data(table[tempp%100%10]);
  167.          delay2(0);                                                         

  168.          write_com(0x80+0x0f);
  169.          write_data('C');                                    
  170.          delay2(0);

  171.          write_com(0x80+0x09);
  172.          write_data('T');                                    
  173.          delay2(0);

  174.          write_com(0x80+0x0a);
  175.          write_data(':');                                 
  176.          delay2(0);

  177. }

  178. //超聲波測(cè)距
  179. void Conut(void)
  180.         {  
  181.          time=TH0*256+TL0;
  182.          TH0=0;
  183.          TL0=0;
  184.          S=(time*1.7)/100+1;                //算出來(lái)測(cè)距值單位是CM
  185.          if((S>1000)||S<1||flagg==1)           //超出測(cè)量范圍顯示“***”
  186.          {         
  187.           flagg=0;
  188.           write_com(0x80+0x40);
  189.           write_data('c');                           
  190.           delay2(0);
  191.          
  192.           write_com(0x80+0x41);
  193.           write_data('j');                           
  194.           delay2(0);         

  195.           write_com(0x80+0x42);
  196.           write_data(':');                           
  197.           delay2(0);


  198.           write_com(0x80+0x43);
  199.           write_data('*');                           
  200.           delay2(0);

  201.           write_com(0x80+0x44);
  202.           write_data('*');                           
  203.           delay2(0);
  204.           write_com(0x80+0x45);
  205.           write_data('*');                           
  206.           delay2(0);

  207.           write_com(0x80+0x46);
  208.           write_data('M');                           
  209.           delay2(0);        //顯示M
  210.           write_com(0x80+0x47);
  211.           write_data('M');                           
  212.           delay2(0);        //顯示M
  213.          }
  214.       else
  215.          {
  216.            write_com(0x80+0x40);
  217.           write_data('c');                           
  218.           delay2(0);

  219.           write_com(0x80+0x41);
  220.           write_data('j');                           
  221.           delay2(0);

  222.           write_com(0x80+0x42);
  223.           write_data(':');                           
  224.           delay2(0);
  225.          
  226.           write_com(0x80+0x43);
  227.           write_data(table[S%1000/100]);                           
  228.           delay2(0);

  229.           write_com(0x80+0x44);
  230.           write_data(table[S%1000%100/10]);                           
  231.           delay2(0);

  232.           write_com(0x80+0x45);
  233.           write_data(table[S%1000%10 %10]);                           
  234.           delay2(0);

  235.           write_com(0x80+0x46);
  236.           write_data('C');                           
  237.           delay2(0);
  238.          
  239.           write_com(0x80+0x47);
  240.           write_data('M');                           
  241.           delay2(0);
  242.          }
  243.         }
  244. //顯示按鍵輸入的值
  245. void display1()
  246. {
  247.           write_com(0x80+0x00);
  248.           write_data('S');                           
  249.           delay2(0);

  250.           write_com(0x80+0x01);
  251.           write_data('z');                           
  252.           delay2(0);

  253.           write_com(0x80+0x02);
  254.           write_data(':');                           
  255.           delay2(0);            
  256.             
  257.           write_com(0x80+0x03);
  258.           write_data(table[num%1000/100]);                           
  259.           delay2(0);

  260.           write_com(0x80+0x04);
  261.           write_data(table[num%1000%100/10]);                           
  262.           delay2(0);

  263.           write_com(0x80+0x05);
  264.           write_data(table[num%1000%10 %10]);                           
  265.           delay2(0);

  266.           write_com(0x80+0x06);
  267.           write_data('C');                           
  268.           delay2(0);

  269.           write_com(0x80+0x07);
  270.           write_data('M');                           
  271.           delay2(0);
  272. }
  273. //按鍵控制
  274. void KEY()
  275. {
  276.    if(key1==0)
  277.    {
  278.              delay2(2);         
  279.           if(key1==0)
  280.           {         
  281.               num+=10;
  282.               if(num==1000)num=0;
  283.           }
  284.            while(!key1);
  285.            delay2(2);
  286.            while(!key1);
  287.    }

  288.       if(key2==0)
  289.    {
  290.              delay2(2);
  291.           if(key2==0)
  292.           {         
  293.              num-=10;
  294.              if(num==0)num=0;
  295.           }
  296.            while(!key2);
  297.            delay2(2);
  298.            while(!key2);
  299.    }
  300. }
  301. //蜂鳴器報(bào)警
  302. void BEEP()
  303. {
  304.    if(num<S)
  305.    {
  306.              feng=1;
  307.           led=1;
  308.           delay2(60);
  309.           feng=0;
  310.           led=0;
  311.           delay2(60);
  312.    }
  313.    else feng=0;
  314. }


  315. void  StartModule()          //啟動(dòng)模塊
  316.   {
  317.           Trig=1;         //啟動(dòng)一次模塊
  318.           _nop_(); _nop_(); _nop_();
  319.           _nop_(); _nop_(); _nop_();
  320.           _nop_(); _nop_(); _nop_();
  321.           _nop_(); _nop_(); _nop_();
  322.           _nop_(); _nop_(); _nop_();
  323.           _nop_(); _nop_(); _nop_();
  324.           _nop_(); _nop_(); _nop_();
  325.            
  326.           Trig=0;  
  327.          
  328.   }

  329. void tempchang(void)
  330. {
  331.            ds_reste();          //d8b20的初始化
  332.         delay2(1);
  333.         ds_write(0xcc);        //d8b20的數(shù)據(jù)
  334.         ds_write(0x44);        //d8b20的數(shù)據(jù)
  335. }

  336. void main()
  337. {        
  338.          feng=0;
  339.          led=0;
  340.          EA=1;
  341. //         IT0=1;
  342. //         EX0=1;         
  343.          TMOD=0x01;                   //設(shè)T0為方式1,GATE=1;
  344.          TH0=0;
  345.          TL0=0;
  346.          TR0=1;         
  347.          ET0=1;             //允許T0中斷
  348. //       TH1=(65536-5000)/256;
  349. //         TL1=(65536-5000)%256;
  350. //         TR1=1;         
  351. //         ET1=1;         
  352.          init();                          //1602的初始化                  
  353.      
  354.          while(1)
  355.          {
  356.              display1();        //顯示按鍵值                           
  357.              KEY();                         //按鍵         
  358.              BEEP();                //蜂鳴器
  359.                StartModule();
  360.              while(!Echo);          //當(dāng)RX為零時(shí)等待
  361.              TR0=1;                         //開啟計(jì)數(shù)
  362.              while(Echo);    //當(dāng)RX為1計(jì)數(shù)并等待
  363.              TR0=0;                     //關(guān)閉計(jì)數(shù)        
  364.              Conut();             //距離顯示
  365.               delayms(10);   
  366.              tempchang();    //溫度開始轉(zhuǎn)換
  367.              display(read_temp());//溫度顯示
  368. }         
  369. }
復(fù)制代碼

所有資料51hei提供下載:
超聲波測(cè)距及溫度.zip (1.06 MB, 下載次數(shù): 216)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏8 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:473159 發(fā)表于 2019-2-5 21:11 | 只看該作者
好的,收下了,謝謝!

評(píng)分

參與人數(shù) 3黑幣 +85 收起 理由
jinsheng7533967 + 35
Trump1438 + 15
shuisheng60 + 35

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

板凳
ID:576506 發(fā)表于 2019-7-8 09:12 | 只看該作者
yoxi 發(fā)表于 2019-2-5 21:11
好的,收下了,謝謝!

想要個(gè)原理圖,可以問(wèn)一下LED那里如何接線嗎
回復(fù)

使用道具 舉報(bào)

地板
ID:576506 發(fā)表于 2019-7-8 09:13 | 只看該作者
想要個(gè)原理圖。可以問(wèn)一下LED那里如何接線的嗎
回復(fù)

使用道具 舉報(bào)

5#
ID:282095 發(fā)表于 2019-7-8 09:39 | 只看該作者
超聲波和紅外測(cè)距系統(tǒng)
回復(fù)

使用道具 舉報(bào)

6#
ID:70932 發(fā)表于 2019-8-17 12:00 | 只看該作者
參考一下,找了好久
回復(fù)

使用道具 舉報(bào)

7#
ID:601374 發(fā)表于 2019-8-18 20:24 | 只看該作者
找到家的感覺,希望在這里找到互相交流的朋友。
回復(fù)

使用道具 舉報(bào)

8#
ID:602119 發(fā)表于 2019-8-22 22:21 | 只看該作者
請(qǐng)問(wèn)有仿真圖嘛。侵骺纯次
回復(fù)

使用道具 舉報(bào)

9#
ID:610634 發(fā)表于 2019-9-19 15:50 | 只看該作者
仿真圖呀,樓主
回復(fù)

使用道具 舉報(bào)

10#
ID:630001 發(fā)表于 2019-10-25 13:41 | 只看該作者
謝謝樓主
回復(fù)

使用道具 舉報(bào)

11#
ID:630958 發(fā)表于 2019-10-27 17:39 | 只看該作者
為什么我的Sz顯示0,T顯示5.9C
回復(fù)

使用道具 舉報(bào)

12#
ID:706569 發(fā)表于 2020-3-14 14:09 | 只看該作者
請(qǐng)問(wèn)有原理圖
回復(fù)

使用道具 舉報(bào)

13#
ID:413568 發(fā)表于 2020-5-8 10:46 | 只看該作者
這東西有問(wèn)題,用不了,仿真時(shí)顯示0
回復(fù)

使用道具 舉報(bào)

14#
ID:191844 發(fā)表于 2020-5-16 23:04 | 只看該作者
完全 正常 顯示0 是因?yàn)槟愕膫鞲衅鹘渝e(cuò)線了
回復(fù)

使用道具 舉報(bào)

15#
ID:785709 發(fā)表于 2020-6-22 10:22 | 只看該作者
大佬有沒有Proteus仿真啊
回復(fù)

使用道具 舉報(bào)

16#
ID:783878 發(fā)表于 2021-1-10 13:48 | 只看該作者
測(cè)距帶有溫度補(bǔ)償嗎
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品1区| 99亚洲精品| 欧美一区二区三区小说 | 欧美黄色大片在线观看 | 精品视频导航 | 国产欧美一区二区久久性色99 | 黄色av网站免费看 | 欧美日韩在线视频一区 | av一区二区在线观看 | 337p日本欧洲亚洲大胆精蜜臀 | 欧美一级二级三级视频 | 久操福利 | 91热爆在线观看 | 亚洲第1页| 在线色网 | 精品在线观看入口 | 成人精品国产免费网站 | 久久久入口 | 精品久久九九 | 国产精品1区2区3区 欧美 中文字幕 | 羞羞视频网站免费观看 | 美日韩视频 | 国产一区在线免费观看视频 | 亚洲精品www久久久久久广东 | 色婷婷在线视频 | 欧美99| 亚洲专区在线 | 亚洲一二三区精品 | 成人影院午夜 | 有码一区 | 成人国产在线视频 | 天天操天天摸天天爽 | 久久精品亚洲精品国产欧美 | 色综合色综合 | 成人亚洲视频 | 欧美日韩在线免费 | 久久成人精品一区二区三区 | 久久精品久久久久久 | 欧美不卡网站 | 日韩网站在线 | 欧美激情精品久久久久久变态 |