温度控制器程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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: