⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 显示实时温度
💻 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 + -