基于at89c52编制能使max6675测的温度在大于等于100摄氏度时使P0.1引脚输出低电平,小于时输出高电平的程序
时间: 2024-03-21 12:43:19 浏览: 16
以下是使用C语言编写的程序,实现了您的需求:
```c
#include <reg52.h>
#include <intrins.h>
#define MAX6675_CS P1_0
#define MAX6675_SO P1_1
#define MAX6675_SCK P1_2
#define LED P0_1
unsigned char MAX6675_Read(void) {
unsigned char i, value = 0;
MAX6675_CS = 0;
_nop_();
_nop_();
for (i = 0; i < 8; i++) {
MAX6675_SCK = 0;
_nop_();
_nop_();
value <<= 1;
if (MAX6675_SO) {
value |= 0x01;
}
MAX6675_SCK = 1;
_nop_();
_nop_();
}
MAX6675_CS = 1;
return value;
}
unsigned int MAX6675_Temp(void) {
unsigned int temp;
MAX6675_CS = 0;
_nop_();
_nop_();
temp = MAX6675_Read();
temp <<= 8;
temp |= MAX6675_Read();
MAX6675_CS = 1;
if (temp & 0x04) { // TC不接
return 0xFFFF;
}
temp = temp >> 3; // 右移3位得到12位温度值
return temp * 0.25; // 每0.25度对应一个值
}
void main() {
unsigned int temp;
while (1) {
temp = MAX6675_Temp();
if (temp >= 100) {
LED = 0;
} else {
LED = 1;
}
}
}
```
程序首先定义了 MAX6675_CS、MAX6675_SO、MAX6675_SCK、LED 四个引脚对应的端口,然后实现了两个函数:
- MAX6675_Read:从 MAX6675 中读取一个字节的数据;
- MAX6675_Temp:从 MAX6675 中读取温度值并进行转换。
在主函数中,程序循环读取 MAX6675 的温度值,如果温度大于等于 100 摄氏度,则将 LED 置为低电平,否则将 LED 置为高电平。