在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            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ù)點(diǎn)“dian”
            delay2(50000);
            s=D; //取小數(shù)點(diǎn)后一位的值
            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; //單片機(jī)將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進(jìn)制轉(zhuǎn)化為10進(jìn)制后在乘以0.0625便為所測的溫度
            TD=T*10+0.5; //將它放大10倍, 使顯示時可顯示小數(shù)點(diǎn)后一位, 并對小數(shù)點(diǎn)后第二2進(jìn)行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)閉