導航:首頁 > 操作系統 > 單片機課程設計溫度報警器

單片機課程設計溫度報警器

發布時間:2022-05-19 02:18:14

A. 單片機溫度報警器沒有超值也報警

溫度報警器就是需要溫度感測器不停地對監控的對象進行檢測
單片機報警模塊是指的主要功能部分採用成品的模塊,所以比較容易製作。單片機報警模塊有遙控設定防盜、遙控關閉防盜自動鎖定引擎和防搶劫等功能。單片機報警模塊電源接通後按動遙控器防盜設定鍵A鍵,HY988A I/O端輸出跳變高電平經D3使T3導通HY-5高響度喇叭發聲作為回應信號。單片機報警模塊輸出端輸出高電平經R1為T1提供基電流,這時如果HY966受到輕微震動,其輸出端輸出高電平脈沖使T1導通。單片機報警模塊T1的導通使C1瞬間充電至+5V左右,此電壓高於比較器參考電壓,比較器反轉輸出高電平經 A1B 緩沖後驅動繼電器吸合、HY-5喇叭報警。單片機報警模塊此後如 HY966 不在受到震動C1經R4緩慢放電,當C1上的電壓放電至低於比較器參考電壓時,比較器反轉輸出低電平,繼電器釋放、報警停止,繼續警戒狀態。

B. 單片機溫度報警系統

不是太難,當然對剛剛接觸單片機的人而言還是有一定難度的,下面是我做的一個溫控系統,供參考。

//溫控系統控製程序
//版本號:V1.0;2015.6.19
//溫度感測器:DS18B20
//顯示方式:LED
#include <reg51.h>
#define uchar unsigned char
sbit keyup=P1^0;
sbit keydn=P1^1;
sbit keymd=P1^2;
sbit out=P3^7;//接控制繼電器
sbit DQ = P3^4;//接溫度感測器18B20
uchar t[2],number=0,*pt;//溫度值
uchar TempBuffer1[4]={0,0,0,0};
uchar Tmax=18,Tmin=8;
uchar distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff,0xfe,0xf7};
uchar dismod=0,xiaodou1=0,xiaodou2=0,currtemp;
bit flag;
void t0isr() interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
switch(number)
{
case 0:
P2=0x08;
P0=distab[TempBuffer1[0]];
break;
case 1:
P2=0x04;
P0=distab[TempBuffer1[1]];
break;
case 2:
P2=0x02;
P0=distab[TempBuffer1[2]]&0x7f;
break;
case 3:
P2=0x01;
P0=distab[TempBuffer1[3]];
break;
default:
break;
}
number++;
if(number>3)number=0;
}

void delay_18B20(unsigned int i)
{
while(i--);
}

/**********ds18b20初始化函數**********************/

void Init_DS18B20(void)
{
bit x=0;
do{
DQ=1;
delay_18B20(8);
DQ = 0; //單片機將DQ拉低
delay_18B20(90); //精確延時 大於 480us
DQ = 1; //拉高匯流排
delay_18B20(14);
x=DQ; //稍做延時後 如果x=0則初始化成功 x=1則初始化失敗,繼續初始化
}while(x);
delay_18B20(20);
}

/***********ds18b20讀一個位元組**************/

unsigned char ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; // 給脈沖信號
dat>>=1;
DQ = 1; // 給脈沖信號
if(DQ)
dat|=0x80;
delay_18B20(4);
}
return(dat);
}

/*************ds18b20寫一個位元組****************/

void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
delay_18B20(5);
DQ = 1;
dat>>=1;
}
}

/**************讀取ds18b20當前溫度************/

unsigned char *ReadTemperature(unsigned char rs)
{
unsigned char tt[2];
delay_18B20(80);
Init_DS18B20();
WriteOneChar(0xCC); //跳過讀序號列號的操作
WriteOneChar(0x44); //啟動溫度轉換
delay_18B20(80);
Init_DS18B20();
WriteOneChar(0xCC); //跳過讀序號列號的操作
WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器)前兩個就是溫度
tt[0]=ReadOneChar(); //讀取溫度值低位
tt[1]=ReadOneChar(); //讀取溫度值高位
return(tt);
}

void covert1(void)//將溫度轉換為LED顯示的數據
{
uchar x=0x00,y=0x00;
t[0]=*pt;
pt++;
t[1]=*pt;
if(t[1]&0x080) //判斷正負溫度
{
TempBuffer1[0]=0x0c; //c代表負
t[1]=~t[1]; /*下面幾句把負數的補碼*/
t[0]=~t[0]; /*換算成絕對值*********/
x=t[0]+1;
t[0]=x;
if(x==0x00)t[1]++;
}
else TempBuffer1[0]=0x0a;//A代表正
t[1]<<=4;//將高位元組左移4位
t[1]=t[1]&0xf0;
x=t[0];//將t[0]暫存到X,因為取小數部分還要用到它
x>>=4;//右移4位
x=x&0x0f;//和前面兩句就是取出t[0]的高四位
y=t[1]|x;//將高低位元組的有效值的整數部分拼成一個位元組
TempBuffer1[1]=(y%100)/10;
TempBuffer1[2]=(y%100)%10;
t[0]=t[0]&0x0f;//小數部分
TempBuffer1[3]=t[0]*10/16;
//以下程序段消去隨機誤檢查造成的誤判,只有連續12次檢測到溫度超出限制才切換加熱裝置
if(currtemp>Tmin)xiaodou1=0;
if(y<Tmin)
{
xiaodou1++;
currtemp=y;
xiaodou2=0;
}
if(xiaodou1>12)
{
out=0;
flag=1;
xiaodou1=0;
}
if(currtemp<Tmax)xiaodou2=0;
if(y>Tmax)
{
xiaodou2++;
currtemp=y;
xiaodou1=0;
}
if(xiaodou2>12)
{
out=1;
flag=0;
xiaodou2=0;
}
out=flag;
}
void convert(char tmp)
{
uchar a;
if(tmp<0)
{
TempBuffer1[0]=0x0c;
a=~tmp+1;
}
else
{
TempBuffer1[0]=0x0a;
a=tmp;
}
TempBuffer1[1]=(a%100)/10;
TempBuffer1[2]=(a%100)%10;
}
void keyscan( )
{
uchar keyin;
keyin=P1&0x07;
if(keyin==0x07)return;
else if(keymd==0)
{
dismod++;
dismod%=3;
while(keymd==0);
switch(dismod)
{
case 1:
convert(Tmax);
TempBuffer1[3]=0x11;
break;
case 2:
convert(Tmin);
TempBuffer1[3]=0x12;
break;
default:
break;
}
}
else if((keyup==0)&&(dismod==1))
{
Tmax++;
convert(Tmax);
while(keyup==0);
}
else if((keydn==0)&&(dismod==1))
{
Tmax--;
convert(Tmax);
while(keydn==0);
}
else if((keyup==0)&&(dismod==2))
{
Tmin++;
convert(Tmin);
while(keyup==0);
}
else if((keydn==0)&&(dismod==2))
{
Tmin--;
convert(Tmin);
while(keydn==0);
}
xiaodou1=0;
xiaodou2=0;
}
main()
{
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TR0=1;
ET0=1;
EA=1;
out=1;
flag=0;
ReadTemperature(0x3f);
delay_18B20(50000);//延時等待18B20數據穩定
while(1)
{
pt=ReadTemperature(0x7f); //讀取溫度,溫度值存放在一個兩個位元組的數組中
if(dismod==0)covert1();
keyscan();
delay_18B20(30000);
}

}

C. 單片機多路溫度巡迴報警器

1.首先確定自己有沒有能力做。
在學校學習的,上課還聽的,還有點上進心的,那不急還有半年慢慢做,單片機學學也就2-3個月的事情,不懂問老師,一步一個腳印學下去,悟性好的,1個月足夠做出個畢業設計了。曾有個同學我帶他做畢業設計,本來是混日子的,一個月的時間久把畢業設計做出來了,好像也是溫度計。如果有什麼不懂的可以問我;
混日子的同學,很懶,有那麼點錢,沒什麼出息的,買設計吧,我給你做全套,價格優惠。

D. 單片機溫度報警器的溫度上下限按鍵調控的C語言程序怎麼編

溫度報警器就是需要溫度感測器不停地對監控的對象進行檢測,例如pt100溫度感測器,pt100感測器是不同溫度下,阻值會不同,在同一溫度下,阻值是相同的。根據這個原理通過電路轉換成電壓,然後模擬量轉換成數字量輸入到單片機,單片機根據讀取到的電壓值判斷實際溫度值,然後根據設定的報警值比較,如果超過 就進行報警動作。
在實際設計過程中那個報警溫度的設定,可以直接對那個變數進行加減的,例如
void actfuntion(unsigned char temp)
{
temp++;
}
然後在檢測到按鍵有電平跳變的時候,就調用這個含參子函數對定義的溫度設定值進行加操作,減操作也是一樣,還可以在調用的後面進行最大值或者最小值的判斷。
如果覺得這樣一下一下的按太麻煩了,可以對按鍵進行長按連續觸發進行判斷,就是在定時器里進行判斷按下時間,然後不停的調用這個子函數。
當然這個設定值是需要考慮掉電保存的,或者是按鍵保存。可以在設定好溫度值之後,在按下其他的按鍵,進行把溫度設定值 保存到單片機內部eeprom就可以了,不需要保存太多數據的情況下,現在市面上很多單片機都有的內部eeprom就夠用的了,不需要進行外部擴展。
然後在單片機上電,也就是主函數的開頭進行讀取eeprom中保存的設定值。

E. STC89C52單片機,用C語言編溫度報警器的程序

溫度報警就用外部中斷不就行了?和18b20連接
萬年歷就是利用定時器就可以了吧。在加一塊液晶屏用來顯示。
具體的應該網上都有你可以搜一下。

我幫您搜了一個萬年歷的程序
一、 陽歷演算法
具體演算法見函數void get_solar_day_date(void),這樣陽歷日歷的星期排法就確定了。
表1:
變數定義:
Public:
Unsigned int temp_total_day;
Unsigned char gc_solar_calendar_year;
Unsigned char gc_solar_calendar_month;
Unsigned char gc_solar_calendar_date;
Unsigned char gc_lunar_calendar_year;
Unsigned char gc_lunar_calendar_month;
Unsigned char gc_lunar_calendar_date;
Unsigned char start_day_of_week;
說明:函數get_solar_day_date(void)的輸入變數:gc_solar_calendar_year和 gc_solar_calendar_month
輸出變數:start_day_of_week和temp_total_day
Void get_solar_day_date(void)
{
unsigned char temp01;
/*------calculate what day is the day of the current month and year. Mon~Sun?---*/
/*條件初始化二次,減少運算數據量. temp_total_day 是int型變數*/
start_day_of_week = 2; temp_total_day = 0;calculate_temp = 1;
if(gc_solar_calendar_year > 99)
{start_day_of_week = 6;calculate_temp = 100;}
for(temp01 = calculate_temp; temp01<gc_solar_calendar_year; temp01++)
{ if(temp01%4 == 0){start_day_of_week +=2;temp_total_day += 366; }
else {start_day_of_week +=1;temp_total_day += 365;}}
for(temp01 = 1;temp01<gc_solar_calendar_month;temp01++)
{ switch(temp01)
{case 1,3,5,7,8,10,12: start_day_of_week +=3;temp_total_day +=31;break;
case 2: if(((gc_solar_calendar_year%4) == 0)&&(gc_solar_calendar_year != 200))
{start_day_of_week +=1; temp_total_day +=29;}
else {start_day_of_week +=0;temp_total_day +=28;} break;
case 4,6,9,11: start_day_of_week +=2; temp_total_day +=30; break;}}
start_day_of_week %=7;
/*-end of calculate what day is the day(Mon~Sun?) and total day --*/
}

二、 陰歷演算法
200年需要200 × 2 = 400個位元組,構成陰歷壓縮數據表lunar_calendar_month_table[]如下
const char lunar_calendar_month_table[]={ //從陰歷年1900年到2100年
/*the total day of each month pointer */
月份 1 2 3 4 5 6 7 8 9 10 11 12
閏年 31 29 31 30 31 30 31 31 30 31 30 31
非閏年 31 28 31 30 31 30 31 31 30 31 30 31

/* from 1901~2100*/
/* (0110)110000001001 (0110)leap month,110000001001
lunar month total day: 1:29 0:30*/
0x00,0x04,0xad,0x08,0x5a,0x01,0xd5,0x54,0xb4,0x09,0x64,0x05,0x59,0x45,
0x95,0x0a,0xa6,0x04,0x55,0x24,0xad,0x08,0x5a,0x62,0xda,0x04,0xb4,0x05,
0xb4,0x55,0x52,0x0d,0x94,0x0a,0x4a,0x2a,0x56,0x02,0x6d,0x71,0x6d,0x01,
0xda,0x02,0xd2,0x52,0xa9,0x05,0x49,0x0d,0x2a,0x45,0x2b,0x09,0x56,0x01,
0xb5,0x20,0x6d,0x01,0x59,0x69,0xd4,0x0a,0xa8,0x05,0xa9,0x56,0xa5,0x04,
0x2b,0x09,0x9e,0x38,0xb6,0x08,0xec,0x74,0x6c,0x05,0xd4,0x0a,0xe4,0x6a,
0x52,0x05,0x95,0x0a,0x5a,0x42,0x5b,0x04,0xb6,0x04,0xb4,0x22,0x6a,0x05,
0x52,0x75,0xc9,0x0a,0x52,0x05,0x35,0x55,0x4d,0x0a,0x5a,0x02,0x5d,0x31,
0xb5,0x02,0x6a,0x8a,0x68,0x05,0xa9,0x0a,0x8a,0x6a,0x2a,0x05,0x2d,0x09,
0xaa,0x48,0x5a,0x01,0xb5,0x09,0xb0,0x39,0x64,0x05,0x25,0x75,0x95,0x0a,
0x96,0x04,0x4d,0x54,0xad,0x04,0xda,0x04,0xd4,0x44,0xb4,0x05,0x54,0x85,
0x52,0x0d,0x92,0x0a,0x56,0x6a,0x56,0x02,0x6d,0x02,0x6a,0x41,0xda,0x02,
0xb2,0xa1,0xa9,0x05,0x49,0x0d,0x0a,0x6d,0x2a,0x09,0x56,0x01,0xad,0x50,
0x6d,0x01,0xd9,0x02,0xd1,0x3a,0xa8,0x05,0x29,0x85,0xa5,0x0c,0x2a,0x09,
0x96,0x54,0xb6,0x08,0x6c,0x09,0x64,0x45,0xd4,0x0a,0xa4,0x05,0x51,0x25,
0x95,0x0a,0x2a,0x72,0x5b,0x04,0xb6,0x04,0xac,0x52,0x6a,0x05,0xd2,0x0a,
0xa2,0x4a,0x4a,0x05,0x55,0x94,0x2d,0x0a,0x5a,0x02,0x75,0x61,0xb5,0x02,
0x6a,0x03,0x61,0x45,0xa9,0x0a,0x4a,0x05,0x25,0x25,0x2d,0x09,0x9a,0x68,
0xda,0x08,0xb4,0x09,0xa8,0x59,0x54,0x03,0xa5,0x0a,0x91,0x3a,0x96,0x04,
0xad,0xb0,0xad,0x04,0xda,0x04,0xf4,0x62,0xb4,0x05,0x54,0x0b,0x44,0x5d,
0x52,0x0a,0x95,0x04,0x55,0x22,0x6d,0x02,0x5a,0x71,0xda,0x02,0xaa,0x05,
0xb2,0x55,0x49,0x0b,0x4a,0x0a,0x2d,0x39,0x36,0x01,0x6d,0x80,0x6d,0x01,
0xd9,0x02,0xe9,0x6a,0xa8,0x05,0x29,0x0b,0x9a,0x4c,0xaa,0x08,0xb6,0x08,
0xb4,0x38,0x6c,0x09,0x54,0x75,0xd4,0x0a,0xa4,0x05,0x45,0x55,0x95,0x0a,
0x9a,0x04,0x55,0x44,0xb5,0x04,0x6a,0x82,0x6a,0x05,0xd2,0x0a,0x92,0x6a,
0x4a,0x05,0x55,0x0a,0x2a,0x4a,0x5a,0x02,0xb5,0x02,0xb2,0x31,0x69,0x03,
0x31,0x73,0xa9,0x0a,0x4a,0x05,0x2d,0x55,0x2d,0x09,0x5a,0x01,0xd5,0x48,
0xb4,0x09,0x68,0x89,0x54,0x0b,0xa4,0x0a,0xa5,0x6a,0x95,0x04,0xad,0x08,
0x6a,0x44,0xda,0x04,0x74,0x05,0xb0,0x25,0x54,0x03,};
確定陽歷日和陰歷日的對應關系的演算法:
對於其他任何一個陽歷日和陰歷日的對應關系,都可以通過以下演算法求得結果。具體演算法由如get_lunar_day(void)實現:
說明:函數get_lunar_day(void)的輸入變數:gc_solar_calendar_year和gc_solar_calendar
輸出變數:gc_lunar_calendar_year、gc_lunar_calendar_month和 gc_lunar_calendar_date
void get_lunar_day(void)/*計算出輸入陽歷年、陽歷月,對應該陽歷月第一天對應陰歷時間年、月、日*/
{unsigned char temp_leap_month;
unsigned char temp_flag;
unsigned char calculate_temp;
unsigned char mc_tpumenus_temp_loop;
unsigned char mc_tpumenus_temp_01;
temp_leap_month = 0;temp_flag = 1;
//條件初始化二次,減少運算數據量.
if(gc_solar_calendar_year > 99)
{gc_lunar_calendar_year = 99;gc_lunar_calendar_month = 11;
gc_lunar_calendar_date = 25;temp_total_day += 25;calculate_temp = 100;}
else
{gc_lunar_calendar_year = 0;gc_lunar_calendar_month = 11;
gc_lunar_calendar_date = 11;temp_total_day += 11;calculate_temp = 1;}
if(gc_solar_calendar_year >calculate_temp||gc_solar_calendar_month>1)
{ for(mc_tpumenus_temp_loop = 1;mc_tpumenus_temp_loop>0;){
temp_total_day -=calendar_calculate_lunar_month_total_day();
temp_leap_month = tpumenus_lunar_calendar_month_table[2*gc_lunar_calendar_year +
temp_leap_month = (temp_leap_month>>4)&0x0F;
if(gc_lunar_calendar_month == temp_leap_month)
{switch(gc_lunar_calendar_year)
{case 6,14,19,25,33,36,38,41,44,52,55,79,117,
136,147,150,155,158,185,193:
if(temp_total_day<31){gc_lunar_calendar_date = temp_total_day;
mc_tpumenus_temp_loop = 0;temp_flag = 0;}
else temp_total_day -= 30;
break; //current month:temp_leap_month
default:
if(temp_total_day < 30)
{gc_lunar_calendar_date = temp_total_day;mc_tpumenus_temp_loop = 0;
temp_flag = 0; /*current month:temp_leap_month*/ }
else temp_total_day -= 29; break;}}
if(temp_flag){gc_lunar_calendar_month++;
if(gc_lunar_calendar_month == 13){gc_lunar_calendar_month = 1;
gc_lunar_calendar_year++;}
If(temp_total_day < 61) //if temp_total_day>60,ignore compare
{mc_tpumenus_temp_01 = calendar_calculate_lunar_month_total_day();
if(temp_total_day < (mc_tpumenus_temp_01 + 1))
{mc_tpumenus_temp_loop = 0;gc_lunar_calendar_date = temp_total_day;
} }
} } }
gc_lunar_leap_month = (temp_flag<<4)|temp_leap_month;/*set leap_month flag*/
說明:函數calendar_calculate_lunar_month_total_day(void)根據輸入變數gc_lunar_calen和 gc_lunar_calendar_month,結合壓縮數據表lunar_calendar_month_table計算出對應陰歷天數。
unsigned char calendar_calculate_lunar_month_total_day(void)
{
unsigned char mc_tpumenus_temp_01;
unsigned char mc_tpumenus_temp_02;
if(gc_lunar_calendar_month < 9)
{mc_tpumenus_temp_01 = lunar_calendar_month_table[2*gc_lunar_calendar_year];
mc_tpumenus_temp_02 = gc_lunar_calendar_month - 1;}
else{
mc_tpumenus_temp_01 = lunar_calendar_month_table[2*gc_lunar_calendar_year + 1];
mc_tpumenus_temp_02 = gc_lunar_calendar_month - 9;}
if((mc_tpumenus_temp_01>> mc_tpumenus_temp_02)&0x01)return(29);
else return(30);}
陽歷日和農歷節氣的對應關系
壓縮節氣數據表:
根據規律可以得到四個數據表(每個陽歷月有兩個節氣,每個節氣需要兩個數據表):
const unsigned char calendar_solar_term_table_01[12][33] = {
{7,6,6,6,6,6,6,6,6,5,6,6,6,5,5,6,6,5,5,5,5,5,5,5,5,4,5,5}, //month 1
{5,4,5,5,5,4,4,5,5,4,4,4,4,4,4,4,4,3,4,4,4,3,3,4,4,3,3,3}, //2
{6,6,6,7,6,6,6,6,5,6,6,6,5,5,6,6,5,5,5,6,5,5,5,5,4,5,5,5,5}, //3
{5,5,6,6,5,5,5,6,5,5,5,5,4,5,5,5,4,4,5,5,4,4,4,5,4,4,4,4,5}, //4
{6,6,6,7,6,6,6,6,5,6,6,6,5,5,6,6,5,5,5,6,5,5,5,5,4,5,5,5,5}, //5
{6,6,7,7,6,6,6,7,6,6,6,6,5,6,6,6,5,5,6,6,5,5,5,6,5,5,5,5,4,5,5,5,5}, //6
{7,8,8,8,7,7,8,8,7,7,7,8,7,7,7,7,6,7,7,7,6,6,7,7,6,6,6,7,7}, //7
{8,8,8,9,8,8,8,8,7,8,8,8,7,7,8,8,7,7,7,8,7,7,7,7,6,7,7,7,6,6,7,7,7}, //8
{8,8,8,9,8,8,8,8,7,8,8,8,7,7,8,8,7,7,7,8,7,7,7,7,6,7,7,7,7}, //9
{9,9,9,9,8,9,9,9,8,8,9,9,8,8,8,9,8,8,8,8,7,8,8,8,7,7,8,8,8}, //10
{8,8,8,8,7,8,8,8,7,7,8,8,7,7,7,8,7,7,7,7,6,7,7,7,6,6,7,7,7}, //11
{7,8,8,8,7,7,8,8,7,7,7,8,7,7,7,7,6,7,7,7,6,6,7,7,6,6,6,7,7}, //12
}; //這個數據表表示了每個月第一個節氣出現的規律
const unsigned char calendar_solar_term_year_01[12][9] = {
{13,49,85,117,149,185,201,250,250}, //month 1
{13,45,81,117,149,185,201,250,250}, //2
{13,48,84,112,148,184,200,201,250}, //3
{13,45,76,108,140,172,200,201,250}, //4
{13,44,72,104,132,168,200,201,250}, //5
{5 ,33,68,96 ,124,152,188,200,201}, //6
{29,57,85,120,148,176,200,201,250}, //7
{13,48,76,104,132,168,196,200,201}, //8
{25,60,88,120,148,184,200,201,250}, //9
{16,44,76,108,144,172,200,201,250}, //10
{28,60,92,124,160,192,200,201,250}, //11
{17,53,85,124,156,188,200,201,250}, //12
}; //這個數據表表示了每個月第一個節氣出現規律對應的陽歷年份范圍
const unsigned char calendar_solar_term_table_02[12][29] = {
{21,21,21,21,21,20,21,21,21,20,20,21,21,20,20,20,20,20,20,20,20,19,20,20,20,19,19
{20,19,19,20,20,19,19,19,19,19,19,19,19,18,19,19,19,18,18,19,19,18,18,18,18,18,18
{21,21,21,22,21,21,21,21,20,21,21,21,20,20,21,21,20,20,20,21,20,20,20,20,19,20,20
{20,21,21,21,20,20,21,21,20,20,20,21,20,20,20,20,19,20,20,20,19,19,20,20,19,19,19
{21,22,22,22,21,21,22,22,21,21,21,22,21,21,21,21,20,21,21,21,20,20,21,21,20,20,20
{22,22,22,22,21,22,22,22,21,21,22,22,21,21,21,22,21,21,21,21,20,21,21,21,20,20,21
{23,23,24,24,23,23,23,24,23,23,23,23,22,23,23,23,22,22,23,23,22,22,22,23,22,22,22
{23,24,24,24,23,23,24,24,23,23,23,24,23,23,23,23,22,23,23,23,22,22,23,23,22,22,22
{23,24,24,24,23,23,24,24,23,23,23,24,23,23,23,23,22,23,23,23,22,22,23,23,22,22,22
{24,24,24,24,23,24,24,24,23,23,24,24,23,23,23,24,23,23,23,23,22,23,23,23,22,22,23
{23,23,23,23,22,23,23,23,22,22,23,23,22,22,22,23,22,22,22,22,21,22,22,22,21,21,22
{22,22,23,23,22,22,22,23,22,22,22,22,21,22,22,22,21,21,22,22,21,21,21,22,21,21,21
}; //這個數據表表示了每個月第二個節氣出現的規律
const unsigned char calendar_solar_term_year_02[12][8] = {
{13,45,81,113,149,185,201},{21,57,93,125,161,193,201},{21,56,88,120,152,188,200,20
{21,49,81,116,144,176,200,201},{17,49,77,112,140,168,200,201},
{28,60,88,116,148,180,200,201},{25,53,84,112,144,172,200,201},
{29,57,89,120,148,180,200,201},{17,45,73,108,140,168,200,201},
{28,60,92,124,160,192,200,201},{16,44,80,112,148,180,200,201},
{17,53,88,120,156,188,200,201},};
//這個數據表表示了每個月第二個節氣出現規律對應的陽歷年份范圍
每個陽歷月對應的兩個農歷節氣出現的日期,可根據條件規律演算法,分別由以下兩個函數實現
unsigned char calendar_calculate_solar_term_1(void)
{
zpage unsigned char done_index;
zpage unsigned char solar_term;
done_index = 0;
while(gc_solar_calendar_year >= calendar_solar_term_year_01[gc_solar_calendar_mon
[done_index]) {done_index++;}
solar_term = calendar_solar_term_table_01[gc_solar_calendar_month - 1][4*done_ind
gc_solar_calendar_year%4];
if((gc_solar_calendar_year == 121)&&(gc_solar_calendar_month == 4))solar_term = 5
if((gc_solar_calendar_year == 132)&&(gc_solar_calendar_month == 4))solar_term = 5
if((gc_solar_calendar_year == 194)&&(gc_solar_calendar_month == 6))solar_term = 6
return(solar_term);
} //計算陽歷月對應的第一個節氣
unsigned char calendar_calculate_solar_term_2(void)
{
zpage unsigned char done_index;
zpage unsigned char solar_term;
done_index = 0;
while(gc_solar_calendar_year >= calendar_solar_term_year_02[gc_solar_calendar_mon
[done_index]){done_index++;}
solar_term = calendar_solar_term_table_02[gc_solar_calendar_month - 1][4*done_ind
gc_solar_calendar_year%4];
if((gc_solar_calendar_year == 171)&&(gc_solar_calendar_month == 3))solar_term = 2
if((gc_solar_calendar_year == 181)&&(gc_solar_calendar_month == 5))solar_term = 2
return(solar_term);
} //計算陽歷月對應的第二個節氣
以上就是萬年歷的完整演算法。它首先計算出對應陽歷月第一天對應是星期幾,然後根據數據壓定,確定對應的陰歷日期;而陰歷節氣,則有條件規律演算法實現。

F. 基於單片機的溫度檢測報警器


溫度感測器
AD0809
採集信號得到與之對應的
模擬信號
。A/D轉換電路對處理之後模擬信號數值化,將模擬信號轉換成數字信號。再由集成運放LM741對微弱的電信號進行放大處理,輸出電壓U0=2.732-UI,輸出電壓U1>2.732,是一個反向電壓。反向
比例運算電路
,其輸出電壓
UO=-2UI,U0是一個正電壓。再通過單片機(8951)對信號進行讀寫操作,經單片機處理後由
七段數碼管
顯示。並通過鍵盤輸入模塊向單片機設定高溫
臨界溫度
。當前環境溫度若超過設定的高溫臨界溫度,由單片機發出報警信號並驅動繼電器使風扇電機轉動。

G. 想用單片機開發一個溫度濕度警報器,當溫度濕度過高時,觸發警報。需要哪些東西

單片機最小系統就不用說了吧 就是能讓單片機工作起來 然後是濕度的感測器 和報警器 這些分別與單片機的某些引腳連接 接著就是單片機的編程 這個東西不大 用54應該能實現了 編程也就是說 當開啟電源後 感測器開始檢測 寫一個報警的值 當達到這個值時 單片機發送個電平給報警器讓起工作 報警.

H. 溫度報警器,用單片機實現,溫度范圍有用戶設定,要顯現出來並與實時溫度相比較進行報警, 怎麼實現呢

用18b20溫濕度檢測溫度的值,,然後和你設定的溫度值比較,如果超出了范圍就用給蜂鳴器賦值,觸發報警。。。

閱讀全文

與單片機課程設計溫度報警器相關的資料

熱點內容
解壓小熊手機殼 瀏覽:345
成都市區建成面積演算法 瀏覽:660
智能家居單片機 瀏覽:97
買男裝用什麼app好 瀏覽:855
文件夾合並了怎麼拆開 瀏覽:259
波段副圖源碼無未來函數 瀏覽:88
livecn伺服器地址 瀏覽:259
程序員這個工作真的很吃香嗎 瀏覽:846
程序員和數學分析師待遇 瀏覽:680
壓縮氣彈簧怎麼拆 瀏覽:321
華為公有雲伺服器添加虛擬ip 瀏覽:211
程序員和運營哪個累 瀏覽:26
抖音安卓信息提示音怎麼設置 瀏覽:456
光速虛擬機的共享文件夾 瀏覽:250
程序員培訓機構發的朋友圈真實性 瀏覽:744
天乾地支簡單演算法 瀏覽:299
下載個壓縮文件 瀏覽:300
普通人電腦關機vs程序員關機 瀏覽:630
米酷建站源碼 瀏覽:115
氫氣app怎麼搜搭配 瀏覽:619