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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1938|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

求助!那位大神可幫忙看一下哪里有錯(cuò)誤?謝謝

[復(fù)制鏈接]
回帖獎勵 45 黑幣 回復(fù)本帖可獲得 45 黑幣獎勵! 每人限 1 次
跳轉(zhuǎn)到指定樓層
樓主
ID:669371 發(fā)表于 2020-1-30 17:50 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
錯(cuò)誤:
1.C(342): error C267: 'AT24C02Read': requires ANSI-style prototype
1.C(615): error C202: 'tempH_buf': undefined identifier
1.C(616): error C202: 'tempH_buf': undefined identifier
1.C(617): error C202: 'tempH_buf': undefined identifier
1.C(618): error C202: 'tempH_buf': undefined identifier
1.C(642): error C202: 'tempL_buf': undefined identifier
1.C(643): error C202: 'tempL_buf': undefined identifier
1.C(644): error C202: 'tempL_buf': undefined identifier
1.C(645): error C202: 'tempL_buf': undefined identifier

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

程序:
#include <reg52.h>
#include <stdio.h>
#include <main.h>


#define uchar unsigned char
#define uint unsigned int


sbit LCD1602_E =P2^5;
sbit LCD1602_RS=P2^6;
sbit LCD1602_RW=P2^7;
sbit DSPORT=P2^4;
sbit beep=P2^3;
sbit Led_H=P2^2;
sbit Led_L=P2^1;
sbit SDA=P1^0;
sbit SCL=P1^1;
sbit Key_Swith1=P1^2;
sbit Key_Swith2=P1^3;
sbit Key_Swith3=P1^4 ;
sbit Machine_H=P1^5;
sbit Machine_L=P1^6;

char Set_temp_L=16,Set_temp_H=26;  //設(shè)定溫度上下限默認(rèn)值
uint temp_val;  //檢測的實(shí)際溫度
uchar mode;  //溫度模式







void delay1(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}



//***************************************************************************************//


void LCD_write_com(uchar com)
{
        LCD1602_E = 0;     //使能
        LCD1602_RS = 0;           //選擇發(fā)送命令
        LCD1602_RW = 0;           //選擇寫入
        
        P0 = com;     //放入命令
        delay1(5);                //等待數(shù)據(jù)穩(wěn)定

        LCD1602_E = 1;                  //寫入時(shí)序
        delay1(5);          //保持時(shí)間
        LCD1602_E = 0;

}




void LCD_write_data(uchar dat)
{
        LCD1602_E = 0;        //使能清零
        LCD1602_RS = 1;        //選擇輸入數(shù)據(jù)
        LCD1602_RW = 0;        //選擇寫入

        P0 = dat; //寫入數(shù)據(jù)
        delay1(5);

        LCD1602_E = 1;   //寫入時(shí)序
        delay1(5);   //保持時(shí)間
        LCD1602_E = 0;

}




void LCD_Init()
{
        LCD_write_com(0x38);  //開顯示
        LCD_write_com(0x0c);  //開顯示不顯示光標(biāo)
        LCD_write_com(0x06);  //寫一個(gè)指針加1
        LCD_write_com(0x01);  //清屏
        LCD_write_com(0x80);  //設(shè)置數(shù)據(jù)指針起點(diǎn)

}


///******************************************************************************///


void LCD_Clear()
{
        LCD_write_com(0x01);
        LCD_write_com(0x80);        
}




        //********************************************************//

        void Delay10us()
{
        unsigned char a,b;
        for(b=1;b>0;b--)
                for(a=2;a>0;a--);

}
/*******************************************************************************
* 函數(shù)名         : I2cStart()
* 函數(shù)功能                 : 起始信號:在SCL時(shí)鐘信號在高電平期間SDA信號產(chǎn)生一個(gè)下降沿
* 輸入           : 無
* 輸出                  : 無
* 備注           : 起始之后SDA和SCL都為0
*******************************************************************************/

void I2cStart()
{
        SDA=1;
        Delay10us();
        SCL=1;
        Delay10us();//建立時(shí)間是SDA保持時(shí)間>4.7us
        SDA=0;
        Delay10us();//保持時(shí)間是>4us
        SCL=0;                        
        Delay10us();               
}
/*******************************************************************************
* 函數(shù)名         : I2cStop()
* 函數(shù)功能                 : 終止信號:在SCL時(shí)鐘信號高電平期間SDA信號產(chǎn)生一個(gè)上升沿
* 輸入           : 無
* 輸出                  : 無
* 備注           : 結(jié)束之后保持SDA和SCL都為1;表示總線空閑
*******************************************************************************/

void I2cStop()
{
        SDA=0;
        Delay10us();
        SCL=1;
        Delay10us();//建立時(shí)間大于4.7us
        SDA=1;
        Delay10us();               
}
/*******************************************************************************
* 函數(shù)名         : I2cSendByte(unsigned char dat)
* 函數(shù)功能                 : 通過I2C發(fā)送一個(gè)字節(jié)。在SCL時(shí)鐘信號高電平期間,保持發(fā)送信號SDA保持穩(wěn)定
* 輸入           : num
* 輸出                  : 0或1。發(fā)送成功返回1,發(fā)送失敗返回0
* 備注           : 發(fā)送完一個(gè)字節(jié)SCL=0,SDA=1
*******************************************************************************/

unsigned char I2cSendByte(unsigned char dat)
{
        unsigned char a=0,b=0;//最大255,一個(gè)機(jī)器周期為1us,最大延時(shí)255us。               
        for(a=0;a<8;a++)//要發(fā)送8位,從最高位開始
        {
                SDA=dat>>7;         //起始信號之后SCL=0,所以可以直接改變SDA信號
                dat=dat<<1;
                Delay10us();
                SCL=1;
                Delay10us();//建立時(shí)間>4.7us
                SCL=0;
                Delay10us();//時(shí)間大于4us               
        }
        SDA=1;
        Delay10us();
        SCL=1;
        while(SDA)//等待應(yīng)答,也就是等待從設(shè)備把SDA拉低
        {
                b++;
                if(b>200)         //如果超過2000us沒有應(yīng)答發(fā)送失敗,或者為非應(yīng)答,表示接收結(jié)束
                {
                        SCL=0;
                        Delay10us();
                        return 0;
                }
        }
        SCL=0;
        Delay10us();
         return 1;               
}
/*******************************************************************************
* 函數(shù)名         : I2cReadByte()
* 函數(shù)功能                   : 使用I2c讀取一個(gè)字節(jié)
* 輸入           : 無
* 輸出                  : dat
* 備注           : 接收完一個(gè)字節(jié)SCL=0,SDA=1.
*******************************************************************************/

unsigned char I2cReadByte()
{
        unsigned char a=0,dat=0;
        SDA=1;                        //起始和發(fā)送一個(gè)字節(jié)之后SCL都是0
        Delay10us();
        for(a=0;a<8;a++)//接收8個(gè)字節(jié)
        {
                SCL=1;
                Delay10us();
                dat<<=1;
                dat|=SDA;
                Delay10us();
                SCL=0;
                Delay10us();
        }
        return dat;               
}


/*******************************************************************************
* 函數(shù)名         : void At24c02Write(unsigned char addr,unsigned char dat)
* 函數(shù)功能                   : 往24c02的一個(gè)地址寫入一個(gè)數(shù)據(jù)
* 輸入           : 無
* 輸出                  : 無
*******************************************************************************/

void AT24C02Write(unsigned char addr,unsigned char dat)
{
        I2cStart();
        I2cSendByte(0xa0);//發(fā)送寫器件地址
        I2cSendByte(addr);//發(fā)送要寫入內(nèi)存地址
        I2cSendByte(dat);        //發(fā)送數(shù)據(jù)
        I2cStop();
}
/*******************************************************************************
* 函數(shù)名         : unsigned char At24c02Read(unsigned char addr)
* 函數(shù)功能                   : 讀取24c02的一個(gè)地址的一個(gè)數(shù)據(jù)
* 輸入           : 無
* 輸出                  : 無
*******************************************************************************/

unsigned char At24C02Read(unsigned char addr)
{
        unsigned char num;
        I2cStart();
        I2cSendByte(0xa0); //發(fā)送寫器件地址
        I2cSendByte(addr); //發(fā)送要讀取的地址
        I2cStart();
        I2cSendByte(0xa1); //發(fā)送讀器件地址
        num=I2cReadByte(); //讀取數(shù)據(jù)
        I2cStop();
        return num;        
}

        //*******************************************************//




//在任何位置顯示字符串

void LCD_Dispstring(uchar x,uchar line,uchar *p)         
{
        char i=0;
        if(line<1)           //第一行顯示
        {        
                while(*p!='\0')
                {
                        if(i<16-x)
                        {
                                LCD_write_com(0x80+i+x);        
                        }
                        else
                        {
                                LCD_write_com(0x40+0x80+i+x-16);        
                        }
                        LCD_write_data(*p);
                        p++;
                        i++;        
                }        
        }
        else                   //第2行顯示
        {
                while(*p!='\0')
                {
                        if(i<16-x)
                        {
                                LCD_write_com(0x80+0x40+i+x);        
                        }
                        else
                        {
                                LCD_write_com(0x80+i+x-16);        
                        }
                        LCD_write_data(*p);
                        p++;
                        i++;        
                }        
        }               
}


//********************************************************************************************************
//********************************************************************************************************
//********************************************************************************************************

void Temp_DataPros()
{
        short temp;
        uchar temp_buf[5];   
        uchar tempH_buf[3];
    uchar tempL_buf[3];
        temp=DS18B20_ReadTemp();
        temp_val=temp;        
        if(temp<0)
        {
                temp=-temp;
                LCD_Dispstring(2+5,0,"-");
        }
        else
        {
                LCD_Dispstring(2+5,0," ");
        }

        temp_buf[0]=temp/100+0x30;
        temp_buf[1]=temp%100/10+0x30;
        temp_buf[2]='.';
        temp_buf[3]=temp%100%10+0x30;
        temp_buf[4]='\0';
        LCD_Dispstring(2+6,0,temp_buf);                 //顯示檢測的溫度xx.x

        tempH_buf[0]=Set_temp_H/10+0x30;
           tempH_buf[1]=Set_temp_H%10+0x30;
        tempH_buf[2]='\0';
        LCD_Dispstring(5,1,tempH_buf);          //顯示設(shè)定的溫度上限值xx

        tempL_buf[0]=Set_temp_L/10+0x30;
           tempL_buf[1]=Set_temp_L%10+0x30;
        tempL_buf[2]='\0';
        LCD_Dispstring(14,1,tempL_buf);         //顯示設(shè)定的溫度下限值xx
}



void Start_display()
{
        if(AT24C02Read(255)!=18)
        {
                AT24C02Write(0,Set_temp_H);
                AT24C02Write(2,Set_temp_L);
                AT24C02Write(255,18);        
        }
        else
        {
                Set_temp_H=AT24C02Read(0);
                Set_temp_L=AT24C02Read(2);        
        }

        LCD_Dispstring(2,0,"Temp:    ℃");
        LCD_Dispstring(0,1,"Max:    ℃");
        LCD_Dispstring(9,1,"Min:    ℃");
}







void Delay1ms(unsigned int y)
{
        unsigned int x;
        for(y;y>0;y--)
                for(x=110;x>0;x--);
}
/*******************************************************************************
* 函數(shù)名         : DS18b20_Init
* 函數(shù)功能                   : 初始化
* 輸入           : 無
* 輸出                  : 初始化成功返回1,失敗返回0
*******************************************************************************/

unsigned char DS18B20_Init()
{
        unsigned int i;
        DSPORT=0;                         //將總線拉低480us~960us
        i=70;        
        while(i--);//延時(shí)642us
        DSPORT=1;                        //然后拉高總線,如果DS18B20做出反應(yīng)會將在15us~60us后總線拉低
        i=0;
        while(DSPORT)        //等待DS18B20拉低總線
        {
                i++;
                if(i>5000)//等待>5MS
                        return 0;//初始化失敗        
        }
        return 1;//初始化成功
}

/*******************************************************************************
* 函數(shù)名         : DS18b20_WriteByte
* 函數(shù)功能                 : 向18B20寫入一個(gè)字節(jié)
* 輸入           : com
* 輸出                  : 無
*******************************************************************************/

void DS18B20_WriteByte(unsigned char dat)
{
        unsigned int i,j;
        for(j=0;j<8;j++)
        {
                DSPORT=0;                        //每寫入一位數(shù)據(jù)之前先把總線拉低1us
                i++;
                DSPORT=dat&0x01; //然后寫入一個(gè)數(shù)據(jù),從最低位開始
                i=6;
                while(i--); //延時(shí)68us,持續(xù)時(shí)間最少60us
                DSPORT=1;        //然后釋放總線,至少1us給總線恢復(fù)時(shí)間才能接著寫入第二個(gè)數(shù)值
                dat>>=1;
        }
}
/*******************************************************************************
* 函數(shù)名         : DD18b20_ReadByte
* 函數(shù)功能                 : 讀取一個(gè)字節(jié)
* 輸入           : com
* 輸出                  : 無
*******************************************************************************/


unsigned char DS18B20_ReadByte()
{
        unsigned char byte,bi;
        unsigned int i,j;        
        for(j=8;j>0;j--)
        {
                DSPORT=0;//先將總線拉低1us
                i++;
                DSPORT=1;//然后釋放總線
                i++;
                i++;//延時(shí)6us等待數(shù)據(jù)穩(wěn)定
                bi=DSPORT;         //讀取數(shù)據(jù),從最低位開始讀取
                /*將byte左移一位,然后與上右移7位后的bi,注意移動之后移掉那位補(bǔ)0。*/
                byte=(byte>>1)|(bi<<7);                                                  
                i=4;                //讀取完之后等待48us再接著讀取下一個(gè)數(shù)
                while(i--);
        }                                
        return byte;
}
/*******************************************************************************
* 函數(shù)名         : DS18b20_ChangTemp
* 函數(shù)功能                   : 讓18b20開始轉(zhuǎn)換溫度
* 輸入           : com
* 輸出                  : 無
*******************************************************************************/

void  DS18B20_ChangTemp()
{
        DS18B20_Init();
        Delay1ms(1);
        DS18B20_WriteByte(0xcc);                //跳過ROM操作命令                 
        DS18B20_WriteByte(0x44);            //溫度轉(zhuǎn)換命令
//        Delay1ms(100);        //等待轉(zhuǎn)換成功,而如果你是一直刷著的話,就不用這個(gè)延時(shí)了

}
/*******************************************************************************
* 函數(shù)名         : DS18b20_ReadTempCom
* 函數(shù)功能                   : 發(fā)送讀取溫度命令
* 輸入           : com
* 輸出                  : 無
*******************************************************************************/

void  DS18B20_ReadTempCom()
{        

        DS18B20_Init();
        Delay1ms(1);
        DS18B20_WriteByte(0xcc);         //跳過ROM操作命令
        DS18B20_WriteByte(0xbe);         //發(fā)送讀取溫度命令
}
/*******************************************************************************
* 函數(shù)名         : Ds18b20ReadTemp
* 函數(shù)功能                   : 讀取溫度
* 輸入           : com
* 輸出                  : 無
*******************************************************************************/

short DS18B20_ReadTemp()
{
        unsigned char temp=0;
        unsigned char tmh,tml;
        short tem;

        DS18B20_ChangTemp();                                 //先寫入轉(zhuǎn)換命令
        DS18B20_ReadTempCom();                        //然后等待轉(zhuǎn)換完后發(fā)送讀取溫度命令
        tml=DS18B20_ReadByte();                //讀取溫度值共16位,先讀低字節(jié)
        tmh=DS18B20_ReadByte();                //再讀高字節(jié)

        if(tmh>7)
    {
        tmh=~tmh;
        tml=~tml;
        temp=0;//溫度為負(fù)  
    }
        else
        {
                temp=1;//溫度為正        
        }
                           
    tem=tmh; //獲得高八位
    tem<<=8;   
    tem|=tml;//獲得底八位
    tem=(double)tem*0.625;//轉(zhuǎn)換   放大10倍  精度0.1
        if(temp)
                return tem; //返回溫度值
        else
                return -tem;
}




#define Key_mode   1                   //模式選擇
#define Key_add    2                   //設(shè)置加
#define Key_minus  3                   //設(shè)置減

//mode:  0-單次掃描   1-連續(xù)掃描

uchar Key_scan(uchar mode)
{
        static uchar Key_Swith=1;
        if(Key_Swith&&(Key_Swith1==0||Key_Swith2==0||Key_Swith3==0))
        {
                delay1(10);
                Key_Swith=0;
                if(Key_Swith1=0)
                {
                        return  Key_add;
                }
                else if(Key_Swith2=0)
                {
                        return  Key_minus;
                }
                else if(Key_Swith3=0);
                {
                        return  Key_mode;
                }
        }
        else if(Key_Swith1==1&&Key_Swith2==1&&Key_Swith3==1)
        {
                Key_Swith=1;
        }




        if(mode)
        {
                Key_Swith=1;
        }
        return 0;


}  







void Key_Pros()
{
        uchar Key_Swith;
        uchar Temp_buf[3];

        Key_scan(0);

        if(Key_Swith==Key_mode)
        {
                mode++;
                LCD_Clear();

                if(mode==1)
                {
                        LCD_Dispstring(0,0,"SetH:   ℃");
                }
                else if(mode==2)
                {
                        LCD_Dispstring(0,1,"SetL:   ℃");        
                }
                else
                {
                        mode=0;
                        LCD_Dispstring(2,0,"Temp:    ℃");
                        LCD_Dispstring(0,1,"Max:   ℃");
                        LCD_Dispstring(9,1,"Min:   ℃");
                }
        }








        if(mode==1)   //設(shè)置溫度上限
        {
                switch(Key_Swith)
                {
                        case Key_add:
                                                   Set_temp_H++;
                                                   if(Set_temp_H>=36)Set_temp_H=36;          //上限最高溫度
                                                   break;
                        case Key_minus:
                                                   Set_temp_H--;
                                                   if(Set_temp_H<=16)Set_temp_H=16;          //上限最低溫度
                                                   break;
                }

                tempH_buf[0]=Set_temp_H/10+0x30;
                tempH_buf[1]=Set_temp_H%10+0x30;
                tempH_buf[2]='\0';
                LCD_Dispstring(6,0,tempH_buf);
                AT24C02Write(0,Set_temp_H);
        }







        else if(mode==2)
        {
                switch(Key_Swith)
                {
                        case Key_add:
                                                   Set_temp_L++;
                                                   if(Set_temp_L>=36)Set_temp_L=36;          //下限最高溫度
                                                   break;
                        case Key_minus:
                                                   Set_temp_L--;
                                                   if(Set_temp_L<=-16)Set_temp_L=-16;          //下限最低溫度
                                                   break;
                }

                tempL_buf[0]=Set_temp_L/10+0x30;
                tempL_buf[1]=Set_temp_L%10+0x30;
                tempL_buf[2]='\0';
                LCD_Dispstring(6,0,tempL_buf);
                AT24C02Write(0,Set_temp_L);
        }
               


}

void TempData_Compare()
{
        if(temp_val>Set_temp_H*10)        //實(shí)際溫度高于上限值   報(bào)警  散熱
        {
                Led_H=1;
                Led_L=0;
                Machine_H=1;
                Machine_L=0;
                sound();               
        }
        else if(temp_val<Set_temp_L*10)         //實(shí)際溫度低于下限值   報(bào)警  加熱
        {
                Led_L=0;
                Led_L=1;
                Machine_H=0;
                Machine_L=1;
                sound();               
        }
        else                      //實(shí)際溫度在下限值和上限值之間   取消報(bào)警  取消加熱  取消散熱
        {
                Machine_H=0;
                Machine_L=0;
                Led_H=0;
                Led_L=0;
        }
}void delay(uint a)
         {
                  uint i,j;
                for(i=a;i>0; i--)
                  
                     for(j=110;j>0;j--);
                             
          }






void warn()
{
        uchar a;
//*************************************//
        beep=0;                 //蜂鳴器響
        a=50;
        while(a--)
                {
                        delay(10);
                }
//************************************//
        beep=1;                        //蜂鳴器不響
        a=50;
        while(a--)
                {
                        delay(10);
                }

}









void main()
{
        Machine_H=0;
        Machine_L=0;
        Led_H=0;
        Led_L=0;

        LCD_Init();
        Start_display();
        while(1)
        {
                if(mode==0)
                        Temp_DataPros();
                        Key_Pros();        
                        TempData_Compare();                                
        }
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:235200 發(fā)表于 2020-1-31 16:17 | 只看該作者
信息提示很清楚了,調(diào)用AT24C02Read(255)這個(gè)函數(shù)時(shí),而這個(gè)函數(shù)未聲明;
在鍵處理函數(shù) Key_Pros()中使用tempH_buf tempL_buf這兩個(gè)數(shù)組,但這兩個(gè)數(shù)組是函數(shù)Temp_DataPros()的局部變量,對于Key_Pros()這個(gè)外部函數(shù)無法使用它
tempH_buf[0]=Set_temp_H/10+0x30;
tempH_buf[1]=Set_temp_H%10+0x30;
tempH_buf[2]='\0';
回復(fù)

使用道具 舉報(bào)

板凳
ID:152785 發(fā)表于 2020-1-31 16:59 | 只看該作者
遇到問題.最好自己先把提示翻譯出來,自己先處理.提升速度快.
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕av一区二区三区 | 日韩中文字幕av | а天堂中文最新一区二区三区 | 日韩av在线一区二区三区 | 午夜精品一区二区三区免费视频 | 成人免费小视频 | 国产专区视频 | 老外黄色一级片 | 国产精品视频一二三区 | 欧美一区二区三区在线 | 毛片在线免费 | 国产成人在线播放 | 午夜视频网| 久久久久国产一区二区三区 | 超碰精品在线 | 午夜精品久久久久久久久久久久 | 久久久成人精品 | 99re在线视频| 国产欧美一区二区三区在线播放 | 就操在线 | 国产成人免费视频 | 一区二区三区在线 | 在线免费观看黄色 | 亚洲视频区| 美女视频一区 | 日本精品视频 | 欧美日韩一区二区三区四区五区 | 久久久成人精品 | 性欧美精品一区二区三区在线播放 | 精品在线一区 | re久久 | 理伦毛片 | 尤物在线精品视频 | 999久久久国产精品 欧美成人h版在线观看 | 99国产精品久久久久久久 | 一本久久a久久精品亚洲 | 蜜桃一区二区三区在线 | 亚洲精品亚洲人成人网 | 日韩中文一区二区三区 | 国产欧美一区二区三区久久手机版 | 91欧美激情一区二区三区成人 |