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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

超聲波測距,液晶屏1602顯示的51單片機源程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:101545 發表于 2023-3-22 14:20 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
超聲波測距,單片機51控制液晶屏1602顯示的源程序~
接線方法:(老版本就是板子沒有集成超聲波插座,需要自己I/O口接線)

VCC----VCC
TRIG---P1.0
ECHO---P3.2
GND----GND

單片機源程序如下:
  1. /******************
  2. *  晶振:11.0592MHZ
  3. ******************************************************************/
  4. /**********************************包含頭文件**********************************/
  5. #include <reg52.h>
  6. #include "1602.h"
  7. /************************************宏定義************************************/
  8. #define VELOCITY_30C        3495       //30攝氏度時的聲速,聲速V= 331.5 + 0.6*溫度;
  9. #define VELOCITY_23C        3453       //23攝氏度時的聲速,聲速V= 331.5 + 0.6*溫度;
  10. /************************************位定義************************************/
  11. sbit INPUT  = P3^2;                //回聲接收端口
  12. sbit OUTPUT = P1^0;                //超聲觸發端口
  13. sbit Beep   = P2^3 ;                           // 蜂鳴器 
  14. /********************************定義變量和數組********************************/
  15. long int distance=0;               //距離變量
  16. uchar table[]="    Welcome to   ";
  17. uchar table0[]=" 0000hjmcu0000  ";
  18. uchar table1[]="There's no echo.";
  19. uchar table2[]=" 0000hjmcu0000  ";
  20. uchar table3[]="Distance:";
  21. uchar count;
  22. /***********************************函數聲明***********************************/
  23. extern void initLCD();
  24. extern void write_date(uchar date);
  25. extern void write_com(uchar com);
  26. extern void delay(uint x);
  27. /******************************************************************************/
  28. /* 函數名稱  : Delay_xMs                                                      */
  29. /* 函數描述  : 延時函數                                                       */
  30. /* 輸入參數  : x                                                              */
  31. /* 參數描述  : 延時時間                                                       */
  32. /* 返回值    : 無                                                             */
  33. /******************************************************************************/
  34. void Delay_xMs(unsigned int x)
  35. {
  36.     unsigned int i,j;
  37.     for(i = 0;i < x;i++ )
  38.     {
  39.         for(j = 0;j < 3;j++ )
  40.         {
  41.             ;
  42.         }
  43.     }
  44. }
  45. /******************************************************************************/
  46. /* 函數名稱  : Alarm                                                          */
  47. /* 函數描述  : 蜂鳴器發聲函數                                                 */
  48. /* 輸入參數  : t                                                              */
  49. /* 參數描述  : 發聲的次數                                                     */
  50. /* 返回值    : 無                                                             */
  51. /******************************************************************************/
  52. void Alarm(uchar t)
  53. {
  54.         uchar i;
  55.         for(i = 0;i < t;i++)
  56.         {
  57.                 Beep = 0;
  58.                 Delay_xMs(1000);
  59.                 Beep = 1;
  60.                 Delay_xMs(1000);
  61.         }
  62. }        
  63. /******************************************************************************/
  64. /* 函數名稱  : delayt                                                         */
  65. /* 函數描述  : 延時函數                                                       */
  66. /* 輸入參數  : x                                                              */
  67. /* 參數描述  : 延時時間數據                                                   */
  68. /* 返回值    : 無                                                             */
  69. /******************************************************************************/        
  70. void delayt(uint x)
  71. {
  72.     uchar j;
  73.     while(x-- > 0)
  74.     {
  75.               for(j = 0;j < 125;j++)
  76.         {
  77.             ;
  78.         }
  79.     }
  80. }
  81. /******************************************************************************/
  82. /* 函數名稱  : Init_MCU                                                       */
  83. /* 函數描述  : 初始化單片機函數                                               */
  84. /* 輸入參數  : 無                                                             */
  85. /* 參數描述  : 無                                                             */
  86. /* 返回值    : 無                                                             */
  87. /******************************************************************************/
  88. void Init_MCU(void)
  89. {
  90.         TMOD = 0x01;          //定時器2初始化,設置為16位自動重裝模式
  91.          TL0 = 0x66;
  92.         TH0 = 0xfc;              //1ms
  93.     ET0 = 1;              //開定時器2
  94.         EA = 1;                      //總中斷使能
  95. }
  96. /******************************************************************************/
  97. /* 函數名稱  : Init_Parameter                                                 */
  98. /* 函數描述  : 初始化參數和IO口函數                                           */
  99. /* 輸入參數  : 無                                                             */
  100. /* 參數描述  : 無                                                             */
  101. /* 返回值    : 無                                                             */
  102. /******************************************************************************/
  103. void Init_Parameter(void)
  104. {
  105.          OUTPUT =1;
  106.          INPUT = 1;
  107.          count = 0;
  108.          distance = 0;
  109. }
  110. /******************************************************************************/
  111. /* 函數名稱  : display_char                                                   */
  112. /* 函數描述  : 顯示字符串函數                                                 */
  113. /* 輸入參數  : point,address                                                  */
  114. /* 參數描述  : 寫入的字符串的地址指針 1602顯示對應的地址                      */
  115. /* 返回值    : 無                                                             */
  116. /******************************************************************************/
  117. void display_char(uchar *point,uchar address)
  118. {
  119.         uchar i;
  120.         write_com(0x80 + address);
  121.         for(i = 0;i < 16; i++)
  122.         {
  123.                 write_date(*point);
  124.                 point++;
  125.         }
  126. }
  127. /******************************************************************************/
  128. /* 函數名稱  : display                                                        */
  129. /* 函數描述  : 顯示數字                                                       */
  130. /* 輸入參數  : number,address                                                */
  131. /* 參數描述  : number寫入的數據,address地址                                  */
  132. /* 返回值    : 無                                                             */
  133. /******************************************************************************/        
  134. void display(int number,uchar address)
  135. {
  136.         uchar b,c,d,e;
  137.         b= (number / 1000);
  138.         c= (number / 100) % 10;
  139.         d = (number / 10) % 10;
  140.         e = number % 10;

  141.         write_com(0x80 + address);
  142.     write_date(b + 48);
  143.         write_date(c + 48);
  144.         write_date(d + 48);
  145.         write_date(46);           //小數點的ASCII
  146.         write_date(e + 48);
  147.     write_date(99);           //"c"的ASCII
  148.         write_date(109);          //"m"的ASCII
  149. }
  150. /******************************************************************************/
  151. /* 函數名稱  : Trig_SuperSonic                                                */
  152. /* 函數描述  : 發出聲波函數                                                   */
  153. /* 輸入參數  : 無                                                             */
  154. /* 參數描述  : 無                                                             */
  155. /* 返回值    : 無                                                             */
  156. /******************************************************************************/
  157. void Trig_SuperSonic(void)//出發聲波
  158. {
  159.          OUTPUT = 1;
  160.          delayt(1);
  161.          OUTPUT = 0;
  162. }
  163. /******************************************************************************/
  164. /* 函數名稱  : Measure_Distance                                               */
  165. /* 函數描述  : 計算距離函數                                                   */
  166. /* 輸入參數  : 無                                                             */
  167. /* 參數描述  : 無                                                             */
  168. /* 返回值    : 無                                                             */
  169. /******************************************************************************/
  170. void Measure_Distance(void)
  171. {
  172.         uchar l;
  173.         uint h,y;
  174.         TR0 = 1;
  175.         while(INPUT)
  176.     {
  177.         ;
  178.     }        
  179.         TR0 = 0;
  180.         l = TL0;
  181.         h = TH0;
  182.         y = (h << 8) + l;
  183.         y = y - 0xfc66;//us部分
  184.         distance = y + 1000 * count;//計算總時間
  185.         TL0 = 0x66;
  186.         TH0 = 0xfc;
  187.         delayt(30);
  188.         distance = VELOCITY_30C * distance / 20000;
  189. }
  190. /******************************************************************************/
  191. /* 函數名稱  : main                                                           */
  192. /* 函數描述  : 主函數                                                         */
  193. /* 輸入參數  : 無                                                             */
  194. /* 參數描述  : 無                                                             */
  195. /* 返回值    : 無                                                             */
  196. /******************************************************************************/                                       
  197. void main(void)
  198. {        
  199.     rw = 0;
  200.         initLCD();
  201.         Init_MCU();
  202.         Init_Parameter();
  203.         Alarm(2);
  204.         display_char(table,0x00);
  205.         display_char(table0,0x40);
  206.         Delay_xMs(30000);
  207.         display_char(table2,0x00);
  208.         display_char(table1,0x40);

  209.         while(1)
  210.         {
  211.                  Trig_SuperSonic();         //觸發超聲波發射
  212.                  while(INPUT == 0)          //等待回聲
  213.          {
  214.              ;
  215.          }
  216.                  Measure_Distance();        //計算脈寬并轉換為距離
  217.                  display_char(table3,0x40);
  218.                  display(distance,0x49);    //顯示距離
  219.                  Init_Parameter();          // 參數重新初始化
  220.                  delayt(100);               //延時,兩次發射之間要至少有10ms間隔
  221.          }        
  222. }
  223. /******************************************************************************/
  224. /* 函數名稱  : timer0                                                         */
  225. /* 函數描述  : T0中斷處理函數                                                 */
  226. /* 輸入參數  : 無                                                             */
  227. /* 參數描述  : 無                                                             */
  228. /* 返回值    : 無                                                             */
  229. /******************************************************************************/
  230. void timer0 (void) interrupt 1
  231. {
  232.         TF0 = 0;
  233.         TL0 = 0x66;
  234.         TH0 = 0xfc;
  235.         count++;
  236.         if(count == 18)//超聲波回聲脈寬最多18ms
  237.         {
  238.                 TR0 =0;
  239.                 TL0 = 0x66;
  240.                 TH0 = 0xfc;
  241.                 count = 0;
  242.         }
  243. }
  244. /******************************************************************************/
復制代碼
Keil代碼下載:
程序.7z (124.54 KB, 下載次數: 42)

評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久久国产 | 在线视频 亚洲 | 91日韩在线 | av一级一片| 黄视频国产 | 亚洲精品大片 | 精品久久久久久国产 | 性做久久久久久免费观看欧美 | 91精品国产一区二区三区 | 国产精品99久久久久久久久 | 日本一二区视频 | 亚洲成人黄色 | 国产福利91精品一区二区三区 | 国产精品黄视频 | 91激情视频 | 国产视频一区二区三区四区五区 | av在线电影网站 | 欧美成ee人免费视频 | 精品久久久精品 | 婷婷免费在线 | 国产成人精品午夜视频免费 | 色资源在线| 黄色欧美在线 | 日本激情视频中文字幕 | 亚洲欧美日韩中文字幕一区二区三区 | 久久机热 | 91精品国产91久久久久福利 | 久久久美女 | 国产精品久久久久永久免费观看 | 日韩一区二区三区在线观看视频 | 亚洲协和影视 | 激情婷婷| 中文字幕在线观看一区 | 欧美一区二区三区在线视频 | 九一视频在线播放 | 国产精品一区二区久久 | 91福利在线观看 | www.亚洲.com| 精品国产乱码久久久久久中文 | 日韩中文一区二区三区 | 色婷婷综合久久久久中文一区二区 |