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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機(jī)三路超聲波測距源碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1024867 發(fā)表于 2022-5-8 19:18 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這三路超聲波測距的源代碼

單片機(jī)源程序如下:
  1. #include<reg52.h>
  2. #include <intrins.h>
  3. #include "LCD1602.h"
  4. #include "STCEEPROM.h"
  5. sbit  RX1 = P3^4;
  6. sbit  RX2 = P3^5;
  7. sbit  RX3 = P3^6;
  8. sbit  TX = P3^7;

  9. sbit LED = P2^1;
  10. sbit SPEAK = P2^0;

  11. sbit KEY1 = P1^3;
  12. sbit KEY2 = P1^4;
  13. sbit KEY3 = P1^5;

  14. sbit RST=P2^5; /*1腳*/
  15. sbit CS=P2^7; /*11*/
  16. sbit SCL=P2^3; /*10*/
  17. sbit SDA=P2^6; /*12*/
  18. sbit VBUSY=P2^4;          //忙等待
  19. void display(void);
  20. unsigned char en_flag=0;
  21. void delay100us(void) //100US延時子程序
  22. {  
  23.         unsigned char j;  
  24.         for(j=50;j>0;j--);
  25. }
  26. void delay1ms(unsigned char count) //1MS延時子程序
  27. {  
  28.         unsigned char i,j,k;
  29.         for(k=count;k>0;k--)  
  30.         for(i=2;i>0;i--)
  31.         for(j=248;j>0;j--);
  32. }  
  33. void Send_threelines(unsigned char addr) //三線發(fā)碼子程序  
  34. {
  35.         unsigned char i;  
  36.         RST=0;  
  37.         delay1ms(5);  
  38.         RST=1;  
  39.         delay1ms(17); /* 17ms*/

  40.         CS=0;  
  41.         delay1ms(2);  
  42.         for(i=0;i<8;i++)  
  43.         {SCL=0;  
  44.                 if(addr & 1)SDA=1;  
  45.                 else SDA=0;  
  46.                 addr>>=1;  
  47.                 delay100us(); /* 100us */  
  48.                 SCL=1;  
  49.                 delay100us();  
  50.         }  
  51.         CS=1;  
  52.         delay1ms(30);
  53.                 while(VBUSY == 0);          //忙等待
  54. }
  55. unsigned int  time=0;
  56. unsigned int  timer=0;
  57. unsigned int S=0,S1=0,S2=0,S3=0;
  58. unsigned int SET_H=100,SET_L=10;
  59. bit      flag =0;
  60. unsigned char Table[3]={0};
  61. unsigned char KEY_flag=0;
  62. //延時函數(shù)
  63. void Delay_ms(int jj)
  64. {
  65.         int ii;
  66.         while(jj--)
  67.                 for(ii=0;ii<116;ii++);
  68. }
  69. void Conut(void)
  70. {
  71.          time=TH0*256+TL0;
  72.          TH0=0;
  73.          TL0=0;
  74.         
  75.          S=(time*1.87)/100;     //算出來是CM
  76.          if((S>=700)||flag==1) //超出測量范圍顯示“-”
  77.          {         
  78.           flag=0;
  79.          }
  80. }
  81. void main(void)
  82. {
  83.     LCD1602_init();//液晶初始化
  84.         //////////////////////0123456789ABCDEF
  85.     LCD1602_Disp_ZF(0x80,"    :     :     ",16);
  86.                                                      //0123456789ABCDEF
  87.     LCD1602_Disp_ZF(0x80+0X40,"Set H:    L:    ",16);
  88.         TMOD=0x11;                   //設(shè)T0為方式1,GATE=1;
  89.         TH0=0;
  90.         TL0=0;         
  91.         TH1=0xf8;                   //2MS定時
  92.         TL1=0x30;
  93.         ET0=1;             //允許T0中斷
  94.         ET1=1;                           //允許T1中斷
  95.         TR1=1;                           //開啟定時器
  96.         EA=1;                           //開啟總中斷
  97.         EA=0;
  98.         SET_H = ISP_READ(0x2c00)*256+ISP_READ(0x2c01);
  99.         SET_L = ISP_READ(0x2c02)*256+ISP_READ(0x2c03);
  100.         EA=1;

  101.         while(1)
  102.         {
  103.                 while(!RX1);                    //當(dāng)RX為零時等待
  104.                 TR0=1;                            //開啟計數(shù)
  105.                 while(RX1);                        //當(dāng)RX為1計數(shù)并等待
  106.                 TR0=0;                                //關(guān)閉計數(shù)
  107.                 Conut();
  108.                 S1=S;
  109.                 Delay_ms(10);
  110.                 /////////////////////////////
  111.                 while(!RX2);                    //當(dāng)RX為零時等待
  112.                 TR0=1;                            //開啟計數(shù)
  113.                 while(RX2);                        //當(dāng)RX為1計數(shù)并等待
  114.                 TR0=0;                                //關(guān)閉計數(shù)
  115.                 Conut();
  116.                 S2=S;
  117.                 Delay_ms(10);
  118.                 /////////////////////////////
  119.                 while(!RX3);                    //當(dāng)RX為零時等待
  120.                 TR0=1;                            //開啟計數(shù)
  121.                 while(RX3);                        //當(dāng)RX為1計數(shù)并等待
  122.                 TR0=0;                                //關(guān)閉計數(shù)
  123.                 Conut();
  124.                 S3=S;
  125.                 Delay_ms(10);
  126.                 /////////////////////////////////////
  127.                 Table[0]= S1/100+0X30;
  128.                 Table[1]= S1%100/10+0X30;
  129.                 Table[2]= S1%10+0X30;
  130.                 LCD1602_Disp_ZF(0x80,Table,3);
  131.                 Table[0]= S2/100+0X30;
  132.                 Table[1]= S2%100/10+0X30;
  133.                 Table[2]= S2%10+0X30;
  134.                 LCD1602_Disp_ZF(0x86,Table,3);
  135.                 Table[0]= S3/100+0X30;
  136.                 Table[1]= S3%100/10+0X30;
  137.                 Table[2]= S3%10+0X30;
  138.                 LCD1602_Disp_ZF(0x8C,Table,3);
  139.                 /////////////////////////////////
  140.                 if((S1>SET_H||S1<SET_L)||(S2>SET_H||S2<SET_L)||(S3>SET_H||S3<SET_L))
  141.                 {
  142.                         P2 = 0X00;
  143.                
  144.                 }
  145.                 else
  146.                         P2 = 0XFF;        
  147.    if((S1<SET_L)||(S2<SET_L)||(S3<SET_L))
  148.                 {
  149.                         SPEAK=0;
  150.                 }
  151.                 else
  152.                         
  153.                         SPEAK=1;
  154. if((S1<SET_H&&S1>SET_L)||(S2<SET_H&&S2>SET_L)||(S3<SET_H&&S3>SET_L))
  155.                 {
  156.                                 Send_threelines(0);
  157.                
  158.                 }


  159.                
  160.                 if(!KEY1)
  161.                 {
  162.                         Delay_ms(10);
  163.                         if(!KEY1)
  164.                         {
  165.                                 KEY_flag++;        
  166.                                 ISP_ERASE(0x2c00);                //注意:字節(jié)編程時必須要先要擦除整個扇區(qū)        
  167.                                 ISP_PROGRAM(0x2c00, SET_H/256);
  168.                                 ISP_PROGRAM(0x2c01, SET_H);
  169.                                 ISP_PROGRAM(0x2c02, SET_L/256);
  170.                                 ISP_PROGRAM(0x2c03, SET_L);
  171.                         }
  172.                         while(!KEY1);
  173.                 }
  174.                 if(!KEY2)
  175.                 {
  176.                         Delay_ms(10);
  177.                         if(!KEY2)
  178.                         {
  179.                                 if(KEY_flag%2==0)SET_H++;
  180.                                 if(KEY_flag%2==1)SET_L++;
  181.                         }
  182.                 }
  183.                 if(!KEY3)
  184.                 {
  185.                         Delay_ms(10);
  186.                         if(!KEY3)
  187.                         {
  188.                                 if(KEY_flag%2==0)SET_H--;
  189.                                 if(KEY_flag%2==1)SET_L--;
  190.                         }
  191.                 }
  192.           Table[0]= SET_H/100+0X30;
  193.           Table[1]= SET_H%100/10+0X30;
  194.           Table[2]= SET_H%10+0X30;
  195.           LCD1602_Disp_ZF(0x86+0x40,Table,3);
  196.           Table[0]= SET_L/100+0X30;
  197.           Table[1]= SET_L%100/10+0X30;
  198.           Table[2]= SET_L%10+0X30;
  199.           LCD1602_Disp_ZF(0x8C+0x40,Table,3);
  200.         }
  201. }

  202. /********************************************************/
  203.      void zd0() interrupt 1                  //T0中斷用來計數(shù)器溢出,超過測距范圍
  204.   {
  205.     flag=1;                                                         //中斷溢出標(biāo)志
  206.   }
  207. /********************************************************/
  208.    void  zd3()  interrupt 3         
  209.   {
  210.          TH1=0xf8;
  211.          TL1=0x30;
  212.          timer++;
  213.          if(timer>=100)
  214.          {
  215.           timer=0;
  216.           TX=1;                                        //200MS  啟動一次模塊
  217.           _nop_(); _nop_(); _nop_();
  218.           _nop_(); _nop_(); _nop_();
  219.           _nop_(); _nop_(); _nop_();
  220.           _nop_(); _nop_(); _nop_();
  221.           _nop_(); _nop_(); _nop_();
  222.           _nop_(); _nop_();_nop_();
  223.           _nop_(); _nop_(); _nop_();
  224.           TX=0;
  225.          }
  226.   }
復(fù)制代碼


Keil代碼下載: 3路超聲波 語音.rar (65.59 KB, 下載次數(shù): 22)

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:398219 發(fā)表于 2022-6-21 09:56 | 只看該作者
謝謝分享,正在做2路超聲波項目,正好需要學(xué)習(xí)
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品成人一区二区三区夜夜夜 | 欧美福利视频 | 久久久免费 | 在线免费观看a级片 | 亚洲 欧美 另类 综合 偷拍 | 成人精品免费视频 | 国产精品区一区二区三区 | 91精品国产综合久久精品图片 | 中文字幕第一页在线 | 日韩毛片视频 | 国产精品一级 | 黑人巨大精品欧美一区二区免费 | 久久久成人免费一区二区 | 欧美日韩在线免费观看 | 国产精品免费在线 | 国产精品久久久久久久久久三级 | 国产高清精品一区二区三区 | 日韩不卡一区二区三区 | 免费视频一区二区三区在线观看 | 91视频在线观看 | 日韩不卡一二区 | 久久这里只有精品首页 | 中文字幕人成乱码在线观看 | 久久久资源 | 超碰在线97国产 | 精品一区二区三区在线观看 | 祝你幸福电影在线观看 | 欧美一级黄视频 | 精品成人免费一区二区在线播放 | 午夜在线电影网 | 97国产在线视频 | 国产视频久久久 | 成人欧美一区二区 | 中文字幕在线一区二区三区 | 99在线观看| 久久久2o19精品 | 日本大片在线播放 | 欧美二区乱c黑人 | 91精品国产自产精品男人的天堂 | 91在线播 | 亚洲国产一区二区三区 |