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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機HC-SR04超聲波測距原理圖pcb文件與程序源碼

  [復制鏈接]
跳轉到指定樓層
樓主
關于HC-SR04超聲波模塊,基于51單片機程序加硬件。
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)


單片機源程序如下:
  1. #include <reg51.h>
  2. #include <intrins.h>

  3. sbit RX=P2^7; //接收端
  4. sbit TX=P2^6; //控制端
  5. sbit RS=P2^5; //定義LCD引腳
  6. sbit RW=P2^4;
  7. sbit E=P2^3;

  8. unsigned char lcd0[]="Measuring  Range";
  9. unsigned char lcd1[]=" ERROR ";
  10. unsigned char lcd2[]=" TURE ";
  11. // unsigned char lcd3[]="999";
  12. unsigned char lcd_r_start();         //讀狀態字函數
  13. unsigned char i;
  14. unsigned long S=0;
  15. unsigned int  time=0;

  16. void lcd_w_cmd(unsigned char com);   //寫命令字函數
  17. void lcd_w_dat(unsigned char dat);   //寫數據函數
  18. void lcd_int();                      //LCD初始化函數
  19. void int_1();
  20. void delay(unsigned int ms);
  21. void delay1();
  22. bit  flag=1;

  23. //函數功能:LCD初始化       
  24. void lcd_int()
  25. {
  26. lcd_w_cmd(0x38); //設置工作方式
  27. lcd_w_cmd(0x0C); //設置光標
  28. lcd_w_cmd(0x01); //清屏
  29. lcd_w_cmd(0x06); //設置輸入方式
  30. lcd_w_cmd(0x80); //設置初始顯示位置
  31. }
  32. //函數功能:讀狀態字
  33. //形式參數:無
  34. //返回值:返回狀態字,最高位D7=0,LCD控制器空閑;D7=1,LCD控制器忙
  35.         unsigned char lcd_r_start()
  36.         {
  37.          unsigned char s;
  38.          RW=1;            //RW=1,RS=0,讀LCD狀態
  39.          delay1();
  40.          RS=0;
  41.          delay1();
  42.          E=1;
  43.          delay1();
  44.          P1=s;  //s=P1 從LCD的數據口讀狀態
  45.          delay1();
  46.          E=0;
  47.          delay1();
  48.          RW=0;
  49.          delay1();
  50.          return(s);
  51.          }         
  52. //函數功能:寫命令字
  53. //形式參數:命令字已存入com單元中
  54. //返回值:無
  55. void lcd_w_cmd(unsigned char com)
  56. {
  57.    unsigned char i;
  58.    do{
  59.          i=lcd_r_start();
  60.          i&=0x80;
  61.          delay(2);
  62.          }
  63.          while(i!=0);
  64.          RW=0;
  65.          delay1();
  66.          RS=0;
  67.          delay1();
  68.          E=1;
  69.          delay1();
  70.          P1=com;
  71.          delay1();
  72.          E=0;
  73.          delay1();
  74.          RW=1;
  75.          delay(255);
  76. }
  77. //函數功能:寫數據
  78. //形式參數:數據已存入dat單元中
  79. //返回值:無
  80. void lcd_w_dat(unsigned char dat)
  81.   {
  82.            unsigned char i;
  83.         do{
  84.          i=lcd_r_start();
  85.          i &=0x80;
  86.          delay(2);
  87.          }
  88.         while(i!=0);
  89.          RW=0;
  90.          delay1();
  91.          RS=1;
  92.          delay1();
  93.          E=1;
  94.          delay1();
  95.          P1=dat;
  96.          delay1();
  97.          E=0;
  98.          delay1();
  99.          RW=1;
  100.          delay(255);
  101.   }
  102. /*********************超聲波測距公式*********************/
  103. void Conut(void)
  104. {
  105.         time=TH0*256+TL0;
  106.         TH0=0;
  107.         TL0=0;
  108.         S=(time*1.87)/100;     //算出來是CM
  109.         lcd_w_cmd(0xC0);
  110.         lcd_w_dat(S/100+0x30);//送數據百位
  111.         lcd_w_cmd(0xC1);
  112.         lcd_w_dat(S%100/10+0x30);//送數據十位
  113.         lcd_w_cmd(0xC2);
  114.         lcd_w_dat(S%100%10+0x30);//送數據個位
  115.         if((S>=200)||flag==1)
  116.         {
  117.                 flag=0;       
  118.                 lcd_w_cmd(0xCA);                   //設置顯示位置
  119.             for(i=0;lcd1[i]!='\0';i++)          //顯示字符串,字符串結束符為'\0'
  120.                 {
  121.                 lcd_w_dat(lcd1[i]);}       
  122.         }
  123.         else
  124.         {
  125.                 lcd_w_cmd(0xCA);                   //設置顯示位置
  126.                 for(i=0;lcd2[i]!='\0';i++)          //顯示字符串,字符串結束符為'\0'
  127.                 {
  128.                 lcd_w_dat(lcd2[i]);}       
  129.         }
  130. //     if((S==999)||flag==1)
  131. //         {
  132. //                 flag=0;
  133. //                 lcd_w_cmd(0xC0);                   //設置顯示位置
  134. //             for(i=0;lcd3[i]!='\0';i++)          //顯示字符串,字符串結束符為'\0'
  135. //                 {
  136. //                 lcd_w_dat(lcd3[i]);}       
  137. //         }
  138. }
  139. void zd0() interrupt 1          //T0中斷用來計數器溢出,超過測距范圍
  140. {
  141.         flag=1;                     //中斷溢出標志
  142. }
  143. void  StartModule()          //T1中斷用來掃描數碼管和計800MS啟動模塊
  144. {
  145.         TX=1;                     //800MS  啟動一次模塊
  146.         _nop_();
  147.         _nop_();
  148.         _nop_();
  149.         _nop_();
  150.         _nop_();
  151.         _nop_();
  152.         _nop_();
  153.         _nop_();
  154.         _nop_();
  155.         _nop_();
  156.         _nop_();
  157.         _nop_();
  158.         _nop_();
  159.         _nop_();
  160.         _nop_();
  161.         _nop_();
  162.         _nop_();
  163.         _nop_();
  164.         _nop_();
  165.         _nop_();
  166.         _nop_();
  167.         TX=0;
  168. }
  169. void main()
  170. {
  171.         delay(40);
  172.         lcd_int();
  173.         TMOD=0x01;                   //設T0為方式1,GATE=1;
  174.         TH0=0;
  175.         TL0=0;         
  176.         ET0=1;             //允許T0中斷
  177.         EA=1;
  178.         P1=0xff;                           //送全1到P1口       
  179.                  
  180.         lcd_w_cmd(0x80);                   //設置顯示位置
  181.         for(i=0;lcd0[i]!='\0';i++)          //顯示字符串,字符串結束符為'\0'
  182.         {
  183.         lcd_w_dat(lcd0[i]);
  184.         delay1();}       
  185.         lcd_w_cmd(0xc3);
  186.         lcd_w_dat('c');
  187.         lcd_w_cmd(0xc4);
  188.         lcd_w_dat('m');
  189. ……………………

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

所有資料51hei提供下載:
超聲波硬件.rar (653.95 KB, 下載次數: 604)


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:501901 發表于 2019-3-31 19:43 | 只看該作者
跪求代碼發郵箱,57469263@qq.com
回復

使用道具 舉報

板凳
ID:472273 發表于 2019-4-21 21:12 來自手機 | 只看該作者
電路有問題…
回復

使用道具 舉報

地板
ID:582963 發表于 2019-7-13 15:35 | 只看該作者

我的顯示不出來,你解決了嗎?
回復

使用道具 舉報

5#
ID:378732 發表于 2019-11-22 17:03 | 只看該作者
S=(time*1.87)/100; 這段是啥意思?不是1.7嗎?
回復

使用道具 舉報

6#
ID:711435 發表于 2020-3-19 11:17 | 只看該作者
感謝樓主分享,這個可以接入聲光提示電路嗎
回復

使用道具 舉報

7#
ID:711720 發表于 2020-3-19 19:20 | 只看該作者
跪求代碼發郵箱,853933066@qq.com
回復

使用道具 舉報

8#
ID:628110 發表于 2022-4-19 12:46 | 只看該作者
程序注釋有問題,如果不知道延時時間就不要亂寫,看了半小時這個代碼才發現注釋好多亂寫的,什么800ms什么T1之類的。只初始了一個中斷函數注釋里居然出現了倆中斷,不看驅動流程都不知道是程序注釋有問題。
回復

使用道具 舉報

9#
ID:195496 發表于 2023-11-24 08:15 | 只看該作者
呵呵呵,不要太當真,能有個參考的思路,有時候也是很難得的。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天天干天天草 | 久久精品久久久久久 | 亚洲电影一区二区三区 | 欧美日韩一区精品 | 精品中文字幕久久 | 国产成人精品一区二区三区四区 | 一区二区在线看 | 中文字幕一区二区三区在线观看 | 日本在线看| 国产在线精品一区二区 | 国产成人精品免费视频大全最热 | 日韩视频在线观看一区二区 | 国产乱码精品一区二区三区五月婷 | 91视频精选 | 999久久久久久久久 国产欧美在线观看 | 欧美一区二区三区电影 | 91在线观看免费视频 | 一个色在线| 日日日视频 | 91久久久精品国产一区二区蜜臀 | 又爽又黄axxx片免费观看 | 巨大黑人极品videos精品 | 欧美亚州综合 | 午夜午夜精品一区二区三区文 | 国产精品免费观看 | 国产精品久久免费观看 | 亚洲欧洲精品成人久久奇米网 | 国产精品视频在线观看 | 国产精品福利久久久 | 亚洲精品视频在线播放 | 久久久www| 91国产视频在线 | 亚洲国产aⅴ成人精品无吗 亚洲精品久久久一区二区三区 | 日本在线视频不卡 | 欧美在线一区二区三区 | 天天爽夜夜骑 | 夜夜操操操 | 拍拍无遮挡人做人爱视频免费观看 | 欧美一区二区在线看 | 亚洲欧美一区二区三区在线 | 久久av网|