《單片機控制技術》課件-任務3_第1頁
《單片機控制技術》課件-任務3_第2頁
《單片機控制技術》課件-任務3_第3頁
《單片機控制技術》課件-任務3_第4頁
《單片機控制技術》課件-任務3_第5頁
已閱讀5頁,還剩88頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

//包含內部函數庫,提供移位和延時操作函數

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

三、舉一反三PARTTHREE03調用循環左移函數_crol_()實現左移流水燈。將P1端口在: 11111110、 11111101、 11111011、 11110111、 11101111、 11011111、 10111111、 01111111這8種狀態之間順序轉換,就可以實現左移流水燈。0xFE左舉一反三1

P1=_crol_(P1,1);程序設計思路使用移位運算符和循環程序結構編程,實現流水燈。

左移位運算符:<<

若a:執行:a<<1;//左移一位11111110111111001高位移出低位補0右移位運算符:<<

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

{//開始循環程序段

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

{P1=~a;//將a的值取反后經8位P1引腳輸出,~為按位取反運算符

delay(5000);//延時

a>>=1;//將a的二進制數值右移一位

}//結束循環

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

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

持高電平,當K按下時,P0.0引腳接地,因此通過讀取P0.0引腳的狀態,就可以得知按鍵K是否被按下。硬件電路有彈性的按鍵PARTTWO02什么是按鍵開關呢?按鈕開關常用按鍵符號機械式按鍵開關有一個最大的特點,那就是它是有彈性的。消除抖動方法增加硬件電路軟件延時程序設計PARTTHREE03voidmain() //主函數{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個燈全部點亮}}選擇語句if(表達式){

語句組1;}else{

語句組2;}voidmain() //主函數{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個燈全部點亮}}軟件去抖流程舉一反三PARTFOUR04

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

當K1按下時:8個LED全亮

當K2按下時:高4位連接的LED點亮

當K3按下時:低4位連接的LED點亮

當K4按下時:8個LED交叉亮滅用4個按鍵K1,K2,K3,K4控制花樣霓虹燈的具體要求:舉一反三1輸入:按鍵按下,I/O引腳為0按鍵彈起,I/O引腳為1硬件設計IfelseifSwitch語句switch語句按鍵與開關的區別軟件設計思路#include<reg51.h>//包含頭文件reg51.h,定義了51單片機專用寄存器#defineTIME1200//定義符號常量TIME,代表常數1200,關于符號常量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(表達式1){

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

語句組2; }

……elseif(表達式n){

語句組n; }else{

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

當K第一次按下,顯示第一種模式;

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

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

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

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

if(K==0) //第一次判斷有鍵按下{delay(1200);//延時消除抖動if(K==0)//再次判斷有鍵按下{if(++i==5)i=1;//i增1,且增加到5后,再重新賦值1}}判斷按鍵并累加次數根據次數進行跳轉switch(i)//根據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);//延時消除抖動主講教師任務3-3聲光報警器設計單片機控制技術(C語言版)任務導入01程序設計02舉一反三03一、任務導入PARTONE01任務要求通過單片機控制蜂鳴器發出聲音、發光二極管發光,向人們發出警示信號。采用一個彈性按鍵K模擬報警開關,K按下時啟動報警,K放開時解除報警;一個綠色發光二極管D1和一個紅色發光二極管D2模擬光報警,綠色D1亮,表示正常狀態,紅色D2閃爍表示報警;采用蜂鳴器模擬聲音報警,當報警啟動時,蜂鳴器鬧響。P0.0引腳通過上拉電阻與+5V電源連接,當K沒有按下時,P0.0引腳保持高電平,當K按下時,P0.0引腳接地,因此通過讀取P0.0引腳的狀態,就可以得知按鍵K是否被按下,啟動報警信號。P1.0引腳控制蜂鳴器進行聲音報警,P1.1引腳控制綠色發光二極管模擬的報警燈,P1.2引腳控制綠色發光二極管模擬的報警燈。硬件電路二、程序設計PARTTWO02#include<reg51.h>//包含頭文件reg51.h,定義了51單片機專用寄存器

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

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

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

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

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

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

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

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

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

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

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

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

flag=1;//設置桶蓋打開標志}elseif(hw==0&&flag==1){P1_3=0;//電機反向運轉,關閉桶蓋P1_4=1;P1_5=1;delay(20000);//延時,等待桶蓋關閉完成P1_4=0;//電機停轉,保持桶蓋關閉狀態

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

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

i

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

light_up=P0^0;//亮度加強按鍵連接P0.0引腳sbit

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

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

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

i

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

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

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

{j--;i++;//調整延時參數

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

i=0;}

}}

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

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

{

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

i=500;j=0;}}}

四、舉一反三PARTFOUR04使用一個彈性按鍵來切換風扇的轉動方向;使用另一個彈性按鍵來調整風扇的轉速,風扇的轉速分為三檔,根據風速按鍵被按下的次數來循環選擇風速檔位。設計一個直流電機風扇控制系統,風扇的轉動使用直流電機來驅動,通過單片機輸出不同方向的電平來改變風扇的轉動方向;風扇的轉速可通過單片機提供的PWM電壓來控制。

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

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

自定義控制風扇轉向及轉速的函數pwm()voidpwm(bita,bitb,unsignedintd1,unsignedintd2){DJB=a;DJA=b;//a和b控制電機轉向

delay(d1);//延時,調整電機轉動時長DJA=0;DJB=0;//電機停轉

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

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

語句組2; }

……elseif(表達式n){

語句組n; }else{

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

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

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

flag=~flag;//改變轉向標志位,反轉

}}if(表達式1){

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

語句組2; }

……elseif(表達式n){

語句組n; }else{

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

if(S2==0)//第一次檢測到風速開關S2按下

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

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

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

if(number<=3)//判斷風速檔位是否強風檔

number++;//沒到強風檔位則風速加速

elsenumber=0x01;//已經是強風檔位則風速回到弱風檔位

}}根據風速變量值和風向標志調用pwm函數驅動風扇轉動

if(!flag) //正轉

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

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

case0x03:pwm(0,1,1680,720);break;//風速3檔,強風

default:;}}else //反轉

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

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

case0x03:pwm(1,0,1680,720);break;//風速3檔,強風

default:;}}通過4個按鍵控制風扇正轉、反轉、加速、減速。

當S1按下,反轉;

當S2按下,正轉;

當S3按下,加速;

當S4按下,減速。設計一個步進電機風扇控制系統,具體要求:舉一反三2步進電機:將電脈沖轉化為角位移或直線位移

通過控制脈沖個數來控制角位移量,達到準確定位。通過控制脈沖頻率來控制電機轉動的速度和加速度,達到調速。

四相反應式步進電機內部有4組線圈

單雙八拍方式工作的通電順序為:A—AB—B—BC—C—CD—D—DA—A,如果要讓步進電機反轉,只需按相反方向順序通電。

步進電機驅動芯片仍然采用L298

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

,控制脈沖頻率

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

reverse(); if(S2==0)//正轉

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

溫馨提示

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

評論

0/150

提交評論