找回密码
 立即注册

QQ登录

只需一步,快速开始

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

超声模的测距程序,参数自调,亲测可用。

[复制链接]
跳转到指定楼层
楼主
ID:119819 发表于 2019-4-5 09:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
            
#include <STC15F2K60S2.H>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char

sbit reseve=P1^0; //数据传回
sbit trade=P1^1; //使能信号
sbit RS=P3^5;        //数据、命令选择
sbit RW=P3^6;        //读、写选择
sbit EN =P3^7;        //使能信号
uint time=0;
unsigned int distance=0;
uchar SS;
uint ge,shi,bai,a,b;

void display();
void JISUAN();
void delay(unsigned int x);

void delay(unsigned int x)           
  {
   uchar j,k,l;
   for(j=0;j<x;j++)
    {
          for(k=0;k<60;k++)
          for(l=0;l<11;l++);
        }
  }

void check()   //液晶屏查忙
        {
           RS=0;
           RW=1;
           EN=1;
           SS=P0;  //液晶屏数据传输用的是P0口
           EN=0;
           RW=0;
           RS=1;
        }
void write_com(uchar com)  //向液晶屏写入命令
        {
           check();
           RS=0;
           RW=0;
           EN=1;
           P0=com;
           delay(5);
           EN=0;
           RW=1;
        }
void write_data(uchar dat)        //向液晶屏写入数据
        {
           check();
           RS=1;
           RW=0;
           EN=1;
           P0=dat;
           delay(5);
           EN=0;
           RW=1;
        }
void init()                   //液晶屏的初始化
{
   RS=0;
   write_com(0x38);delay(5); //不检测查忙信号
   write_com(0x38);delay(5);
   write_com(0x38);delay(5);
   write_com(0x38);delay(5);
   write_com(0x08);delay(5);//显示关闭
   write_com(0x01);delay(5);//显示清屏
   write_com(0x06);delay(5);//显示光标移动
   write_com(0x0c);delay(5);//显示光标设置
}

void vioce_inin()          //T0定时器初始化
  {  
    TMOD|=0x01;                //16位计时   
        TH0=0;
        TL0=0;         
        ET0=1;          //T0中断打开                             
        EA=1;                        //总中断打开
  }          
void voice_data()
         {
             trade=1;        //触发测距,给至少 10us 的高电平信号                              
             delay(50);
             trade=0;
                 while(!reseve);//高电平持续的时间就是超声波从发射到返回的时间               
                 TR0=1;                            
                 while(reseve);
                 TR0=0;                       
             time = TH0;
             time <<= 8;
             time |= TL0;         //  计算时间
                 TH0=0;
             TL0=0;  
             distance = (unsigned int)(time*0.017)*1.15; //计算距离
             if((distance>=900)||(TF0==1))         //如果超出距离就显示999
             {         
                  TF0=0;
                  ge=9;
                  shi=9;
                  bai=9;
             }               
          else                                         //否则按实际距离显示
          {
                 bai=distance/100;
                 shi=distance/10%10;
                 ge=distance%10;
          }               
         }
void display()                         //在液晶屏上显示
{
     write_com(0x83);delay(5);
     write_data(0x30+bai);delay(5);
     write_data(0x30+shi);delay(5);
     write_data(0x30+ge);delay(5);
         write_data(0x43);delay(5);
         write_data(0x4d);delay(5);          
}
void main()
{
   init();           //液晶屏的初始化
   vioce_inin(); //T0定时器初始化
   while(1)
    {
           voice_data();   //测距
           display();          //显示
        }

}                 

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

使用道具 举报

沙发
ID:119819 发表于 2019-4-5 09:54 | 只看该作者
需要的可自提
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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