www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀] /******************************************************************基于isd1420語(yǔ)音芯片的溫度報(bào)警功能:利用ds18b20檢測(cè)當(dāng)前溫度,通過(guò)和設(shè)定參數(shù)的比較,給ISD1420發(fā)出報(bào)警脈沖,通過(guò)功率放大器L

/******************************************************************
基于isd1420語(yǔ)音芯片的溫度報(bào)警

功能:利用ds18b20檢測(cè)當(dāng)前溫度,通過(guò)和設(shè)定參數(shù)的比較,給ISD1420發(fā)出


報(bào)警脈沖,通過(guò)功率放大器LM386驅(qū)動(dòng)喇叭報(bào)警。

注:isd1420的報(bào)警采用延時(shí)方式(isd1420的延時(shí)報(bào)警取決于錄音時(shí)間的長(zhǎng)短)

問(wèn)題:1.isd1420會(huì)偶然的觸發(fā)非正常的報(bào)警?
2.系統(tǒng)在上電時(shí)偶爾會(huì)進(jìn)入非正常的狀態(tài)?

********************************************************************/

#include
#include
#include

#defineucharunsignedchar
#defineuintunsignedint
#definePLAYE_ADDRXBYTE[0XBFFF]//語(yǔ)音報(bào)警地址

#defineBUSY0x80//LCD忙檢測(cè)標(biāo)志
#defineDATAPORTP0

sbitP1_0=P1^4;//時(shí)鐘調(diào)整
sbitP1_1=P1^5;//時(shí)鐘加
sbitP1_2=P1^6;//時(shí)鐘減

sbitRED_ALARM=P1^0;//紅色指示燈
sbitWRITE_ALARM=P1^1;//白色指示燈
sbitGREEN_ALARM=P1^2;//綠色指示燈

sbitDQ=P3^7;//定義ds18b20通信端口
sbitLCM_RS=P2^0;//數(shù)據(jù)/命令端
sbitLCM_RW=P2^1;//讀/寫選擇端
sbitLCM_EN=P2^2;//LCD使能信號(hào)
sbitRECLED_EOC=P3^5;//ISD1420放音結(jié)束查詢標(biāo)志


unsignedcharseconde=0;//定義并初始化時(shí)鐘變量
unsignedcharminite=0;
unsignedcharhour=12;
unsignedcharmstcnt=0;
unsignedchartemp1,temp2,teMP3;
unsignedcharruntime;//系統(tǒng)運(yùn)行總時(shí)間
unsignedchart;
unsignedinttemp;

ucharcodestr0[]={"---::---of"};
ucharcodestr1[]={"temp:.C------"};

voiddelay_LCM(uint);//LCD延時(shí)子程序
voidinitLCM(void);//LCD初始化子程序
voidlcd_wait(void);//LCD檢測(cè)忙子程序
voidWriteCommandLCM(ucharWCLCM,ucharBusyC);//寫指令到ICM子函數(shù)
voidWritEDAtaLCM(ucharWDLCM);//寫數(shù)據(jù)到LCM子函數(shù)
voidDisplayOneChar(ucharX,ucharY,ucharDData);//顯示指定坐標(biāo)的一個(gè)字符子函數(shù)
voidDisplayListChar(ucharX,ucharY,ucharcode*DData);//顯示指定坐標(biāo)的一串字符子函數(shù)

voidinit_timer0(void);//定時(shí)器初始化
voiddisplayfun1(void);

voiddelay_18B20(unsignedinti);
voidInit_DS18B20(void);
ucharReadOneChar(void);
voidWriteOneChar(unsignedchardat);
voidReadTemperature(void);
voidplayalarm(void);

/*********延時(shí)K*1ms,12.000mHz**********/

voiddelay_LCM(uintk)
{
uinti,j;
for(i=0;i{
for(j=0;j<60;j++)
{;}
}
}
/**********寫指令到ICM子函數(shù)************/

voidWriteCommandLCM(ucharWCLCM,ucharBusyC)
{
if(BusyC)lcd_wait();
DATAPORT=WCLCM;
LCM_RS=0;//選中指令寄存器
LCM_RW=0;//寫模式
LCM_EN=1;
_nop_();
_nop_();
_nop_();
LCM_EN=0;
}

/**********寫數(shù)據(jù)到LCM子函數(shù)************/

voidWriteDataLCM(ucharWDLCM)
{
lcd_wait();//檢測(cè)忙信號(hào)
DATAPORT=WDLCM;
LCM_RS=1;//選中數(shù)據(jù)寄存器
LCM_RW=0;//寫模式
LCM_EN=1;
_nop_();
_nop_();
_nop_();
LCM_EN=0;
}

/***********lcm內(nèi)部等待函數(shù)*************/

voidlcd_wait(void)
{
DATAPORT=0xff;
LCM_EN=1;
LCM_RS=0;
LCM_RW=1;
_nop_();
_nop_();
_nop_();
while(DATAPORT&BUSY)
{
LCM_EN=0;
_nop_();
_nop_();
LCM_EN=1;
_nop_();
_nop_();
}
LCM_EN=0;

}

/**********LCM初始化子函數(shù)***********/

voidinitLCM()
{
DATAPORT=0;
delay_LCM(15);
WriteCommandLCM(0x38,0);//三次顯示模式設(shè)置,不檢測(cè)忙信號(hào)
delay_LCM(5);
WriteCommandLCM(0x38,0);
delay_LCM(5);
WriteCommandLCM(0x38,0);
delay_LCM(5);

WriteCommandLCM(0x38,1);//8bit數(shù)據(jù)傳送,2行顯示,5*7字型,檢測(cè)忙信號(hào)
WriteCommandLCM(0x08,1);//關(guān)閉顯示,檢測(cè)忙信號(hào)
WriteCommandLCM(0x01,1);//清屏,檢測(cè)忙信號(hào)
WriteCommandLCM(0x06,1);//顯示光標(biāo)右移設(shè)置,檢測(cè)忙信號(hào)
WriteCommandLCM(0x0c,1);//顯示屏打開(kāi),光標(biāo)不顯示,不閃爍,檢測(cè)忙信號(hào)
}

/****************顯示指定坐標(biāo)的一個(gè)字符子函數(shù)*************/

voidDisplayOneChar(ucharX,ucharY,ucharDData)
{
Y&=1;
X&=15;
if(Y)X|=0x40;//若y為1(顯示第二行),地址碼+0X40
X|=0x80;//指令碼為地址碼+0X80
WriteCommandLCM(X,0);
WriteDataLCM(DData);
}

/***********顯示指定坐標(biāo)的一串字符子函數(shù)***********/

voidDisplayListChar(ucharX,ucharY,ucharcode*DData)
{
ucharListLength=0;
Y&=0x01;
X&=0x0f;
while(X<16)
{
DisplayOneChar(X,Y,DData[ListLength]);
ListLength++;
X++;
}
}

/***********ds18b20延遲子函數(shù)(晶振12MHz)*******/

voiddelay_18B20(unsignedinti)
{
while(i--);
}

/**********ds18b20初始化函數(shù)**********************/

voidInit_DS18B20(void)
{
unsignedcharx=0;
DQ=1;//DQ復(fù)位
delay_18B20(8);//稍做延時(shí)
DQ=0;//單片機(jī)將DQ拉低
delay_18B20(80);//精確延時(shí)大于480us
DQ=1;//拉高總線
delay_18B20(14);
x=DQ;//稍做延時(shí)后如果x=0則初始化成功x=1則初始化失敗
delay_18B20(20);
}

/***********ds18b20讀一個(gè)字節(jié)**************/

unsignedcharReadOneChar(void)
{
uchari=0;
uchardat=0;
for(i=8;i>0;i--)
{
DQ=0;//給脈沖信號(hào)
dat>>=1;
DQ=1;//給脈沖信號(hào)
if(DQ)
dat|=0x80;
delay_18B20(4);
}
return(dat);
}
/*************ds18b20寫一個(gè)字節(jié)****************/

voidWriteOneChar(uchardat)
{
unsignedchari=0;
for(i=8;i>0;i--)
{
DQ=0;
DQ=dat&0x01;
delay_18B20(5);
DQ=1;
dat>>=1;
}
}

/**************讀取ds18b20當(dāng)前溫度************/

voidReadTemperature(void)
{
unsignedchara=0;
unsignedcharb=0;
unsignedintt=0;

Init_DS18B20();
WriteOneChar(0xCC);//跳過(guò)讀序號(hào)列號(hào)的操作
WriteOneChar(0x44);//啟動(dòng)溫度轉(zhuǎn)換

delay_18B20(100);//thismessageisweryimportant

Init_DS18B20();
WriteOneChar(0xCC);//跳過(guò)讀序號(hào)列號(hào)的操作
WriteOneChar(0xBE);//讀取溫度寄存器等(共可讀9個(gè)寄存器)前兩個(gè)就是溫度

delay_18B20(100);

a=ReadOneChar();//讀取溫度值低8位
b=ReadOneChar();//讀取溫度值高8位
temp1=b<<4;
temp1+=(a&0xf0)>>4;//小數(shù)點(diǎn)前的數(shù)據(jù)
temp2=a&0x0f;//小數(shù)點(diǎn)后的數(shù)據(jù)
temp=temp1;

//temp=((b*256+a)>>4);//當(dāng)前采集溫度值除16得實(shí)際溫度值



//temp1=t/100%10;//溫度值十位
//temp2=t/10%10;//溫度值個(gè)位
//temp3=t%10;//溫度值十分位
}

/***************液晶顯示子函數(shù)1正常顯示*****************/

voiddisplayfun1(void)
{
WriteCommandLCM(0x0c,1);//顯示屏打開(kāi),光標(biāo)不顯示,不閃爍,檢測(cè)忙信號(hào)
DisplayListChar(0,0,str0);
DisplayListChar(0,1,str1);

DisplayOneChar(3,0,hour/10+0x30);
DisplayOneChar(4,0,hour%10+0x30);

DisplayOneChar(6,0,minite/10+0x30);
DisplayOneChar(7,0,minite%10+0x30);

DisplayOneChar(9,0,seconde/10+0x30);
DisplayOneChar(10,0,seconde%10+0x30);

DisplayOneChar(5,1,temp1/10+0x30);
DisplayOneChar(6,1,temp1%10+0x30);
DisplayOneChar(8,1,temp2/10+0x30);
}

/***************定時(shí)器t0初始化*******************/


voidinit_timer0(void)
{
TMOD=0x01;//time0為定時(shí)器,方式1
TH0=0x3c;//預(yù)置計(jì)數(shù)初值
TL0=0xb0;
EA=1;
ET0=1;
TR0=1;
}

/***********定時(shí)器t0中斷子函數(shù)**************/

voidtimer0(void)interrupt1using0//定時(shí)器0方式1,50ms中斷一次
{
TH0=0x3c;
TL0=0xb0;
mstcnt++;
if(mstcnt>=20){seconde++;mstcnt=0;}
if(seconde>=60){minite++;seconde=0;}
if(minite>=60){hour++;minite=0;}
if(hour>=24){hour=0;}
}


/*****************系統(tǒng)報(bào)警子函數(shù)***************************/

voidplayalarm(void)//語(yǔ)音提示溫度上升過(guò)快
{

if(temp>20&&temp<25)
{
RED_ALARM=0;
PLAYE_ADDR=0x11;
_nop_();
PLAYE_ADDR=0x10;
delay_LCM(2000);//等待放音結(jié)束
RED_ALARM=1;
}

if(temp>25&&temp<30)//語(yǔ)音提示溫度上升過(guò)慢
{
GREEN_ALARM=0;
PLAYE_ADDR=0x21;
_nop_();
PLAYE_ADDR=0x20;
delay_LCM(2000);
GREEN_ALARM=1;
}

if(temp>30)//語(yǔ)音提示恒溫控制
{
WRITE_ALARM=0;
PLAYE_ADDR=0x31;
_nop_();
PLAYE_ADDR=0x30;
delay_LCM(1000);
WRITE_ALARM=1;
}
}

/***************themainfuntion****************/

voidmain(void)
{
P1=0xff;//初始化p1口,全設(shè)為1
P3=0xff;
delay_LCM(500);
initLCM();//LCD初始化
init_timer0();//時(shí)鐘定時(shí)器0初始化
DisplayListChar(0,0,str0);
DisplayListChar(0,1,str1);
Init_DS18B20();//DS18B20初始化

while(1)
{
delay_LCM(10);
ReadTemperature();
playalarm();
displayfun1();
delay_LCM(10);
}
}

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過(guò)流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問(wèn)題卻十分常見(jiàn),不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問(wèn)題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問(wèn)題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來(lái)解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開(kāi)關(guān)電源具有效率高的特性,而且開(kāi)關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開(kāi)關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉