新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 51單片機語音+溫度控制的源碼

51單片機語音+溫度控制的源碼

作者: 時間:2016-11-29 來源:網(wǎng)絡(luò) 收藏
#include
#define uchar unsigned char#define uint unsigned intuchar index;uchar a,b,c; //定義三個變量、。uchar m;         //uint teempr;       //uint  z,i;//*********************************************★下面是PWM調(diào)制的數(shù)組★********************************************************//220- zhan0.02  214--0.04  209-0.07 203-0.11  195- 0.15  185-0.25  173-0.31 160-0.38  145-0.45 129-0.48 111-0.48   42OFF//0.74 .81  .91 1.03   1.22   1.45  1.69   2.28   2.62     0.74   0.81   0.90    1.03   右大// 熱敏電阻受熱以后阻值變小。受涼以后阻值變大。uchar code pwm[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254};//3525 2腳電壓高輸出占空比也大,2腳電壓越低那么占空比也就越小。  6腳電壓拉低的話頻率就升高,6腳電壓高頻率就降低。//************************************************************************************************************************//************************************************************************************************************************//************************************************ 下面的是DISP顯示數(shù)組***************************************************uchar code table100[]={"※※※※※※※※"};uchar code table101[]={"  www.51hei.com "};uchar code table1[]={"★當(dāng)前檔位一★"};uchar code table2[]={"★當(dāng)前檔位二★"};uchar code table3[]={"★當(dāng)前檔位03★"};uchar code table4[]={"★當(dāng)前檔位四★"};uchar code table5[]={"★當(dāng)前檔位五★"};uchar code table6[]={"★當(dāng)前檔位六★"};uchar code table7[]={"★當(dāng)前檔位七★"};uchar code table8[]={"★當(dāng)前檔位八★"};uchar code table9[]={"★當(dāng)前檔位九★"};uchar code table10[]={"★當(dāng)前檔位十★"};uchar code table11[]={"測試版本:V1.1"};uchar code table12[]={"zhinengjiqi.com"};uchar code table13[]={"歡迎使用智能機器"};uchar code table14[]={"GSM:18663523202"};uchar code table15[]={"警告電壓過高保護(hù)"};uchar code table16[]={"警告檢測短路故障"};uchar code table17[]={"警告長時間沒放鍋"};uchar code table18[]={"警告線盤溫度過高"};uchar code table19[]={"警告散熱器溫度高"};uchar code table20[]={"警告風(fēng)扇發(fā)生故障"};uchar code table21[]={"警告環(huán)境濕度過高"};uchar code table22[]={"機器鎖定咨詢客服"};uchar code table23[]={"警告電源線未接好"};uchar code table24[]={"Θ開機軟啟動中Θ"};uchar code table25[]={"請稍候¨¨"};//******************************************************************************************************************//*************************************************按鍵定義***********************************************************sbit pd =   P0^4    ;  //占空比升高sbit px =   P0^5    ;  //占空比降低sbit zd =   P0^6    ;  //頻率增加sbit zx =   P0^7    ;  // 頻率減小//**************************************************按鍵定義到此結(jié)束。******************************************************sbit rs=P0^0; //數(shù)據(jù),命令選擇端sbit rw=P0^1; //讀寫選擇sbit beiguang=P0^3;//LED背光sbit e=P0^2; //使能端sbit baohu=P5^3; //PWM保護(hù)關(guān)閉。//***************************************************  液晶pin定義結(jié)束。***************************************************sbit DQ=P3^4;   //溫度探頭數(shù)據(jù)口。sbit yurest=P4^4; //語音復(fù)位sbit yushuju=P4^1; //語音數(shù)據(jù)sbit yuzhuangtai=P4^5; //語音狀態(tài)//***************************************************語音pin定義到此結(jié)束*****************************************************//*********************************************************************************************************//**************************************************** 各種延時子函數(shù)*******************************************************void yanshi(uint xms)//延時多久需要計算。{uint x ,y;for(x=xms;x>0;x--)for(y=110;y>0;y--);}//******************************************************************************************************************void delay_1ms(uint z)   //延時一毫秒的指令。核對過時間很準(zhǔn)確{uint x,y;for(x=z;x>0;x--)for(y=1800;y>0;y--);}//**************************************************************void delay_50us(uint t)  //延時50微秒的指令。核對過時間很準(zhǔn)確{uint j;for(;t>0;t--)for(j=91;j>0;j--);}//************************************************************************************************************************//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@//************************************************************************************************************************//************************************************以下是12864顯示的子函數(shù)*****************   ******************************//******************************************************************************************************************void write_12864_com(uchar com) //寫命令子函數(shù){rs=0; //數(shù)據(jù)命令選擇端口。=1寫數(shù)據(jù),=0寫命令 。P2=com;//把數(shù)據(jù)送到P2口傳遞給液晶。e=1;//使能端高電平。delay_50us(10); //延時一小會保證使能的高電平寬度達(dá)到要求、e=0;//完成使能信號的脈沖要求給置零。delay_50us(2);}//*******************************************************void write_12864_dat(uchar dat) //寫數(shù)據(jù)子函數(shù){rs=1; //數(shù)據(jù)命令選擇端口。=1寫數(shù)據(jù),=0寫命令 。rw=0; //讀寫delay_50us(1);P2=dat;//把數(shù)據(jù)送到P2口傳遞給液晶。e=1;//使能端高電平。 delay_50us(10); //延時一小會保證使能的高電平寬度達(dá)到要求、e=0;//完成使能信號的脈沖要求給置零。delay_50us(2);}//********************************************************************************************************           void init_12864()  //液晶初始化子函數(shù)。{delay_1ms(100);write_12864_com(0x30); //基本指令操作); //delay_50us(4);write_12864_com(0x0c);write_12864_com(0x06);delay_50us(10);}//***************************************************以下是各個檔位的畫面***********************************************void dispdangwei(uint f)     //*****************************f是多少就是幾檔畫面*************************************************{init_12864();//初始化液晶。write_12864_com(0x80);//設(shè)定顯示位置是第一行。for(i=0;i<16;i++)    //第一行有多少字,漢字占兩個位置。標(biāo)點符號一個。{write_12864_dat(table101[i]); //開始挨個把表中的字一位一位的通過12864的數(shù)據(jù)發(fā)送子程序發(fā)送出去。delay_50us(1);          //延時一會保證數(shù)據(jù)有發(fā)送完畢。}write_12864_com(0x90); //設(shè)定第二行。for(i=0;i<16;i++){dat(table100[i]);;}write_12864_com(0x88); //設(shè)定第三行for(i=0;i<14;i++){switch(f){case 1:write_12864_dat(table1[i]);break;case 2:write_12864_dat(table2[i]);break;case 3:write_12864_dat(table3[i]);break;case 4:write_12864_dat(table4[i]);break;case 5:write_12864_dat(table5[i]);break;break;case 7:write_12864_dat(table7[i]);break;case 8:write_12864_dat(table8[i]);break;case 9:write_12864_dat(table9[i]);break;case 10:write_12864_dat(table10[i]);break;}delay_50us(1);行顯示位置。for(i=0;i<16;i++){write_12864_dat(table100[i]);delay_50us(1);}}//*************************************************************************************************************************//***********************************************************************************************************************//*******************************************************************************************************************//***********************************************************************************************************************//***********************************************下面是語音參數(shù)設(shè)定******************************************************//***********************************************************************************************************************void yufuwei() //語音復(fù)位子程序。{yurest=0;//這句是防止REST不是低電平。保險起見給他拉低。yurest=0; //到這里語音就復(fù)位結(jié)束。}//**********************************************************************************************************************void yuyin(z) //語音的播放程序。Z等于幾就播放第幾段。(語音參數(shù)內(nèi)部調(diào)用,主程序不用。){yufuwei();  //清除以前的播放數(shù)據(jù)進(jìn)行復(fù)位。防止和前次的播放數(shù)據(jù)相加播放錯誤、 while(z>0){yushuju=0;} //**********************************************************************************************void dangweitouyin() // 語音:檔位。 用來給檔位語音添加頭音。{yufuwei();  //語音復(fù)位子函數(shù)。目的是在播放這段之前停止正在播放的。、一小會。yuyin(11);  //指定播放語音IC中的第11段語音。}//********************************************************************************************************void jinggao() //報警用的音樂文件。 用來給各種告警添加頭音。只是警告語音的前頭那段音樂。位子函數(shù)。目的是在播放這段之前停止正在播放的。、機速度太快了延一小會。yuyin(23);  //指定播放語音IC中的第11段語音。}//***********************************************************************************************void baojing(uint o) // 各種報警的子函數(shù)里面的O等于幾就是對應(yīng)的報警。{jinggao();   //這里是警告的頭音音樂文件。delay_1ms(2000);//延時2秒想起來警告頭音。yuyin(o); //警告的內(nèi)容。 }//*****************************************************************************************void jinggaoduanlu()  //短路保護(hù)警告音。{baojing(18);//播放第18條報警語音。內(nèi)容是:短路保護(hù).}//*****************************************************************************************void jinggaofengshanguzhang(){baojing(19);//播放第19條報警語音。內(nèi)容是:警告風(fēng)扇故障。}//*****************************************************************************************void jinggaoguoyabaohu(){baojing(21);//播放第12條報警語音。內(nèi)容是:電源線未接好,請檢查。}//*****************************************************************************************void jinggaoguowenbaohu(){baojing(20);//播放第20條報警語音。內(nèi)容是:警告過壓保護(hù)。}//*****************************************************************************************void dianyuanxianweijiehao(){baojing(12);//播放第12條報警語音。內(nèi)容是:電源線未接好,請檢查。}//*****************************************************************************************void jinggaomima(){baojing(22);//播放第22條報警語音。內(nèi)容是:請咨詢客服輸入密碼。}//*****************************************************************************************void jinggao1() //報警用的音樂文件。 用來給各種告警添加頭音。只是警告語音的前頭那段音樂。{yufuwei();  //語音復(fù)位子函數(shù)。目的是在播放這段之前停止正在播放的。、delay_50us(1);//單片機速度太快了延一小會。yuyin(26);  //指定播放語音IC中的第11段語音。}//********************************************************************************************************************void music(uint j)   //帶參數(shù)的子函數(shù),里面的J等于幾就是播放 第幾段語音。{dangweitouyin();//檔位頭音。if(yuzhuangtai==0) //檢測是不是語音頭文件在播放。如果播放就讓程序進(jìn)入里面等一會讓頭文件播放結(jié)束。{while(!yzhuangtai);//如果檢測到語音狀態(tài)發(fā)生了改變那么就跳出來這個死循環(huán)。否則就在這原地打轉(zhuǎn)等待。}if(yuzhuagtai==1) //檢測是不是語音頭文件播放結(jié)束了。如果結(jié)束了那么開始播放本段語音。{if(j==10)   //因為語音的十不是在語音的第十段,那就利用這么兩個if語句進(jìn)行判斷是不是檔位數(shù)據(jù)送來10.{yuyin(28);  //如果來的數(shù)據(jù)是10,那么就進(jìn)入把語音的子函數(shù)參數(shù)修改成 28執(zhí)行檔位十的語音。}if(j!=10) //又為了避免在檔位十的時候送完28的語音參數(shù)再過來送10的錯誤數(shù)據(jù),所以在送來不是10的時候才執(zhí)行1-9數(shù)據(jù){ yuyin(j); //播放語音的第K段。~~~~~~~~~~~~~~~內(nèi)容是:j ~~~~~~~~~~~~~~~~~}}}				   
				
            
                
			
							
上一頁 1 2 下一頁

關(guān)鍵詞: 51單片機語音溫度控

評論


技術(shù)專區(qū)

關(guān)閉