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

下載本文檔

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

文檔簡介

主講教師任務(wù)5-1簡易秒表設(shè)計單片機(jī)控制技術(shù)(C語言版)任務(wù)導(dǎo)入0151單片機(jī)內(nèi)部定時器02程序設(shè)計03舉一反三04一、任務(wù)導(dǎo)入PARTONE01用單片機(jī)控制兩個LED數(shù)碼管,采用靜態(tài)連接方式,要求兩個數(shù)碼管顯示00~99計數(shù),時間間隔為1s。任務(wù)要求兩個共陽極數(shù)碼管的段碼分別由P1口和P2口控制,公共端接高電平

。系統(tǒng)采用12MHz晶振硬件電路二、51單片機(jī)內(nèi)部定時器PARTTWO02T0、T1:兩個16位的計數(shù)器TMOD:方式寄存器1.選擇4種工作方式2.選擇定時/計數(shù)3.決定啟動方式TCON: 控制寄存器1.啟動控制2.計滿溢出控制TMOD(89H)寄存器格式GATE(門控位)010TR1=1啟動定時器,不受INT1控制TR1=1,INT1=1共同啟動定時器? C/T(功能選擇)1定時器計數(shù)器? M1M0(工作方式)T1T076543210GATEC/TM1M0GATEC/TM1M0功能工作方式M1M013位計數(shù)器方式00016位計數(shù)器方式1018位計數(shù)器,初值自動重裝方式210分成兩個8位計數(shù)器,僅用于T0。T1停止使用方式311TCON(88H)寄存器格式和定時計數(shù)器無關(guān)分別控制T0、T1的啟動與溢出TR0=0//位操作指令,給TR0位清0中斷系統(tǒng)中才使用76543210TF1TR1TF0TR0T0啟動位TR0=1,啟動T0工作TR0=0,停止T0工作T1啟動位TR1=1,啟動T1工作TR1=0,停止T1工作TCON(88H)寄存器格式while(!TF0);TF0=0;//查詢TF0,這是查詢方式的應(yīng)用//如果計滿溢出,將TF0清076543210TF1TR1TF0TR01計數(shù)溢出,硬件自動置10中斷方式:硬件自動清0查詢方式:軟件清0三、程序設(shè)計PARTTHREE03定時時間與計數(shù)初值定時時間與計數(shù)溢出定時1秒溢出查詢、中斷定時器編程步驟:定時器初始化(設(shè)置工作方式)、初值計算和設(shè)置、啟動定時器計數(shù)、計數(shù)溢出處理軟件設(shè)計思路用單片機(jī)定時器T1的工作方式1編制1s延時程序,假定系統(tǒng)采用12MHz晶振,T1的工作方式1定時時間為50ms,再循環(huán)20次即可定時到1s。voidtimer_1()interrupt3//T1的中斷類型號為3{TH1=(65536-50000)/256;//重新設(shè)置T1計數(shù)初值高8位TL1=(65536-50000)%256;//重新設(shè)置T1計數(shù)初值低8位count++;//50ms計數(shù)器加1if(count==20)//1s時間到{count=0;//50ms計數(shù)器清0miao++;//秒計數(shù)器加1if(miao==100)miao=0;//miao計數(shù)到100,則從0開始計數(shù)}}溢出中斷處理中斷源n外部中斷00定時器01外部中斷12定時器13串行口4中斷服務(wù)程序以函數(shù)形式存在;中斷函數(shù)定義語法如下:

void函數(shù)名()interruptn#include"reg51.h"http://包含頭文件reg51.h,定義了51單片機(jī)的專用寄存器unsignedcharcount=0;//對50ms定時時間進(jìn)行計數(shù)unsignedcharmiao=0;//秒計數(shù)器voiddisp(unsignedchari){unsignedcharled[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//定義0~9顯示碼,共陽極數(shù)碼管P1=led[i/10];//顯示i高位P2=led[i%10];//顯示i低位

}voidmain() //主函數(shù){TMOD=0x10; //設(shè)置T1為工作方式1TH1=(65536-50000)/256;//設(shè)置T1計數(shù)初值高8位,定時時間50msTL1=(65536-50000)%256;//設(shè)置T1計數(shù)初值低8位ET1=1;//開放T1中斷允許EA=1;//開放總中斷允許

TR1=1;//啟動T1開始計數(shù)

while(1){disp(miao);//顯示秒計數(shù)器值

}}

中斷編程步驟:開放中斷源允許、開放總中斷允許、中斷函數(shù)編程四、舉一反三PARTFOUR04當(dāng)50ms定時時間到,計數(shù)器溢出,此時TCON中的溢出標(biāo)志TF0或TF1轉(zhuǎn)變?yōu)楦唠娖?。程序中可以通過查詢溢出標(biāo)志的狀態(tài)來判斷定時時間到。采用查詢方式編程,必須對溢出標(biāo)志位用程序語句清0,

即:TF0=0;TF1=0;采用查詢方式編寫秒表程序舉一反三1voiddelay1s(){unsignedchari;for(i=0;i<20;i++) //設(shè)置20次循環(huán)次數(shù)

{TH1=(65536-50000)/256;//重新設(shè)置T1計數(shù)初值高8位,定時時間50msTL1=(65536-50000)%256;//重新設(shè)置T1計數(shù)初值低8位

TR1=1; //啟動T1while(!TF1); //查詢計數(shù)是否溢出,即定時50ms時間到,TF1=1TF1=0; //50ms定時時間到,將T1溢出標(biāo)志位TF1清零

}}voidmain() //主函數(shù){unsignedcharmiao=0;//秒計數(shù)器定義

TMOD=0x10; //設(shè)置T1為工作方式1TH1=(65536-50000)/256;//設(shè)置T1計數(shù)初值高8位,定時時間50msTL1=(65536-50000)%256;//設(shè)置T1計數(shù)初值低8位

TR1=1;//啟動定時器開始計數(shù)

while(1){disp(miao);//顯示秒計數(shù)器值delay1s(); //調(diào)用1s函數(shù)miao++;//秒計數(shù)器加1if(miao==100)miao=0;

//秒計數(shù)計滿,則從0開始計數(shù)

}}畫出電路圖編寫控制程序

修改硬件電路,采用兩個共陰極數(shù)碼管動態(tài)連接方式,P1口為八段控制口,P2.0和P2.1分別控制高位和低位的位碼。要求:在顯示函數(shù)中將數(shù)碼管的字段碼修改為共陰極字段碼,并進(jìn)行動態(tài)掃描P2.0和P2.1端口編程選擇兩個數(shù)碼管顯示舉一反三2voiddisp(unsignedchari){unsignedcharj;unsignedcharled[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//定義0~9顯示碼,共陰極數(shù)碼管P2=0xff;//關(guān)閉數(shù)碼管顯示P1=led[i/10];//i的高位顯示碼送到段控制口P2=0xfe;//高位數(shù)碼管位選有效for(j=0;j<100;j++);//延時P2=0xff;//關(guān)閉數(shù)碼管顯示P1=led[i%10];//i的低位顯示碼送到段控制口P2=0xfd;//低位數(shù)碼管位選有效for(j=0;j<100;j++);//延時

}畫出電路圖編寫控制程序

修改硬件電路,采用6個數(shù)碼管動態(tài)連接方式,P1口為八段控制口,P2.0~P2.5分別控制6個數(shù)碼管的位碼。要求:將miao秒計數(shù)器的計數(shù)范圍設(shè)置到0~59;增加min分鐘計數(shù)器,計數(shù)范圍0~59,當(dāng)miao=59時min加1;增加hour小時計數(shù)器,計數(shù)范圍0~23,當(dāng)miao=59以及min=59時hour加1;并進(jìn)行動態(tài)掃描P2.0~P2.5端口編程選擇6個數(shù)碼管顯示舉一反三3unsignedcharmiao=0,min=0,hour=0;//秒、分鐘、小時計數(shù)器voidtimer_1()interrupt3//T1定時起中斷類型號為3{TH1=(65536-50000)/256;//重新設(shè)置T1計數(shù)初值高8位TL1=(65536-50000)%256;//重新設(shè)置T1計數(shù)初值低8位count++;//50ms計數(shù)器加1if(count==20)//1s時間到{count=0;//50ms計數(shù)器清0miao++;//秒計數(shù)器加1if(miao==60)

//miao計數(shù)到60,則從0開始計數(shù){miao=0;min++;//分計數(shù)器加1if(min==60)//min計數(shù)到60,則從0開始計數(shù)

{min=0;hour++;

//小時計數(shù)器加1if(hour==24)hour=0;//小時計數(shù)到24,則從0開始計數(shù)

}}}}unsignedsmgid[]={0,0,0,0,0,0};//數(shù)碼管顯示內(nèi)容函數(shù)voidsmgdisplay(){ smgid[0]=sec%10; smgid[1]=sec/10; smgid[2]=min%10; smgid[3]=min/10; smgid[4]=hour%10; smgid[5]=hour/10;} unsignedchari,w;while(1){smgdisplay();w=0xfe; //位選碼初值為0xfefor(i=0;i<6;i++){P1=0xff;//關(guān)顯示,共陽極數(shù)碼管0xff熄滅P2=w; //位選碼送位選端P2口

w=_crol_(w,1); //位選碼左移一位,選中下一位LEDP1=led[smgid[i]]; //顯示字型碼并送P1口

delay(100); //延時

}}顯示00~99計數(shù),時間間隔為1s當(dāng)K1按下時,暫停計數(shù),再次按下時,繼續(xù)計數(shù)。任何時候按下K2,則從0開始計數(shù)。修改兩位數(shù)碼管秒顯示硬件電路,在P3.2和P3.3引腳增加兩個彈性按鍵K1和K2,實現(xiàn)跑表。要求:采用外部中斷處理舉一反三4中斷源(5個)P3.2外部中斷請求0(低電平或下降沿有效)T0定時器T0內(nèi)部定時器T0計滿溢出后P3.3外部中斷請求1(低電平或下降沿有效)T1定時器T1內(nèi)部定時器T0計滿溢出后RX或TX串行口接收或發(fā)送完一幀串行數(shù)據(jù)后51單片機(jī)的中斷源中斷的有關(guān)寄存器中斷源n外部中斷00定時器01外部中斷12定時器13串行口4①在主函數(shù)main()中的EA=1;語句前增加外部中斷允許和打開外部中斷語句:EX0=1;//開放外部中斷0允許

IT0=1;//下降沿觸發(fā)中斷

EX1=1;//開放外部中斷1允許

IT1=1;//下降沿觸發(fā)中斷②編寫外部中斷0的中斷函數(shù)如下:bitb=0;//外部位變量b,暫停/繼續(xù)標(biāo)志位,b=0暫停,b=1繼續(xù)voidint_0()interrupt0//外部中斷0的中斷函數(shù),中斷類型號為0{if(b==0){TR1=0;b=1;}//暫停計數(shù)

else{b=0;TR1=1;}//繼續(xù)計數(shù)

}③編寫外部中斷1的中斷函數(shù)如下:voidint_1()interrupt2//外部中斷1的中斷函數(shù),中斷類型號為2{miao=0;count=0;//清零并開始計數(shù)

TH1=(65536-50000)/256;//設(shè)置T1計數(shù)初值高8位,定時時間50msTL1=(65536-50000)%256;//設(shè)置T1計數(shù)初值低8位

TR1=1;}主講教師任務(wù)5-2模擬交通燈控制系統(tǒng)設(shè)計單片機(jī)控制技術(shù)(C語言版)任務(wù)導(dǎo)入01模擬交通燈硬件電路設(shè)計02模擬交通燈控制程序設(shè)計03舉一反三04一、任務(wù)導(dǎo)入PARTONE01交通燈模擬圖任務(wù):模擬交通燈控制系統(tǒng)1.用LED燈模擬十字路口交通燈控制2.正常情況下雙方向輪流通行3.特殊情況時,A方向通行4.緊急情況時,A和B方向都不通行東西方向(A方向)南北方向(B方向)狀態(tài)說明倒計時時間(秒)紅燈黃燈綠燈紅燈黃燈綠燈滅滅亮亮滅滅A方向通行,B方向禁行20滅滅閃爍亮滅滅A方向警告,B方向禁行3滅亮滅亮滅滅A方向警告,B方向禁行2亮滅滅滅滅亮A方向禁行,B方向通行20亮滅滅滅滅閃爍A方向禁行,B方向警告3亮滅滅滅亮滅A方向禁行,B方向警告2模擬交通燈控制系統(tǒng)LED狀態(tài)二、模擬交通燈硬件電路設(shè)計PARTTWO02硬件電路圖三、模擬交通燈控制程序設(shè)計PARTTHREE03開始狀態(tài)1:A綠燈B紅燈狀態(tài)2:A綠燈閃B紅燈狀態(tài)3:A黃燈B紅燈狀態(tài)4:A紅燈B綠燈狀態(tài)5:A紅燈B綠燈閃狀態(tài)6:A紅燈閃B黃燈初始化開始狀態(tài)1:A綠燈B紅燈狀態(tài)2:A綠燈閃B紅燈狀態(tài)3:A黃燈B紅燈狀態(tài)4:A紅燈B綠燈狀態(tài)5:A紅燈B綠燈閃狀態(tài)6:A紅燈閃B黃燈初始化模擬交通燈控制器C語言程序……voidmain(){unsignedchartable[]={0xF3,0xFB,0xEB,0xDE,0xDF,0xDD};unsignedchari;

timerInit();EX0=1;IT0=1;EX1=1;IT1=1;EA=1;}開始狀態(tài)1:A綠燈B紅燈狀態(tài)2:A綠燈閃B紅燈狀態(tài)3:A黃燈B紅燈狀態(tài)4:A紅燈B綠燈狀態(tài)5:A紅燈B綠燈閃狀態(tài)6:A紅燈閃B黃燈初始化模擬交通燈控制器C語言程序voidmain(){while(1){//status1LIGHT=table[0];

delay_ms(5000);//status2for(i=0;i<3;i++){ LIGHT=table[1];

delay_ms(500); LIGHT=table[0];

delay_ms(500); }}}開始狀態(tài)1:A綠燈B紅燈狀態(tài)2:A綠燈閃B紅燈狀態(tài)3:A黃燈B紅燈狀態(tài)4:A紅燈B綠燈狀態(tài)5:A紅燈B綠燈閃狀態(tài)6:A紅燈閃B黃燈初始化模擬交通燈控制器C語言程序……voidmain(){while(1){//status3LIGHT=table[2];

delay_ms(2000); //status4LIGHT=table[3];

delay_ms(5000);}}開始狀態(tài)1:A綠燈B紅燈狀態(tài)2:A綠燈閃B紅燈狀態(tài)3:A黃燈B紅燈狀態(tài)4:A紅燈B綠燈狀態(tài)5:A紅燈B綠燈閃狀態(tài)6:A紅燈閃B黃燈初始化模擬交通燈控制器C語言程序……voidmain(){while(1)

溫馨提示

  • 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

提交評論