温度控制器程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

//PT100自身温度范围

#define M_temper_MIN -200 //最低温度

#define M_temper_MAX 500 //最高温度

//CPU引脚定义

#define P_LED P0

sbit LED_S1 = P2 ^ 0; //LED1位选

sbit LED_S2 = P2 ^ 1; //LED2位选

sbit LED_S3 = P2 ^ 2; //LED3位选

sbit LED_S4 = P2 ^ 3; //LED4位选

sbit KEY_S1 = P1 ^ 0; //上下限温度设置

sbit KEY_S2 = P1 ^ 1; //温度加

sbit KEY_S3 = P1 ^ 2; //温度减

//全局变量寄存器

uchar M_LED1, M_LED2, M_LED3, M_LED4; //4位LED显示寄存器

uchar LED_DISP_TAB[] = //LED编码表

{

0X3f, 0X06, 0X5b, 0X4f, 0X66,

0X6d, 0X7d, 0X07, 0X7f, 0X6f, //0-9

0X40, 0X23, 0X1c, 0X58 //字符: - n u c };

uchar Set_count; //温度设置按钮计数uchar T0_count; //T0定时中断计数uint T1_count; //T1定时中断计数char M_temper_up; //温度上限

char M_temper_down; //温度下限

char M_temper_AI; //设置中温度char M_temper_conver; //当前温度

bit B_set,B_set_AI; //温度设置标志

bit B_set_T0,B_set_T1; //定时器中断标志

//函数声明

void T1int_init();

/* 定时器T1初始化:

设置工作方式

赋初值

开启中断*/ void T0int_init();

/* 定时器T0初始化:

设置工作方式

赋初值

开启中断*/

void Set_temper();

/*设置上下限温度:按键次数=1:显示上限温度并处于操作状态按键次数=2:显示下限温度并处于操作状态

按键次数=3:保存设置值并退出

*/

void Inc_temper();

/*提高设置的温度*/

void Dec_temper();

/*降低设置的温度*/

void LED_data_BCD(char Disp_dat);

/*数码管显示温度*/

void PT100_delay(uint count);

/* PT100延时程序*/

void PT100_reset(void);

/*PT100复位初始程序:根据PT100要求对其进行复位初始控制*/

bit PT100_readbit(void) ;

/*PT100位读子程序:从PT100取出一位数据*/

uchar PT100_readbyte(void);

/*PT100字节读子程序:读出的一字节数据并返回数据值*/

void PT100_writebyte(uchar dat);

/*PT100字节写子程序:将输入参数值写入PT100 */

void PT100_change(void); //启动PT100温度转换uchar PT100_Gettemper(void);

/*读取PT100温度数据:单线方式读取PT100转换的温度数据,

并返回处理后的温度值*/

void Delay_ms(uint count); //延时子程序:延时count (ms) void main() {

uchar M_temper_curr;

SP=0x50; //堆栈起始地址

M_temper_up =100; //初始温度上下限

M_temper_down=0;

Delay_ms(500);

T0int_init(); //T0 T1初始化

T1int_init();

while(1)

{

if (B_set_T0) //T0定时读取温度标志

{

EA=0; //关总中断

B_set_T0=0;

if(!B_set) //上下限设置状态时,取消温度读取

{

PT100_change(); //读取温度

M_temper_curr=PT100_Gettemper();

M_temper_conver=(M_temper_curr > 126 ? (127-M_temper_curr):M_temper_curr);

//转换正负温度

LED_data_BCD(M_temper_conver);

//转换LED显示

}

EA=1;

}

if (B_set_T1) //T1定时LED显示扫描标志

{

TR1=0;B_set_T1=0;

switch (T1_count) //依次显示4位LED { case 1:

LED_S4 = 1;

P_LED = LED_DISP_TAB[M_LED1];

LED_S1 = 0;

break;

case 2:

LED_S1 = 1;

P_LED = LED_DISP_TAB[M_LED2];

LED_S2 = 0;

break;

case 3:

LED_S2 = 1;

P_LED = LED_DISP_TAB[M_LED3];

LED_S3 = 0;

break;

case 4:

相关文档
最新文档