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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5003|回復: 1
打印 上一主題 下一主題
收起左側

老是顯示這個 error C193: '+': bad operand type 求大神教我怎么修改這個程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:97678 發表于 2019-12-31 18:56 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
怎么修改這個程序?


#include <AT89X52.H>
#include <string.h>
#include <stdio.h>
#include <absacc.h>
#include <math.h>
#define uchar unsigned char
#define uint unsigned int
double      rOut;       //  PID Response (Output)
double      rIn;        //  PID Feedback (Input)
sbit P30=P3^0;          // DQ=P30=P3^0,為溫度總線
sbit P31=P3^1;
uchar TEMP;                // 溫度值的變量;
sbit P10=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;
sbit P14=P1^4;
sbit P15=P1^5;
sbit P16=P1^6;
sbit P17=P1^7;
//共陰 LED
unsigned char code led[]={0x3F,0x6,0x5B,0x4F,0x66,0x6D,0x7D,0x7,0x7F,0x6F};

typedef struct PID {
    double  SetPoint;      // 設定目標 Desired value,從撥碼盤的輸入值
    double  Proportion;    // 比例常數 Proportional Const
    double  Integral;      // 積分常數 Integral Const
    double  Derivative;    // 微分常數 Derivative Const
    double  LastError;     // 偏差 Error[-1]
    double  PrevError;     // 偏差 Error[-2]
    double  SumError;      // 偏差總和 Sums of Errors
} PID;
/*=================================================================
   PID計算部分
==================================================================*/

double PIDCalc( PID *pp, double NextPoint )
{
    double  dError,Error;
    Error = pp->SetPoint -  NextPoint;          // 偏差
    pp->SumError += Error;                      // 積分
    dError = pp->LastError - pp->PrevError;     // 當前微分
    pp->PrevError = pp->LastError;
    pp->LastError = Error;
    return (pp->Proportion * Error              // 比例項
        +   pp->Integral * pp->SumError         // 積分項
        +   pp->Derivative * dError             // 微分項
           );
}

/*===================================================================
   Initialize PID Structure
===================================================================*/

void PIDInit (PID *pp)
{
    memset ( pp,0,sizeof(PID));   
    //緩沖區操作函數,初始化緩沖區中指定個數的數據字節為某一指定的字符值
}

/*===================================================================
    Main Program
====================================================================*/

    //從DS18B20數字溫度傳感器讀取的溫度值。

void delay (unsigned int count)
{                                    
    unsigned int i;   
    while (count)   
    {
        i =200;
        while (i>0) i--;
        count--;
    }
}

void tmreset (void)                // 發送復位和初始化
{
    unsigned int i;
    P30 = 0;   
    i = 103;
    while (i>0) i--;            // 延時
    P30 = 1;   
    i = 4;   
    while (i>0) i--;   
}

bit tmpread (void)                // 讀取數據的一位
{
    unsigned int i;
    bit dat;
    P30 = 0; i++;   
    P30 = 1; i++; i++;            //延時   
    dat = P30;   
    i = 8; while (i>0) i--;        // 延時
    return (dat);
}   

unsigned char tmpread2 (void)     //讀一個字節
{
    unsigned char i,j,dat;   
    dat = 0;   
    for (i=1;i<=8;i++)
    {
        j = tmpread ();   
        dat = (j << 7) | (dat >> 1);   
    }
    return (dat);
}   

void tmpwrite (unsigned char dat)    //寫一個字節
{   
    unsigned int i;
    unsigned char j;
    bit testb;   
    for (j=1;j<=8;j++)
    {   
        testb = dat & 0x01;
        dat = dat >> 1;   
        if (testb)
        {   
            P30 = 0;     // 寫0
            i++; i++;  
            P30 = 1;   
            i = 8; while (i>0) i--;
        }
        else   
        {
            P30 = 0;     // 寫0
            i = 8; while (i>0) i--;
            P30 = 1;
            i++; i++;  
        }
    }
}

void tmpchange(void)    // ds1820 開始轉換
{  
    tmreset ();            // 復位   
    delay (1);            // 延時
    tmpwrite (0xcc);    // 跳過序列號命令
    tmpwrite (0x44);     // 發轉換命令 44H,   
}

void tmp (void)            // 讀取溫度
{
    unsigned char a;
    tmreset ();            // 復位
    delay (1);            // 延時
    tmpwrite (0xcc);     // 跳過序列號命令
    tmpwrite (0xbe);     // 發送讀取命令
    a = tmpread2 ();    // 讀取溫度(ROM數字)   
    TEMP=a>>1;            // 乘分辨率0.5,轉換為十進制的溫度值
}

//---------------------------------------------------------
double sensor (void)    //  Dummy Sensor Function
{
    tmpchange();        // 開始溫度轉換
    delay(200);            // 讀取延時
    tmp();                // 讀取溫度
    return(TEMP);        // 返回溫度值
}

//============================================================
//    display 子程序

unsigned int display(viod)
{
    unsigned int NUM;
    unsigned int shi;     //高位顯示變量
    unsigned int ge;      //低位顯示變量
    shi=(!P17)*8+(!P16)*4+(!P15)*2+(!P14)*1;
    ge=(!P13)*8+(!P12)*4+(!P11)*2+(!P10)*1;
    P0=led[shi];
    P2=led[ge];
    rIn=shi*10+ge;
    return(rIn);
}

//===========================================================

void delay_1ms(int t)     //設置周期為1mS,使用等脈寬PWM法。
{
    unsigned int i;   
    while (t)   
    {
        i =1000;
        while (i>0) i--;
        t--;
    }
}

//-----------------------------------------------------------
    //輸出PWM控制程序
void PWM_actuator(double rDelta)  // PWM Actuator Function
{
    unsigned int th;
    unsigned int tl;
    unsigned char k;
    // (200/700)*1.0≈0.29
    double bili=0.29;      //初始化功率=200W,對應bili=1時是700W。
    if  (rDelta > 0)
     {
        th=1000*bili;
        tl=1000*(1-bili);
        bili+=0.02;
        for (k=10;k>0;k--)       // 加熱一段時間
        {
            P31=1;
            delay_1ms(th);
            P31=0;
            delay_1ms(tl);
        }
    }
    else
    {
        bili=0;   
        P31=0;            //不加熱,讓其自然冷卻
    }   
}
//===============================================================================

void main(void)
{
    PID         sPID;                   //  PID Control Structure
    PIDInit ( &sPID );                  //  Initialize Structure
    //P、I、D 系數的設定,以及鍵盤預置溫度輸入的讀取
    sPID.Proportion = 0.1;
    sPID.Integral   = 0.1;
    sPID.Derivative = 0.1;
sPID.SetPoint=display();       //  鍵盤輸入的溫度設定值,同時送LED顯示
    while(1)
    {                                     //  Mock Up of PID Processing
        rIn = sensor ();                //  Read Input
        rOut = PIDCalc ( &sPID,rIn );   //  Perform PID Interation
        PWM_actuator ( rOut );          //  Effect Needed Changes
    }
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:680221 發表于 2020-1-3 10:06 | 只看該作者
display函數中不要用+運算符,用按位或運算符 |。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91久久国产综合久久91精品网站 | 中文字幕av在线 | 一二区视频 | 天天插天天搞 | 成人在线免费av | 欧美激情a∨在线视频播放 成人免费共享视频 | 久久精品国产久精国产 | 国产乱肥老妇国产一区二 | 久久亚洲欧美日韩精品专区 | 国产精品久久久亚洲 | 无吗视频 | 精品一区二区三区91 | 人人人人干| 天天干天天操天天射 | 国产一在线观看 | 久久精品日产第一区二区三区 | 亚洲国产欧美日韩 | 久久久亚洲精品视频 | 日本超碰在线 | 一区二区激情 | 黄色免费在线网址 | 成年人国产在线观看 | 丝袜美腿av | 日韩国产精品一区二区三区 | 亚洲热在线视频 | 亚洲 中文 欧美 日韩 在线观看 | 国产一区www| 日韩精品一二三 | 超碰av免费 | 亚洲国产欧美日韩 | 超碰在线97国产 | 九九热视频这里只有精品 | 日韩免费一级 | aaa综合国产 | 91在线最新 | 日韩中文字幕一区二区 | 日韩视频在线一区二区 | 91久久夜色精品国产网站 | 国产wwwcom | 中文字幕男人的天堂 | 色综合一区二区 |