找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2061|回复: 4
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
看着大家都再使用超声波模块,楼主也想试试,看效果怎么样,说干就干。

单片机源程序如下:
  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, 下载次数: 47)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:506248 发表于 2021-5-1 16:35 | 只看该作者
虽然程序调通了,但说实话感觉准确性不是很高,楼主水平有限仅供大家参考,网上这类程序还是蛮多的。

回复

使用道具 举报

板凳
ID:506248 发表于 2021-5-1 16:37 | 只看该作者
我们画电路图,LCD1602并没有画,根据源程序应该可以知道是接在那些IO上的。


回复

使用道具 举报

地板
ID:942433 发表于 2021-6-22 18:08 | 只看该作者
能加你 帮我过一个设计吗 大佬
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表