




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
項(xiàng)目三智慧工廠環(huán)境智能監(jiān)控
《微處理器程序設(shè)計(jì)》教學(xué)目標(biāo)和技能要求知識(shí)目標(biāo)1、掌握溫度傳感器DS18B20的基本原理及溫度轉(zhuǎn)換命令;2、理解采集溫度的軟件設(shè)計(jì)流程,學(xué)會(huì)調(diào)用溫度采集函數(shù)并能修改函數(shù)完成溫度采集和顯示;3、掌握光敏傳感器的基本原理并理解ADC模式轉(zhuǎn)換的工作原理;4、掌握ADC轉(zhuǎn)換的代碼實(shí)現(xiàn);5、理解采集光照的軟件設(shè)計(jì)流程,學(xué)會(huì)調(diào)用光照采集函數(shù)并能修改函數(shù)完成光照采集和顯示;6、掌握人體紅外傳感器的基本原理;7、掌握利用兩個(gè)人體紅外傳感器判斷教室里是否有人的方法;8、理解直流電機(jī)和步進(jìn)電機(jī)的工作原理及控制時(shí)序。教學(xué)目標(biāo)和技能要求能力目標(biāo)
1、能利用光敏傳感器采集數(shù)據(jù)控制LED燈亮滅,從而實(shí)現(xiàn)環(huán)境亮度智能控制功能;2、能利用人體紅外傳感器采集數(shù)據(jù)控制LED燈開(kāi)關(guān)從而實(shí)現(xiàn)LED燈智能控制功能;3、能利用人體紅外傳感器和光敏傳感器控制LED燈從而實(shí)現(xiàn)智慧校園智能燈控功能;4、綜合利用上述三種傳感器實(shí)現(xiàn)能源的智能控制,達(dá)到節(jié)能減排的效果。知識(shí)導(dǎo)圖任務(wù)3.1神奇的傳感器任務(wù)目標(biāo)通過(guò)本任務(wù)的設(shè)計(jì)和制作,介紹人體紅外傳感器、光敏傳感器和溫度傳感器的工作原理,要求學(xué)生掌握傳感器采集數(shù)據(jù)并進(jìn)行顯示的基本知識(shí),培養(yǎng)學(xué)生利用傳感器采集數(shù)據(jù)并進(jìn)行顯示的基本能力。知識(shí)準(zhǔn)備1、人體紅外傳感器
圖3-1常用的人體紅外傳感器
任務(wù)3.1
神奇的傳感器知識(shí)準(zhǔn)備
2、光敏傳感器ADC轉(zhuǎn)換原理
在
A/D轉(zhuǎn)換器中,因?yàn)檩斎氲哪M信號(hào)在時(shí)間上是連續(xù)的,而輸出的數(shù)字信號(hào)代碼是離散的,所以A/D轉(zhuǎn)換器在進(jìn)行轉(zhuǎn)換時(shí),必須在一系列選定的瞬間(時(shí)間坐標(biāo)軸上的一些規(guī)定點(diǎn)上)對(duì)輸入的模擬信號(hào)采樣,然后再把這些采樣值轉(zhuǎn)換為數(shù)字量。因此,一般的A/D轉(zhuǎn)換過(guò)程是通過(guò)采樣保持、量化和編碼這三個(gè)步驟完成的,即首先對(duì)輸入的模擬電壓信號(hào)采樣,采樣結(jié)束后進(jìn)入保持時(shí)間,在這段時(shí)間內(nèi)將采樣的電壓量轉(zhuǎn)化為數(shù)字量,并按一定的編碼形式給出轉(zhuǎn)換結(jié)果,然后開(kāi)始下一次采樣。圖3-3給出模擬量到數(shù)字量轉(zhuǎn)換過(guò)程的框圖。知識(shí)準(zhǔn)備3、溫度傳感器
任務(wù)3.1
神奇的傳感器表3-1引腳說(shuō)明任務(wù)實(shí)施子任務(wù)一有人來(lái)了——人體紅外傳感器應(yīng)用
利用按鈕開(kāi)關(guān)的閉合和松開(kāi)模擬人體紅外傳感器檢測(cè)到有人和沒(méi)人經(jīng)過(guò)。有人經(jīng)過(guò)點(diǎn)亮led燈,否則,led燈不亮。
1、硬件電路設(shè)計(jì)任務(wù)3.1
神奇的傳感器任務(wù)實(shí)施2、軟件編程
當(dāng)按下開(kāi)關(guān),即模擬有人經(jīng)過(guò),則P3.6為低電平,定義位變量表示與紅外傳感器連接的端口,sbithw=P3^6;位變量led表示連接led的端口。在主函數(shù)的while循環(huán)中判斷位變量hw的值,hw值為低則點(diǎn)亮led燈,即led=0。sbithw=P3^6;sbitLED=P3^3;主函數(shù)如下:任務(wù)3.1
神奇的傳感器任務(wù)實(shí)施voidmain(void){while(1){if(hw==0){//檢測(cè)到有人經(jīng)過(guò)
led=0;//點(diǎn)亮led燈
}
else{led=1;
}}}
更簡(jiǎn)單的,while循環(huán)體中只要一條語(yǔ)句即可,即led=hw;從hw的取值與輸出端led的值的關(guān)系,可以看到,led的值和hw的一致,因此,可以隨時(shí)讀取hw的值并更新led的值。任務(wù)3.1
神奇的傳感器任務(wù)實(shí)施3、仿真調(diào)試任務(wù)3.1
神奇的傳感器任務(wù)實(shí)施子任務(wù)二感知光亮度——光敏傳感器應(yīng)用
利用光敏傳感器檢測(cè)光照強(qiáng)度,數(shù)碼管顯示亮度值。任務(wù)實(shí)現(xiàn):進(jìn)行硬件電路設(shè)計(jì)和軟件編程。1、硬件電路設(shè)計(jì)任務(wù)3.1
神奇的傳感器任務(wù)實(shí)施2、軟件編程新建工程文件夾,新建0832.c文件。定義ADC0832進(jìn)行AD轉(zhuǎn)換的四個(gè)端口:sbitADC_CS=P3^5;sbitADC_CLK=P3^6;sbitADC_DO=P3^7;sbitADC_DI=P3^4;定義控制燈亮滅的光照讀閾值lightH,lightL;利用ADC0832進(jìn)行AD轉(zhuǎn)換的子函數(shù),子函數(shù)如下:任務(wù)3.1
神奇的傳感器任務(wù)實(shí)施2、軟件編程unsignedcharADC0832(void)//把模擬電壓值轉(zhuǎn)換成8位二進(jìn)制數(shù)并返回{unsignedchari,data_c;data_c=0;ADC_CS=0;ADC_DO=0;//片選,DO為高阻態(tài)for(i=0;i<10;i++){;}ADC_CLK=0;Delay(2);ADC_DI=1;ADC_CLK=1;Delay(2);//第一個(gè)脈沖,起始位ADC_CLK=0;Delay(2);ADC_DI=1;ADC_CLK=1;
任務(wù)3.1
神奇的傳感器任務(wù)實(shí)施
Delay(2);//第二個(gè)脈沖,DI=1表示雙通道單極性輸入ADC_CLK=0;Delay(2);ADC_DI=1;ADC_CLK=1;Delay(2);//第三個(gè)脈沖,DI=1表示選擇通道1(CH2)ADC_DI=0;ADC_DO=1;//DI轉(zhuǎn)為高阻態(tài),DO脫離高阻態(tài)為輸出數(shù)據(jù)作準(zhǔn)備ADC_CLK=1;Delay(2);ADC_CLK=0;任務(wù)3.1
神奇的傳感器任務(wù)實(shí)施Delay(2);//經(jīng)實(shí)驗(yàn),這里加一個(gè)脈沖AD便能正確讀出數(shù)據(jù),//不加的話讀出的數(shù)據(jù)少一位(最低位d0讀不出)for(i=0;i<8;i++){ADC_CLK=1;Delay(2);ADC_CLK=0;Delay(2);data_c=(data_c<<1)|ADC_DO;//在每個(gè)脈沖的下降沿DO輸出一位數(shù)據(jù),最終ch為8位二進(jìn)制數(shù)}ADC_CS=1;//取消片選,一個(gè)轉(zhuǎn)換周期結(jié)束return(data_c);//把轉(zhuǎn)換結(jié)果返回}任務(wù)3.1
神奇的傳感器任務(wù)實(shí)施
將三位光照值進(jìn)行處理,獲得百位、十位和個(gè)位,將其存放人disp[]數(shù)組中。第一個(gè)數(shù)碼管顯示光照值的百位數(shù),第二個(gè)數(shù)碼管顯示十位數(shù),第三個(gè)數(shù)碼管顯示個(gè)位數(shù)。
數(shù)碼管被點(diǎn)亮的片選信號(hào)由38譯碼器的abc端來(lái)決定。
數(shù)碼管顯示光照度的子函數(shù)如下:任務(wù)3.1
神奇的傳感器任務(wù)實(shí)施voiddisplay_gm(){//disp[0]=smgduan[data_temp/1000];//千位 disp[1]=smgduan[data_temp%1000/100];//百位 disp[2]=smgduan[data_temp%1000%100/10];//十位 disp[3]=smgduan[data_temp%1000%100%10];//個(gè)位
c=0;b=0;a=0; P0=disp[1]; Delay(100);
c=0;b=0;a=1; P0=disp[2]; Delay(100);
c=0;b=1;a=0; P0=disp[3]; Delay(100);
}任務(wù)3.1
神奇的傳感器任務(wù)實(shí)施
當(dāng)光亮度低于lightL的值時(shí)開(kāi)燈;否則如果光亮度超過(guò)lightH的值時(shí)關(guān)燈??刂茻舻拈_(kāi)關(guān)用一個(gè)子函數(shù)gm_control_led()實(shí)現(xiàn)。代碼如下:voidgm_control_led(){//亮度低于某個(gè)值開(kāi)燈if(data_temp<lightL){led=0;}//太亮了,不開(kāi)燈elseif(data_temp>lightH){ led=1;}}任務(wù)3.1
神奇的傳感器任務(wù)實(shí)施主函數(shù)中對(duì)亮度初始值和開(kāi)關(guān)燈的閾值進(jìn)行設(shè)置,代碼如下:data_temp=0;//光照亮度初始值lightH=200;//光燈閾值lightL=100;//開(kāi)燈閾值主函數(shù)中不斷循環(huán)三件事,采集光照,數(shù)碼管顯示光照,根據(jù)光照度控制led燈開(kāi)和關(guān)。代碼如下:while(1){data_temp=ADC0832();//ad轉(zhuǎn)換獲取光照強(qiáng)度 display_gm();//數(shù)碼管顯示光照強(qiáng)度(第1-3個(gè)數(shù)碼管) gm_control_led();//根據(jù)亮度控制燈的狀態(tài)}任務(wù)3.1
神奇的傳感器任務(wù)實(shí)施3、仿真運(yùn)行
把編寫好的程序編譯后將編譯產(chǎn)生的hex文件下載到仿真電路圖中,點(diǎn)擊運(yùn)行按鍵,觀察運(yùn)行結(jié)果,光照的值在0-247之間。任務(wù)3.1
神奇的傳感器任務(wù)實(shí)施子任務(wù)三溫度可見(jiàn)了——溫度傳感器應(yīng)用利用
DS18B20檢測(cè)溫度,數(shù)碼管顯示溫度值。任務(wù)實(shí)現(xiàn):進(jìn)行硬件電路設(shè)計(jì)和軟件編程。1、硬件電路設(shè)計(jì)任務(wù)3.1
神奇的傳感器任務(wù)實(shí)施2、軟件編程對(duì)溫度傳感器的操作,首先對(duì)傳感器的初始化:ucharInit_DS18B20(){ucharstatus;DQ=1;Delay(8);DQ=0;Delay(90);DQ=1;Delay(8);status=DQ;Delay(100);DQ=1;returnstatus;}任務(wù)3.1
神奇的傳感器任務(wù)實(shí)施2、軟件編程讀取傳感器一個(gè)字節(jié):ucharReadOneByte() //11011011{uchari,dat=0,bi;DQ=1;for(i=0;i<8;i++){DQ=0;;DQ=1;;;bi=DQ;//0dat=(dat>>1)|(bi<<7);//11011011Delay(30); //1DQ=1;
}returndat;}任務(wù)3.1
神奇的傳感器任務(wù)實(shí)施2、軟件編程//寫一個(gè)字節(jié)
voidWriteOneByte(uchardat)//00110011
{uchari;//00000001
for(i=0;i<8;i++)
{
DQ=0;
DQ=dat&0x01;
Delay(5);
DQ=1;
dat>>=1;//01100110
}
}
任務(wù)3.1
神奇的傳感器任務(wù)實(shí)施2、軟件編程//溫度轉(zhuǎn)換并讀取溫度高低兩個(gè)字節(jié)的二進(jìn)制值voidRead_Temperature(){if(Init_DS18B20()==1)//DS18B20故障DS18B20_IS_OK=0;else{WriteOneByte(0xCC);//跳過(guò)序列號(hào)WriteOneByte(0x44);//啟動(dòng)溫度轉(zhuǎn)換Init_DS18B20();//初始化溫度傳感器WriteOneByte(0xCC);//跳過(guò)序列號(hào)WriteOneByte(0xBE);//讀取溫度寄存器Temp_Value[0]=ReadOneByte();//溫度低8位Temp_Value[1]=ReadOneByte();//溫度高8位}}Temp_Value[0]和Temp_Value[1]分別存放了溫度的低字節(jié)和高字節(jié)。任務(wù)3.1
神奇的傳感器任務(wù)實(shí)施2、軟件編程//溫度處理函數(shù),獲取溫度具體數(shù)值voidDisplay_Temperature() //*************{charng=0;//正數(shù)//負(fù)數(shù)標(biāo)識(shí)及負(fù)號(hào)顯示位置//如果為負(fù)數(shù)則取反加1,并設(shè)置負(fù)號(hào)標(biāo)識(shí)記負(fù)號(hào)顯示位置if((Temp_Value[1]&0xF8)==0xF8)//1111100011111111
{ Temp_Value[1]=~Temp_Value[1];
Temp_Value[0]=~Temp_Value[0]+1;
if(Temp_Value[0]==0x00){ //求得補(bǔ)碼溢出情況處理 Temp_Value[1]++;
}
ng=1;//負(fù)數(shù)}Temp_Value[0]=((Temp_Value[0]&0xF0)>>4)|((Temp_Value[1]&0x07)<<4);
ng=ng?-Temp_Value[0]:Temp_Value[0];num1=ng;
display(num1);}任務(wù)3.1
神奇的傳感器任務(wù)實(shí)施2、軟件編程//數(shù)碼管顯示溫度voiddisplay(intnum){ ucharbai,shi,ge; if(num>30||num<-5)//溫度不在設(shè)定的上下限之間,則點(diǎn)亮led { LED=0; SEG3=1; P2=0xbf; Delay(500); //10111111 SEG3=0; SEG4=1; P2=0xbf; Delay(500); SEG4=0;;SEG5=0;P2=0x40;Delay(500);SEG5=1
}
任務(wù)3.1
神奇的傳感器任務(wù)實(shí)施
else { LED=1;
if(num>=0) { SEG1=0; P2=0xff; } else {SEG1=1; P2=0xbf;//"-" Delay(500); SEG1=0; num=-num; } bai=num/100; shi=(num%100)/10; ge=num%10;
SEG2=1; P2=table[bai]; Delay(500);SEG2=0;
SEG3=1; P2=table[shi]; Delay(500);SEG3=0; SEG4=1; P2=table[ge]; Delay(500);SEG4=0;
SEG5=0;P2=0x8f;Delay(500); SEG5=1; }}任務(wù)3.1
神奇的傳感器任務(wù)實(shí)施voidmain(void){Read_Temperature();Delay(50000);Delay(50000);while(1){display(num1);//顯示溫度,取消此句,溫度為負(fù)時(shí)會(huì)閃
Read_Temperature();//讀取溫度傳感器的值
Dispose_Temperature();//處理讀取到的溫度高低字節(jié)轉(zhuǎn)換//成具體溫度值,并顯示溫度}}任務(wù)3.1
神奇的傳感器任務(wù)實(shí)施3、仿真調(diào)試任務(wù)3.1
神奇的傳感器任務(wù)實(shí)施能力拓展
本任務(wù)利用光敏傳感器采集光照控制LED燈的開(kāi)和關(guān)。在仿真圖中調(diào)試運(yùn)行成功后,進(jìn)行能力拓展,實(shí)現(xiàn)開(kāi)發(fā)板上的光敏傳感器檢測(cè)光照強(qiáng)度,數(shù)碼管顯示亮度值的功能。1、硬件電路設(shè)計(jì)任務(wù)3.1
神奇的傳感器任務(wù)實(shí)施1、硬件電路設(shè)計(jì)開(kāi)發(fā)板連線任務(wù)3.1
神奇的傳感器圖3-15開(kāi)發(fā)板引腳圖
任務(wù)實(shí)施2、軟件編程
本任務(wù)要實(shí)現(xiàn)的功能是:通過(guò)ADC轉(zhuǎn)換電路采集電位器電壓值,將采集轉(zhuǎn)換后的AD值通過(guò)數(shù)碼管顯示。
首先將51單片機(jī)的頭文件和XPT2046.h的頭文件包含進(jìn)來(lái),然后定義動(dòng)態(tài)數(shù)碼管、74HC138譯碼器的控制管腳。主函數(shù)功能非常簡(jiǎn)單,在while循環(huán)內(nèi)調(diào)用datapros()AD數(shù)據(jù)處理函數(shù),該函數(shù)內(nèi)部又調(diào)用Read_AD_Data(0x94)函數(shù)來(lái)讀取電位器對(duì)應(yīng)通道(AIN0)的AD值,0X94即為AIN0通道的控制命令,至于AIN1、AIN2、AIN3通道值可根據(jù)前面介紹的控制命令寄存器計(jì)算(AIN1對(duì)應(yīng)的命令值是0xA4,AIN2對(duì)應(yīng)的命令值是0xD4,AIN3對(duì)應(yīng)的命令值是0xE4),然后在取出各位對(duì)應(yīng)的數(shù)碼管段碼數(shù)據(jù)保存到數(shù)組disp中。最后調(diào)用DigDisplay()動(dòng)態(tài)數(shù)碼管顯示函數(shù),將處理好的數(shù)據(jù)顯示。voidmain(){ while(1) {datapros(); //數(shù)據(jù)處理函數(shù) DigDisplay();//數(shù)碼管顯示函數(shù)
} }任務(wù)3.1
神奇的傳感器任務(wù)實(shí)施數(shù)據(jù)處理函數(shù)voiddatapros(){ u16temp; staticu8i; if(i==50)
{ i=0; temp=Read_AD_Data(0xA4); //AIN2光敏電阻 } i++; disp[0]=smgduan[temp/1000];//千位 disp[1]=smgduan[temp%1000/100];//百位 disp[2]=smgduan[temp%1000%100/10];//個(gè)位 disp[3]=smgduan[temp%1000%100%10]; }任務(wù)3.1
神奇的傳感器任務(wù)實(shí)施數(shù)碼管顯示函數(shù)voidDigDisplay(){ u8i; for(i=0;i<4;i++)
{ switch(i) //位選,選擇點(diǎn)亮的數(shù)碼管,
{ case(0): LSA=0;LSB=0;LSC=0;break;//顯示第0位 case(1): LSA=1;LSB=0;LSC=0;break;//顯示第1位 case(2): LSA=0;LSB=1;LSC=0;break;//顯示第2位 case(3): LSA=1;LSB=1;LSC=0;break;//顯示第3位
} P0=disp[i];//發(fā)送數(shù)據(jù) delay(100);//間隔一段時(shí)間掃描
P0=0x00;//消隱 } }任務(wù)3.1
神奇的傳感器任務(wù)實(shí)施開(kāi)發(fā)板運(yùn)行任務(wù)3.1
神奇的傳感器項(xiàng)目三智慧工廠環(huán)境智能監(jiān)控
馮蓉珍
《微處理器程序設(shè)計(jì)》教學(xué)目標(biāo)和技能要求任務(wù)目標(biāo)
通過(guò)本任務(wù)的設(shè)計(jì)和制作,介紹繼電器、直流電機(jī)和步進(jìn)電機(jī)等執(zhí)行器和微處理器之間的接口和編程應(yīng)用。培養(yǎng)學(xué)生利用微處理器的IO口功能控制執(zhí)行器工作,從而控制一些大電流的執(zhí)行器設(shè)備。教學(xué)目標(biāo)和技能要求知識(shí)準(zhǔn)備
關(guān)于“直流電機(jī)”與其驅(qū)動(dòng)芯片的工作原理在項(xiàng)目一“任務(wù)五智慧校園門禁智能控制”中有詳細(xì)分析。下面講解PWM調(diào)節(jié)電機(jī)速度的工作原理。
利用PWM脈寬調(diào)制器控制電機(jī)的原理為:通過(guò)調(diào)制器給電機(jī)提供一個(gè)具有一定頻率的脈沖寬度可調(diào)的脈沖電。脈沖寬度越大即占空比越大,提供給電機(jī)的平均電壓越大,電機(jī)轉(zhuǎn)速就高。反之脈沖寬度越小,則占空比越小,提供給電機(jī)的平均電壓越小電機(jī)轉(zhuǎn)速就低。PWM不管是高電平還是低電平時(shí)電機(jī)都是轉(zhuǎn)動(dòng)的,電機(jī)的轉(zhuǎn)速取決于平均電壓。直流電機(jī)教學(xué)目標(biāo)和技能要求知識(shí)準(zhǔn)備
步進(jìn)電機(jī)有三線式、四線式、五線式和六線式,但其控制方式均相同,都要以脈沖信號(hào)電流來(lái)驅(qū)動(dòng)。假設(shè)每旋轉(zhuǎn)一圈需要200個(gè)脈沖信號(hào)來(lái)勵(lì)磁,可以計(jì)算出每個(gè)勵(lì)磁信號(hào)能使步進(jìn)電機(jī)前進(jìn)1.8°,其旋轉(zhuǎn)角度與脈沖的個(gè)數(shù)成正比。步進(jìn)電動(dòng)機(jī)的正、反轉(zhuǎn)由勵(lì)磁脈沖產(chǎn)生的順序來(lái)控制。步進(jìn)電機(jī)教學(xué)目標(biāo)和技能要求知識(shí)準(zhǔn)備
繼電器是一種電子控制器件,它具有控制系統(tǒng)(又稱輸入回路)和被控制系統(tǒng)(又稱輸出回路),通常應(yīng)用于自動(dòng)控制電路中,它實(shí)際上是用較小的電流去控制較大電流的一種“自動(dòng)開(kāi)關(guān)”,故在電路中起著自動(dòng)調(diào)節(jié)、安全保護(hù)、轉(zhuǎn)換電路等作用。繼電器如圖3-18所示:5、6引腳連接電源,3、4引腳為常閉觸點(diǎn),1、2引腳為敞開(kāi)觸點(diǎn)。
繼電器教學(xué)目標(biāo)和技能要求知識(shí)準(zhǔn)備
當(dāng)線圈5、6引腳連接上電源后,因電磁感應(yīng),使得彈簧網(wǎng)往上,動(dòng)觸點(diǎn)向上接觸1、2引腳,如果1號(hào)引腳連接了電源,則2號(hào)被接通后也連通電源,2號(hào)引腳連接外部設(shè)備電源。繼電器線圈通電后,和2號(hào)引腳連接的外部設(shè)備通電。繼電器任務(wù)3.2奇妙的執(zhí)行器任務(wù)實(shí)施子任務(wù)一“直截了當(dāng)”的直流電機(jī)運(yùn)轉(zhuǎn)本任務(wù)利用三個(gè)按鍵結(jié)合外部中斷技術(shù)、PWM技術(shù)分別控制直流電機(jī)的啟動(dòng)/停止和速度,并在仿真電路中控制電機(jī)運(yùn)轉(zhuǎn)方向。
1、硬件電路設(shè)計(jì)圖3-19硬件電路圖任務(wù)實(shí)施2、軟件編程
首先定義K3和直流電機(jī)和單片機(jī)連接的管腳。k1、k2連接在單片機(jī)的兩個(gè)外部中斷端口上,因此,不需要定義此兩個(gè)開(kāi)關(guān)。sbitdc1=P1^0;sbitdc2=P1^1;sbitk3=P3^4;pwm的高電平用pwmon表示,低電平用pwmoff表示,如下進(jìn)行定義unsignedcharpwmon,pwmoff;定義位變量dir表示運(yùn)轉(zhuǎn)方向,dir為1,表示正轉(zhuǎn);dir為0,表示反轉(zhuǎn);定義位變量start_en表示是否允許電機(jī)啟動(dòng),start_en為1表示電機(jī)啟動(dòng),start_en為0表示電機(jī)停止。定義位變量label_k3表示k3按鍵剛才的狀態(tài),記憶k3按鍵的狀態(tài)。任務(wù)3.2奇妙的執(zhí)行器任務(wù)實(shí)施//外部中斷0控制電機(jī)啟動(dòng)和停止voidmyint0()interrupt0{
start_en=!start_en;}//外部中斷1控制電機(jī)方向取反voidmyint1()interrupt2{
dir=!dir;}任務(wù)3.2奇妙的執(zhí)行器任務(wù)實(shí)施
主函數(shù)中先對(duì)中斷寄存器和變量進(jìn)行初始化。在while循環(huán)中做兩件事,第一件事讀取k3速度調(diào)節(jié)按鍵狀態(tài)更新速度值,第二件事根據(jù)start_en和dir以及pwmon、pwmoff的值控制電機(jī)按要求運(yùn)轉(zhuǎn)。voidmain(){EA=1;//開(kāi)中斷EX0=1;//允許外部中斷0EX1=1;//允許外部中斷0IT0=1;//外部中斷0觸發(fā)方式為電平跳變IT1=1;//外部中斷1觸發(fā)方式為電平跳變dir=0;//運(yùn)轉(zhuǎn)方向start_en=0;//電機(jī)停止任務(wù)3.2奇妙的執(zhí)行器任務(wù)實(shí)施pwmon=50;//電機(jī)中等速度pwmoff=50;label_k3=1;//k3按鍵初始狀態(tài)為松開(kāi)狀態(tài)
while(1){
//讀取k3按鍵,更新速度值if(!k3&&label_k3){ label_k3=0; pwmon+=25;//速度取值0,25,50,75,100五檔,第一檔停止,第五檔全速
pwmoff-=25;
任務(wù)3.2奇妙的執(zhí)行器任務(wù)實(shí)施
if(pwmon>100){//速度超過(guò)100,回到0,從低檔開(kāi)始pwmon=0;pwmoff=100; } } label_k3=k3;//記住k3的狀態(tài)
任務(wù)3.2奇妙的執(zhí)行器任務(wù)實(shí)施
//根據(jù)啟/停,方向和速度控制電機(jī)運(yùn)轉(zhuǎn)if(start_en){//允許運(yùn)轉(zhuǎn) if(dir){//正向轉(zhuǎn)動(dòng) dc1=1;dc2=0; delay(pwmon);//按照pwm_on的速度運(yùn)轉(zhuǎn) dc1=0; delay(pwmoff); }
任務(wù)3.2奇妙的執(zhí)行器任務(wù)實(shí)施
else{//反向轉(zhuǎn)動(dòng) dc1=0;dc2=1; delay(pwmon);//按照pwm_on的速度運(yùn)轉(zhuǎn) dc2=0; delay(pwmoff); } } else{ //停止
dc1=0;dc2=0; }}}任務(wù)3.2奇妙的執(zhí)行器任務(wù)實(shí)施3、仿真調(diào)試
編譯調(diào)試后,下載hex文件到51單片機(jī)中,點(diǎn)擊運(yùn)行按鈕,點(diǎn)擊k1、k2、k3按鈕,觀察電機(jī)的運(yùn)轉(zhuǎn)狀態(tài)。4、開(kāi)發(fā)板運(yùn)行
按圖3-20連接電機(jī)和開(kāi)發(fā)板。P1.0連接J46的IN1,直流電機(jī)的兩個(gè)引腳分別連接J47的+5V和O1,k1、k2、k3分別連接P3.2、P3.3、P3.4。k2在仿真圖中用來(lái)控制電機(jī)運(yùn)轉(zhuǎn)方向,而在開(kāi)發(fā)板中,受開(kāi)發(fā)板上硬件設(shè)計(jì)限制,電機(jī)的轉(zhuǎn)動(dòng)方向只能通過(guò)交換連接電機(jī)的兩根導(dǎo)線來(lái)實(shí)現(xiàn)。因此,圖中連接k2的導(dǎo)線可以去掉。
程序下載到51單片機(jī)中,按下k1、k3按鈕,觀察電機(jī)的運(yùn)行狀態(tài)。任務(wù)3.2奇妙的執(zhí)行器任務(wù)二奇妙的執(zhí)行器任務(wù)實(shí)施圖3-20開(kāi)發(fā)板連線圖
任務(wù)實(shí)施子任務(wù)二“步步驚心”的步進(jìn)電機(jī)運(yùn)轉(zhuǎn)
本任務(wù)利用三個(gè)按鍵結(jié)合外部中斷技術(shù)、PWM技術(shù)分別控制步進(jìn)電機(jī)的啟動(dòng)/停止和速度,并在仿真電路中控制電機(jī)運(yùn)轉(zhuǎn)方向。
1、硬件電路設(shè)計(jì)
三個(gè)按鈕開(kāi)關(guān)K1、K2、K3分別控制步進(jìn)電機(jī)的啟/停、運(yùn)轉(zhuǎn)方向和速度。K1、K2分別連接到微處理器的外部中斷0和外部中斷1的管腳P3.2、P3.3上,K3連接到P3.4端口。仿真圖中,步進(jìn)電機(jī)直接連接到P1.0到P1.3端口。在開(kāi)發(fā)板上,步進(jìn)電機(jī)和微處理器之間還需要加一驅(qū)動(dòng)芯片TC1508S,微處理器輸出電流不足以驅(qū)動(dòng)電機(jī)轉(zhuǎn)到,需要利用驅(qū)動(dòng)芯片放大電流后驅(qū)動(dòng)電機(jī)。任務(wù)3.2奇妙的執(zhí)行器任務(wù)實(shí)施任務(wù)3.2奇妙的執(zhí)行器任務(wù)實(shí)施開(kāi)發(fā)板上步進(jìn)電機(jī)驅(qū)動(dòng)電路設(shè)計(jì)如圖任務(wù)3.2奇妙的執(zhí)行器任務(wù)實(shí)施步進(jìn)電機(jī)和開(kāi)發(fā)板連接如圖任務(wù)3.2奇妙的執(zhí)行器圖3-23開(kāi)發(fā)板上步進(jìn)電機(jī)引腳圖任務(wù)實(shí)施2、軟件編程定義連接步進(jìn)電機(jī)的四個(gè)管腳。sbitMOTOA=P1^0;sbitMOTOB=P1^1;sbitMOTOC=P1^2;sbitMOTOD=P1^3;定義外部中斷0控制電機(jī)啟動(dòng)停止,外部中斷1控制電機(jī)的方向。K3控制電機(jī)的速度,速度通過(guò)延時(shí)時(shí)間參數(shù)speed來(lái)控制。定義speed初始值為2000。定義電機(jī)啟停位變量run_en和方向位變量dir。intspeed=2000;bitrun_en,dir,k3_label;任務(wù)3.2奇妙的執(zhí)行器任務(wù)實(shí)施兩個(gè)外部中斷函數(shù)分別改變電機(jī)啟停和運(yùn)轉(zhuǎn)方向。代碼如下://改變電機(jī)的啟動(dòng)、停止voidmyint0()interrupt0{ run_en=!run_en;}//改變電機(jī)運(yùn)轉(zhuǎn)方向voidmyint1()interrupt2{ dir=!dir;}任務(wù)3.2奇妙的執(zhí)行器任務(wù)實(shí)施主函數(shù)代碼如下,其中首先對(duì)一些寄存器、變量進(jìn)行初始化。在while(1)循環(huán)中先讀取調(diào)速按鍵k3的狀態(tài)修改speed的值進(jìn)行調(diào)速,然后根據(jù)電機(jī)是否啟動(dòng)以及運(yùn)轉(zhuǎn)方向和速度控制步進(jìn)電機(jī)運(yùn)轉(zhuǎn)。voidmain(){EA=1;EX0=1;EX1=1;IT0=1;IT1=1;run_en=0;dir=0;k3_label=1;//按鍵初始狀態(tài)為松開(kāi)任務(wù)3.2奇妙的執(zhí)行器任務(wù)實(shí)施while(1){//讀取調(diào)速按鍵k3的狀態(tài),修改speed的值if(k3==0&&k3_label==1){speed+=1000; if(speed>=5000){ speed=1000; }}k3_label=k3;任務(wù)3.2奇妙的執(zhí)行器任務(wù)實(shí)施
//根據(jù)電機(jī)啟動(dòng)停止和運(yùn)轉(zhuǎn)方向,speed的值控制電機(jī)運(yùn)轉(zhuǎn)if(run_en){//電機(jī)運(yùn)轉(zhuǎn)if(dir){//正轉(zhuǎn)
MOTOA=1;MOTOB=0;MOTOC=1;MOTOD=1;delay(speed);//按speed的速度延時(shí)MOTOA=1;MOTOB=1;MOTOC=1;MOTOD=0;delay(speed);MOTOA=0;MOTOB=1;MOTOC=1;MOTOD=1;delay(speed);
MOTOA=1;MOTOB=1;MOTOC=0;MOTOD=1;delay(speed); //上述4種狀態(tài)控制電機(jī)運(yùn)轉(zhuǎn)一步。
}任務(wù)3.2奇妙的執(zhí)行器任務(wù)實(shí)施else{//反轉(zhuǎn),步序?yàn)檎D(zhuǎn)的步序倒序
MOTOA=1;MOTOB=1;MOTOC=0;MOTOD=1;delay(speed);MOTOA=0;MOTOB=1;MOTOC=1;MOTOD=1;delay(speed);MOTOA=1;MOTOB=1;MOTOC=1;MOTOD=0;delay(speed);MOTOA=1;MOTOB=0;MOTOC=1;MOTOD=1;delay(speed);}}任務(wù)3.2奇妙的執(zhí)行器任務(wù)實(shí)施//停止運(yùn)轉(zhuǎn)else{MOTOA=1;MOTOB=1;MOTOC=1;MOTOD=1;}}}3、仿真調(diào)試
將編譯后生成的hex文件下載到51單片機(jī)中,按下仿真軟件啟動(dòng)按鈕,按下啟動(dòng)按鈕K1,電機(jī)按照初始設(shè)定方向運(yùn)轉(zhuǎn),按下方向按鍵K2,電機(jī)反轉(zhuǎn),按下K3按鍵,改變延時(shí)速度,即改變電源運(yùn)轉(zhuǎn)速度。任務(wù)3.2奇妙的執(zhí)行器任務(wù)實(shí)施
任務(wù)3.2奇妙的執(zhí)行器圖3-24仿真運(yùn)行效果圖任務(wù)實(shí)施4、開(kāi)發(fā)板運(yùn)行步進(jìn)電機(jī)和開(kāi)發(fā)板連線如圖任務(wù)3.2奇妙的執(zhí)行器圖3-25步進(jìn)電機(jī)和開(kāi)發(fā)板連線圖
任務(wù)實(shí)施能力拓展
按下開(kāi)關(guān)k1,使得單片機(jī)的某一個(gè)IO口控制繼電器導(dǎo)通,使得外部設(shè)備直接連接5V電源,通過(guò)繼電器直接給外設(shè)通電。1、硬件電路設(shè)計(jì)硬件電路圖如圖任務(wù)3.2奇妙的執(zhí)行器圖3-26硬件電路圖
任務(wù)實(shí)施2、軟件編程定義位變量k1接在P1.0上,定義位變量jdq連接在P3.7上,作為繼電器的控制端。當(dāng)P3.7輸出低電平時(shí),三極管Q1導(dǎo)通,繼電器的線圈兩端接上24V電源。繼電器開(kāi)關(guān)初始狀態(tài)引腳1和引腳2連通,當(dāng)線圈通電后,開(kāi)關(guān)打到引腳3,即引腳1和3連通。電機(jī)接上電源后運(yùn)轉(zhuǎn)。sbitk1=P1^0;sbitjdq=P3^7;任務(wù)3.2奇妙的執(zhí)行器任務(wù)實(shí)施2、軟件編程voidmain(){while(1){ if(!k1){ //按下了k1 jdq=0; //繼電器導(dǎo)通,電機(jī)運(yùn)轉(zhuǎn) } else{//k1松開(kāi) jdq=1; //繼電器不導(dǎo)通,電機(jī)停止 } }//while}任務(wù)3.2奇妙的執(zhí)行器任務(wù)實(shí)施3、仿真調(diào)試編譯后將hex下載到51單片機(jī),仿真運(yùn)行后,按鍵k1,繼電器通電,電機(jī)運(yùn)轉(zhuǎn)。松開(kāi)k1,繼電器斷電,電機(jī)停止運(yùn)轉(zhuǎn)。任務(wù)3.2奇妙的執(zhí)行器任務(wù)實(shí)施4、開(kāi)發(fā)板運(yùn)行
按圖連接導(dǎo)線,按下k1后,繼電器線圈導(dǎo)電,開(kāi)關(guān)連通電源,電機(jī)用開(kāi)發(fā)板上LED燈模擬,LED紅燈亮,松開(kāi)k1后,LED紅燈滅。任務(wù)3.2奇妙的執(zhí)行器圖3-28開(kāi)發(fā)板運(yùn)行效果圖項(xiàng)目三智慧工廠環(huán)境智能監(jiān)控
馮蓉珍
《微處理器程序設(shè)計(jì)》任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)目標(biāo)通過(guò)本任務(wù)的設(shè)計(jì)和制作,要求學(xué)生利用微處理器采集人體紅外傳感器數(shù)據(jù)感知是否有人到來(lái),以及采集光敏傳感器數(shù)據(jù)判斷光照度是否足夠,從而智能控制車間照明燈的亮度及開(kāi)關(guān)狀態(tài),培養(yǎng)學(xué)生利用人體紅外傳感器和光敏傳感器實(shí)現(xiàn)對(duì)環(huán)境亮度的智能控制燈。知識(shí)準(zhǔn)備
溫度傳感器、光敏傳感器、人體紅外傳感器、直流電機(jī)、步進(jìn)電機(jī)、繼電器等工作原理。
任務(wù)實(shí)施子任務(wù)一利用人體紅外傳感器控制照明系統(tǒng)
當(dāng)有人經(jīng)過(guò)時(shí)點(diǎn)亮led燈一段時(shí)間,人離開(kāi)一段時(shí)間后熄滅led燈。任務(wù)實(shí)現(xiàn):進(jìn)行硬件電路設(shè)計(jì)和軟件編程。1、硬件電路設(shè)計(jì)任務(wù)3.3智慧工廠照明系統(tǒng)智能控制圖3-29硬件電路圖任務(wù)實(shí)施2、軟件編程
程序相當(dāng)簡(jiǎn)單,當(dāng)按下開(kāi)關(guān),即模擬有人經(jīng)過(guò),則P3.6為低電平,定義位變量表示與紅外傳感器連接的端口,sbithw=P3^6;位變量led表示連接led的端口。在主函數(shù)的while循環(huán)中判斷位變量hw的值,hw值為低則點(diǎn)亮led燈,即led=0,并延時(shí)一段時(shí)間后led=1,燈熄滅。當(dāng)hw值為高電平時(shí),需要延時(shí)一段時(shí)間繼續(xù)讀取hw的值,若還是高電平,則led=1,燈熄滅,若期間有人經(jīng)過(guò),則led亮一段時(shí)間后再熄滅。任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施主函數(shù)代碼如下:voidmain(void){while(1)
{if(hw==0){//檢測(cè)到有人經(jīng)過(guò) led=0;//點(diǎn)亮led燈 delay(100);//燈亮一段時(shí)間 led=1;//燈熄滅 } else{//檢測(cè)到?jīng)]人經(jīng)過(guò) delay(10);//延時(shí)一段時(shí)間 if(hw==1){//延時(shí)后依然沒(méi)人 led=1;//燈熄滅 } else{//延時(shí)后如果有人,則亮燈延時(shí)一段時(shí)間后熄滅 led=0; delay(100); led=1; }
}}}任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施3、仿真調(diào)試任務(wù)3.3智慧工廠照明系統(tǒng)智能控制圖3-30仿真運(yùn)行效果
任務(wù)實(shí)施4、開(kāi)發(fā)板運(yùn)行任務(wù)3.3智慧工廠照明系統(tǒng)智能控制圖3-31開(kāi)發(fā)板運(yùn)行效果圖
任務(wù)實(shí)施5、功能拓展
為了節(jié)約電能,在校園的教室里或圖書館不開(kāi)無(wú)人燈,我們可以用兩個(gè)紅外傳感器,一個(gè)放在門外,一個(gè)放在門內(nèi),當(dāng)人從門外進(jìn)入門內(nèi)時(shí),可以判斷教室里或圖書館里有人,自動(dòng)開(kāi)燈;當(dāng)人從門內(nèi)走出門外,則表示人走出了教室或圖書館,當(dāng)人數(shù)為0時(shí),表示已經(jīng)沒(méi)有人了,則自動(dòng)關(guān)燈。
我們用將兩個(gè)人體紅外傳感器連接到單片機(jī)的兩個(gè)外部中斷接口上,用兩個(gè)按鈕模擬兩個(gè)人體紅外傳感器的效果。任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施任務(wù)3.3智慧工廠照明系統(tǒng)智能控制圖3-32硬件電路圖任務(wù)實(shí)施軟件編程思路:
當(dāng)有人經(jīng)過(guò)門外的紅外傳感器,即相當(dāng)于按下了k2,觸發(fā)外部中斷0,經(jīng)過(guò)門內(nèi)的紅外傳感器,即相當(dāng)于按下了k3,觸發(fā)外部中斷1。外部中斷0連接門外的人體紅外傳感器1,人從門外進(jìn)入門內(nèi),人數(shù)加1,從門內(nèi)走出門外,人數(shù)減1。n1表示經(jīng)過(guò)門外的次數(shù),n2表示經(jīng)過(guò)門內(nèi)的次數(shù)。從門外經(jīng)過(guò),在外部中斷0服務(wù)函數(shù)中,n1加1,如果不停的進(jìn)人,則n1<n2,若有人出來(lái),則先經(jīng)過(guò)外部中斷1,即n2先加1,再經(jīng)過(guò)外部中斷0,如果n1<n2,表示有人出來(lái)。數(shù)碼管可以顯示教室的人數(shù)。任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施代碼如下://外部中斷0連接門外的人體紅外傳感器1voidmyint0()interrupt0{ if(n1<n2){//表示有人出來(lái) count--; if(count<0){ count=0; } } n1++;
}任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施//外部中斷1連接門內(nèi)的人體紅外傳感器2voidmyint1()interrupt2{n2++; if(n1==n2){ //表示有人進(jìn)去 count++; //教室最多呆100人 if(count>100){ count=100;//可采取措施不讓進(jìn)人 n2=0; n1=0; } }}Count表示人數(shù),當(dāng)人數(shù)為0,關(guān)燈,否則開(kāi)燈。用共陽(yáng)極數(shù)碼管顯示教室里的人數(shù)。數(shù)碼管和單片機(jī)的P0端口連接。P0=table[count];任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施6、仿真調(diào)試任務(wù)3.3智慧工廠照明系統(tǒng)智能控制圖3-33仿真運(yùn)行效果圖任務(wù)實(shí)施7、開(kāi)發(fā)板運(yùn)行任務(wù)3.3智慧工廠照明系統(tǒng)智能控制圖3-34開(kāi)發(fā)板運(yùn)行效果圖任務(wù)實(shí)施子任務(wù)二利用光敏傳感器控制照明燈亮度
利用光敏傳感器檢測(cè)光照強(qiáng)度,根據(jù)光照強(qiáng)度決定是否點(diǎn)亮led燈。當(dāng)亮度低于設(shè)定值1,點(diǎn)亮led燈;當(dāng)亮度超過(guò)設(shè)定值2,熄滅led燈。任務(wù)實(shí)現(xiàn):進(jìn)行硬件電路設(shè)計(jì)和軟件編程。1、硬件電路設(shè)計(jì)
參考“光敏傳感器應(yīng)用”進(jìn)行設(shè)計(jì)。上個(gè)課題是將采集到的光照值進(jìn)行顯示,本任務(wù)根據(jù)光照值調(diào)整亮燈的數(shù)量,即控制照明燈的亮度。電路圖中增加兩個(gè)LED燈。任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施任務(wù)3.3智慧工廠照明系統(tǒng)智能控制圖3-35調(diào)光電路圖任務(wù)實(shí)施2、軟件編程將3.1.3.2節(jié)的代碼復(fù)制過(guò)來(lái)進(jìn)行修改。上個(gè)課題是將采集到的光照值進(jìn)行顯示,本任務(wù)根據(jù)光照值調(diào)整亮燈的數(shù)量,即控制照明燈的亮度。電路圖中增加兩個(gè)LED燈。設(shè)定亮度閾值lightL和lightH;當(dāng)亮度值低于lightL,則點(diǎn)亮三個(gè)LED燈,否則,當(dāng)亮度值低于lightL+50,點(diǎn)亮兩個(gè)LED燈,否則,當(dāng)亮度低于lightL+100時(shí),點(diǎn)亮一個(gè)LED燈,如果亮度高于lightH時(shí),所有燈都熄滅。lightL和lightH的值根據(jù)實(shí)際環(huán)境和需求進(jìn)行調(diào)整。#definelightL100#definelightH200任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施定義led1燈為P1.0:sbitled=P1^0;定義led2燈為P1.1:sbitled=P1^1;定義led3燈為P1.2:sbitled=P1^2;修改光敏控制LED亮度的子函數(shù):gm_control_led(),代碼如下:任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施voidgm_control_led(){if(data_temp<lightL){
led1=0; led2=0; led3=0;}//亮度稍高開(kāi)2個(gè)燈elseif(data_temp<lightL+50){led1=0; led2=0; led3=1;}//很亮,開(kāi)1個(gè)燈elseif(data_temp<lightH){
led1=0; led2=1; led3=1;
}任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施//太亮了,不開(kāi)燈else{
led1=1; led2=1; led3=1;}}任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施3、仿真運(yùn)行任務(wù)3.3智慧工廠照明系統(tǒng)智能控制圖3-36仿真調(diào)光效果圖任務(wù)實(shí)施子任務(wù)三智慧工廠照明燈智能控制當(dāng)車間里沒(méi)有人的時(shí)候,照明燈需要熄滅;當(dāng)車間里有人且當(dāng)前光照度不夠時(shí),需要打開(kāi)照明燈,如果有人但光照度夠就不需要打開(kāi)照明燈,并且根據(jù)光照度來(lái)調(diào)節(jié)照明燈的亮度。
本節(jié)用按鍵K1模擬安裝在門外的人體紅外傳感器1,用按鍵K2模擬安裝在門內(nèi)的人體紅外傳感器2。兩個(gè)人體紅外傳感器一前一后安裝。按下按鍵K1或K2模擬有人經(jīng)過(guò),松開(kāi)按鍵K1或K2模擬人已離開(kāi)。用光敏傳感器采集當(dāng)前的光照度。當(dāng)人先經(jīng)過(guò)門外的人體紅外傳感器1再經(jīng)過(guò)門內(nèi)的人體紅外傳感器2時(shí),表示有人進(jìn)入車間,只要有人在車間里,就根據(jù)光照度決定是否開(kāi)燈。如果有人先經(jīng)過(guò)門內(nèi)的人體紅外傳感器2再經(jīng)過(guò)門外的人體紅外傳感器1,則表示有人走出了車間。用count變量表示在車間里面的人數(shù),當(dāng)人數(shù)為0時(shí),表示車間里沒(méi)人。只有車間里有人,才根據(jù)當(dāng)前的光照度決定燈的開(kāi)關(guān)。
任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施1、硬件電路設(shè)計(jì)任務(wù)3.3智慧工廠照明系統(tǒng)智能控制圖3-37電路總圖
任務(wù)實(shí)施2軟件編程
在主函數(shù)中,需要對(duì)中斷相關(guān)寄存器進(jìn)行設(shè)置,利用兩個(gè)外部中斷模擬有人經(jīng)過(guò)了人體紅外傳感器,代碼如下:EA=1;EX0=1;EX1=1;IT0=1;IT1=1;任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施
對(duì)光照亮度初始值和開(kāi)關(guān)燈的閾值進(jìn)行設(shè)置,代碼如下:data_temp=0;//光照亮度初始值lightH=200;//關(guān)燈閾值lightL=100;//開(kāi)燈閾值
對(duì)外部中斷0和外部中斷1的中斷次數(shù)n0和n1、教室里人數(shù)、人數(shù)的十位數(shù)和個(gè)位數(shù)進(jìn)行初始化,代碼如下:n0=0; //外部中斷0中斷次數(shù)n1=0; //外部中斷1中斷次數(shù)count_renshu=0;//教室里的人數(shù)renshu_shi=0; //人數(shù)十位renshu_ge=0; //人數(shù)個(gè)位任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施
在主函數(shù)的while循環(huán)中,反復(fù)采集光照度,顯示亮度,根據(jù)亮度調(diào)節(jié)教室里燈光亮度,顯示教室里人數(shù)。四個(gè)子函數(shù)代碼如下:while(1){
data_temp=ADC0832();//ad轉(zhuǎn)換獲取光照強(qiáng)度 display_gm();//數(shù)碼管顯示光照強(qiáng)度(第1-3個(gè)數(shù)碼管) gm_control_led();//根據(jù)光照亮度控制燈的亮度 display_renshu();//顯示教室里的人數(shù)}上述四個(gè)子函數(shù)在之前的任務(wù)中都已做了分析。任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施
利用人體紅外傳感器判斷教室里的人數(shù),人體紅外傳感器的輸出用外部中斷來(lái)模擬,兩個(gè)外部中斷函數(shù)分別如下://門外傳感器檢測(cè)到有人經(jīng)過(guò)voidmyint0()interrupt0{
n0++;
if(n0==n1){ count_renshu--; if(count_renshu<=0){ count_renshu=0; n0=0; n1=0; } elseif(count_renshu<=99){//人不滿100,不報(bào)警 alarm=1; } }}
任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施//門內(nèi)傳感器檢測(cè)到有人經(jīng)過(guò)voidmyint1()interrupt2{
n1++; if(n0==n1){
count_renshu++;
if(count_renshu>99){ alarm=0; //應(yīng)該報(bào)警} }}任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施顯示人數(shù)的子函數(shù)如下:voiddisplay_renshu(){
renshu_shi=count_renshu/10; renshu_ge=count_renshu%10;
c=1;b=1;a=0;//第7個(gè)數(shù)碼管顯示人數(shù)十位數(shù) P0=smgduan[renshu_shi]; Delay(100); c=1;b=1;a=1;//第8個(gè)數(shù)碼管顯示人數(shù)個(gè)位數(shù) P0=smgduan[renshu_ge]; Delay(100);}任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施采集光照子函數(shù)如下:unsignedcharADC0832(void)//把模擬電壓值轉(zhuǎn)換成8位二進(jìn)制數(shù)并返回{unsignedchari,data_c;data_c=0;ADC_CS=0;ADC_DO=0;//片選,DO為高阻態(tài)for(i=0;i<10;i++){;}ADC_CLK=0;Delay(2);ADC_DI=1;ADC_CLK=1;Delay(2);//第一個(gè)脈沖,起始位ADC_CLK=0;Delay(2);ADC_DI=1;ADC_CLK=1;
任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施Delay(2);//第二個(gè)脈沖,DI=1表示雙通道單極性輸入ADC_CLK=0;Delay(2);ADC_DI=1;ADC_CLK=1;Delay(2);//第三個(gè)脈沖,DI=1表示選擇通道1(CH2)ADC_DI=0;ADC_DO=1;//DI轉(zhuǎn)為高阻態(tài),DO脫離高阻態(tài)為輸出數(shù)據(jù)作準(zhǔn)備ADC_CLK=1;Delay(2);ADC_CLK=0;Delay(2);//經(jīng)實(shí)驗(yàn),這里加一個(gè)脈沖AD便能正確讀出數(shù)據(jù)//不加的話讀出的數(shù)據(jù)少一位(最低位d0讀不出)任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施for(i=0;i<8;i++){ADC_CLK=1;Delay(2);ADC_CLK=0;Delay(2);data_c=(data_c<<1)|ADC_DO;//在每個(gè)脈沖的下降沿DO輸出一位數(shù)據(jù),最終ch為8位二進(jìn)制數(shù)}ADC_CS=1;//取消片選,一個(gè)轉(zhuǎn)換周期結(jié)束return(data_c);//把轉(zhuǎn)換結(jié)果返回}任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施顯示光照亮度子函數(shù)如下:voiddisplay_gm(){//disp[0]=smgduan[data_temp/1000];//千位 disp[1]=smgduan[data_temp%1000/100];//百位 disp[2]=smgduan[data_temp%1000%100/10];//十位 disp[3]=smgduan[data_temp%1000%100%10];//個(gè)位
c=0;b=0;a=0; P0=disp[1]; Delay(100);
c=0;b=0;a=1; P0=disp[2]; Delay(100);
c=0;b=1;a=0; P0=disp[3]; Delay(100);}任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施由光照度控制led燈的亮度的子函數(shù)如下:voidgm_control_led(){//亮度低開(kāi)三個(gè)燈if(count_renshu>0){if(data_temp<lightL){led1=0; led2=0; led3=0;}//亮度稍高開(kāi)2個(gè)燈elseif(data_temp<lightL+50){
led1=0; led2=0; led3=1;
}任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施//很亮,開(kāi)1個(gè)燈elseif(data_temp<lightH){led1=0; led2=1; led3=1;}//太亮了,不開(kāi)燈else{led1=1; led2=1; led3=1;}}else{//沒(méi)人關(guān)燈 led1=1; led2=1; led3=1;}}任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施3.仿真調(diào)試任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施能力拓展1.程序完善
將3.3.2節(jié)的任務(wù)利用仿真電路實(shí)現(xiàn)根據(jù)光照度控制LED燈的亮度,并對(duì)其進(jìn)行修改,在開(kāi)發(fā)板上實(shí)現(xiàn)根據(jù)光照度開(kāi)關(guān)燈的效果。
開(kāi)發(fā)板光敏傳感器采集光照度,進(jìn)行A/D轉(zhuǎn)換的芯片和代碼與仿真電路中的代碼有所區(qū)別。
開(kāi)發(fā)板上光敏電阻連接在A/D轉(zhuǎn)換芯片的AIN2端,采集光照度函數(shù)為Read_AD_Data(0xA4),讀者能理解并會(huì)直接調(diào)用即可。temp=Read_AD_Data(0xA4),temp的值就是光照度的值,這是一個(gè)四位數(shù),通過(guò)運(yùn)算得到千位數(shù)、百位數(shù)、十位數(shù)和個(gè)位數(shù),將其存入disp[]數(shù)組中。light1_value為點(diǎn)亮LED燈的光照度值,light2_value為熄滅LED燈的光照度值。參考3.1.4節(jié)中數(shù)據(jù)處理函數(shù)。任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施2.開(kāi)發(fā)板驗(yàn)證開(kāi)發(fā)板接線說(shuō)明開(kāi)發(fā)板的接線說(shuō)明:(1)單片機(jī)和AD/DAC模塊的連接P34-->DIP35-->CSP36-->CLP37-->DO(2)單片機(jī)和動(dòng)態(tài)數(shù)碼管模塊的連接J22-->J6P22-->J9(A)P23-->J9(B)P24-->J9(C) 任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施3.硬件電路完善設(shè)計(jì)在3.3.3.3節(jié)的基礎(chǔ)上,增加人數(shù)判斷功能,當(dāng)車間里有人時(shí),根據(jù)光照度
調(diào)節(jié)照明燈亮度,直接在開(kāi)發(fā)板上連接導(dǎo)線并調(diào)試。圖3-42所示為照明燈智能控制電路圖。將P3.2端連接按鍵K1,P3.3端連接按鍵K2,P2.5~P2.7端分別連接LED1~LED3,P1連接J8靜態(tài)數(shù)碼管顯示車間里的人數(shù),動(dòng)態(tài)數(shù)碼管顯示光照度值。與開(kāi)發(fā)板對(duì)應(yīng)的電路圖如圖3-42(a)所示,開(kāi)發(fā)板連線圖如圖3-42(b)所示。
任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施
同樣定義三個(gè)光照度值,即light1_value、light2_value和light3_value。當(dāng)光照度值低于light1_value且count!=0,車間里有人時(shí),點(diǎn)亮三個(gè)LED燈;當(dāng)光照度值高于light3_value或車間里沒(méi)人,即count=0時(shí),熄滅所有LED燈。light1_value和light3_value的值根據(jù)實(shí)際環(huán)境和需求進(jìn)行調(diào)整。根據(jù)光照度的不同,點(diǎn)亮不同數(shù)量的LED燈,即調(diào)節(jié)照明亮度。當(dāng)光照度值低于light3_value時(shí),點(diǎn)亮一個(gè)LED燈;當(dāng)光照度值低于light2_value時(shí),點(diǎn)亮兩個(gè)LED燈;當(dāng)光照度值低于light1_value時(shí),點(diǎn)亮三個(gè)LED燈;當(dāng)光照度值高于light3_value
時(shí),熄滅所有LED燈。
任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施//設(shè)定光照度值,light1_value~light3_value
//當(dāng)光照度值低于light3_value時(shí),點(diǎn)亮一個(gè)LED燈
//當(dāng)光照度值低于light2_value時(shí),點(diǎn)亮兩個(gè)LED燈
//當(dāng)光照度值低于light1_value時(shí),點(diǎn)亮三個(gè)LED燈
//當(dāng)光照度值高于light3_value時(shí),熄滅所有LED燈
#definelight1_value10
#definelight2_value30
#definelight3_value50
//定義LED燈為P2.5~P2.7
sbitled1=P2^5;
sbitled2=P2^6;
sbitled3=P2^7;
sbitLSA=P2^2;
sbitLSB=P2^3;
sbitLSC=P2^4;
sbitdc1=P3^1;
intcount=0;//count表示在教室里的人數(shù)
intn1=0;n2=0;//統(tǒng)計(jì)中斷次數(shù)
任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施修改下面這個(gè)子函數(shù)。
/**************************************************
*函數(shù)名:datapros()
*函數(shù)功能:數(shù)據(jù)處理函數(shù)
*輸入:無(wú)
*輸出:無(wú)
**************************************************/
voiddataprosAD()
{
u16temp;
staticu8i;
if(i==50)
{i=0;
temp=Read_AD_Data(0xA4);//AIN2光敏電阻
}
i++;任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施
DisplayData[0]=smgduan[temp/1000];//千位
DisplayData[1]=smgduan[temp%1000/100];//百位
DisplayData[2]=smgduan[temp%1000%100/10];//十位
DisplayData[3]=smgduan[temp%1000%100%10];//個(gè)位
//添加控制LED燈的代碼
//當(dāng)光照度值低于light1_value時(shí),點(diǎn)亮LED燈
if(count>0){//有人
if(temp<=light1_value){//開(kāi)三個(gè)燈
led1=0;led2=0;led3=0;
}
if(temp>light1_value&&temp<=light2_value){//開(kāi)兩個(gè)燈
led1=1;led2=0;led3=0;
}
if(temp>light2_value&&temp<=light3_value){//開(kāi)一個(gè)燈
led1=1;led2=1;led3=0;
}
任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施
//當(dāng)光照度值高于light2_value時(shí),熄滅所有LED燈
if(temp>light3_value){
led1=1;led2=1;led3=1;
}
}
else{//沒(méi)人
led1=1;led2=1;led3=1;
}
}
任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施
count的值表示車間里的人數(shù),由兩個(gè)人體紅外傳感器來(lái)判斷。結(jié)合3.3.3.1節(jié)中的代碼,得到實(shí)現(xiàn)本任務(wù)拓展功能的代碼。
在主函數(shù)的while循環(huán)中,添加顯示車間里人數(shù)的子函數(shù)P1=~smgduan[count],用于調(diào)試。
voidmain()
{while(1)
{
datapros();//光照數(shù)據(jù)處理函數(shù)
DigDisplay();//數(shù)碼管顯示光照度函數(shù)
P1=~smgduan[count];//顯示車間里的人數(shù),調(diào)試用
}
}
任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施外部中斷0連接安裝在門外的人體紅外傳感器1,外部中斷1連接安裝在門內(nèi)的人體紅外傳感器2。當(dāng)有人從門外進(jìn)入門內(nèi)時(shí),人數(shù)加1;當(dāng)有人從門內(nèi)走出門外時(shí),人數(shù)減1。從門外經(jīng)過(guò),n1加1,n1表示外部中斷0被觸發(fā)的次數(shù),即經(jīng)過(guò)門外的人體紅外傳感器1的人數(shù),n2表示外部中斷1被觸發(fā)的次數(shù),即經(jīng)過(guò)門內(nèi)的人體紅外傳感器2的人數(shù),如果不停地有人進(jìn)入,則n1<n2。若有人出來(lái),則先經(jīng)過(guò)外部中斷1,即n2先加1,再經(jīng)過(guò)外部中斷0,判斷n1<n2,表示有人從車間里出來(lái)。兩個(gè)外部中斷代碼如下。
voidmyint0()interrupt0{
if(n1<n2){//表示有人從車間里出來(lái)
count--;
if(count<0){
count=0;
}
}
n1++;
}
任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施//外部中斷1連接門內(nèi)的人體紅外傳感器2
voidmyint1()interrupt2{
n2++;
if(n1==n2){//表示有人進(jìn)入
count++;//車間里最多有100人
if(count>100){
count=100;//可采取措施不讓人進(jìn)入
n2=0;
n1=0;
}
}
}
任務(wù)3.3智慧工廠照明系統(tǒng)智能控制任務(wù)實(shí)施開(kāi)放板運(yùn)行效果任務(wù)3.3智慧工廠照明系統(tǒng)智能控制項(xiàng)目三智慧工廠環(huán)境智能監(jiān)控
馮蓉珍
《微處理器程序設(shè)計(jì)》任務(wù)3.4
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 行政工作總結(jié)匯報(bào)
- 被綁架安全公開(kāi)課
- 山東省威海市2024-2025學(xué)年高二上學(xué)期期末考試地理試題 含解析
- 新能源技術(shù)發(fā)展現(xiàn)狀及趨勢(shì)預(yù)測(cè)分析表
- 《數(shù)學(xué)公式記憶與理解:初中數(shù)學(xué)公式教學(xué)計(jì)劃》
- 信息網(wǎng)絡(luò)安全領(lǐng)域技術(shù)防護(hù)策略制定
- 快速上手操作指南與簡(jiǎn)明教程集萃
- 市場(chǎng)調(diào)研員-市場(chǎng)研究機(jī)構(gòu)簡(jiǎn)歷
- 智能能源投資合同
- 營(yíng)銷培訓(xùn)課筆記
- 刑事強(qiáng)制措施制度課件
- 西方失語(yǔ)癥評(píng)定量表
- 女性兩癌篩查知識(shí)和預(yù)防措施課件
- 《礦山機(jī)械設(shè)備》講稿
- 公司物資到貨驗(yàn)收管理辦法(暫行)
- 三八婦女節(jié)活動(dòng)策劃PPT模板
- a04-hci深信服超融合配置指南_v1
- 醫(yī)藥代表培訓(xùn)教程(完整版)
- 雙重預(yù)防體系建設(shè)分析記錄表格
- 電子技術(shù)基礎(chǔ)(數(shù)字部分_第五版_康華光)華中科大課件第四章第4節(jié)
- 電力系統(tǒng)遠(yuǎn)動(dòng)原理
評(píng)論
0/150
提交評(píng)論