2019-12-14

51单片机超声波HC-SR04测距程序

  1. List item
  2. #include “reg52.h”
  3. typedef unsigned char u8;
  4. typedef unsigned int u16;
  5. sbit Echo=P3^2;//回波
  6. sbit Trig=P1^1;//回波使能
  7. sbit led=P1^0;//测试led
  8. sbit LSA=P2^2;
  9. sbit LSB=P2^3; //138译码器管脚定
  10. sbit LSC=P2^4;
  11. u16 H_data;//计数出的数据u8
  12. shu[8];u8 code SmaGD[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  13. void delay(u16 i)
  14. {
  15. while(i–);
  16. }
  17. void DigDisplay(unsigned long H_data)//数码管整数显示
  18. {
  19. u8 i; shu[0] = SmaGD[H_data %100000000/10000000];
  20. shu[1] = SmaGD[H_data %10000000/1000000];
  21. shu[2] = SmaGD[H_data %1000000/100000];
  22. shu[3] = SmaGD[H_data %100000/10000];
  23. shu[4] = SmaGD[H_data %10000/1000];
  24. shu[5] = SmaGD[H_data %1000/100];
  25. shu[6] = SmaGD[H_data %100/10];
  26. shu[7] = SmaGD[H_data %10];
  27. for(i=0;i<8;i++)
  28. {
  29. switch(i)
  30. {
  31. case(0):
  32. LSA=0;LSB=0;LSC=0;break;//138第一位输出0
  33. case(1):
  34. LSA=1;LSB=0;LSC=0;break;//138第一位输出1
  35. case(2):
  36. LSA=0;LSB=1;LSC=0;break;//138第一位输出2
  37. case(3):
  38. LSA=1;LSB=1;LSC=0;break;//138第一位输出3
  39. case(4):
  40. LSA=0;LSB=0;LSC=1;break;//138第一位输出4
  41. case(5):
  42. LSA=1;LSB=0;LSC=1;break;//138第一位输出5
  43. case(6):
  44. LSA=0;LSB=1;LSC=1;break;//138第一位输出6
  45. case(7):
  46. LSA=1;LSB=1;LSC=1;break;//138第一位输出7 }
  47. P0=shu[i];
  48. delay(100);
  49. P0=0x00;
  50. }
  51. }
  52. void DS_Initial()//定时器0初始化
  53. {
  54. EA=1;
  55. ET0=1;//定时/计数器T0中断允许位
  56. TMOD=0X01;//使用定时器0,16位计数
  57. TR0=0;//T0运行控制位
  58. TH0=0;//高位清零
  59. TL0=0;//低位清零
  60. }
  61. void main()
  62. {
  63. // u8 mark;
  64. u16 i;
  65. Trig=0;//使能初始化
  66. DS_Initial();//定时器初始化
  67. while(1)
  68. {
  69. delay(200);//
  70. Trig=1; //
  71. delay(50);///信号使能
  72. Trig=0; //
  73. while(!Echo);//等待高电平的到来
  74. TR0=1;//打开定时器
  75. led=~led;
  76. while(Echo);//等待低电平
  77. TR0=0;//关闭定时器
  78. H_data=TH0*256+TL0;//合并定时器的值
  79. H_data/=58;//厘米为单位
  80. delay(20);
  81. TH0=0;//高位清零
  82. TL0=0;//低位清零
  83. for(i=80;i>0;i–)//给数码管显示的时间
  84. {
  85. DigDisplay(H_data);
  86. }
  87. }
  88. }
    2019-12-14
    2019-12-14