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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2470|回復: 1
打印 上一主題 下一主題
收起左側

液晶顯示超聲波測距

[復制鏈接]
跳轉到指定樓層
樓主
ID:83710 發表于 2015-6-23 23:52 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  /***********************************************************************************************************/

//hc-sr04 超聲波測距模塊 DEMO 程序
//晶振:11。0592
//接線:模塊TRIG接 P0.2  ECH0 接P0.1
//數碼管:共陽數碼管P1接數據口,P2.5 P2.4 P2.3接選通數碼管
/***********************************************************************************************************/
#include <reg52.h>                //器件配置文件
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit RX = P1^3;
sbit TX = P1^4;
sbit wela = P2^7;
sbit dula = P2^6;
unsigned int  time=0;
unsigned int  timer=0;
unsigned long S=0;
bit      flag =0;
sbit rw=P1^1;
sbit rs=P1^0;
sbit lcden=P2^5;
uchar disbuff[]={0,0,0,0};
uchar code table[]={"wrong"};
uchar code table1[]={"Welcome to use!"};

//液晶部分
void delay(uint z)  //延時函數
  {
     uint x,y;
         for(x=z;x>0;x--)
           for(y=50;y>0;y--);
  }

  void write_com(uchar com)        //寫命令
  {
     rs=0;
         lcden=0;
         P0=com;
         lcden=1;//只有在一個高脈沖下數據才被寫入
         delay(2);
         lcden=0;
  }

   void write_date(uchar date)//寫數據
  {
     rs=1;
         lcden=0;
         P0=date;
         lcden=1;//只有在一個高脈沖下數據才被寫入
         delay(2);
         lcden=0;
  }

  void display()//刷新顯示函數
  {
     uchar k;
         time=TH0*256+TL0;
         TH0=0;
         TL0=0;
       
         S=(time*1.7)/100;     //算出來是CM
         if((S>=700)||flag==1) //超出測量范圍顯示“-”
         {         
              write_com(0x80+0x40+6);
                  for(k=0;k<5;k++)
                  write_date(table[k]);
                  flag=0;
         }
         else
         {
                  disbuff[0]=S%1000/100;
                  disbuff[1]=S%1000%100/10;
                  disbuff[2]=S%1000%10 %10;
              write_com(0x80+0x40+6);
              write_date(0x30+disbuff[0]);
              write_date(0x30+disbuff[1]);
              write_date(0x30+disbuff[2]);
                  write_date('c');
                  write_date('m');
            }
  }          


  void yejininit()
  {
     uint p;
     dula=1;
         P0=0x00;
         dula=0;
         wela=1;
         P0=0xff;
         wela=0;
         rw=0;
         rs=0;
         lcden=0;
         write_com(0x38); //設置16*2顯示,5*7點陣,8位數據接口
         write_com(0x0c); //開顯示,不開光標,不閃動
         write_com(0x06); //寫一個字符后地址加1,不整屏移動
         write_com(0x01);  //顯示清0;;市局指針清0
         write_com(0x80);
         for(p=0;p<15;p++)
         write_date(table1[p]);
  }


/********************************************************/
     void zd0() interrupt 1                  //T0中斷用來計數器溢出,超過測距范圍
  {
    flag=1;                                                         //中斷溢出標志
  }
/********************************************************/
   void  zd3()  interrupt 3                  //T1中斷用來掃描數碼管和計800MS啟動模塊
  {
         TH1=0xf8;
         TL1=0x30;
         
         timer++;
         if(timer>=400)
         {
          timer=0;
          TX=1;                                        //800MS  啟動一次模塊
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();                          
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();                           
          _nop_();
          _nop_();
          _nop_();
          TX=0;
         }
  }
/*********************************************************/

  void  main(  void  )
  {  
    TMOD=0x11;                   //設T0為方式1,GATE=1;
        TH0=0;
        TL0=0;         
        TH1=0xf8;                   //2MS定時
        TL1=0x30;
        ET0=1;             //允許T0中斷
        ET1=1;                           //允許T1中斷          
        TR1=1;                           //開啟定時器
        EA=1;                           //開啟總中斷
        yejininit();
        while(1)
        {
         while(!RX);                //當RX為零時等待
         TR0=1;                            //開啟計數
         while(RX);                        //當RX為1計數并等待
         TR0=0;       
         display();                        //關閉計數                       
        }

  }

       
       
       
       
         


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:123712 發表于 2017-1-7 21:20 | 只看該作者
感謝樓主分享程序資料,正在學習
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线观看视频一区二区三区 | 欧美日韩中文字幕在线 | 三级成人在线 | 国产精品69av | 国产精品永久免费 | 成人黄色在线 | 伊人二区 | 欧美成人精品一区 | 精品自拍视频在线观看 | 我要看黄色录像一级片 | 久久精品天堂 | 国产乱码精品一区二区三区五月婷 | 日韩欧美在线免费观看 | 欧美精品网站 | 男人av的天堂 | 噜久寡妇噜噜久久寡妇 | 免费高清av| 亚洲在线成人 | 在线观看视频中文字幕 | 一区二区精品在线 | 亚州精品天堂中文字幕 | 欧美黄页 | 久久久噜噜噜www成人网 | 一区二区三区欧美在线 | 国产区精品 | 久久精品二区亚洲w码 | 99精品国产一区二区三区 | 淫片一级国产 | 国产成人av免费看 | 国产丝袜一区二区三区免费视频 | 精品国产乱码一区二区三 | 91久久精品一区二区三区 | 成人性生交大片免费看中文带字幕 | 伊人99| 男人av的天堂 | 国产91在线播放 | 欧美激情精品久久久久久 | 国产又色又爽又黄又免费 | 精品国产乱码久久久久久丨区2区 | 欧美日韩国产一区二区 | 在线免费视频一区 |