超声波HC-SR04与STC89C52RC用1602显示

[复制链接]
查看3 | 回复0 | 2021-5-6 00:18:43 | 显示全部楼层 |阅读模式
部分源码:完整源码见附件
  1. #include<reg52.h>
  2. #define LCD1602_DB  P0      
  3. #define  u8 unsigned  char
  4. #define  u16  unsigned   int
  5. sbit LCD1602_RS = P2^6;
  6. sbit LCD1602_EN = P2^5;         
  7. sbit LCD1602_RW = P2^7;
  8. sbit TX     =P1^3;
  9. sbit RX     =P1^4;

  10. bit  flag   =0;
  11. u16  time   =0;
  12. int  S      =0;
  13. int  H,L;
  14. u8 list[]={"0.00M"};
  15. u8 code asc[15]={'0','1','2','3','4','5','6','7','8','9','.','-','M'};
  16. void Read_Busy()            
  17. {
  18.     u8 sta;      
  19.     LCD1602_DB = 0xff;
  20.     LCD1602_RS = 0;
  21.     LCD1602_RW = 1;
  22.     do
  23.     {
  24.         LCD1602_EN = 1;
  25.         sta = LCD1602_DB;
  26.         LCD1602_EN = 0;   
  27.     }while(sta & 0x80);
  28. }

  29. void Lcd1602_Write_Cmd(u8 cmd)      
  30. {
  31.     Read_Busy();
  32.     LCD1602_RS = 0;
  33.     LCD1602_RW = 0;
  34.     LCD1602_DB = cmd;
  35.     LCD1602_EN = 1;
  36.     LCD1602_EN = 0;   
  37. }

  38. void Lcd1602_Write_Data(u8 dat)   
  39. {
  40.     Read_Busy();
  41.     LCD1602_RS = 1;
  42.     LCD1602_RW = 0;
  43.     LCD1602_DB = dat;
  44.     LCD1602_EN = 1;
  45.     LCD1602_EN = 0;
  46. }

  47. void LcdSetCursor(u8 x,u8 y)   
  48. {
  49.     u8 addr;
  50.     if(y == 0)
  51.         addr = 0x00 + x;
  52.     else
  53.         addr = 0x40 + x;
  54.    
  55.     Lcd1602_Write_Cmd(addr|0x80);
  56. }

  57. void LcdShowStr(u8 x,u8 y,u8 *str)      
  58. {
  59.     LcdSetCursor(x,y);      
  60.     while(*str != '\0')
  61.     {
  62.         Lcd1602_Write_Data(*str++);
  63.     }
  64. }

  65. void InitLcd1602()               
  66. {
  67.     Lcd1602_Write_Cmd(0x38);     
  68.     Lcd1602_Write_Cmd(0x0c);
  69.     Lcd1602_Write_Cmd(0x06);
  70.     Lcd1602_Write_Cmd(0x01);     
  71. }

  72. void Delay1ms()                //@12.000MHz
  73. {
  74.    unsigned char i, j;

  75.          i = 2;
  76.          j = 239;
  77.          do
  78.          {
  79.                    while (--j);
  80.          } while (--i);
  81. }


  82. void Delay(u16 t)               
  83. {
  84.          while (--t)
  85.          Delay1ms();      
  86. }

  87. void Conut(void)
  88. {
  89.    time=TH0*256+TL0;
  90.          TH0=0;
  91.          TL0=0;
  92.          S=(time*1.7)/100;  
  93.    if (S<35)S=S+1;   
  94.    list[0]=asc[S%1000/100];
  95.    list[1]=asc[10];
  96.    list[2]=asc[S%100/10];
  97.    list[3]=asc[S%10];
  98.    list[4]=asc[12];
  99. }

  100. void  StartModule()                        
  101. {
  102.    TX=1;                                         
  103.    Delay(800);
  104.    TX=0;
  105. }

  106. void Timer0Init(void)                //@12.0000MHz
  107. {
  108.    TMOD &= 0xF0;                 
  109.          TMOD |= 0x01;                 
  110.          TL0 = 0;                 
  111.          TH0 = 0;                 
  112.          TF0 = 0;               
  113. }

  114. void main()
  115. {
  116.    Timer0Init();
  117.    InitLcd1602();
  118.    H=200;
  119.    L=100;
  120.    LcdShowStr(5,0,list);
  121.    while(1)
  122.    {
  123.       StartModule();
  124.             while(!RX);
  125.             TR0=1;                           
  126.             while(RX);                       
  127.             TR0=0;      
  128.       Conut();      
  129.       LcdShowStr(5,0,list);
  130.          }
  131. }
复制代码
完整源码: 超声波HC-SR04与STC89C52RC用1602显示.rar (34.27 KB, 售价: 1 工控币)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则