📄 main.c
字号:
/************DS18B20温度测量程序+ 红外线解码程序***********/
/*功能改进:对温度显示进行了削隐处理,例如:028.7C显示为 28.7C
还继承了上次的改进效果,0度以下或拔下传感器,显示00000
10s显示一次温度值,减小了处理器的负担;
*/
/*问题:当传感器拔下时,最后一位,保留并不消隐*/
/****硬件平台:中山51单片机开发板,DS18B20单总线温度传感器***********/
/****硬件连接:P2_2接DQ(信号线2pin),电源3in,地1pin****************/
/****程序功能:显示实时温度,温度范围:0-125C,精度:0.1C************/
/****编程流程:初始化--写指令--读数据--数据处理--显示温度************/
#include <at89x52.h>
#include <DS18B20.h>
#include <display.h>
#include <IR.h>
unsigned int temperature,count;
bit TemperatureSign;
main()
{
TMOD=0x01;
TH0=0xd1; //晶振为11.0592MHz;定时为~13ms
TL0=0x33;
EA=1;
ET0=1;
TR0=1;
EX0=1; //允许外部中断0
IT0=1; //外部中断触发方式下降沿触发
temperature=0;
while(1)
{
/****************红外线操作************************/
P1=Decode;//把数据反码送给P1口
/****************10s读取一次温度*******************/
if(TemperatureSign==0) //10s到了吗,TemperatureSign=0有效
{
temperature=ReadTemperature();//此段程序不能放在定时器里面,因为此函数运行需要的时间比较长
TemperatureSign=1;
}
}
}
/********刷新显示,定时读取温度**********/
timer0() interrupt 1
{
TH0=0xd1; //晶振为11.0592MHz;定时为~13ms,刷新频率~75Hz;
TL0=0x33;
display(temperature); //显示温度
count++;
if(count>=769) //10s读一次数据,769*13ms=10s
{
TemperatureSign=0;
count=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -