找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 739|回復: 1
收起左側

超聲模的測距程序,參數(shù)自調,親測可用。

[復制鏈接]
ID:119819 發(fā)表于 2019-4-5 09:53 | 顯示全部樓層 |閱讀模式
            
#include <STC15F2K60S2.H>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char

sbit reseve=P1^0; //數(shù)據(jù)傳回
sbit trade=P1^1; //使能信號
sbit RS=P3^5;        //數(shù)據(jù)、命令選擇
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;  //液晶屏數(shù)據(jù)傳輸用的是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)        //向液晶屏寫入數(shù)據(jù)
        {
           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;        //觸發(fā)測距,給至少 10us 的高電平信號                              
             delay(50);
             trade=0;
                 while(!reseve);//高電平持續(xù)的時間就是超聲波從發(fā)射到返回的時間               
                 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();          //顯示
        }

}                 

回復

使用道具 舉報

ID:119819 發(fā)表于 2019-4-5 09:54 | 顯示全部樓層
需要的可自提
回復

使用道具 舉報

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

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表