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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4568|回復: 4
打印 上一主題 下一主題
收起左側

51單片機超聲波四方向測距系統Proteus仿真+源碼設計

  [復制鏈接]
跳轉到指定樓層
樓主
這是一個基于51單片機設計的超聲波四方向測距系統,能夠在LCD1602上顯示四路的距離,通過調試,可以執行。

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


單片機源程序如下:
  1. #include "LCD1602DRV.h"
  2. #include "STCEEPROM.h"
  3. sbit  RX1 = P3^3;
  4. sbit  RX2 = P3^4;
  5. sbit  RX3 = P3^5;
  6. sbit  RX4 = P3^6;
  7. sbit  TX = P3^7;

  8. sbit LED3 = P2^2;
  9. sbit LED2 = P2^1;
  10. sbit LED1 = P2^0;
  11. sbit SPEAK = P2^3;

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

  15. uint  time=0;
  16. uint  timer=0;
  17. uint S=0,S1=0,S2=0,S3=0,S4=0;

  18. bit flag =0;
  19. uchar KEY_flag=0;
  20. //延時函數
  21. void Conut(void)
  22. {
  23.          time=TH0*256+TL0;
  24.          TH0=0;
  25.          TL0=0;
  26.        
  27.          S=(time*1.87)/100;     //算出來是CM
  28.          if((S>=700)||flag==1) //超出測量范圍顯示“-”
  29.          {         
  30.           flag=0;
  31.          }
  32. }
  33. void main(void)
  34. {       
  35.         uint SET_H=90,SET_L=30;
  36.   LCD1602_Init();//液晶初始化
  37.   SetRowCol(0,0);
  38.         printf("000 000 000 000");
  39.         SetRowCol(1,0);
  40.         printf("Set H:    L:   ");
  41.         TMOD=0x11;                   //設T0為方式1,GATE=1;
  42.         TH0=0;
  43.         TL0=0;         
  44.         TH1=0xf8;                   //2MS定時
  45.         TL1=0x30;
  46.         ET0=1;             //允許T0中斷
  47.         ET1=1;                           //允許T1中斷
  48.         TR1=1;                           //開啟定時器
  49.         EA=1;                           //開啟總中斷
  50.         EA=0;
  51.         //SET_H = ISP_READ(0x2c00)*256+ISP_READ(0x2c01);
  52.         //SET_L = ISP_READ(0x2c02)*256+ISP_READ(0x2c03);
  53.         EA=1;

  54.         while(1)
  55.         {

  56.                 while(!RX1);                    //當RX為零時等待
  57.                 TR0=1;                            //開啟計數
  58.                 while(RX1);                        //當RX為1計數并等待
  59.                 TR0=0;                                //關閉計數
  60.                 Conut();
  61.                 S1=S;
  62.                 /////////////////////////////
  63.                 while(!RX2);                    //當RX為零時等待
  64.                 TR0=1;                            //開啟計數
  65.                 while(RX2);                        //當RX為1計數并等待
  66.                 TR0=0;                                //關閉計數
  67.                 Conut();
  68.                 S2=S;
  69.                 /////////////////////////////
  70.                 while(!RX3);                    //當RX為零時等待
  71.                 TR0=1;                            //開啟計數
  72.                 while(RX3);                        //當RX為1計數并等待
  73.                 TR0=0;                                //關閉計數
  74.                 Conut();
  75.                 S3=S;
  76.                 /////////////////////////////
  77.                 while(!RX4);                    //當RX為零時等待
  78.                 TR0=1;                            //開啟計數
  79.                 while(RX4);                        //當RX為1計數并等待
  80.                 TR0=0;                                //關閉計數
  81.                 Conut();
  82.                 S4=S;
  83.                 /////////////////////////////////////
  84.                 SetRowCol(0,0);
  85.                 printf("%3d",S1);
  86.                 SetRowCol(0,4);
  87.                 printf("%3d",S2);
  88.                 SetRowCol(0,8);
  89.                 printf("%3d",S3);
  90.                
  91.                 SetRowCol(0,12);
  92.                 printf("%3d",S4);
  93.                 /////////////////////////////////
  94.                 if((S1>SET_H)&&(S2>SET_H)&&(S3>SET_H)&&(S4>SET_H))//遠,不報警
  95.                 {
  96.                         LED1=0;LED2=1;LED3=1;SPEAK=0;
  97.                         delayms(10);
  98.                 }
  99.                 if((S1<SET_H&&S1>SET_L)||(S2<SET_H&&S2>SET_L)||(S3<SET_H&&S3>SET_L)||(S4<SET_H&&S4>SET_L))//中,警告       
  100.                 {
  101.                         LED1=1;LED2=1;LED3=0;SPEAK=1;
  102.                         delayms(10);
  103.                 }       
  104.                 if((S1<SET_L)||(S2<SET_L)||(S3<SET_L)||(S4<SET_L))//近,報警
  105.                 {
  106.                         LED1=1;LED2=0;LED3=1;SPEAK=1;
  107.                         delayms(10);
  108.                 }
  109.                 if(!KEY1)
  110.                 {
  111.                         delayms(10);
  112.                         if(!KEY1)
  113.                         {
  114.                                 KEY_flag++;       
  115.                                 ISP_ERASE(0x2c00);                //注意:字節編程時必須要先要擦除整個扇區       
  116.                                 ISP_PROGRAM(0x2c00, SET_H/256);
  117.                                 ISP_PROGRAM(0x2c01, SET_H);
  118.                                 ISP_PROGRAM(0x2c02, SET_L/256);
  119.                                 ISP_PROGRAM(0x2c03, SET_L);
  120.                         }
  121.                         while(!KEY1);
  122.                         delayms(10);
  123.                 }
  124.                 if(!KEY2)
  125.                 {
  126.                         delayms(10);
  127.                         if(!KEY2)
  128.                         {
  129.                                 if(KEY_flag%2==0)SET_H++;
  130.                                 if(KEY_flag%2==1)SET_L++;
  131.                         }
  132.                         while(!KEY2);
  133.                         delayms(10);
  134.                 }
  135.                 if(!KEY3)
  136.                 {
  137.                         delayms(10);
  138.                         if(!KEY3)
  139.                         {
  140.                                 if(KEY_flag%2==0)SET_H--;
  141.                                 if(KEY_flag%2==1)SET_L--;
  142.                         }
  143.                         while(!KEY3);
  144.                         delayms(10);
  145.                 }
  146.           SetRowCol(1,6);
  147.                 printf("%03d",SET_H);
  148.                 SetRowCol(1,12);
  149.                 printf("%03d",SET_L);
  150.         }
  151. }

  152. /********************************************************/
  153. void zd0() interrupt 1                  //T0中斷用來計數器溢出,超過測距范圍
  154.   {
  155.     flag=1;                                                         //中斷溢出標志
  156.   }
  157. ……………………

  158. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載(仿真+源代碼):
keil.zip (167.1 KB, 下載次數: 117)


評分

參與人數 2黑幣 +53 收起 理由
zsyzdx + 3 贊一個!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:495096 發表于 2019-4-17 07:59 | 只看該作者
學習了
回復

使用道具 舉報

板凳
ID:543604 發表于 2019-5-22 11:19 | 只看該作者
請問超聲波HC-SR04.hex文件怎么編寫的呢
回復

使用道具 舉報

地板
ID:434366 發表于 2019-5-22 18:06 | 只看該作者
收到,謝謝,贊一個
回復

使用道具 舉報

5#
ID:231648 發表于 2020-3-25 15:18 | 只看該作者
學習了,多謝博主
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久精品aaa | 九九成人 | 天天澡天天狠天天天做 | 精品国产免费一区二区三区演员表 | 99精品欧美一区二区三区综合在线 | 成人精品影院 | 精品成人 | 欧美亚洲国语精品一区二区 | 欧美国产视频 | 亚洲欧美在线观看 | 亚洲一区二区久久 | 久久一久久| 性精品 | 国产三级一区二区三区 | 中文字幕在线三区 | 国产精品成人一区二区三区 | 在线播放亚洲 | 久久99国产精一区二区三区 | 9porny九色视频自拍 | 色香婷婷 | 日韩在线免费视频 | 中文字幕在线精品 | 久久精品国产一区老色匹 | 成年人国产在线观看 | 日韩精品一区二区三区中文字幕 | 色偷偷噜噜噜亚洲男人 | 欧美精品一区二区三区在线播放 | www.788.com色淫免费| 91大神新作在线观看 | 国产成人99久久亚洲综合精品 | 国产毛片毛片 | 91精品久久久久久久99 | 超碰最新在线 | 97人人干 | 中文字幕男人的天堂 | 人人色视频 | www视频在线观看 | 日韩成人在线免费观看 | 亚洲精品一区二三区不卡 | 国产精品99999 | 免费精品视频 |