1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于c51的超聲波雷達(dá)掃描程序

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

單片機(jī)源程序如下:
  1. ///////////////////////////////////////////////////////////////
  2. //Project : 數(shù)字循環(huán)顯示.c
  3. //版本    : V1.0
  4. //作者    : 源動力
  5. //說明    :本函數(shù)只適用于南陽理工學(xué)院電子系51開發(fā)板。
  6. //用法          : 直接下載到51單片機(jī)
  7. //功能    :和超聲波模塊HC-SR04相連,檢測距離
  8. //接口說明:超聲波接口 —51開發(fā)板
  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;  //控制數(shù)碼管亮滅,為低電平時(shí)滅                  
  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. //二進(jìn)制1000等于十六進(jìn)制8,此時(shí)數(shù)碼管只有第1位顯
  23. uchar code table2[]={0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49};
  24. //二進(jìn)制1000等于十六進(jìn)制8,此時(shí)數(shù)碼管只有第2位顯
  25. uchar code table3[]={0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29};
  26. //二進(jìn)制1000等于十六進(jìn)制8,此時(shí)數(shù)碼管只有第3位顯
  27. uchar code table4[]={0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19};
  28. //二進(jìn)制1000等于十六進(jìn)制8,此時(shí)數(shù)碼管只有第4位顯

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

  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; //設(shè)定外部中斷觸發(fā)方式為低電平觸發(fā)方式         兩種設(shè)置方式一樣
  51.         IT0=0;                //設(shè)定外部中斷觸發(fā)方式為低電平觸發(fā)方式       
  52. }
  53. void Timer0_Init()
  54. {
  55.         TMOD=0x11;//設(shè)置定時(shí)器0和1為工作方式1

  56.           TH0=0;//對定時(shí)器高八位清零
  57.           TL0=0;//對定時(shí)器低八位清零
  58.         TF0=0;//定時(shí)計(jì)數(shù)器溢出標(biāo)志位清零
  59.           ET0=1;//開定時(shí)器0中斷

  60.         TH1=0;//對定時(shí)器高八位清零
  61.           TL1=0;//對定時(shí)器低八位清零
  62.         TF1=0;//定時(shí)計(jì)數(shù)器溢出標(biāo)志位清零
  63.           ET1=1;//開定時(shí)器0中斷
  64.          
  65.        
  66. }
  67. void AllInterrupt_Init()
  68. {
  69.         IP=0x01;//外部中斷0設(shè)置為高優(yōu)先級,其他所有中斷為低優(yōu)先級
  70.        
  71. }
  72. void UT_Init()        //初始化超聲波發(fā)射和接收引腳
  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);  //這是往返兩個(gè)路程的時(shí)間
  90.         //distance_data現(xiàn)在單位為us
  91.     /*distance_data*=(170);    //(340/2=170) distance_data現(xiàn)在單位為微米
  92.         distance_data=distance_data/1000;           //distance_data現(xiàn)在單位為毫米 */

  93.         distance_data*=12;                  //因?yàn)槎〞r(shí)器默認(rèn)為12分頻
  94.     distance_data/=58;                  //微秒的單位除以58等于厘米
  95.                                        
  96.        
  97.         qian_data=distance_data/1000;       
  98.         distance_data=distance_data%1000;   //取余運(yùn)算                                                               
  99.         bai_data=distance_data/100 ;
  100.     distance_data=distance_data%100;   //取余運(yùn)算
  101.     shi_data=distance_data/10 ;
  102.     distance_data=distance_data%10;    //取余運(yùn)算
  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;                              //先關(guān)閉總中斷
  142.           UT_Init();                              //初始化超聲波發(fā)射和接收引腳
  143.           ExternalInterrupt_Init();          //外部中斷初始化
  144.           Timer0_Init();                              //初始化定時(shí)器0
  145.           AllInterrupt_Init();
  146.   

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

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

  171.                            //display1();
  172.                         while(TH1 < 30);//等待測量的結(jié)果(可用中斷實(shí)現(xiàn))        //當(dāng)TH1=60時(shí),則為5.733米        30則為2.913米
  173.                         a=0;

  174.                 }

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

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

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



回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表