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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2672|回復: 1
收起左側

基于c51的超聲波雷達掃描程序

[復制鏈接]
ID:397329 發表于 2018-9-13 09:47 | 顯示全部樓層 |閱讀模式
不懂的咨詢我

單片機源程序如下:
  1. ///////////////////////////////////////////////////////////////
  2. //Project : 數字循環顯示.c
  3. //版本    : V1.0
  4. //作者    : 源動力
  5. //說明    :本函數只適用于南陽理工學院電子系51開發板。
  6. //用法          : 直接下載到51單片機
  7. //功能    :和超聲波模塊HC-SR04相連,檢測距離
  8. //接口說明:超聲波接口 —51開發板
  9. //                Trig — P1^0
  10. //                Echo — P3^2
  11. ///////////////////////////////////////////////////////////////
  12. #include<reg52.h>
  13. #include<intrins.h>
  14. #define uint unsigned int
  15. #define uchar unsigned char
  16. sbit D1=P2^7;  //控制數碼管亮滅,為低電平時滅                  
  17. sbit D2=P1^7;  //控制全體二極管的熄滅,        573LE使能端
  18. sbit send=P1^0;
  19. sbit receive=P3^2;

  20. uchar code table[]={0x81,0x42,0x23,0x14};


  21. uchar code table1[]={0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89};
  22. //二進制1000等于十六進制8,此時數碼管只有第1位顯
  23. uchar code table2[]={0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49};
  24. //二進制1000等于十六進制8,此時數碼管只有第2位顯
  25. uchar code table3[]={0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29};
  26. //二進制1000等于十六進制8,此時數碼管只有第3位顯
  27. uchar code table4[]={0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19};
  28. //二進制1000等于十六進制8,此時數碼管只有第4位顯

  29. uchar code table1234[]={0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9};
  30. //二進制1111等于十六進制f;此時數碼管全顯       

  31. uint num,a=0;
  32. uint outcomeH=0,outcomeL=0;
  33. unsigned long distance_data;
  34. uint temp_data[4];
  35. uint succeed_flag;

  36. void delay(uint z)
  37. {
  38.   uint x,y;
  39.   for(x=z;x>0;x--)
  40.     for(y=1141;y>0;y--);
  41. }
  42. void delay_20us()
  43. {  
  44.         uchar bt ;
  45.     for(bt=0;bt<100;bt++);
  46. }
  47. void ExternalInterrupt_Init()
  48. {
  49.        
  50.         //TCON=0x00; //設定外部中斷觸發方式為低電平觸發方式         兩種設置方式一樣
  51.         IT0=0;                //設定外部中斷觸發方式為低電平觸發方式       
  52. }
  53. void Timer0_Init()
  54. {
  55.         TMOD=0x11;//設置定時器0和1為工作方式1

  56.           TH0=0;//對定時器高八位清零
  57.           TL0=0;//對定時器低八位清零
  58.         TF0=0;//定時計數器溢出標志位清零
  59.           ET0=1;//開定時器0中斷

  60.         TH1=0;//對定時器高八位清零
  61.           TL1=0;//對定時器低八位清零
  62.         TF1=0;//定時計數器溢出標志位清零
  63.           ET1=1;//開定時器0中斷
  64.          
  65.        
  66. }
  67. void AllInterrupt_Init()
  68. {
  69.         IP=0x01;//外部中斷0設置為高優先級,其他所有中斷為低優先級
  70.        
  71. }
  72. void UT_Init()        //初始化超聲波發射和接收引腳
  73. {
  74.         send=0;
  75.         receive=0;
  76. }
  77. void Send()
  78. {
  79.         send=1;
  80.         delay_20us();
  81.         send=0;
  82. }

  83. void conversion()
  84. {
  85.         uint ge_data,shi_data,bai_data,qian_data;

  86.         distance_data=outcomeH;
  87.         distance_data <<=8;
  88.         distance_data=(distance_data | outcomeL);

  89.         //distance_data*=(90*12);  //這是往返兩個路程的時間
  90.         //distance_data現在單位為us
  91.     /*distance_data*=(170);    //(340/2=170) distance_data現在單位為微米
  92.         distance_data=distance_data/1000;           //distance_data現在單位為毫米 */

  93.         distance_data*=12;                  //因為定時器默認為12分頻
  94.     distance_data/=58;                  //微秒的單位除以58等于厘米
  95.                                        
  96.        
  97.         qian_data=distance_data/1000;       
  98.         distance_data=distance_data%1000;   //取余運算                                                               
  99.         bai_data=distance_data/100 ;
  100.     distance_data=distance_data%100;   //取余運算
  101.     shi_data=distance_data/10 ;
  102.     distance_data=distance_data%10;    //取余運算
  103.     ge_data=distance_data;

  104.         temp_data[0]=qian_data;
  105.         temp_data[1]=bai_data;
  106.         temp_data[2]=shi_data;
  107.         temp_data[3]=ge_data;



  108. }
  109. void display()
  110. {
  111.        
  112.         conversion();
  113.         P0=table1[temp_data[0]];
  114.         delay(1);
  115.         P0=table2[temp_data[1]];
  116.         delay(1);
  117.         P0=table3[temp_data[2]];
  118.         delay(1);
  119.         P0=table4[temp_data[3]];
  120.         //delay(1);                       
  121. }
  122. void display1()
  123. {
  124.        
  125.         //conversion();
  126.         P0=table1[temp_data[0]];
  127.         delay(1);
  128.         P0=table2[temp_data[1]];
  129.         delay(1);
  130.         P0=table3[temp_data[2]];
  131.         delay(1);
  132.         P0=table4[temp_data[3]];
  133.         //delay(1);                       
  134. }

  135. void main()
  136. {
  137.         succeed_flag=0;       
  138.           D2=0;
  139.           D1=1;
  140.   
  141.            EA=0;                              //先關閉總中斷
  142.           UT_Init();                              //初始化超聲波發射和接收引腳
  143.           ExternalInterrupt_Init();          //外部中斷初始化
  144.           Timer0_Init();                              //初始化定時器0
  145.           AllInterrupt_Init();
  146.   

  147.           while(1)
  148.           {
  149.                
  150.        
  151.                 TR0=1;//啟動定時器0
  152.                 TR1=0;//關閉定時器1
  153.                 EX0=0;//關閉外部中斷0       
  154.                   EA=1;//打開總中斷

  155.                 if(a==2)
  156.                 {
  157.                        
  158.                         EA=0;              //先關閉總中斷
  159.                         Send();            //發送脈沖信號
  160.                         _nop_();
  161.                         while(receive==0); //等待Echo回波引腳變高電平
  162.                        
  163.                         TH1=0;//對定時器高八位清零
  164.                           TL1=0;//對定時器低八位清零
  165.                         TF1=0;//定時計數器溢出標志位清零
  166.   
  167.                         TR1=1;//啟動定時器1
  168.                         TR0=1;//啟動定時器0
  169.                         EX0=1;//打開外部中斷0       
  170.                       EA=1;//打開總中斷

  171.                            //display1();
  172.                         while(TH1 < 30);//等待測量的結果(可用中斷實現)        //當TH1=60時,則為5.733米        30則為2.913米
  173.                         a=0;

  174.                 }

  175.        
  176.           }
  177. }
  178. void exter0() interrupt 1   //1為定時器0中斷
  179. {
  180.         //EA=0;
  181.         //P0=table1234[1];
  182.         TH0=0;          //定時器0清零
  183.     TL0=0;          //定時器0清零
  184.         TF0=0;          //定時計數器溢出標志位清零
  185.         display1();
  186.         a++;

  187.        
  188. }
  189. void dingshi1() interrupt 3   //3為定時器1中斷
  190. {
  191.        
  192.         TH1=0;          //定時器0清零
  193.     TL1=0;          //定時器0清零
  194.         TF1=0;          //定時計數器溢出標志位清零       
  195. }
  196. void exter1() interrupt 0         //0為外部中斷
  197. {
  198.         outcomeH =TH1;    //取出定時器的值
  199.     outcomeL =TL1;    //取出定時器的值
  200.         succeed_flag=1;   //至成功測量的標志
  201.         //TH0=0;
  202.         //TL0=0;
  203.         EX0=0;//關閉外部中斷0
  204.         display();
  205. }
復制代碼

所有資料51hei提供下載:
源動力超聲波傳感器程序.rar (18.89 KB, 下載次數: 11)



回復

使用道具 舉報

ID:1 發表于 2018-9-13 16:48 | 顯示全部樓層
補全原理圖或者詳細說明一下電路連接即可獲得100+黑幣
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 波多野结衣精品 | 国产伦精品一区二区三毛 | 91久久精品国产免费一区 | 中文字幕一区二区三区四区五区 | 欧美日韩高清一区二区三区 | 全免费a级毛片免费看视频免费下 | 欧美日韩不卡合集视频 | 国产自产21区 | 国产精品久久av | 欧美成人精品一区二区男人看 | 欧美日韩三级 | 亚洲成av| 国产精品视频免费观看 | 亚洲欧洲小视频 | 久久精品亚洲欧美日韩久久 | 日韩视频免费看 | 久久精品91久久久久久再现 | 日本一区二区视频 | 五月婷婷视频 | 国产不卡视频在线 | 国产精品一区在线观看 | 国产视频久久 | 精品中文视频 | 久久久久国产一区二区三区四区 | 国产精品久久久久久一区二区三区 | 网络毛片| 精品国产一区久久 | 亚洲精品久久久久久久久久久 | 国产精品视频偷伦精品视频 | 91视频网址 | 99久久久久国产精品免费 | 澳门永久av免费网站 | 欧美日韩视频在线第一区 | 青青草在线播放 | 免费久久精品视频 | 天堂va在线 | 国产高清精品一区二区三区 | 色网站在线 | 天堂一区二区三区 | 国产一级在线 | 成人午夜影院 |