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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2430|回復(fù): 2
收起左側(cè)

寫一個簡單的單片機超聲波測距程序,數(shù)碼管顯示距離,單位厘米

[復(fù)制鏈接]
ID:743179 發(fā)表于 2020-5-3 20:03 | 顯示全部樓層 |閱讀模式
寫一個簡單地超聲波測距程序,數(shù)碼管顯示距離,單位厘米

單片機源程序如下:
  1. #include "reg51.h"

  2. unsigned char table[]=
  3.                         {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  4.                        
  5. #define uint  unsigned int
  6. #define uchar unsigned char

  7. sbit D1= P2^7;
  8. sbit Trig = P2^2;
  9. sbit Echo = P3^2;                               
  10. sbit SMG_q = P1^0;       
  11. sbit SMG_b = P1^1;       
  12. sbit SMG_s = P1^2;       
  13. sbit SMG_g = P1^3;       

  14. uint time = 0;
  15. uint timeH = 0;
  16. uint timeL = 0;
  17. uint succeed_flag;
  18.                        
  19. void display(uint da);
  20. void delay(uint z);
  21. void delay_20us();
  22.        
  23. void main(void)  
  24. {               
  25.           uint distance;

  26.     Trig=0;       //首先拉低脈沖輸入引腳
  27.     EA=1;         //打開總中斷0
  28.     TMOD=0x10;    //定時器1,16位工作方式
  29.     while(1)        
  30.     {
  31.         EA=0;           //關(guān)總中斷
  32.         Trig=1;         //超聲波輸入端
  33.         delay_20us();   //延時20us
  34.         Trig=0;         //產(chǎn)生一個20us的脈沖
  35.         while(Echo==0); //等待Echo回波引腳變高電平
  36.         succeed_flag=0; //清測量成功標志
  37.         EA=1;
  38.         EX0=1;          //打開外部中斷0
  39.         TH1=0;          //定時器1清零
  40.         TL1=0;          //定時器1清零
  41.         TF1=0;          //計數(shù)溢出標志
  42.         TR1=1;          //啟動定時器1
  43.         delay(20);      //等待測量的結(jié)果
  44.         TR1=0;          //關(guān)閉定時器1
  45.         EX0=0;          //關(guān)閉外部中斷0
  46.        if(succeed_flag==1)
  47.        {   
  48.                                         time=timeH*256+timeL;
  49.           distance=time*0.0172;  //厘米

  50.                                   display(distance );
  51.                                        
  52.                                         if(distance<=150 && distance>=80)
  53.           {
  54.                                                 D1=0;
  55.                                         }
  56.                                         else D1=1;
  57.                          }
  58.                          
  59.        if(succeed_flag==0)
  60.        {
  61.                                         distance=9999;               
  62.                                         D1=1;
  63.                                         delay(24);
  64.         }               
  65.     }
  66. }

  67. void display(uint da)
  68. {
  69.         SMG_q=0;                       
  70.         P0=table[da/1000];       
  71.         delay(1);                       
  72.         P0=0XFF;                       
  73.         SMG_q=1;       
  74.        
  75.         SMG_b=0;                       
  76.         P0=table[da/100%10];       
  77.         delay(1);                       
  78.         P0=0XFF;                       
  79.         SMG_b=1;       
  80.        
  81.         SMG_s=0;                       
  82.         P0=table[da%100/10];       
  83.         delay(1);                       
  84.         P0=0XFF;                       
  85.         SMG_s=1;                       

  86.         SMG_g=0;                       
  87.         P0=table[da%10];       
  88.         delay(1);                       
  89.         P0=0XFF;                       
  90.         SMG_g=1;                       
  91. }

  92. void exter()  interrupt 0   // 外部中斷0是0號
  93. {   
  94.      timeH =TH1;    //取出定時器的值
  95.      timeL =TL1;    //取出定時器的值
  96.      succeed_flag=1;//至成功測量的標志
  97.      EX0=0;         //關(guān)閉外部中斷
  98. }
  99. //****************************************************************
  100. //定時器1中斷,用做超聲波測距計時
  101. void timer1() interrupt 3  //
  102. {
  103.     TH1=0;
  104.     TL1=0;
  105. }

  106. void delay(uint z)
  107. {
  108.         uint x,y;
  109.         for(x=z;x>0;x--)
  110.         for(y=125;y>0;y--);
  111. }

  112. void delay_20us()
  113. {
  114.     uchar a ;
  115.     for(a=0;a<100;a++);
  116. }
復(fù)制代碼

所有程序51hei提供下載:
超聲波測距—數(shù)碼管顯示距離(單位厘米)程序.rar (28.34 KB, 下載次數(shù): 31)


回復(fù)

使用道具 舉報

ID:1 發(fā)表于 2020-5-5 14:27 | 顯示全部樓層
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復(fù)

使用道具 舉報

ID:756037 發(fā)表于 2020-5-24 15:16 | 顯示全部樓層
你好,請問數(shù)碼管怎么連接的,我在仿真上沒有結(jié)果
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日本亚洲一区 | 国产精品久久久久久影院8一贰佰 | 国产成人jvid在线播放 | 欧美成人精品 | 欧美一区二区免费 | 一区二区三区中文字幕 | 国产精品毛片av一区 | 国产一区二区电影网 | 国产精品久久 | 美女张开腿露出尿口 | 婷婷五月色综合 | 国内精品一区二区三区 | 国产福利在线小视频 | 国产丝袜一区二区三区免费视频 | 日韩在线观看 | 成人精品久久日伦片大全免费 | 欧美精品tv| www.4567| 色婷婷国产精品综合在线观看 | 久久精品一级 | 毛片视频网址 | 欧美日产国产成人免费图片 | 久久久九九 | 91.色| 精品一二区| 久久久国产一区二区三区 | 日本一区二区三区免费观看 | 国产精品日韩一区 | 久久久福利 | 日韩一区二区在线视频 | 一区在线播放 | 九九综合| 91精品久久久久久久 | 在线观看精品 | 久久久国产精品视频 | 在线只有精品 | 久久精品91久久久久久再现 | 一区二区三区回区在观看免费视频 | 中文字幕乱码一区二区三区 | 成人午夜网| 在线亚州|