<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 語音播報超聲波測距程序

          語音播報超聲波測距程序

          作者: 時間:2016-11-25 來源:網(wǎng)絡(luò) 收藏

          ///////////////////讀出顯示結(jié)果子函數(shù)////////////////////////////
          void read()
          {
          play(0xdc); //播報“測量距離”這四個字,0xdc是之前記錄下4004錄這四個字的地址
          delay2(50000);
          delay2(50000); //延時等待播報完畢電子小制作_我愛制作_電子DIY制作套件
          s=D/100; //D是測量得到的數(shù)據(jù)值,此語句是取數(shù)據(jù)的最高位
          if(s==1) //判斷最高位(十位)如果是“1”則不讀yi而讀shi
          {
          play(0x5a); //shi的地址
          delay2(50000);
          }
          if(s>1) //如果大于1則讀出相應(yīng)數(shù)字后直接在后面加讀shi
          {
          speaknum();
          delay2(50000);
          play(0x5a);
          delay2(50000);
          }
          s=D0/10; //取次高位(個位)的值
          if(s!=0) //次高位不為0則讀出相應(yīng)的值,為0跳過
          {
          speaknum();
          delay2(50000);
          }
          play(0x64); //讀小數(shù)點“dian”
          delay2(50000);
          s=D; //取小數(shù)點后一位的值
          speaknum();
          delay2(50000);
          play(0xbe); //播報“cm”limi
          delay2(50000);
          ///////////////////////////以下是播報溫度和當(dāng)前計算的聲速,方法同上///////////////////
          play(0xf0);
          delay2(50000);
          delay2(50000);
          s=TD/100;
          if(s==1)
          {
          play(0x5a);
          delay2(50000);
          }
          if(s>1)
          {
          speaknum();
          delay2(50000);
          play(0x5a);
          delay2(50000);
          }
          if(s!=0)
          {
          s=TD0/10;
          speaknum();
          delay2(50000);
          }
          play(0x64);
          delay2(50000);
          s=TD;
          speaknum();
          delay2(50000);
          play(0xC8);
          delay2(50000);
          delay2(50000);
          play(0xe6);
          delay2(50000);
          delay2(50000);
          s=VD/1000;
          speaknum();
          delay2(50000);
          play(0xfa);
          delay2(50000);
          s=VD00/100;
          speaknum();
          delay2(50000);
          play(0x5a);
          delay2(50000);
          s=VD0/10;
          speaknum();
          delay2(50000);
          play(0x64);
          delay2(50000);
          s=VD;
          speaknum();
          delay2(50000);
          play(0xd2);
          }
          ////////////////////////////////////////////////////////////

          void main()
          {
          initlcd() ; //初始化LCD1602http://www.duankudp.com/
          while(1)
          {
          timer();
          readtemp(); //讀溫度
          delay25us_40KHz(15);
          display();
          if(key1==0) read();
          }
          }
          以下是溫度傳感器頭文件ds18b20.h
          sbit DQ=P2^2;
          uchar tempdata[2];
          uchar k=0;
          int TD;
          float T;
          void delay1(uchar i)
          {
          while(i--);
          }
          void initDS18B20() //初始化DS18B20
          {
          DQ = 1; //DQ復(fù)位
          delay1(8); //稍做延時
          DQ = 0; //單片機將DQ拉低
          delay1(80); //延時 大于 480us
          DQ = 1; //拉高總線
          delay1(30);
          }
          uchar readchar() //向DS18B20讀取一字節(jié)http://www.duankudp.com/
          {
          uchar i = 0 ;
          uchar dat = 0 ;
          for (i = 8 ; i > 0 ; i--)
          {
          DQ = 0 ;
          dat >>= 1 ;
          DQ = 1 ;
          if(DQ)
          dat |= 0x80 ;
          delay1(4) ;
          }
          return (dat) ;
          }
          void writecmd(uchar cmd) //向DS18B20寫入一字節(jié)
          {
          uchar i ;
          for (i = 8 ; i > 0 ; i--)
          {
          DQ = 0 ;
          DQ = cmd&0x01 ;
          delay1(5) ;
          DQ = 1 ;
          cmd>>=1 ;
          }
          }

          void readtemp()
          {
          initDS18B20() ;
          writecmd(0xCC) ; // 跳過讀序號列號的操作
          writecmd(0x44) ; // 啟動溫度轉(zhuǎn)換
          initDS18B20() ;
          writecmd(0xCC) ; //跳過讀序號列號的操作
          writecmd(0xBE) ; //讀取溫度寄存器
          tempdata[0] = readchar() ; //溫度低8位
          tempdata[1] = readchar() ; //溫度高8位
          TD=tempdata[1];
          TD<<=8;
          TD|=tempdata[0];
          T=TD*0.0625; //DS18B20在出廠時以配置為12位,讀取溫度時共讀取16位,最高5位為符號位,溫度在0上,符號位為0,所以把后11位的2進制轉(zhuǎn)化為10進制后在乘以0.0625便為所測的溫度
          TD=T*10+0.5; //將它放大10倍, 使顯示時可顯示小數(shù)點后一位, 并對小數(shù)點后第二2進行4舍5入
          }

          一下是液晶顯示頭文件lcd.h
          sbit RS=P2^5;
          sbit RW=P2^6;
          sbit EN=P2^7;
          #define uchar unsigned char
          #define DATA P0
          #define busy 0x80

          void chkbusy() //檢測狀態(tài)
          {
          DATA=0xff;
          RS=0;
          RW=1;
          EN=1;
          _nop_();
          _nop_();
          while(busy&DATA);
          EN=0;
          }
          void WIR(uchar CMD,uchar i) //寫命令
          {
          if(i) chkbusy();
          RS=0;
          RW=0;
          EN=1;
          _nop_();
          _nop_();
          DATA=CMD;
          EN=0;
          }
          void WDR(char c) //寫數(shù)據(jù)
          {
          chkbusy();
          RS=1;
          RW=0;
          EN=1;
          _nop_();
          _nop_();
          DATA=c;
          EN=0;
          }
          void displaychar(uchar x,uchar y,char c) //指定行列顯示字符
          {
          if(y==1) x|=0x40; //當(dāng)要顯示第二行時地址碼+0x40;
          x|=0x80;
          WIR(x,0);
          WDR(c);
          }
          void displaystring(uchar x,uchar y,char s[]) //指定行列顯示字符串http://www.duankudp.com/
          {
          uchar p=0;
          while(1)
          {
          displaychar(x,y,s[p]);
          p++;
          if(s[p]==0)
          break;
          x++;
          if(x>=15) //每行最多顯示16個字符
          {
          x=0;
          y=!y; //如果一行顯示不完,則轉(zhuǎn)到下一行或上一行顯示
          }
          }
          }
          void initlcd() //初始化lcd
          {
          WIR(0x38,0);
          WIR(0x38,1); //顯示模式設(shè)置
          WIR(0x08,1); //關(guān)閉顯示
          WIR(0x01,1); //清屏
          WIR(0x06,1); //光標(biāo)移位設(shè)置
          WIR(0x0c,1); //顯示開及光標(biāo)設(shè)置
          }

          上一頁 1 2 下一頁

          關(guān)鍵詞: 語音播報超聲波測

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();