標(biāo)題:
單片機(jī)環(huán)境監(jiān)控程序 溫度監(jiān)控
[打印本頁(yè)]
作者:
天之藍(lán)1994
時(shí)間:
2018-6-28 15:56
標(biāo)題:
單片機(jī)環(huán)境監(jiān)控程序 溫度監(jiān)控
環(huán)境控制和紅外線控制
單片機(jī)源程序如下:
#include "define.h"
uint Voltage,Light,Temperature;
uchar xdata DisplayReg[4]; //定義4個(gè)數(shù)碼管顯示的緩存數(shù)組
//定義數(shù)碼管顯示0~9的段碼
uchar code DIGITTAB[]=
{
0X14,0x9F,0X38,0X1A,0X93,0X52,0X50,0X1F,0X10,0X12,0xff/*0~9*/
};
//0001 0100
//定義數(shù)碼管顯示0.~9.的段碼
uchar code DIGITDOTTAB[]=
{
0X04,0X8F,0X28,0X0A,0X83,0X42,0X40,0X0F,0X00,0X02,0xff/*0.~9.*/
};
//定義數(shù)碼管顯示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;
/**********************************************************
初使化函數(shù)
設(shè)置輸出IO的初使?fàn)顟B(tài)
定時(shí)器,變量,串行通訊口以及中斷的設(shè)置
**********************************************************/
void Timer0Init(void) //20毫秒@22.1184MHz
{
TMOD &= 0xF0; //設(shè)置定時(shí)器模式
TMOD |= 0x01; //設(shè)置定時(shí)器模式
TL0 = 0x00; //設(shè)置定時(shí)初值
TH0 = 0x70; //設(shè)置定時(shí)初值
TF0 = 0; //清除TF0標(biāo)志
TR0 = 1; //定時(shí)器0開(kāi)始計(jì)時(shí)
}
/**********************************************************
初使化函數(shù)
設(shè)置輸出IO的初使?fàn)顟B(tài)
定時(shí)器,變量,串行通訊口以及中斷的設(shè)置
**********************************************************/
void Init()
{
P0=0xFF;
P1=0xFF;
P2=0xFF;
P3=0xFF;
Timer0Init();
ET0=1;
EA=1;
SetT=360;
}
/**********************************************************
延時(shí)子程序(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,同時(shí)緩存的值會(huì)在P0口上
for(j=0;j<8;j++) //加8個(gè)CLK信號(hào)
{
CLK=0;CLK=1;
}
}
ST=0;ST=1; //鎖存信號(hào),此時(shí)剛才送的4個(gè)數(shù)碼管顯示的內(nèi)容將被送到數(shù)碼管引腳
}
/**********************************************************
測(cè)試數(shù)碼管子程序
**********************************************************/
void Test()
{
uchar i;
for(i=0;i<10;i++) //四個(gè)數(shù)碼管顯示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++) //四個(gè)數(shù)碼管顯示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]; //取個(gè)位
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]; //取個(gè)位
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]; //取個(gè)位
Display();
}
/**********************************************************
采集所有的參數(shù) 并判斷報(bào)警
**********************************************************/
void CjAllValue()
{
float tempV,tempR;
//采集溫度
tempV=ReadAD(0);
tempR=(50.0-tempV*10.0)/tempV; //求出熱敏電阻值單位為K
if(tempR>32.79) //求出電壓值 并轉(zhuǎn)換成無(wú)符號(hào)整型,便于數(shù)據(jù)處理
{
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); //顯示當(dāng)前光照下電阻值單位為K
//采集電壓
tempV=ReadAD(2);
tempR=tempV*2; //求出電壓值 并轉(zhuǎn)換成無(wú)符號(hào)整型,便于數(shù)據(jù)處理
Voltage=(uint)(tempR*100);
if(Temperature>=SetT)
{
MK=0;
}
else
{
MK=1;
}
}
/**********************************************************
主函數(shù)
**********************************************************/
void main()
{
uchar cnts;
Init();
Speaker(5); //蜂鳴器響5聲
Test();
while(1)
{
KeyPro();
if(!SetBit)
{
if(cnts<3)
{
DisplayTemperature();
……………………
…………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
hjjk.rar
(87.92 KB, 下載次數(shù): 15)
2018-6-28 15:53 上傳
點(diǎn)擊文件名下載附件
溫度監(jiān)控
下載積分: 黑幣 -5
作者:
zbr1980
時(shí)間:
2019-1-7 10:48
感謝分享,下載了
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1