|
環(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開始計(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信號
- {
- CLK=0;CLK=1;
- }
- }
- ST=0;ST=1; //鎖存信號,此時(shí)剛才送的4個(gè)數(shù)碼管顯示的內(nèi)容將被送到數(shù)碼管引腳
- }
- /**********************************************************
- 測試數(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)換成無符號整型,便于數(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)換成無符號整型,便于數(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();
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
hjjk.rar
(87.92 KB, 下載次數(shù): 15)
2018-6-28 15:53 上傳
點(diǎn)擊文件名下載附件
溫度監(jiān)控 下載積分: 黑幣 -5
|
|