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

標題: 超聲波測距,液晶屏1602顯示的51單片機源程序 [打印本頁]

作者: xiaotongsd    時間: 2023-3-22 14:20
標題: 超聲波測距,液晶屏1602顯示的51單片機源程序
超聲波測距,單片機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)





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 日本午夜精品一区二区三区 | av在线天堂| 欧美精品一区二区三区在线播放 | 免费视频一区二区 | 日韩91| 成人特区| 亚洲综合大片69999 | 亚洲欧美一区二区三区国产精品 | 亚洲精品国产综合区久久久久久久 | 国产三区在线观看视频 | 精品国产一区二区三区久久 | 欧美一级免费看 | www国产成人免费观看视频,深夜成人网 | 99精品欧美一区二区三区综合在线 | 午夜丰满寂寞少妇精品 | 97色在线观看免费视频 | 伦理一区二区 | 一级在线观看 | av一级| 99pao成人国产永久免费视频 | 99热热精品| 欧美日韩一区二区视频在线观看 | 国产日韩欧美 | 久久国产传媒 | 国产精品视频观看 | 日韩中文字幕免费在线观看 | 中文字幕亚洲免费 | 无吗视频 | 国产精品成人国产乱一区 | 亚洲免费在线 | 性色av一区| 中文字幕高清av | 无码日韩精品一区二区免费 | 一区二区三区四区在线视频 | 一区精品视频在线观看 | 国产精品区一区二 | 欧美日韩在线一区二区 | 欧美黄色精品 | 狠狠色综合网站久久久久久久 | 久久久国产视频 | 日韩精品久久久久久 |