欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 超聲波lcd1602顯示 [打印本頁]

作者: 電子工程協會    時間: 2017-12-23 16:35
標題: 超聲波lcd1602顯示
僅供大家參考
   超聲波程序.zip (61.16 KB, 下載次數: 15)


#include<reg51.h>
#include<intrins.h>       
#include"lcd.h"
sbit Trig = P2^1;
sbit Echo = P2^0;

unsigned char PuZh[]="Distance:       ";
unsigned char code ASCII[15] =    {'0','1','2','3','4','5','6','7','8','9','.','-','M'};

static unsigned char DisNum = 0; //顯示用指針                                  
       unsigned int  time=0;
           unsigned long S=0;

           bit      flag =0;                 //標志位flag
           unsigned char disbuff[4]           ={ 0,0,0,0,};

void Conut(void)
        {
         time=TH0*256+TL0;         //*256是16位計數器的高8位和低八位之分,恢復成16位數的時候要*256
                                                 //    將字節轉化成十進制數,比如定時器中裝的是0xabcd,轉化成十進制就是d+c*16+b*16*16+a*16*16*16=43981。
                                                 //    發現ab*256=(b+a*16)*256=43776,cd=d+c*16=205,43776+205=43981
         TH0=0;
         TL0=0;
       
         S=(time*1.7)/100;     //算出來是CM           其中*0.0172是根據超聲的聲速、單片機的頻率,得出來的一個系數。
         
         if((S>=300)) //超出測量范圍顯示“-”||flag==1
         {         
                  flag=0;
//                  P1 = 0XFD;
                 
                  DisplayOneChar(0, 1, ASCII[11]);
                  DisplayOneChar(1, 1, ASCII[10]);        //顯示個點
                  DisplayOneChar(2, 1, ASCII[11]);
                  DisplayOneChar(3, 1, ASCII[11]);
                  DisplayOneChar(4, 1, ASCII[12]);        //顯示M
         }
         else
         {
//                   P1 = 0X00;
                  disbuff[0]=S%1000/100;
                  disbuff[1]=S%1000%100/10;
                  disbuff[2]=S%1000%10 %10;
                  DisplayOneChar(0, 1, ASCII[disbuff[0]]);
                  DisplayOneChar(1, 1, ASCII[10]);        //顯示點
                  DisplayOneChar(2, 1, ASCII[disbuff[1]]);
                  DisplayOneChar(3, 1, ASCII[disbuff[2]]);
                  DisplayOneChar(4, 1, ASCII[12]);        //顯示M
         }
        }

void zd0() interrupt 1                  //T0中斷用來計數器溢出,超過測距范圍
{
    flag=1;                                                         //中斷溢出標志
}

void  StartModule()                          //啟動模塊
{
          Trig=1;                                             //啟動一次模塊
          
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          Trig=0;
       
}
void delayms(unsigned int ms)
{
        unsigned char i=100,j;
        for(;ms;ms--)
        {
                while(--i)
                {
                        j=10;
                        while(--j);
                }
        }
}

void main(void)
{
         TMOD=0x01;                   //設定時器0為工作方式1,GATE=1;
         TH0=0;
         TL0=0;         
         ET0=1;            //開定時器0中斷
         EA=1;                           //開啟總中斷       

        InitLcd1602();
        LcdShowStr(0,0,PuZh);
        while(1)
        {
                 StartModule();
             while(!Echo);                //當RX為零時等待
             TR0=1;                            //開啟計數
             while(Echo);                        //當RX為1計數并等待
             TR0=0;                                //關閉計數
                       
         Conut();                        //計算
                 delayms(80);
        }
                       
}


作者: 211209    時間: 2018-1-5 20:22
看看行不行
作者: 想學習的電子熱    時間: 2019-4-20 15:46
我能說用這個程序,我的keil直接死機了么

作者: WDYWJ    時間: 2019-4-23 19:59
1602管腳沒定義吧。





歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1