标题:
单片机环境监控程序 温度监控
[打印本页]
作者:
天之蓝1994
时间:
2018-6-28 15:56
标题:
单片机环境监控程序 温度监控
环境控制和红外线控制
单片机源程序如下:
#include "define.h"
uint Voltage,Light,Temperature;
uchar xdata DisplayReg[4]; //定义4个数码管显示的缓存数组
//定义数码管显示0~9的段码
uchar code DIGITTAB[]=
{
0X14,0x9F,0X38,0X1A,0X93,0X52,0X50,0X1F,0X10,0X12,0xff/*0~9*/
};
//0001 0100
//定义数码管显示0.~9.的段码
uchar code DIGITDOTTAB[]=
{
0X04,0X8F,0X28,0X0A,0X83,0X42,0X40,0X0F,0X00,0X02,0xff/*0.~9.*/
};
//定义数码管显示C,L,E的段码
uchar code CHARTAB[]=
{
0X74,0XF4,0X70,0xff, /*C,L,E及熄灭*/
};
uchar code Char_C=0X74;
uchar code Char_L=0XF4;
uchar code Char_E=0X70;
uchar code DigitOff=0Xff;
/**********************************************************
初使化函数
设置输出IO的初使状态
定时器,变量,串行通讯口以及中断的设置
**********************************************************/
void Timer0Init(void) //20毫秒@22.1184MHz
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x00; //设置定时初值
TH0 = 0x70; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
}
/**********************************************************
初使化函数
设置输出IO的初使状态
定时器,变量,串行通讯口以及中断的设置
**********************************************************/
void Init()
{
P0=0xFF;
P1=0xFF;
P2=0xFF;
P3=0xFF;
Timer0Init();
ET0=1;
EA=1;
SetT=360;
}
/**********************************************************
延时子程序(x)ms
**********************************************************/
void DelayMs(uint x)
{
uint i;
do
{
for(i=0;i<600;i++)
{
;
}
x--;
}while(x>0);
}
/**********************************************************
显示子程序
**********************************************************/
void Display()
{
uchar i,j,temp;
for(i=0;i<4;i++)
{
temp=DisplayReg[i]; //读外部RAM的DisplayReg,同时缓存的值会在P0口上
for(j=0;j<8;j++) //加8个CLK信号
{
CLK=0;CLK=1;
}
}
ST=0;ST=1; //锁存信号,此时刚才送的4个数码管显示的内容将被送到数码管引脚
}
/**********************************************************
测试数码管子程序
**********************************************************/
void Test()
{
uchar i;
for(i=0;i<10;i++) //四个数码管显示0~9
{
DisplayReg[0]=DIGITTAB[i];
DisplayReg[1]=DIGITTAB[i];
DisplayReg[2]=DIGITTAB[i];
DisplayReg[3]=DIGITTAB[i];
Display();
DelayMs(100);
}
for(i=0;i<10;i++) //四个数码管显示0.~9.
{
DisplayReg[0]=DIGITDOTTAB[i];
DisplayReg[1]=DIGITDOTTAB[i];
DisplayReg[2]=DIGITDOTTAB[i];
DisplayReg[3]=DIGITDOTTAB[i];
Display();
DelayMs(100);
}
}
/**********************************************************
蜂鸣器子程序
**********************************************************/
void Speaker(uchar x)
{
uchar i;
for(i=0;i<x;i++)
{
MK=0;
DelayMs(1000);
MK=1;
DelayMs(500);
}
}
/**********************************************************
采信温度,并显示
**********************************************************/
void DisplayTemperature()
{
DisplayReg[0]=Char_C; //显示C
DisplayReg[1]=DIGITTAB[Temperature/100%10]; //取百位
DisplayReg[2]=DIGITDOTTAB[Temperature/10%10]; //取十位
DisplayReg[3]=DIGITTAB[Temperature%10]; //取个位
Display();
}
/**********************************************************
采信光照度,并显示
**********************************************************/
void DisplayLight()
{
DisplayReg[0]=Char_L; //显示L
DisplayReg[1]=DIGITTAB[Light/100%10]; //取百位
DisplayReg[2]=DIGITDOTTAB[Light/10%10]; //取十位
DisplayReg[3]=DIGITTAB[Light%10]; //取个位
Display();
}
/**********************************************************
采信光照度,并显示
**********************************************************/
void DisplayVoltage()
{
DisplayReg[0]=Char_E; //显示E
DisplayReg[1]=DIGITDOTTAB[Voltage/100%10]; //取百位
DisplayReg[2]=DIGITTAB[Voltage/10%10]; //取十位
DisplayReg[3]=DIGITTAB[Voltage%10]; //取个位
Display();
}
/**********************************************************
采集所有的参数 并判断报警
**********************************************************/
void CjAllValue()
{
float tempV,tempR;
//采集温度
tempV=ReadAD(0);
tempR=(50.0-tempV*10.0)/tempV; //求出热敏电阻值单位为K
if(tempR>32.79) //求出电压值 并转换成无符号整型,便于数据处理
{
Temperature=0;
}
else if(tempR>19.83) //0~10
{
tempR=10.0-(tempR-19.83)/(32.79-19.83)*10.0;
}
else if(tempR>12.47) //10~20
{
tempR=20.0-(tempR-12.47)/(19.83-12.47)*10.0;
}
else if(tempR>8.065) //20~30
{
tempR=30.0-(tempR-8.065)/(12.47-8.065)*10.0;
}
else if(tempR>5.08) //30~40
{
tempR=40.0-(tempR-5.08)/(8.065-5.08)*10.0;
}
else if(tempR>4.16) //40~50
{
tempR=50.0-(tempR-4.16)/(5.08-4.16)*10.0;
}
else if(tempR>1.02) //50~100
{
tempR=100.0-(tempR-4.16)/(4.16-1.02)*10.0;
}
else// if(tempR>1.02) //50~100
{
tempR=99.9;//100.0-(tempR-4.16)/(4.16-1.02)*10.0;
}
Temperature=(uint)(tempR*10);
//采集光照度
tempV=ReadAD(1);
tempR=(50.0-tempV*10.0)/tempV; //求出光敏电阻值单位为K
Light=(uint)(tempR*10); //显示当前光照下电阻值单位为K
//采集电压
tempV=ReadAD(2);
tempR=tempV*2; //求出电压值 并转换成无符号整型,便于数据处理
Voltage=(uint)(tempR*100);
if(Temperature>=SetT)
{
MK=0;
}
else
{
MK=1;
}
}
/**********************************************************
主函数
**********************************************************/
void main()
{
uchar cnts;
Init();
Speaker(5); //蜂鸣器响5声
Test();
while(1)
{
KeyPro();
if(!SetBit)
{
if(cnts<3)
{
DisplayTemperature();
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
hjjk.rar
(87.92 KB, 下载次数: 15)
2018-6-28 15:53 上传
点击文件名下载附件
温度监控
下载积分: 黑币 -5
作者:
zbr1980
时间:
2019-1-7 10:48
感谢分享,下载了
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1