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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

我的倒車雷達,超聲波測距(含源碼,工程圖)

[復制鏈接]
跳轉到指定樓層
樓主
倒車雷達,超聲波測速。
內喊源碼和工程圖,通俗易懂。


所有資料下載:
超聲波帶報警 原理圖PCB圖.doc (61.5 KB, 下載次數: 58)
程序.doc (41.5 KB, 下載次數: 42)

下面是部分程序預覽:
  1. #include<reg51.h>
  2. #include<math.h>
  3. /*定義數據類型*/
  4. #define uint unsigned int
  5. #define uchar unsigned char
  6. /*定義系統常數*/
  7. long int  time;      /*    時間   */
  8. bit   CLflag;   /*  測量標志  */
  9. char  cshu;       /* 串數 */
  10. #define  T12us   (256-12)    /*定時器設初值   T=(256-T12us)*12/12MHZ  */
  11. sbit VOLCK=P1^0;    /* 發射 */
  12. //接收從P3^2口輸入,采用外部中斷方式

  13. sbit S1=P2^1;
  14. sbit S2=P2^3;
  15. sbit S3=P2^5;
  16. sbit S4=P2^7;

  17. sbit alam=P3^7;                                        //報警

  18. unsigned char  number[5];      /* 用于存放距離顯示數據 */
  19. unsigned char  temp_number[5];

  20. unsigned char fr_alam;      //報警頻率控制計數
  21. unsigned char icont;                //距離計數

  22. char  code table[] ={0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x45,0xDF,0xD7}; //數字0-9的編碼
  23. //{0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};
  24.                 /* 碼表 0,1,2,3,4,5,6,7,8,9 */


  25. /*    通用延時子程序  */
  26. void delay( int j)
  27. {   
  28.         int i;   
  29.         for(i=0;i<j;i++);
  30. }

  31. void display(void)     /*  顯示5位數據   */
  32. {        
  33.         P0=~table[number[4]];
  34.         S1=0;
  35.         delay(200);
  36.         S1=1;
  37.         P0=~(table[number[3]]|0x20);
  38.         S2=0;
  39.         delay(200);
  40.         S2=1;
  41.         P0=~table[number[2]];
  42.         S3=0;
  43.         delay(200);
  44.         S3=1;
  45.         P0=~table[number[1]];
  46.         S4=0;
  47.         delay(200);
  48.         S4=1;
  49. }

  50. /*  初始化定時器,CTC0、CTC1用于定時     */
  51. void   init_CTC(void )
  52. {
  53.         TMOD = 0x21;      /*  設CTC1工作于模式2 */
  54.         ET0 = 0;              /* 不允許CTC0中斷  */
  55. }

  56. void init_INT( )    /*  外部中斷初始化為高優先級,并開中斷  */
  57. {
  58.         IP=0x01;   /*  置外部中斷INT0優先級為高   */
  59.         TCON=0;   /*  設置外部中斷0的中斷方式為電平觸發  */
  60. }


  61. //=========距離與頻率之間的轉化==============
  62. void Distance_Frequency(void)
  63. {
  64.         //以下語句用于計算距離與報警的頻率大小
  65.         if(number[3]>0)                //表示距離大于1米時,不報警
  66.                 icont=0;
  67.         else                                //否則
  68.         {
  69.                 if(number[2]>0)                //小于1米時,但分米大于0時,報警頻率與分米的數據成正比
  70.                 {
  71.                     switch(number[2])
  72.                         {
  73.                                 case 9: icont=9; break;
  74.                                 case 8: icont=8; break;
  75.                                 case 7: icont=7; break;
  76.                                 case 6: icont=6; break;
  77.                                 case 5: icont=5; break;
  78.                                 case 4: icont=4; break;
  79.                                 case 3: icont=3; break;
  80.                                 case 2: icont=2; break;
  81.                                 case 1: icont=1; break;
  82.                                 default: break;
  83.                         }
  84.                 }
  85.                 else                                         //距離只在厘米時,高頻率輸出報警
  86.                 {
  87.                         if(number[1]>0)
  88.                                 icont=1;
  89.                         else
  90.                                 icont=0;
  91.                 }
  92.         }
  93. }

  94. void Timetojuli(void)   /*   將測量的時間轉換為距離 */
  95. {
  96.         long  i;
  97.         i=(long)time*170;
  98.         temp_number[4]=i/10000000;     /* 十米  */
  99.         i=i-temp_number[4]*10000000;
  100.         temp_number[3]=i/1000000;   /*  米  */
  101.         i=i-temp_number[3]*1000000;
  102.         temp_number[2]=i/100000;    /*  分米  */
  103.         i=i-temp_number[2]*100000;
  104.         temp_number[1]=i/10000;     /*  厘米  */
  105.         i=i-(long)temp_number[1]*10000;
  106.         temp_number[0]=i/1000;     /*  毫米  */
  107.         //以下用于控制是否測到距離,如全為0,表明沒有測到距離
  108.         if((temp_number[4]!=0)||(temp_number[3]!=0)||(temp_number[2]!=0)||(temp_number[1]!=0))  
  109.         {
  110.                 number[4]=temp_number[4];   //更新一次數據
  111.                 number[3]=temp_number[3];
  112.                 number[2]=temp_number[2];
  113.                 number[1]=temp_number[1];
  114.                 number[0]=temp_number[0];

  115.                 Distance_Frequency();                //轉化一次
  116.         }
  117. }


  118. void serve_INT0( ) interrupt 0
  119. {
  120.         /*  外部中斷0,用于檢測接收信號  */
  121.         TR0=0;       /*  關閉定時器0 */
  122.         EX0=0;       /* 關中斷  */
  123.         time=(long)TL0;
  124.         time+=(long)TH0*256;
  125.         Timetojuli();                                        //更新一次數據
  126.         CLflag=1;
  127.         TH0=0;
  128.         TL0=0;
  129. }

  130. void CTC0_INT (  )   interrupt  1
  131. {
  132.         TR0=0;
  133.         ET0=0;
  134. }


  135. /*  CTC1中斷服務程序,12.5us 中斷一次,用于發射  */
  136. void CTC1_INT (  )   interrupt  3
  137. {
  138.         VOLCK=~VOLCK;
  139.         cshu++;
  140. }



  141. /*主程序*/
  142. void main()
  143. {
  144.         init_CTC(  );                      /*   初始化定時器 */
  145.         init_INT(  );                      /* 初始化外部中斷  */
  146.         CLflag=1;                         /*    測量標志    */
  147.         cshu=0;                          /*  傳數 */
  148.         IE=0x80;                           /* 開中斷  */
  149.         ET1=1;       ET0=1;
  150.         TR1=0;       TR0=0;
  151.         TL1=T12us;   TH1=T12us;
  152.         while(1)
  153.         {       
  154.                 CLflag=0;
  155.                 cshu=0;
  156.                 EX0=0;
  157.                 TH1=T12us;
  158.                 TL1=T12us;
  159.                 TL0 = 0;     TH0 = 0;            /*  定時器0的初始時間 */
  160.                 VOLCK=0;
  161.                 TR1=1;                                        /*  啟動定時器1,發送信號  */
  162.                 while(cshu<20) ;                    /*  發10個脈沖串 */                        
  163.                 TR1=0;
  164.                 TR0=1;                                   /*  啟動定時器0,開始記時  */
  165.                 EX0=1;
  166.                 display();                                        //調用顯示
  167.         //        Distance_Frequency();                //調用距離頻率轉化程序
  168.                 fr_alam++;                                        //程序執行次數加1        用于控制報警頻率與距離成正比
  169.                 if(icont>0)                                        //表示距離控制位達到報警時
  170.                 {
  171.                         if(fr_alam>=icont)               
  172.                         {
  173.                                 fr_alam=0;
  174.                                 alam=~alam;                        //蜂鳴器取反一次,即響一聲
  175.                         }
  176.                 }
  177.                 else                                                //不報警時
  178.                 {
  179.                         alam=1;
  180.                 }
  181.         }
  182. }

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

使用道具 舉報

沙發
ID:233124 發表于 2017-9-21 11:34 | 只看該作者
沒有仿真的原理圖呀
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲狠狠| 欧美日韩一区精品 | 超级乱淫av片免费播放 | 亚洲午夜精品视频 | 黑人久久 | 欧美电影免费网站 | 色婷婷综合成人av | 婷婷综合色 | 一区二区在线不卡 | 亚洲久久一区 | 一区二区三区国产好 | 亚洲欧美日韩一区二区 | 久久久成人精品 | 日日摸夜夜爽人人添av | 欧美成人a| 亚洲性网| 久久国产香蕉 | 精品久久久久香蕉网 | 亚洲欧美日韩系列 | 色免费视频 | 日韩不卡视频在线 | 欧美日韩精品区 | 国产精品一区二区三区久久久 | 日韩精品久久久久久 | 久久国产欧美日韩精品 | 日本黄色短片 | 亚洲国产成人在线 | 免费在线毛片 | 精品美女视频在线观看免费软件 | 最新中文字幕一区 | 日韩欧美福利视频 | 国产精品久久久久久久久免费软件 | 日韩一区二区在线观看视频 | 精品国产1区2区3区 一区二区手机在线 | 在线一区二区三区 | 一区二区三区精品在线视频 | 超碰人人人人 | 在线免费激情视频 | 日韩中文字幕一区 | 欧美日韩国产一区二区三区 | 91一区二区三区在线观看 |