《單片機(jī)控制技術(shù)》課件-任務(wù)3_第1頁
《單片機(jī)控制技術(shù)》課件-任務(wù)3_第2頁
《單片機(jī)控制技術(shù)》課件-任務(wù)3_第3頁
《單片機(jī)控制技術(shù)》課件-任務(wù)3_第4頁
《單片機(jī)控制技術(shù)》課件-任務(wù)3_第5頁
已閱讀5頁,還剩88頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

主講教師任務(wù)3-1流水燈設(shè)計單片機(jī)控制技術(shù)(C語言版)任務(wù)導(dǎo)入01程序設(shè)計02舉一反三03一、任務(wù)導(dǎo)入PARTONE01任務(wù)要求使用單片機(jī)控制8個發(fā)光二極管按順序點(diǎn)亮。將8個發(fā)光二極管連接到51單片機(jī)的P1口,用C語言編程來控制單片機(jī)的并行I/O端口,顯示流水燈效果。向P1口寫入一個8位二進(jìn)制數(shù)來改變每個引腳的輸出電平狀態(tài),從而控制8個發(fā)光二極管的亮滅。硬件電路二、程序設(shè)計PARTTWO02將P1端口在: 011111111、 10111111、 11011111、 11101111、 11110111、 11111011、 11111101、 11111110這8種狀態(tài)之間順序轉(zhuǎn)換,就可以實(shí)現(xiàn)流水燈效果。#include<reg51.h>//包含頭文件reg51.h,定義了51單片機(jī)的專用寄存器#include<intrins.h>

//包含內(nèi)部函數(shù)庫,提供移位和延時操作函數(shù)

voidmain()//主函數(shù){P1=0x7F;//P1端口輸出0x7Fwhile(1)//無限循環(huán){//循環(huán)體語句組開始P1=_cror_(P1,1);//調(diào)用內(nèi)部函數(shù)_cror_(),將P1的二進(jìn)制數(shù)值循環(huán)右移delay(5000);//延時}//循環(huán)體語句組結(jié)束}//結(jié)束控制程序程序中調(diào)用內(nèi)部函數(shù)_cror_()可以對P1端口的狀態(tài)循環(huán)右移KeilC51提供的_cror_()是循環(huán)右移函數(shù),就是把低位移出去的部分補(bǔ)到高位去,移位過程如圖所示。如果P1端口的狀態(tài)為“01111111”,那么執(zhí)行語句“P1=_cror_(P1,1);”后,P1端口的狀態(tài)為“10111111”,向右移了一位,并將被移出的最低位1補(bǔ)到最高位上。循環(huán)右移函數(shù)_cror_()需要兩個參數(shù),第1個參數(shù)存放被移位的數(shù)據(jù),第2個參數(shù)是常數(shù),用來說明移位次數(shù)。循環(huán)右移函數(shù)是在頭文件intrins.h中定義的,因此源程序中要使用預(yù)處理語句“#include<intrins.h>”。

三、舉一反三PARTTHREE03調(diào)用循環(huán)左移函數(shù)_crol_()實(shí)現(xiàn)左移流水燈。將P1端口在: 11111110、 11111101、 11111011、 11110111、 11101111、 11011111、 10111111、 01111111這8種狀態(tài)之間順序轉(zhuǎn)換,就可以實(shí)現(xiàn)左移流水燈。0xFE左舉一反三1

P1=_crol_(P1,1);程序設(shè)計思路使用移位運(yùn)算符和循環(huán)程序結(jié)構(gòu)編程,實(shí)現(xiàn)流水燈。

左移位運(yùn)算符:<<

若a:執(zhí)行:a<<1;//左移一位11111110111111001高位移出低位補(bǔ)0右移位運(yùn)算符:<<

若b:執(zhí)行:b>>1;//右移一位01111111001111111高位補(bǔ)0低位移出舉一反三2a=0x80;a>>=1;P1=~a;//設(shè)初值,a:10000000//右移一位運(yùn)算,a:01000000//a取反后,賦值10111111到P1程序設(shè)計思路voidmain()//主函數(shù){unsignedchara,i;//定義字符變量aa,iwhile(1)

{//開始循環(huán)程序段

a=0x80;//給變量a賦值0x80,即10000000for(i=0;i<8;i++)//用for循環(huán)控制逐位移動8次

{P1=~a;//將a的值取反后經(jīng)8位P1引腳輸出,~為按位取反運(yùn)算符

delay(5000);//延時

a>>=1;//將a的二進(jìn)制數(shù)值右移一位

}//結(jié)束循環(huán)

}}主講教師單片機(jī)控制技術(shù)(C語言版)任務(wù)3-2按鍵控制多種花樣霓虹燈設(shè)計任務(wù)導(dǎo)入01有彈性的按鍵02程序設(shè)計03舉一反三04任務(wù)導(dǎo)入PARTONE01

任務(wù)要求通過按鍵控制發(fā)光二極管顯示不同的內(nèi)容。采用8個發(fā)光二極管模擬霓虹燈的顯示,一個按鍵K控制8個發(fā)光二極管實(shí)現(xiàn)不同顯示方式。當(dāng)K沒有按下時,8個LED全亮,當(dāng)K按下時8個LED顯示流水燈效果。P0.0引腳通過上拉電阻1K?與+5V電源連接,當(dāng)K沒有按下時,P0.0引腳保

持高電平,當(dāng)K按下時,P0.0引腳接地,因此通過讀取P0.0引腳的狀態(tài),就可以得知按鍵K是否被按下。硬件電路有彈性的按鍵PARTTWO02什么是按鍵開關(guān)呢?按鈕開關(guān)常用按鍵符號機(jī)械式按鍵開關(guān)有一個最大的特點(diǎn),那就是它是有彈性的。消除抖動方法增加硬件電路軟件延時程序設(shè)計PARTTHREE03voidmain() //主函數(shù){unsignedchari,w;P1=0xff;//LED全滅while(1){if(K==0)//第一次檢測到按鍵K按下{delay(1200);//延時10ms左右去抖動if(K==0)//再次檢測到按鍵K按下{w=0x01;//流水燈顯示字初值為0x01 for(i=0;i<8;i++){ P1=~w; //顯示字取反后,送P1口 delay(10000); //延時,一個燈顯示時間 w<<=1; //顯示字左移一位 }}}elseP1=0x00;//沒有按鍵按下,8個燈全部點(diǎn)亮}}選擇語句if(表達(dá)式){

語句組1;}else{

語句組2;}voidmain() //主函數(shù){unsignedchari,w;P1=0xff;//LED全滅while(1){if(K==0)//第一次檢測到按鍵K按下{delay(1200);//延時10ms左右去抖動if(K==0)//再次檢測到按鍵K按下{w=0x01;//流水燈顯示字初值為0x01 for(i=0;i<8;i++){ P1=~w; //顯示字取反后,送P1口 delay(10000); //延時,一個燈顯示時間 w<<=1; //顯示字左移一位 }}}elseP1=0x00;//沒有按鍵按下,8個燈全部點(diǎn)亮}}軟件去抖流程舉一反三PARTFOUR04

沒有按鍵按下時:8個LED全滅

當(dāng)K1按下時:8個LED全亮

當(dāng)K2按下時:高4位連接的LED點(diǎn)亮

當(dāng)K3按下時:低4位連接的LED點(diǎn)亮

當(dāng)K4按下時:8個LED交叉亮滅用4個按鍵K1,K2,K3,K4控制花樣霓虹燈的具體要求:舉一反三1輸入:按鍵按下,I/O引腳為0按鍵彈起,I/O引腳為1硬件設(shè)計IfelseifSwitch語句switch語句按鍵與開關(guān)的區(qū)別軟件設(shè)計思路#include<reg51.h>//包含頭文件reg51.h,定義了51單片機(jī)專用寄存器#defineTIME1200//定義符號常量TIME,代表常數(shù)1200,關(guān)于符號常量sbitK1=P0^0;//定義位名稱sbitK2=P0^1;sbitK3=P0^2;sbitK4=P0^3;if(K1==0)//第一次檢測到K1按下{delay(TIME);//延時去抖動

if(K1==0)P1=0x00;//再次檢測到K1按下,第一種模式,8個燈全亮}elseif(K2==0)//第一次檢測到K2按下{delay(TIME);//延時去抖動

if(K2==0)P1=0x55;//再次檢測到K2按下,第二種模式,8個燈交叉亮}

elseif(K3==0)//第一次檢測到K3按下{delay(TIME);//延時去抖動

if(K3==0)P1=0x0f;//再次檢測到K3按下,第三種模式,高四位亮}elseif(K4==0)//第一次檢測到K4按下{delay(TIME);//延時去抖動

if(K4==0)P1=0xf0;//再次檢測到K4按下,第四種模式,低四位亮

}

if(表達(dá)式1){

語句組1; }elseif(表達(dá)式2){

語句組2; }

……elseif(表達(dá)式n){

語句組n; }else{

語句組n+1; }采用8個發(fā)光二極管模擬霓虹燈的顯示,通過1個按鍵控制霓虹燈在四種顯示模式之間切換,由P0口的P0.0引腳控制按鍵K。

當(dāng)K第一次按下,顯示第一種模式;

第二次按下,顯示第二種模式;

第三次按下,顯示第三種模式;

第四次按下,顯示第四種模式,

第五次按下,又顯示第一種模式。舉一反三2判斷按鍵并累加次數(shù)根據(jù)次數(shù)進(jìn)行跳轉(zhuǎn)判斷按鍵是否彈起程序設(shè)計思路

if(K==0) //第一次判斷有鍵按下{delay(1200);//延時消除抖動if(K==0)//再次判斷有鍵按下{if(++i==5)i=1;//i增1,且增加到5后,再重新賦值1}}判斷按鍵并累加次數(shù)根據(jù)次數(shù)進(jìn)行跳轉(zhuǎn)switch(i)//根據(jù)i的值顯示不同模式{case1:P1=0x00;break;//i=1顯示第1種模式

case2:P1=0x55;break;//i=2顯示第2種模式case3:P1=0x0f;break;//i=3顯示第3種模式case4:P1=0xf0;break;//i=4顯示第4種模式

default:break;}判斷按鍵是否彈起while(!K);//等待K鍵釋放,!為邏輯非操作delay(1200);//延時消除抖動主講教師任務(wù)3-3聲光報警器設(shè)計單片機(jī)控制技術(shù)(C語言版)任務(wù)導(dǎo)入01程序設(shè)計02舉一反三03一、任務(wù)導(dǎo)入PARTONE01任務(wù)要求通過單片機(jī)控制蜂鳴器發(fā)出聲音、發(fā)光二極管發(fā)光,向人們發(fā)出警示信號。采用一個彈性按鍵K模擬報警開關(guān),K按下時啟動報警,K放開時解除報警;一個綠色發(fā)光二極管D1和一個紅色發(fā)光二極管D2模擬光報警,綠色D1亮,表示正常狀態(tài),紅色D2閃爍表示報警;采用蜂鳴器模擬聲音報警,當(dāng)報警啟動時,蜂鳴器鬧響。P0.0引腳通過上拉電阻與+5V電源連接,當(dāng)K沒有按下時,P0.0引腳保持高電平,當(dāng)K按下時,P0.0引腳接地,因此通過讀取P0.0引腳的狀態(tài),就可以得知按鍵K是否被按下,啟動報警信號。P1.0引腳控制蜂鳴器進(jìn)行聲音報警,P1.1引腳控制綠色發(fā)光二極管模擬的報警燈,P1.2引腳控制綠色發(fā)光二極管模擬的報警燈。硬件電路二、程序設(shè)計PARTTWO02#include<reg51.h>//包含頭文件reg51.h,定義了51單片機(jī)專用寄存器

sbitK=P0^0;//按鍵控制端

sbitbeep=P1^0;//蜂鳴器控制端,采用無源蜂鳴器

sbitgreen=P1^1;//綠色發(fā)光二極管控制端

sbitred=P1^2;//紅色發(fā)光二極管控制端;voidmain(){green=0;//點(diǎn)亮綠燈,熄滅紅燈,正常工作狀態(tài),無報警,無聲音

red=1;while(1){if(K==0)//判斷按鍵是否按下{delay(200);//延時去抖動if(K==0)//再次判斷是否有鍵按下{green=1;//啟動報警,綠燈熄滅

red=0;//紅燈閃爍beep=0;//啟動發(fā)聲delay(100);//調(diào)用延時函數(shù)red=1;beep=1;}}else{green=0;red=1;}//報警解除}}三、舉一反三PARTTHREE03采用熱釋電紅外傳感器模塊取代按鍵K啟動/解除警報,設(shè)計人體感應(yīng)聲光報警器。當(dāng)有人體接近被安全保護(hù)的物體目標(biāo)時,啟動報警;當(dāng)人體離開后,解除關(guān)閉報警。舉一反三1什么是熱釋電紅外傳感器呢?是一種能夠感應(yīng)到人體接近并給出電信號的器件。熱釋電紅外傳感器模塊感應(yīng)運(yùn)動中的人體,有三個引腳,其中標(biāo)有“+”端是正電源;標(biāo)有“-”端是地;標(biāo)有“OUT”端是輸出引腳。當(dāng)有人靠近時,輸出UOUT=3V;當(dāng)無人靠近時輸出UOUT=0V。電源工作電壓為DC4.5~20V;感應(yīng)角度為110度;靜態(tài)電流小于40μA;感應(yīng)距離為1~5米。當(dāng)有人靠近時,輸出UOUT=3V,在P0.0上讀到高電平1。當(dāng)無人靠近時,輸出UOUT=0V,在P0.0上讀到低電平0

。硬件設(shè)計voidmain(){green=0;//點(diǎn)亮綠燈,熄滅紅燈,正常工作狀態(tài),無報警,無聲音

red=1;while(1){if(K==1)//檢測到有人靠近{ green=1;//啟動報警,綠燈熄滅

red=0;//紅燈閃爍beep=0;//啟動發(fā)聲delay(100);//調(diào)用延時函數(shù)red=1;beep=1;}else{green=0;red=1;}//報警解除}}用熱釋電紅外傳感器來測試人體接近目標(biāo)的方法,采用單片機(jī)來控制一個直流電機(jī)運(yùn)轉(zhuǎn),實(shí)現(xiàn)垃圾桶蓋的閉合控制。舉一反三2怎么使用直流電機(jī)呢?

直流電機(jī)只需接上直流電源即可轉(zhuǎn)動,連接在直流電機(jī)兩個引腳上的直流電源極性決定了電機(jī)的轉(zhuǎn)動方向。用單片機(jī)I/O端口驅(qū)動直流電機(jī)時,只要直接在對應(yīng)的控制I/O端口輸出高低電平,電機(jī)就能正轉(zhuǎn)和反轉(zhuǎn)。但單片機(jī)的I/O端口能提供的輸出電流只有幾毫安,驅(qū)動能力有限,而直流電機(jī)的額定工作電流至少需要幾百毫安,所以必須外加驅(qū)動電路,提供足以保證直流電機(jī)旋轉(zhuǎn)的電流。引腳名稱引腳說明連接方法4Vs動力電源,2.5~4.6V+12V,接電容濾波9Vss邏輯電源,4.5~7V+5V,接電容濾波8GND地地5,7IN1,IN2A橋輸入引腳,TTL兼容連接單片機(jī)I/O2,3OUT1,OUT2A橋輸出引腳直接連接電機(jī)6ENAA橋使能端,高電平有效連接單片機(jī)I/O10,12IN3,IN4B橋輸入引腳,TTL兼容連接單片機(jī)I/O13,14OUT3,OUT4B橋輸出引腳直接連接電機(jī)11ENBB橋使能端,高電平有效連接單片機(jī)I/O1,15ISENA,ISENBA、B橋輸出電流反饋引腳地4通道邏輯驅(qū)動電路??沈?qū)動兩個直流電機(jī),或一個兩相步進(jìn)電機(jī)。

電機(jī)驅(qū)動芯片L298(1)人體感應(yīng)信號測試功能,測試P0.1引腳的電平狀態(tài)。(2)電機(jī)正轉(zhuǎn)功能:P1.5=1、P1.3=1、P1.4=0;若要電機(jī)停止,只需讓P1.3=0即可。(3)電機(jī)反轉(zhuǎn)功能:P1.5=1、P1.3=0、P1.4=1;若要電機(jī)停止,只需讓P1.4=0即可。硬件電路

#include"reg51.h"http://包含頭文件reg51.h,定義了51單片機(jī)的專用寄存器sbithw=P0^1;//紅外控制端sbitP1_3=P1^3;//電機(jī)驅(qū)動控制端sbitP1_4=P1^4;//電機(jī)驅(qū)動控制端sbitP1_5=P1^5;//電機(jī)驅(qū)動控制端voidmain(){bitflag=0;//桶蓋打開標(biāo)志位變量,為1表示桶蓋打開,否則表示桶蓋關(guān)閉while(1){if((hw==1)&&(flag==0)){P1_3=1;//電機(jī)運(yùn)轉(zhuǎn),控制打開桶蓋P1_4=0;P1_5=1;delay(20000);//延時,等待桶蓋打開完成P1_3=0;//電機(jī)停轉(zhuǎn),保持桶蓋打開狀態(tài)

flag=1;//設(shè)置桶蓋打開標(biāo)志}elseif(hw==0&&flag==1){P1_3=0;//電機(jī)反向運(yùn)轉(zhuǎn),關(guān)閉桶蓋P1_4=1;P1_5=1;delay(20000);//延時,等待桶蓋關(guān)閉完成P1_4=0;//電機(jī)停轉(zhuǎn),保持桶蓋關(guān)閉狀態(tài)

flag=0;//設(shè)置桶蓋關(guān)閉標(biāo)志}}}主講教師任務(wù)3-4基于PWM的可調(diào)光臺燈設(shè)計單片機(jī)控制技術(shù)(C語言版)任務(wù)導(dǎo)入01PWM技術(shù)02程序設(shè)計03舉一反三04一、任務(wù)導(dǎo)入PARTONE01任務(wù)要求使用單片機(jī)輸出可控制的PMW(Pulse-WidthModulation)信號控制調(diào)整臺燈的亮度。用兩個按鍵控制燈的亮度。系統(tǒng)上電時,燈在最暗狀態(tài),按住其中一個鍵,燈的亮度逐漸增強(qiáng),到最亮?xí)r,再回到最暗;按住另外一個鍵,燈的亮度逐漸減弱,到最暗時,再回到最亮。P0.0引腳連接一個彈性按鍵L_up控制臺燈的亮度加強(qiáng);P0.1引腳連接一個彈性按鍵L_down控制臺燈的亮度減弱;P1.0引腳連接一個發(fā)光二極管模擬臺燈的燈泡。硬件電路二、PWM技術(shù)PARTTWO02PWM技術(shù),是一種周期一定而高低電平可調(diào)的方波信號。當(dāng)輸出脈沖的頻率一定時,輸出脈沖的占空比越大,其高電平持續(xù)的時間越長。

高電平持續(xù)的時間與信號周期的比值,稱為占空比。只要改變和的值,也就改變波形的占空比,則高低電平持續(xù)的時間就改變了,達(dá)到PWM脈寬調(diào)制的目的。三、程序設(shè)計PARTTHREE03設(shè)置燈泡亮度(延時)參數(shù)及亮度初值根據(jù)延時參數(shù)控制燈泡的高低電平延時時間判斷有沒有亮度加強(qiáng)按鍵,并修改延時參數(shù)i+j=500

i

j判斷有沒有亮度減弱按鍵,并修改延時參數(shù)程序設(shè)計思路#include<reg51.h>//包含頭文件reg51.h,定義了51單片機(jī)的專用寄存器#defineOFF1//符號常量OFF,表示燈滅#defineON0//符號常量ON,表示燈亮sbitlight=P1^0;//臺燈燈泡連接P1.0引腳sbit

light_up=P0^0;//亮度加強(qiáng)按鍵連接P0.0引腳sbit

light_down=P0^1;//亮度減弱按鍵連接P0.1引腳inti,j;i=0; j=500;//i=0,j=500是燈最暗時的延時參數(shù)初值

設(shè)置延時參數(shù)變量i、jlight=ON;delay(i);//燈亮的延時時間light=OFF;delay(j);//燈滅的延時時間

根據(jù)延時參數(shù)變量i、j的值控制燈泡的亮度i+j=500

i

jif(light_up==0)//判斷亮度加強(qiáng)按鍵是否按下

{delay(100);//延時去抖動

if(light_up==0)//再次判斷按鍵是否按下

{j--;i++;//調(diào)整延時參數(shù)

if(j==0)//調(diào)到最亮,再返回最暗{j=500;

i=0;}

}}

if(light_down==0)//判斷亮度加強(qiáng)按鍵是否按下{delay(100);//延時去抖動

if(light_down==0)//再次判斷按鍵是否按下

{

j++;i--;//調(diào)整延時參數(shù)if(i==0)//調(diào)到最暗,再返最亮{

i=500;j=0;}}}

四、舉一反三PARTFOUR04使用一個彈性按鍵來切換風(fēng)扇的轉(zhuǎn)動方向;使用另一個彈性按鍵來調(diào)整風(fēng)扇的轉(zhuǎn)速,風(fēng)扇的轉(zhuǎn)速分為三檔,根據(jù)風(fēng)速按鍵被按下的次數(shù)來循環(huán)選擇風(fēng)速檔位。設(shè)計一個直流電機(jī)風(fēng)扇控制系統(tǒng),風(fēng)扇的轉(zhuǎn)動使用直流電機(jī)來驅(qū)動,通過單片機(jī)輸出不同方向的電平來改變風(fēng)扇的轉(zhuǎn)動方向;風(fēng)扇的轉(zhuǎn)速可通過單片機(jī)提供的PWM電壓來控制。

具體要求:舉一反三1S1S2硬件設(shè)計H橋直流電機(jī)驅(qū)動電路包括4個三極管和一個電機(jī)。要使電機(jī)運(yùn)轉(zhuǎn),必須導(dǎo)通對角線上的一對三極管。根據(jù)不同三極管對的導(dǎo)通情況,電流可能會從左至右或從右至左流過電機(jī),從而控制電機(jī)的轉(zhuǎn)向。

自定義函數(shù)電機(jī)H橋驅(qū)動程序設(shè)置風(fēng)速檔位變量及轉(zhuǎn)向標(biāo)志變量自定義控制風(fēng)扇轉(zhuǎn)向及轉(zhuǎn)速的函數(shù)pwm()判斷有沒有風(fēng)向按鍵,修改轉(zhuǎn)向標(biāo)志變量值判斷有沒有風(fēng)速按鍵,修改風(fēng)速檔位變量值根據(jù)風(fēng)速變量值和風(fēng)向標(biāo)志調(diào)用pwm函數(shù)驅(qū)動風(fēng)扇轉(zhuǎn)動程序設(shè)計思路#include<reg51.h>//包含頭文件reg51.h,定義了51單片機(jī)的專用寄存器sbitDJA=P1^0;//電機(jī)控制A端sbitDJB=P1^1;//電機(jī)控制B端sbitS1=P3^2;//轉(zhuǎn)向按鍵連接P3.2引腳sbitS2=P3^3;//風(fēng)速按鍵連接P3.3引腳bitflag; //轉(zhuǎn)向標(biāo)志位,flag=0表示正轉(zhuǎn),flag=1表示反轉(zhuǎn)unsignedcharnumber; //按下風(fēng)速按鍵的次數(shù)

自定義控制風(fēng)扇轉(zhuǎn)向及轉(zhuǎn)速的函數(shù)pwm()voidpwm(bita,bitb,unsignedintd1,unsignedintd2){DJB=a;DJA=b;//a和b控制電機(jī)轉(zhuǎn)向

delay(d1);//延時,調(diào)整電機(jī)轉(zhuǎn)動時長DJA=0;DJB=0;//電機(jī)停轉(zhuǎn)

delay(d2);//延時,調(diào)整電機(jī)停轉(zhuǎn)的時長}a與b是相反的位變量,控制電機(jī)轉(zhuǎn)動方向d1和d2控制pwm的高低電平占空比if(表達(dá)式1){

語句組1; }elseif(表達(dá)式2){

語句組2; }

……elseif(表達(dá)式n){

語句組n; }else{

語句組n+1; }判斷有沒有風(fēng)向按鍵,修改轉(zhuǎn)向標(biāo)志變量值if(S1==0)//第一次檢測到轉(zhuǎn)向開關(guān)S1按下{delay(1200);//延時10ms左右去抖動

if(S1==0)//再次檢測到S1按下

{while(!S1);//等待S1鍵釋放

flag=~flag;//改變轉(zhuǎn)向標(biāo)志位,反轉(zhuǎn)

}}if(表達(dá)式1){

語句組1; }elseif(表達(dá)式2){

語句組2; }

……elseif(表達(dá)式n){

語句組n; }else{

語句組n+1; }判斷有沒有風(fēng)速按鍵,修改風(fēng)速檔位變量值

if(S2==0)//第一次檢測到風(fēng)速開關(guān)S2按下

{delay(1200);//延時10ms左右去抖動

if(S2==0)//再次檢測到S2按下

{ while(!S2);//等待S2鍵釋放

if(number<=3)//判斷風(fēng)速檔位是否強(qiáng)風(fēng)檔

number++;//沒到強(qiáng)風(fēng)檔位則風(fēng)速加速

elsenumber=0x01;//已經(jīng)是強(qiáng)風(fēng)檔位則風(fēng)速回到弱風(fēng)檔位

}}根據(jù)風(fēng)速變量值和風(fēng)向標(biāo)志調(diào)用pwm函數(shù)驅(qū)動風(fēng)扇轉(zhuǎn)動

if(!flag) //正轉(zhuǎn)

{ switch(number){ case0x01:pwm(0,1,720,1680);break;//風(fēng)速1檔,弱風(fēng)

case0x02:pwm(0,1,1250,1250);break;//風(fēng)速2檔,舒適風(fēng)

case0x03:pwm(0,1,1680,720);break;//風(fēng)速3檔,強(qiáng)風(fēng)

default:;}}else //反轉(zhuǎn)

{ switch(number){ case0x01:pwm(1,0,720,1680);break;//風(fēng)速1檔,弱風(fēng)

case0x02:pwm(1,0,1250,1250);break;//風(fēng)速2檔,舒適風(fēng)

case0x03:pwm(1,0,1680,720);break;//風(fēng)速3檔,強(qiáng)風(fēng)

default:;}}通過4個按鍵控制風(fēng)扇正轉(zhuǎn)、反轉(zhuǎn)、加速、減速。

當(dāng)S1按下,反轉(zhuǎn);

當(dāng)S2按下,正轉(zhuǎn);

當(dāng)S3按下,加速;

當(dāng)S4按下,減速。設(shè)計一個步進(jìn)電機(jī)風(fēng)扇控制系統(tǒng),具體要求:舉一反三2步進(jìn)電機(jī):將電脈沖轉(zhuǎn)化為角位移或直線位移

通過控制脈沖個數(shù)來控制角位移量,達(dá)到準(zhǔn)確定位。通過控制脈沖頻率來控制電機(jī)轉(zhuǎn)動的速度和加速度,達(dá)到調(diào)速。

四相反應(yīng)式步進(jìn)電機(jī)內(nèi)部有4組線圈

單雙八拍方式工作的通電順序?yàn)椋篈—AB—B—BC—C—CD—D—DA—A,如果要讓步進(jìn)電機(jī)反轉(zhuǎn),只需按相反方向順序通電。

步進(jìn)電機(jī)驅(qū)動芯片仍然采用L298

S4S1S2S3硬件設(shè)計#include<reg51.h>//包含頭文件reg51.h,定義了51單片機(jī)的專用寄存器sbitS1=P0^0; //反轉(zhuǎn)按鍵sbitS2=P0^1; //正轉(zhuǎn)按鍵sbitS3=P0^2; //加速按鍵sbitS4=P0^3; //減速按鍵unsignedcharCOUNT;//延時時間變量COUNT

,控制脈沖頻率

voidmain(){COUNT=20;while(1){ if(S1==0)//反轉(zhuǎn)

reverse(); if(S2==0)//正轉(zhuǎn)

forward();}}主函數(shù)main正轉(zhuǎn)自定義函數(shù)voidforward(){do{P1=0x08;//Adelay(COUNT);P1=0x09;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論