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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

用DS18B20溫度傳感器設(shè)計溫控系統(tǒng)。 始終有”16-1.C(154): error C193: 'parameter...

[復(fù)制鏈接]
ID:147475 發(fā)表于 2017-1-7 01:06 | 顯示全部樓層 |閱讀模式
#include<reg52.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int

sbit ds = P2^2;
sbit dula = P2^6;
sbit wela = P2^7;
sbit beep = P2^3;

uint temp;
float f_temp;
uint warn_11 = 270;
uint warn_12 = 250;
uint warn_h1 = 300;
uint warn_h2 = 320;
sbit led1 = P1^1;
sbit led2 = P1^2;
sbit led3 = P1^3;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,0x7f,0x6f,//帶小數(shù)點的0~9編碼
0xbf,0x86,0xdb,0xcf,
0xe6,0xed,0xfd,0x87,
0xff,0xef};//不帶小數(shù)點的0~9編碼

/*------延時函數(shù)------*/
void delay(uint z)
{
        uint x,y;
        for(x = z;x>0;x--)
                for(y = 110;y>0;y--);
}
/*DS18B20復(fù)位,初始化函數(shù)----*/
void dsreset(void)
{
        uint i;
        ds = 0;
        i = 103;
        while(i>0)i--;
        ds = 1;
        i = 4;
        while(i>0)i--;
}
/*-----讀一位數(shù)據(jù)函數(shù)------*/
bit tempreadbit(void)
{
        uint i;
        bit dat;
        ds = 0;i++;//“i++”起延時作用
        ds = 1;i++;i++;
        dat = ds;
        i = 8;while(i>0)i--;
        return(dat);
}
/*-----讀一個字節(jié)數(shù)據(jù)函數(shù)------*/
uchar tempread(void)
{
        uchar i,j,dat;
        dat = 0;
        for(i = 1;i<8;i++)
                {
                        j =  tempreadbit();
                        dat = (j<<7)|(dat>>1);//讀出的數(shù)據(jù)最低位在最前面,這樣剛好一個字節(jié)在dat里面
                }
        return (dat);
}
/*-----向DS18B20向?qū)懸粋字節(jié)數(shù)據(jù)函數(shù)------*/
void tempwritebyte(uchar dat)
{
        uint i;
        uchar j;
        bit testb;
        for(j = 1;j<8;j++)
                {
                        testb = dat&0x01;
                        dat = dat>>1;
                        if(testb)
                        {
                                ds = 0;
                                i++;i++;   //“i++”起延時作用
                                ds = 1;
                                i = 8;while(i>0)i--;
                        }
                        else
                        {
                                ds = 0;//寫0
                                i = 8;while(i>0)i--;
                                ds = 1;
                                i++;i++        ;
                        }
                }
}
/*-----DS18B20開始獲取溫度并轉(zhuǎn)換------*/
void tempchange(void)
{
        dsreset();
        delay(1);
        tempwritebyte(0xcc);//寫跳過讀ROM指令
        tempwritebyte(0x44);//寫溫度轉(zhuǎn)換指令
}
/*-----讀取寄存器中儲存的溫度數(shù)據(jù)------*/
void get_temp()
{
        uchar a,b;
        dsreset();
        delay(1);
        tempwritebyte(0xcc);
        tempwritebyte(0xbe);
        a = tempread();//讀低8位
        b = tempread();//讀高8位
        temp = b;
        temp<<= 8;//兩字節(jié)組合為一個字
        temp =         templa;
        f_temp = temp*0.0625;//溫度在寄存器中為12位,分辨率為0.0625°
        temp = f_temp*10+0.5;//乘以10表示小數(shù)點后面只取一位,加0.5是四舍五入
        f_temp = temp+0.05;
        return temp;//temp是整型       
}
/*-----數(shù)據(jù)顯示程序------*/
void display(uchar num,uchar dat)
{
        uchar i;
        dula = 0;
        P0 = table[dat];//編碼賦給P0口
        dula = 1;

        wela = 0;
        i = 0xFF;
        i =        i&(~(0X01)<<(num));//用i來存儲位選數(shù)據(jù),只有一位為0
        P0 = i;
        wela = 1;
        wela = 0;
        delay(1);
}
/*-----顯示溫度數(shù)值函數(shù)t傳遞的是整型的溫度值------*/
void dis_temp(uint t)
{
        uchar i;
        i = t/100;                          //除以100得到商,為溫度的十位
        display(0,i);                  //在第一個數(shù)碼管上顯示
        i = t%100/10;                  //100取余數(shù)再除以10得到商,為溫度的個位
        display(1,i+100);          //在第二個數(shù)碼管上顯示
        i = t%100%10;          //100取余數(shù)再用10取余,為溫度的小數(shù)位
        display(2,i);                  //在第三個數(shù)碼管上顯示
}
/*-----蜂鳴器報警,燈閃爍------*/
void warn(uint s,uchar led)
{
        uchar i;i = s;
        beep = 0;///蜂鳴器響
        P1 = ~(led);
        while(i--)
        {
                dis_temp(get_temp());//用溫度顯示函數(shù)起到延時作用
        }                                                                                                       
        beep = 1;//蜂鳴器不響
        P1 = 0XFF;//控制相應(yīng)的燈滅
        i = s;
        while(i--)
        {
                dis_temp(get_temp());//用溫度顯示函數(shù)起到延時作用
        }
}
/*-----溫度處理函數(shù)-------*/
void deal(uint t)
{
        uchar i;
        if((t>warn_12)&&(t<=warn_11))//大于25度小于27度
                {
                        warn(40,0x01);//第一個燈亮,蜂鳴器發(fā)出“滴”聲
                }       
        else if(t<warn_12)//小于25度
                {
                        warn(10,0x03);//第一個和第二個燈亮,蜂鳴器發(fā)出“滴”聲
                }
        else if((t<warn_h2)&&(t<=warn_h1))//小于32度和大于30度
                {
                        warn(40,0x04);//第三個燈亮,蜂鳴器發(fā)出“滴”聲
                }
        else if(t>warn_h2)//大于32度
                {
                        warn(10,0x0c);//第三個和第四個燈亮,蜂鳴器發(fā)出“滴”聲
                }
        else                                //在27度到30度之間時只是調(diào)用顯示函數(shù)延時
                {
                        i = 40;
                        while(i--);
                        {
                                dis_temp(get_temp());
                        }
                }
}
/*------------串口初始化函數(shù)-----------*/
void init_com(void)
{
        TMOD = 0x20;  
    PCON = 0X00;
        SCON = 0X50;
        TH1 = 0XFd;
        TL1 = 0XFd;//baud9600
    TR1 = 1;
}
/*------------串口數(shù)據(jù)發(fā)送函數(shù)-----------*/
void comm(char *parr)
{
        do
        {
                SBUF = *parr++;//發(fā)送數(shù)據(jù)
                while(!TI);//等待發(fā)送完成標志為1
                TI = 0;//標志清零
        }while(*parr);//保持循環(huán)直到字符為'\0'
}
/*-----------主函數(shù)-------------------*/
void main()
{
        uchar buff[4],i;
        dula = 0;
        wela = 0;
        init_com();
        while(1)
        {
                tempchange();//溫度轉(zhuǎn)換器
                for(i = 10;i>0;i--)
                        {
                                dis_temp(get_temp());//獲取溫度并顯示       
                        }
                deal(temp);//進行溫度處理
                springtf(buff,"%f",f_temp);//將浮點型溫度格式化為字符型
                for(i = 10;i>0;i--)
                        {
                                dis_temp(get_temp());//溫度并顯示       
                        }
                comm(buff);//串口發(fā)送數(shù)據(jù)
                for(i = 10;i>0;i--)
                        {
                                dis_temp(get_temp());//獲取溫度并顯示       
                        }
        }       
}

回復(fù)

使用道具 舉報

ID:149988 發(fā)表于 2017-1-7 07:45 | 顯示全部樓層

RE: 用DS18B20溫度傳感器設(shè)計溫控系統(tǒng)。 始終有”16-1.C(154): error C193:

////////////////和/******************符號部分有錯誤
#include<reg52.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
sbit ds = P2^2;
sbit dula = P2^6;
sbit wela = P2^7;
sbit beep = P2^3;

uint temp;
float f_temp;
uint warn_11 = 270;
uint warn_12 = 250;
uint warn_h1 = 300;
uint warn_h2 = 320;
sbit led1 = P1^1;
sbit led2 = P1^2;
sbit led3 = P1^3;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,0x7f,0x6f,//帶小數(shù)點的0~9編碼
0xbf,0x86,0xdb,0xcf,
0xe6,0xed,0xfd,0x87,
0xff,0xef};//不帶小數(shù)點的0~9編碼
/*------延時函數(shù)------*/
void delay(uint z)
{
        uint x,y;
        for(x = z;x>0;x--)
                for(y = 110;y>0;y--);
}
/*DS18B20復(fù)位,初始化函數(shù)----*/
void dsreset(void)
{
        uint i;
        ds = 0;
        i = 103;
        while(i>0)i--;
        ds = 1;
        i = 4;
        while(i>0)i--;
}
/*-----讀一位數(shù)據(jù)函數(shù)------*/
bit tempreadbit(void)
{
        uint i;
        bit dat;
        ds = 0;i++;//“i++”起延時作用
        ds = 1;i++;i++;
        dat = ds;
        i = 8;while(i>0)i--;
        return(dat);
}
/*-----讀一個字節(jié)數(shù)據(jù)函數(shù)------*/
uchar tempread(void)
{
        uchar i,j,dat;
        dat = 0;
        for(i = 1;i<8;i++)
                {
                        j =  tempreadbit();
                        dat = (j<<7)|(dat>>1);//讀出的數(shù)據(jù)最低位在最前面,這樣剛好一個字節(jié)在dat里面
                }
        return (dat);
}
/*-----向DS18B20向?qū)懸粋字節(jié)數(shù)據(jù)函數(shù)------*/
void tempwritebyte(uchar dat)
{
        uint i;
        uchar j;
        bit testb;
        for(j = 1;j<8;j++)
                {
                        testb = dat&0x01;
                        dat = dat>>1;
                        if(testb)
                        {
                                ds = 0;
                                i++;i++;   //“i++”起延時作用
                                ds = 1;
                                i = 8;while(i>0)i--;
                        }
                        else
                        {
                                ds = 0;//寫0
                                i = 8;while(i>0)i--;
                                ds = 1;
                                i++;i++        ;
                        }
                }
}
/*-----DS18B20開始獲取溫度并轉(zhuǎn)換------*/
void tempchange(void)
{
        dsreset();
        delay(1);
        tempwritebyte(0xcc);//寫跳過讀ROM指令
        tempwritebyte(0x44);//寫溫度轉(zhuǎn)換指令
}
/*-----讀取寄存器中儲存的溫度數(shù)據(jù)------*/
////////////////////////////////////////////////////////////////////////////////////
void get_temp()/*********后面帶返回值,此處也應(yīng)該有返回值void應(yīng)該是uchar***********/
////////////////////////////////////////////////////////////////////////////////////
{
        uchar a,b;
        dsreset();
        delay(1);
        tempwritebyte(0xcc);
        tempwritebyte(0xbe);
        a = tempread();//讀低8位
        b = tempread();//讀高8位
        temp = b;
        temp<<= 8;//兩字節(jié)組合為一個字
        ////////////////////////////////////////////////////  
        temp = templa;  /*********templa沒有定義***********/
        ////////////////////////////////////////////////////
        f_temp = temp*0.0625;//溫度在寄存器中為12位,分辨率為0.0625°
        temp = f_temp*10+0.5;//乘以10表示小數(shù)點后面只取一位,加0.5是四舍五入
        f_temp = temp+0.05;
        return temp;//temp是整型        
}
/*-----數(shù)據(jù)顯示程序------*/
void display(uchar num,uchar dat)
{
        uchar i;
        dula = 0;
        P0 = table[dat];//編碼賦給P0口
        dula = 1;
        wela = 0;
        i = 0xFF;
        i =        i&(~(0X01)<<(num));//用i來存儲位選數(shù)據(jù),只有一位為0
        P0 = i;
        wela = 1;
        wela = 0;
        delay(1);
}
/*-----顯示溫度數(shù)值函數(shù)t傳遞的是整型的溫度值------*/
void dis_temp(uint t)
{
        uchar i;
        i = t/100;                          //除以100得到商,為溫度的十位
        display(0,i);                  //在第一個數(shù)碼管上顯示
        i = t%100/10;                  //100取余數(shù)再除以10得到商,為溫度的個位
        display(1,i+100);          //在第二個數(shù)碼管上顯示
        i = t%100%10;          //100取余數(shù)再用10取余,為溫度的小數(shù)位
        display(2,i);                  //在第三個數(shù)碼管上顯示
}
/*-----蜂鳴器報警,燈閃爍------*/
void warn(uint s,uchar led)
{
        uchar i;i = s;
        beep = 0;///蜂鳴器響
        P1 = ~(led);
        while(i--)
        {
                dis_temp(get_temp());//用溫度顯示函數(shù)起到延時作用
        }                                                                                                        
        beep = 1;//蜂鳴器不響
        P1 = 0XFF;//控制相應(yīng)的燈滅
        i = s;
        while(i--)
        {
                dis_temp(get_temp());//用溫度顯示函數(shù)起到延時作用
        }
}
/*-----溫度處理函數(shù)-------*/
void deal(uint t)
{
        uchar i;
        if((t>warn_12)&&(t<=warn_11))//大于25度小于27度
                {
                        warn(40,0x01);//第一個燈亮,蜂鳴器發(fā)出“滴”聲
                }        
        else if(t<warn_12)//小于25度
                {
                        warn(10,0x03);//第一個和第二個燈亮,蜂鳴器發(fā)出“滴”聲
                }
        else if((t<warn_h2)&&(t<=warn_h1))//小于32度和大于30度
                {
                        warn(40,0x04);//第三個燈亮,蜂鳴器發(fā)出“滴”聲
                }
        else if(t>warn_h2)//大于32度
                {
                        warn(10,0x0c);//第三個和第四個燈亮,蜂鳴器發(fā)出“滴”聲
                }
        else                                //在27度到30度之間時只是調(diào)用顯示函數(shù)延時
                {
                        i = 40;
                        while(i--);
                        {
                                dis_temp(get_temp());
                        }
                }
}
/*------------串口初始化函數(shù)-----------*/
void init_com(void)
{
        TMOD = 0x20;  
    PCON = 0X00;
        SCON = 0X50;
        TH1 = 0XFd;
        TL1 = 0XFd;//baud9600
    TR1 = 1;
}
/*------------串口數(shù)據(jù)發(fā)送函數(shù)-----------*/
void comm(char *parr)
{
        do
        {
                SBUF = *parr++;//發(fā)送數(shù)據(jù)
                while(!TI);//等待發(fā)送完成標志為1
                TI = 0;//標志清零
        }while(*parr);//保持循環(huán)直到字符為'\0'
}
/*-----------主函數(shù)-------------------*/
void main()
{
        uchar buff[4],i;
        dula = 0;
        wela = 0;
        init_com();
        while(1)
        {
                tempchange();//溫度轉(zhuǎn)換器
                for(i = 10;i>0;i--)
                        {
                                dis_temp(get_temp());//獲取溫度并顯示        
                        }
                deal(temp);//進行溫度處理
                 /////////////////////////////////////////////////////////////////////      
                springtf(buff,"%f",f_temp);/*******springtf來歷不明,缺少原型*******///將浮點型溫度格式化為字符型
                ///////////////////////////////////////////////////////////////////////      
                for(i = 10;i>0;i--)
                        {
                                dis_temp(get_temp());//溫度并顯示        
                        }
                comm(buff);//串口發(fā)送數(shù)據(jù)
                for(i = 10;i>0;i--)
                        {
                                dis_temp(get_temp());//獲取溫度并顯示        
                        }
        }        
}
回復(fù)

使用道具 舉報

ID:147475 發(fā)表于 2017-1-7 14:39 | 顯示全部樓層
不倒翁.WZT 發(fā)表于 2017-1-7 07:45
////////////////和/******************符號部分有錯誤
#include
#include

謝謝。另外我后來發(fā)現(xiàn)templa 應(yīng)該是temp|a(或運算),我打錯了
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久毛片 | 久久精品91久久久久久再现 | a视频在线观看 | 国产精品久久久久国产a级 欧美日韩国产免费 | 国产视频在线观看一区二区三区 | 琪琪午夜伦伦电影福利片 | 久久久精品一区二区三区 | 日韩在线不卡视频 | 欧美一级二级三级视频 | 黄色一级大片在线免费看产 | 日韩一区二区三区精品 | 精品国产乱码一区二区三 | 欧美一区在线视频 | 亚洲精品乱码久久久久久久久 | 国产在线视频在线观看 | 国产一区二区三区日韩 | 超碰欧美 | 久久精品视频免费观看 | 中文字幕免费在线 | 97精品久久 | 日本高清aⅴ毛片免费 | 亚洲欧洲精品在线 | 97人人爱 | 久精品久久 | 国产精品射 | 青春草在线 | 一级黄色短片 | 一级毛片视频在线 | 日本欧美在线 | 色婷婷亚洲一区二区三区 | 亚卅毛片 | 日韩视频在线观看中文字幕 | www午夜视频 | 91中文字幕在线 | 国产一在线观看 | 一级黄大片 | 在线观看免费av网 | 免费人成在线观看网站 | 亚洲综合色视频在线观看 | 中文字幕在线一区 | 成年男女免费视频网站 |