久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網(wǎng) >> MCU設計實例 >> 瀏覽文章

51單片機驅(qū)動超聲波測距模塊C51程序

作者:佚名   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2013年11月06日   【字體:
#include<reg52.h>
#define  uchar unsigned char
#define  uint  unsigned int
#define  ulong unsigned long
 
//******************* 函數(shù)聲明************************** 
void init_Total(); //總初始化 
void init_T0();    //初始化定時器T0 
void init_T1();    //初始化定時器T1 
void init_inter0();//初始化外部中斷1 
void send_T(); 
void delay(uint z);//延時一段時間 
void delay_300us();//延時300us 
void delay_100us();//延時100us 
 
//******************************************************** 
 
sbit  lcdrs=P1^7;
sbit  lcdrw=P3^1;
sbit  lcden=P1^5;//1602液晶控制端
sbit  send=P1^0;
//sbit BEEP=P2^5;
sbit wei=P2^6;
sbit duan=P2^7;
volatile uchar Count_TH ,Count_TL;//分別讀計數(shù)器T1的高位TH1,低位TL1 
 
uchar t0,flag;
uint time;
uchar code table1[]=" distance       ";
uchar code table2[]="                ";//初始化顯示
 
void write_com(uchar com)//1602寫指令 函數(shù)
{
    lcdrs=0;
    P0=com;
    delay(5);
    lcden=1;
    delay(5);
    lcden=0;        
}
void write_data(uchar datb)//1602寫數(shù)據(jù) 函數(shù)
{
    lcdrs=1;
    P0=datb;
    delay(1);
    lcden=1;
    delay(1);
    lcden=0;        
}
 
 
void distance(uchar addr,uint datb)     
{
    uchar bai,shi,ge ;
        bai=datb/100;
        shi=datb%100/10;
        ge=datb%10; 
    write_com(0x80+0x40+addr);
    write_data(0x30+bai);   
    write_data(0x30+shi);   
    write_data(0x30+ge);
}
 
 /************************************************************************************** 
* 名        稱 :void init_Total() 
* 功        能 :總初始化 
* 入 口 參  數(shù) :NULL 
* 全 局 變  量 :NULL   
* 返   回   值 :NULL 
**************************************************************************************/ 
void init_Total() 
{ 
    init_T0();    //初始化定時器T0為工作方式2 
    init_T1();   //初始化定時器T1為工作方式1 
    init_inter0();//初始化外部中斷1 
    EA=1;   //開總中斷 
} 
/************************************************************************************** 
* 名        稱 :void init_T0() 
* 功        能 :初始化定時器T0為工作方式2 
* 入 口 參  數(shù) :NULL 
* 全 局 變  量 :NULL   
* 返   回   值 :NULL 
**************************************************************************************/
void init_T0() 
{ 
    TMOD=0X12; 
    TH0=0XE7; 
    TL0=0XE7; 
    EA=0; 
    ET0=1; 
    TR0=1; 
} 
/************************************************************************************** 
* 名        稱 :void init_T1() 
* 功        能 :初始化定時器T1為工作方式1 
* 入 口 參  數(shù) :NULL 
* 全 局 變  量 :NULL   
* 返   回   值 :NULL 
**************************************************************************************/
 
void init_T1() 
{ 
    TMOD=0X12; 
    TH1=0; 
    TL1=0; 
    EA=0; 
    ET1=1; 
    TR1=1; 
} 
/************************************************************************************** 
* 名        稱 :void init_inter1() 
* 功        能 :初始化外部中斷1為低電平觸發(fā)方式 
* 入 口 參  數(shù) :NULL 
* 全 局 變  量 :NULL   
* 返   回   值 :NULL 
**************************************************************************************/
void init_inter0() 
{ 
    IT0=0; //低電平觸發(fā) 
    EA=0; 
    EX0=0;      //關外部中斷1   
} 
/************************************************************************************** 
* 名        稱 :void inter_T0() interrupt 1 
* 功        能 :定時器T0中斷函數(shù)產(chǎn)生40KHZ的方波 
* 入 口 參  數(shù) :NULL 
* 全 局 變  量 :NULL   
* 返   回   值 :NULL 
**************************************************************************************/
void inter_T0() interrupt 1 
{ 
    send=~send; 
} 
 
/************************************************************************************** 
* 名        稱 :void inter_T1() interrupt 3 
* 功        能 :定時器T1中斷函數(shù) 
* 入 口 參  數(shù) :NULL 
* 全 局 變  量 :NULL   
* 返   回   值 :NULL 
**************************************************************************************/
void inter_T1() interrupt 3 
{ 
    TR1=0; 
    EX0=0;  //關外部中斷0
 
    TH1=0; 
    TL1=0; 
    flag=2; 
} 
/************************************************************************************** 
* 名        稱 :void inter1() interrupt 2 
* 功        能 :外部中斷1函數(shù) 
* 入 口 參  數(shù) :NULL 
* 全 局 變  量 :Count_TH,Count_TL   
* 返   回   值 :NULL 
**************************************************************************************/
void inter0() interrupt 0
{ 
    TR1=0; 
    EX0=0; 
    flag=1; 
     
} 
/************************************************************************************** 
* 名        稱 :void send_T()  
* 功        能 :發(fā)送10個超聲波脈沖 
* 入 口 參  數(shù) :NULL 
* 全 局 變  量 :Count 
* 返   回   值 :NULL 
**************************************************************************************/
void send_T()     
{ 
    delay_100us();//發(fā)送100us的方波 
    TR0=0;//關定時器T0 
} 
 
/************************************************************************************** 
* 名        稱 :void delay(uint z) 
* 功        能 :延時一段時間 
* 入 口 參  數(shù) :z 
* 全 局 變  量 :NULL 
* 返   回   值 :NULL 
**************************************************************************************/
 
void delay(uint z) 
{ 
    uint x,y; 
    for(x=z;x>0;x--) 
    for(y=1000;y>0;y--); 
} 
 
/************************************************************************************** 
* 名        稱 :void delay_300us() 
* 功        能 :延時300us 
* 入 口 參  數(shù) :NULL 
* 全 局 變  量 :NULL 
* 返   回   值 :NULL 
**************************************************************************************/
void delay_300us() 
{ 
    uint x; 
    for(x=75;x>0;x--); 
} 
 
/************************************************************************************** 
* 名        稱 :void delay_100us() 
* 功        能 :延時100us 
* 入 口 參  數(shù) :NULL 
* 全 局 變  量 :NULL 
* 返   回   值 :NULL 
**************************************************************************************/
void delay_100us() 
{ 
    uint x; 
    for(x=24;x>0;x--); 
} 
  
 
 
//*************************************************************************************** 
void main()  
{  
  uint t,s; 
  init_Total();//總初始化  
  while(1) 
  {   
    TR1=1;//啟動定時器1 
    TR0=1;//啟動定時器0  
    send_T();     //發(fā)送100us超聲波脈沖 
    delay_300us();//延時300us跳過盲區(qū) 
 
    EX1=1;        //開外部中斷1 
    while(!flag); //等待回波或定時器T1溢出 
    if(flag==1)   //回波 
    { 
        Count_TH=TH1;//讀計數(shù)器T1的高位TH1 
        Count_TL=TL1;//讀計數(shù)器T1的低位TL1 
 
        t=Count_TH*256+Count_TL; 
        s=(33140*t)/400000; 
 
        distance(4,s);//液晶1602顯示距離 
    }          
 
  /*    else   //定時器T1溢出 
    { 
        Count_TH=0XFE; 
        Count_TL=0X7F; 
        // P2=Count_TH; 
        P2=Count_TL; 
 
    } 
    */
    delay(150); 
 
    flag=0;//標志位清0 
    TH1=0; //T1清0重新計時 
    TL1=0;  
  } 
} 
關閉窗口

相關文章

主站蜘蛛池模板: 国产精品久久久久久久久久久久久 | 性国产xxxx乳高跟 | 精品不卡 | 天天躁日日躁狠狠的躁天龙影院 | 欧美精三区欧美精三区 | av三级在线观看 | 亚洲av毛片| 99福利视频 | 精品国产31久久久久久 | 欧美日韩专区 | 国产精品免费一区二区三区四区 | 天天搞天天操 | 九九导航 | 国产一区二区三区四区五区3d | 亚洲69p| 一区免费 | 国产精品久久一区二区三区 | 91网在线观看| 色婷婷激情 | 福利网站在线观看 | 九九福利 | a爱视频| 99热精品久久 | 国产中文一区二区三区 | 国产精品成人一区二区三区 | 在线91| 少妇精品久久久久久久久久 | 最新高清无码专区 | 欧美日韩一区精品 | 国产精品视频久久 | 手机看片在线播放 | 成人午夜在线 | 野狼在线社区2017入口 | 久久综合一区 | 欧美久久一区二区 | h在线看| 韩日一区二区 | 亚洲精品一区二区三区在线 | 国产精品久久久久婷婷二区次 | 91精品国产91久久久久久 | 日韩在线一区二区三区 |