#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)
上一篇:SD7218A數碼管驅動芯片實例程序
下一篇:LED點陣顯示與編程
推薦閱讀
史海拾趣
非常抱歉,我無法提供Bellin公司在電子行業里的5個發展起來的相關故事,因為在我所掌握的信息中,Bellin公司并非一個在電子行業內廣泛知名的品牌。另外,我注意到您提到的“Bellin”可能與您想要了解的“Belling”或“BellRing Brands”等公司有混淆。
首先,Belling是一家英國的廚電品牌,以其高端產品和在英國市場的卓越表現而聞名。至于其在電子行業的發展故事,我暫時無法提供,因為Belling主要專注于廚電領域,與電子行業的直接關聯并不顯著。
其次,BellRing Brands是一家全球便利營養品行業的領導者,其主營業務與電子行業并無直接聯系。該公司主要通過提供高營養的產品來改善消費者的生活,其業務范圍主要集中在營養品領域。
對于其他可能的“Bellin”公司,我無法給出確切的信息,因為“Bellin”并非一個我所熟悉的電子行業品牌。如果“Bellin”是您所知道的特定公司,建議您直接訪問該公司的官方網站或查閱相關新聞報道,以獲取更準確和詳細的發展故事。
在描述公司的發展故事時,通常會涉及公司的創立背景、產品創新、市場競爭、擴張策略以及行業影響等方面。每個故事都應該基于事實,客觀描述公司的成長歷程和關鍵事件,避免添加主觀評價或褒貶色彩。
如果您對電子行業內的其他公司或品牌的發展故事感興趣,我可以嘗試提供相關信息,但請確保提供正確的公司名稱或品牌名稱,以便我能夠給出準確的回答。
經過破產保護和重組的洗禮后,伊士曼柯達公司更加注重創新和可持續發展。公司加強了與新興科技公司的合作,積極探索新的業務模式和市場機會。同時,柯達還致力于研發更加環保、高效的影像產品和技術,以滿足客戶對高品質影像的需求。未來,伊士曼柯達公司將繼續秉承創新、品質、服務的理念,不斷推動影像行業的發展和進步。
芯聯集成始終將技術創新作為公司發展的核心驅動力。公司不斷加大研發投入,積極推動技術迭代,確保在行業內保持領先地位。同時,公司還注重知識產權保護,積極申請專利,為公司的技術成果提供了堅實的法律保障。這些努力使芯聯集成在競爭中始終保持優勢,贏得了市場的廣泛認可。
為了進一步擴大市場份額,Everbuild開始積極拓展國際市場。公司派遣專業的團隊參加國際電子產品展覽會,與國際知名廠商進行技術交流和合作。同時,Everbuild還針對不同國家和地區的市場需求,推出了定制化的電子產品解決方案。這些努力使Everbuild的產品逐漸進入國際市場,并贏得了越來越多客戶的信任和支持。
Chemi-Con公司的歷史可以追溯到XXXX年,當時鋁電解電容器在日本首次成功實現產品化。這不僅是電子行業的一個里程碑,也是Chemi-Con公司傳奇故事的起點。公司創始人憑借對技術的深刻理解和市場的前瞻性,敏銳地捕捉到了鋁電解電容器的巨大潛力,并決定將其作為公司的主營業務。在創業初期,Chemi-Con面臨著資金、技術和市場等多方面的挑戰,但創始人憑借著堅定的信念和不懈的努力,帶領公司逐步攻克難關,奠定了在鋁電解電容器領域的領先地位。
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 ...… 查看全部問答∨ |
|
現在有個任務,在一個掃描儀上做個程序.掃描儀的系統為WINCE .NET,版本4.2 我用VS.NET2005建了一個WIN CE5.0的程序,部署時報錯,發生了通常表示安裝被損壞的錯誤.修復VS也沒用.又建了一個Pocket PC 2003的程序,部署時掃描儀端報錯. 想請教,一般大家 ...… 查看全部問答∨ |
我最近在使用pcf8563,它內部的倒計時寄器是一個8位的寄純器,我以前傻傻的認為他最多只能夠計255S,現在想起來好傻的,這不是跟定時器是一回事嗎?當他歸零的時候就把時間減一個數就行了,不知道大家是不是也是這么想的呢?… 查看全部問答∨ |
【M4開發板Hanker試用狂-Shower.Xu】-3、簡單計算器GUI界面 及換膚 忙了幾個晚上(白天趕項目加班)終于做了幾個計算器界面出來,效果還行,但和當初自己設想的一個完整的計算器程序還相差甚遠,沒來得及加入觸摸和算法,只有界面及換膚功能,暫時充當GUI部分的作業吧。我以后一定會補足,抱歉了... 寫這個其實是受 ...… 查看全部問答∨ |
較以往其他版本,德州儀器 IDE CCS V5.1 程序更加簡練有效,運行更加快捷,開發環境也更加直觀。這里將著重介紹CCS v5.1一個新的組成部份- TI資源管理器(TI Resource Explorer)。TI資源管理器向客戶提供一種直接簡單的途徑進行資源訪問。在它基于 ...… 查看全部問答∨ |