资源简介

基于STC系列单片机完成,温度传感器利用的是负温度系数热敏电阻,通过PID算法进行温度控制,输出为PWM波,利用三位数码管进行温度显示,包括三个按键,设定键,温度增加和温度减小。

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include “string.h“
#include “Stdio.h“
#include “absacc.h“

#define uchar unsigned char
#define uint unsigned int

uint h_val;  
uint l_val;
float temp; 

float temperature;
unsigned int rout; // PID Response (Output) 
unsigned int rin; // PID Feedback (Input)
unsigned int temper;

unsigned int cool_count=0;
unsigned int set_temper;
unsigned int set_temperl;
unsigned int set_temperh;
uint warm_num=0;
uint cool_num=0;
char control=0;
sfr INT_CLKO = 0x8f;

//看门狗
sfr WDT_CONTR=0xC1;
//declear SFR associated with the IAP
sfr IAP_DATA=0xC2;
sfr IAP_ADDRH=0xC3;
sfr IAP_ADDRL=0xC4;
sfr IAP_CMD=0xC5;
sfr IAP_TRIG=0xC6;
sfr IAP_CONTR=0xC7;
//declear EEPROM command
#define CMD_IDLE 0
#define CMD_READ 1
#define CMD_PROGRAM 2
#define CMD_ERASE 3
//define EEPROM operation const for IAP_CONTR
#define ENABLE_IAP 0x83
//Start address for EEPROM
#define IAP_ADDRESS 0x000

// DISABLE EEPROM FUNCTION
void IapIdle()
{
IAP_CONTR=0;
IAP_CMD=0;
IAP_TRIG=0;
IAP_ADDRH=0x80;
IAP_ADDRL=0;
}

//PROGRAM ONE BYTE TO EEPROM AREA
void IapProgramByte(uint addruchar dat)
{
IAP_CONTR=ENABLE_IAP;
IAP_CMD=CMD_PROGRAM;
IAP_ADDRL=addr;
IAP_ADDRH=addr>>8;
IAP_DATA=dat;
IAP_TRIG=0x5a;
IAP_TRIG=0xa5;
_nop_();
IapIdle();
}

//ERASE ONE SECTOR AREA
void IapEraseSector(uint addr)
{
IAP_CONTR=ENABLE_IAP;
IAP_CMD=CMD_ERASE;
IAP_ADDRL=addr;
IAP_ADDRH=addr>>8;
IAP_TRIG=0x5a;
IAP_TRIG=0xa5;
_nop_();
IapIdle();
}

//READ one BYTE FROM EEPROM AREA

uchar IapReadByte(uint addr)
{
uchar dat;

IAP_CONTR=ENABLE_IAP;
IAP_CMD=CMD_READ;
IAP_ADDRL=addr;
IAP_ADDRH=addr>>8;
IAP_TRIG=0x5a;
IAP_TRIG=0xa5;
_nop_();
dat=IAP_DATA;
IapIdle();
return dat;
}

//
//定义数码管显示
sbit LCD_dig1 = P2^0;             
sbit LCD_dig2 = P2^2;
sbit LCD_dig3 = P2^1;
sbit DS = P3^7;             
sbit ST = P3^4;
sbit SH = P3^5;
sbit cool = P2^5;
sbit warm = P2^6;
sbit led = P2^7;
sbit key0=P3^2;
sbit key1=P3^3;
sbit key2=P3^6;

struct PID {
unsigned int Proportion; // 比例常数 Proportional Const
unsigned int Integral; // 积分常数 Integral Const
unsigned int Derivative; // 微分常数 Derivative Const
unsigned int LastError; // Error[-1]
unsigned int PrevError; // Error[-2]
};
xdata struct PID spid; // PID Control Structure

//AD供电后延时
void YS14520us(void)   
{
    unsigned char abc;
    for(c=2;c>0;c--)
        for(b=238;b>0;b--)
            for(a=90;a>0;a--) ;
               

}
/*************************延时**************************************/
void delay1(int ms)
{
   unsigned char y;
   while(ms--)
   {
     for(y = 0; y<250; y++)
    {
      _nop_();
      _nop_();
      _nop_();

    }
   }
}


//数码管表
idata uchar LCD_table[]={0x030x9f0x250x0d0x990x490x410x1f0x010x090x020x9e0x240x0c0x980x480x400x1e0x000x08} ;

评论

共有 条评论