娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年01月14日(星期二)

正在發生

2018年01月14日 | 51單片機ADC0809+AD590溫度檢測、報警程序

發布者:chi32 來源: eefocus關鍵字:51單片機  ADC0809  AD590  溫度檢測  報警程序 手機看文章 掃描二維碼
隨時隨地手機看文章

#include "reg52.h"http://頭文件
#include "intrins.h"
#define uchar unsigned char//宏定義
#define uint unsigned int//宏定義 
sbit RS=P1^0;//LCD1602定義I/O的硬件接口
sbit RW=P1^1;//LCD1602定義I/O的硬件接口
sbit E=P1^2;//LCD1602定義I/O的硬件接口

sbit key_1=P1^3;//按鍵1定義I/O的硬件接口////Alarm_Value;//溫度報警值+1度
sbit key_2=P1^4;//按鍵2定義I/O的硬件接口////Alarm_Value;//溫度報警值-1度
sbit key_3=P1^5;//按鍵3定義I/O的硬件接口
sbit key_4=P1^6;//按鍵4定義I/O的硬件接口
sbit AD590_2=P1^7;//A定義I/O的硬件接口,通道選擇//C、D接地
sbit key_6=P3^7;//按鍵6定義I/O的硬件接口//控制 溫度報警標志位

//

sbit ST=P3^0; //ST和ALE接在一起
sbit OE=P3^1; 
sbit EOC=P3^2; 
sbit CLK=P3^3; 
sbit SPK=P3^4; //喇叭,蜂鳴器報警
sbit LED1=P3^5; //LED報警
sbit LED2=P3^6;


#define DPDR P2//LCD1602并行數據輸出接口定義
#define DPDR_1 P0//ADC0809并行數據輸入接口定義

uchar temp;//最終溫度值

unsigned long temp2;//平均溫度 
unsigned long temp1;//溫度1,,AD590_1接IN0
unsigned long temp2;//溫度2,,AD590_2接IN1

uchar Alarm_Value;//溫度報警值
bit Alarm_Value_bit;//溫度報警標志位


uchar code DispTab_1[]={'0','1','2','3','4','5','6','7','8','9'};//1602:0-9 數字
uchar code DispTab_2[]={0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00};//溫度符號
uchar DispBuf[6]; //6字節的顯示緩沖區
char char_char_1[]={" Temperature: "};//定義字符串


void delay(uint z)//1ms延時

uchar x,x1;
for(;z>0;z--)
{
for(x=0;x<114;x++)
{
for(x1=0;x1<1;x1++);
}
}
}


void write_Directive(uchar a)//寫LCD指令
{
RS=0;
RW=0;
delay(5);
E=0;
DPDR=a;
delay(5);
E=1;
delay(5);
E=0;
delay(5);
}

void write_Data(uchar a)//寫LCD數據
{
RS=1;
RW=0;
delay(5);
E=0;
DPDR=a;
delay(5);
E=1;
delay(5);
E=0;
delay(5);

}

void LCD_init()//LCD初始化
{ uchar i;
delay(15);
write_Directive(0x38);
delay(5);
write_Directive(0x38);
delay(5);
write_Directive(0x38);
write_Directive(0x01);
write_Directive(0x02);//初始化后數據地址為0x80;即第一行,第一個位置
write_Directive(0x0c);//不顯示光標
//write_Directive(0x0f);//顯示光標
write_Directive(0x80+0x00);//第一行第一位地址
for(i=0;i<16;i++)
{
write_Data(char_char_1[i]);//顯示字符串" Temperature "
}
}

void write_Data_String()//顯示溫度函數

uchar i;
DispBuf[0]=temp/100;//顯示十位
temp=temp%100;

DispBuf[1]=temp/10;//顯示個位
temp=temp%10;

DispBuf[2]=temp%10;//顯示小數點后一位:0.0


DispBuf[0]=DispTab_1[i];//查表,取字符
i=DispBuf[1];
DispBuf[1]=DispTab_1[i];
i=DispBuf[2];
DispBuf[2]=DispTab_1[i];


write_Directive(0x80+0x40);//第二行,第一個位置地址

write_Data(DispBuf[0]);//第二行,第一個位置

write_Data(DispBuf[1]);//第二行,第二個位置

write_Data('.');//第二行,第三個位置

write_Data(DispBuf[2]);//第二行,第四個位置

write_Data(0x00);//第二行,第五個位置顯示溫度符號

}

void ADC0809_init()//ADC0809復位
{
ST=0; 
OE=0; 
SPK=1;
LED1=1;
TMOD=0x12; 
TH0=0x216; 
TL0=0x216; 
TH1=(65536-40000)/256; 
TL1=(65536-40000)%256; 
TR1=0; 
TR0=1; 
ET0=1; 
ET1=1; 
EA=1; 
}

void t0(void) interrupt 1 using 0 

CLK=~CLK; 
}

void t1(void) interrupt 3 using 0 

TH1=(65536-40000)/256; 
TL1=(65536-40000)%256; 
SPK=~SPK;
LED1=~LED1;
}

void temp1_start()//啟動溫度1 轉換
{
AD590_2=0;//通道選擇
ST=1;
delay(1);//延時1ms
ST=0;
delay(1);//延時1ms
ST=1;
delay(1);//延時1ms
ST=0;
while(!EOC);//查詢轉換結束否
_nop_();
_nop_();
OE=1;//OE=0,輸出數據線呈高阻;OE=1,輸出轉換得到的數據。
delay(1);//延時1ms
temp1=DPDR_1; 
}

void temp2_start()//啟動溫度2 轉換
{
AD590_2=1;//通道選擇
ST=1;
delay(1);//延時1ms
ST=0;
delay(1);//延時1ms
ST=1;
delay(1);//延時1ms
ST=0;
while(!EOC);//查詢轉換結束否
_nop_();
_nop_();
OE=1;//OE=0,輸出數據線呈高阻;OE=1,輸出轉換得到的數據。
delay(1);//延時1ms
temp2=DPDR_1; 
}

void temp1_Calculated()//溫度1 計算
{
temp1=(temp1*2350/128)-2732;
}

void temp2_Calculated()//溫度2 計算
{
temp2=(temp2*2350/128)-2732;
}

void Temperature_Alarm()//溫度報警
{
if(Alarm_Value_bit==1)
{
if(Alarm_Value==temp)
TR1=1;//啟動定時器1
else 
{
SPK=1;
LED1=1;
TR1=0;
}
}
else 
{
SPK=1;
LED1=1;
TR1=0;
}
}

void key_Detection()//按鍵檢測
{
if(key_6==0)
{
delay(20);//延時20ms
while(!key_6);
delay(20);//延時20ms
Alarm_Value=~Alarm_Value;
//break;
}
///////////////////////////////////////////
if(key_1==0)
{
delay(20);//延時20ms
while(!key_1);
delay(20);//延時20ms
if(Alarm_Value>=100)
{
temp=99;
return;
}
else
{
Alarm_Value++;
return;
}
}
///////////////////////////////////////////
if(key_2==0)
{
delay(20);//延時20ms
while(!key_2);
delay(20);//延時20ms
if(Alarm_Value<=0)
{
Alarm_Value=0;
return;
}
else
{
Alarm_Value--;
return;
}
}
}

void main()
{ uchar i;

ADC0809_init();//ADC0809復位
LCD_init();//LCD復位
delay(5);//延時
for(i=0;i<8;i++)
{
write_Directive(0x40+i);//寫入溫度符號
write_Data(DispTab_2[i]);
}

while(1)
{
key_Detection();//按鍵檢測

temp1_start();//啟動溫度1 轉換
temp2_start();//啟動溫度2 轉換

temp1_Calculated();//溫度1 計算 
temp2_Calculated();//溫度2 計算

temp=(temp1+temp2)/2;//取溫度1和溫度2的平均值

Alarm_Value=temp;

Temperature_Alarm();//溫度報警條件查詢

write_Data_String();//顯示溫度

}


}

1.溫度傳感器AD590基本知識 
   AD590產生的電流與絕對溫度成正比,它可接收的工作電壓為4V-30V,檢測的溫度范圍為-55℃-+150℃,它有非常好的線性輸出性能,溫度每增加1℃,其電流增加1uA。 
   AD590溫度與電流的關系如下表所示

攝氏溫度  AD590電流  經10KΩ電壓  
0℃  273.2 uA  2.732V  
10℃  283.2 uA  2.832 V  
20℃  293.2 uA  2.932 V  
30℃  303.2 uA  3.032 V  
40℃  313.2 uA  3.132 V  
50℃  323.2 uA  3.232 V  
60℃  333.2 uA  3.332 V  
100℃  373.2 uA  3.732 V 


實驗任務 
   利用AD590溫度傳感器完成溫度的測量,把轉換的溫度值的模擬量送入ADC0809的其中一個通道進行A/D轉換,將轉換的結果進行溫度值變換之后進行監控。

由于AD590的溫度變化范圍在-55℃-+150℃之間,經過10KΩ之后采樣到的電壓變化在2.182V-4.232V之間,不超過5V電壓所表示的范圍,因此參考電壓取電源電壓VCC,(實測VCC=4.70V)。由此可計算出經過A/D轉換之后的攝氏溫度顯示的數據為: 
   如果(D*2350/128)<2732,則顯示的溫度值為-(2732-(D*2350/128)) 
   如果(D*2350/128)≥2732,則顯示的溫度值為+((D*2350/128)-2732)


關鍵字:51單片機  ADC0809  AD590  溫度檢測  報警程序 引用地址:51單片機ADC0809+AD590溫度檢測、報警程序

上一篇:SD7218A數碼管驅動芯片實例程序
下一篇:LED點陣顯示與編程

推薦閱讀

C8051F020內部有5 個計數器/定時器:其中三個16 位計數器/定時器與標準8051 中的計數器/定時器兼容,還有兩個16 位自動重裝載定時器可用于ADC、SMBus、UART1 或作為通用定時器使用。這些計數器/定時器可以用于測量時間間隔,對外部事件計數或產生周期性的中斷請求。 將定時器與中斷系統的結合將給我們編程帶來很大的幫助,程序條理性強易編寫...
“我的身體沉重如潛水鐘,內心卻渴望像蝴蝶般自由飛翔。”這句來自電影《潛水鐘與蝴蝶》的臺詞,也是前《ELLE》雜志主編、記者讓·多米尼克的真實經歷。讓·多米尼克中風癱瘓后,身體的語言和運動功能都喪失了,他不能說話,不能自主呼吸,只剩下一只眼睛和意識可以自由活動。在這種情況下,他還是“寫”出了一部散文集。書是這樣完成的:助手把一個個字母...
0 引言近年來污水流量計在工業領域中得到迅速的應用,特別是在河水輸送與污水排放流量的計量方面尤為突出, 由于它測量靈活方便和靈敏度較高,工業上多用以測量各類水流、礦漿流等介質。然而,由于煤礦安全性的特殊要求,目前可用于煤礦井下的污水流量計很少,如,不能滿足礦用防爆和本質安全要求、測量范圍窄以及傳輸信號易受外磁場干擾等。針對這些問...
1月13日晚間,小米公司Redmi產品總監王騰用新手機發了一條微博。  網友留言猜測,王騰手中的這臺新機可能是Redmi K40系列,該機將于下月正式發布。  根據曝光的信息,Redmi K40系列包括Redmi K40和Redmi K40 Pro兩款,二者均采用挖孔屏方案,刷新率為120Hz,官方強調“Redmi K40系列采用的可能是行業最貴的直屏”。  除此之外,Redmi...

史海拾趣

問答坊 | AI 解惑

關于s7-200與7219通訊程序,用于數碼管顯示

SUBROUTINE_BLOCK 數顯:SBR4TITLE=BEGINNetwork 1 // f9ff譯碼方式 faf8亮度 fbff掃描界限fcff正常顯示LD SM0.1LPSMOVW 16#F9FF, VW3626AENOMOVW 16#FAF8, VW3628AENOMOVW 16#FBFF, VW3630AENOMOVW 16#FCFF, VW3632AENOMOVW 16#FCFF, VW3632AENOMOV ...…

查看全部問答∨

學DSP必看

DSP有哪些數學庫及其它應用軟件? TI公司為了方便客戶開發DSP,在它的網站上提供了許多程序的示例和應用程序,如MATH庫,FFT,FIR/IIR等,可以在TI的網頁免費下載。 如何獲得DSP專用算法? TI有許多的Third Party可以通過DSP上的多種算法軟件。 ...…

查看全部問答∨

給中年工程師的忠告

幾年前寫了《給年輕工程師的十大忠告》系列文章,不知不覺自己已經步入中年。做了十幾年工程師,酸甜苦辣、百感交集,感覺中中年工程師命運更為令人憂慮。因此想寫篇《給中年工程師的忠告》,算是姊妹篇,希望對中年工程師能有所啟發,同時也給年輕 ...…

查看全部問答∨

超級新手來問哪里學硬件開發...

請問大家都是哪里學得硬件?哪里學比較好呢?我現在高三,以后想學硬件....還有大學分數線...多少 請各位過來人幫忙回復一下,謝謝了…

查看全部問答∨

新手請教,關于開發在WINCE上運行的程序

現在有個任務,在一個掃描儀上做個程序.掃描儀的系統為WINCE .NET,版本4.2 我用VS.NET2005建了一個WIN CE5.0的程序,部署時報錯,發生了通常表示安裝被損壞的錯誤.修復VS也沒用.又建了一個Pocket PC 2003的程序,部署時掃描儀端報錯. 想請教,一般大家 ...…

查看全部問答∨

使用pcf8563寫一個倒計時1個小時的思路

我最近在使用pcf8563,它內部的倒計時寄器是一個8位的寄純器,我以前傻傻的認為他最多只能夠計255S,現在想起來好傻的,這不是跟定時器是一回事嗎?當他歸零的時候就把時間減一個數就行了,不知道大家是不是也是這么想的呢?…

查看全部問答∨

【M4開發板Hanker試用狂-Shower.Xu】-3、簡單計算器GUI界面 及換膚

忙了幾個晚上(白天趕項目加班)終于做了幾個計算器界面出來,效果還行,但和當初自己設想的一個完整的計算器程序還相差甚遠,沒來得及加入觸摸和算法,只有界面及換膚功能,暫時充當GUI部分的作業吧。我以后一定會補足,抱歉了... 寫這個其實是受 ...…

查看全部問答∨

MSP430Ware 入門介紹

較以往其他版本,德州儀器 IDE CCS V5.1 程序更加簡練有效,運行更加快捷,開發環境也更加直觀。這里將著重介紹CCS v5.1一個新的組成部份- TI資源管理器(TI Resource Explorer)。TI資源管理器向客戶提供一種直接簡單的途徑進行資源訪問。在它基于 ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 固始县| 枣阳市| 乌兰察布市| 寿宁县| 壶关县| 安溪县| 绥滨县| 吴桥县| 城市| 安陆市| 梧州市| 曲周县| 龙山县| 克拉玛依市| 拉孜县| 垣曲县| 乐陵市| 大理市| 肃南| 肇东市| 苍山县| 澄江县| 连山| 曲周县| 朝阳区| 和龙市| 会同县| 湄潭县| 淅川县| 阳山县| 内江市| 松潘县| 晴隆县| 蕉岭县| 东莞市| 临颍县| 浦江县| 桐庐县| 扬中市| 西乌| 克拉玛依市|