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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2293|回復(fù): 7
收起左側(cè)

傳感器測量的數(shù)值,通過串口送到上位機(jī),不懂以下程序求解答

[復(fù)制鏈接]
ID:318095 發(fā)表于 2018-4-27 21:17 | 顯示全部樓層 |閱讀模式
不懂紅色部分,求大神解答,謝謝
#include<reg52.h>
#include<math.h>
#define uchar unsigned char

sbit trig=P0^3;
sbit echo=P0^2;

void main()
{           float a,b1,c1,k;int b,c,i,j;         char x[9];
       echo=1;
           TMOD=0X21;
           TH1=0XFd;
           TL1=0XFd;
           TR1=1;
           SCON=0X50;
           while(1)
           {   TH0=0X00;TL0=0X00;
               trig=1;
                   k++;k++;k++;        k++; k++;  k++;k++;  
                   trig=0;
                   while(!echo);
                   TR0=1;
                   while(echo);
                  
                   a=TH0*256+TL0;
                   a=a*12*17;            
                   TR0=0;
                   a=(a/11059.2)+0.7;        //以上為超聲波測距,能明白
                  
                   c1=modf(a,&b1);
                   b=(int)(b1);
                   c=(int)(1000*c1);
                  
                   x[0]=0x30+b/100;
                   x[1]=0x30+b/10-10*(b/100);
                   x[2]=0x30+b-10*(b/10);
                   x[3]=0x2e;
                   x[4]=0x30+c/100;
                   x[6]=0x30+c/10-10*(c/100);
                   x[7]=0x30+c-10*(c/10);
                   x[8]='\0';
                   for(i=0;i<9;i++)
                      {   if((x[ i]==0x30)&&(i<2))
                              {    if(!(x[0]==0x30))
                                                    {          SBUF=x[ i];
                                              while(!TI);
                                              TI=0;
                                                             }
                                                   else
                                                    {    SBUF=0x20;
                                             while(!TI);
                                             TI=0;
                                                                }
                                          }
                                   else {  SBUF=x[ i];
                                   while(!TI);
                                    TI=0;
                                                }
                            }
                   for(i=0;i<110;i++)
                       for(j=0;j<114;j++);
                }
}

回復(fù)

使用道具 舉報(bào)

ID:318095 發(fā)表于 2018-4-27 21:25 | 顯示全部樓層
我感覺應(yīng)該先進(jìn)行AD 轉(zhuǎn)換,再送顯,但是不知道為什么要用到數(shù)組
回復(fù)

使用道具 舉報(bào)

ID:318768 發(fā)表于 2018-4-29 21:01 | 顯示全部樓層
為什么不用printf()函數(shù)呢?
回復(fù)

使用道具 舉報(bào)

ID:318768 發(fā)表于 2018-4-29 21:08 | 顯示全部樓層
程序是先發(fā)3位整數(shù),再發(fā)一個(gè)點(diǎn)(0x2e=.),再發(fā)送4個(gè)小數(shù)。求余運(yùn)算
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2018-4-30 18:29 | 顯示全部樓層
                a=(a/11059.2)+0.7;        //以上為超聲波測距,能明白
                //獲取的數(shù)值分解成整數(shù)和小數(shù),再轉(zhuǎn)換成十進(jìn)制字符。
                //把3位整數(shù)、小數(shù)點(diǎn)、3位小數(shù)、空格共9個(gè)字節(jié)分別保存在緩存數(shù)組
                c1=modf(a,&b1);
                b=(int)(b1);
                c=(int)(1000*c1);
                x[0]=0x30+b/100;
                x[1]=0x30+b/10-10*(b/100);
                x[2]=0x30+b-10*(b/10);
                x[3]=0x2e;
                x[4]=0x30+c/100;
                x[6]=0x30+c/10-10*(c/100);
                x[7]=0x30+c-10*(c/10);
                x[8]='\0';
                //緩存數(shù)組中9個(gè)字節(jié)合成一幀數(shù)據(jù)串發(fā)送到上位機(jī)
                for(i=0;i<9;i++)
                {
                        if((x[i]==0x30)&&(i<2))
                        {
                                if(!(x[0]==0x30))
                                {
                                        SBUF=x[i];
                                        while(!TI);
                                        TI=0;
                                }
                                else
                                {   
                                        SBUF=0x20;
                                        while(!TI);
                                        TI=0;
                                }
                        }
                        else
                        {
                                SBUF=x[i];
                                while(!TI);
                                TI=0;
                        }
                }
                //延時(shí)
                for(i=0;i<110;i++)
                        for(j=0;j<114;j++);
        }
}
回復(fù)

使用道具 舉報(bào)

ID:318095 發(fā)表于 2018-5-4 15:44 | 顯示全部樓層
wulin 發(fā)表于 2018-4-30 18:29
a=(a/11059.2)+0.7;        //以上為超聲波測距,能明白
                //獲取的數(shù)值分解成整數(shù)和小數(shù),再轉(zhuǎn)換成十進(jìn) ...

51單片機(jī)作為下位機(jī)跟PC端通信 用RS232作為串口通信方式  不用進(jìn)行模數(shù)轉(zhuǎn)換嗎? 就是能直接將十進(jìn)制數(shù)字,字符等直接傳送嗎?
回復(fù)

使用道具 舉報(bào)

ID:318095 發(fā)表于 2018-5-4 17:01 | 顯示全部樓層
xdata911 發(fā)表于 2018-4-29 21:08
程序是先發(fā)3位整數(shù),再發(fā)一個(gè)點(diǎn)(0x2e=.),再發(fā)送4個(gè)小數(shù)。求余運(yùn)算

0x2e=.   那0x30還有0x20有特殊含義嗎?
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2018-5-4 17:45 | 顯示全部樓層
han333 發(fā)表于 2018-5-4 15:44
51單片機(jī)作為下位機(jī)跟PC端通信 用RS232作為串口通信方式  不用進(jìn)行模數(shù)轉(zhuǎn)換嗎? 就是能直接將十進(jìn)制數(shù)字 ...

串口只負(fù)責(zé)一次傳送一個(gè)字節(jié),其代表的含義由通訊協(xié)議解釋。不存在模數(shù)轉(zhuǎn)換問題。
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩欧美不卡 | 一级在线 | 九九av| 精品国产久| av手机在线播放 | 一区二区三区福利视频 | 一二三四在线视频观看社区 | 国产一区免费 | 欧美激情精品久久久久久 | 日本免费在线 | 精品一区二区三区视频在线观看 | 综合久久久 | 欧美日韩中文在线观看 | 精品成人在线 | 成人一级黄色毛片 | 亚洲视频 欧美视频 | 91精品久久久久久久久 | 色婷婷综合久久久久中文一区二区 | 日本中文字幕在线视频 | 国产一级片免费在线观看 | 久久精品一区 | 欧美午夜视频 | 亚洲精品二区 | 亚洲欧美网站 | 日韩精品一区二区三区中文字幕 | 精品国产一区二区三区性色av | 免费看国产一级特黄aaaa大片 | 97视频人人澡人人爽 | 精品国产一区二区国模嫣然 | 亚洲精品视频观看 | 欧美久久一区二区三区 | 国产午夜三级一区二区三 | 91视频国产区 | 超碰一区二区 | 成年免费在线观看 | 凹凸日日摸日日碰夜夜 | 国产美女福利在线观看 | 一区二区亚洲 | 国产精品久久久久久久免费大片 | 成人午夜影院 | 亚洲精品国产成人 |