




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第5、6、7、8章習題一、問答題1說明51單片機讀端口鎖存器的必要性,為什么?答:MCS-51系列單片機有不少指令可以直接進行端口操作,例如:ANL、ORL、XRL、JBC、CPL、INC、DEC、DJNZ、MOV PX.x,C、CLR PX.x、SETB PX.x。這些指令的執行過程分成“讀-修改-寫”三步,即先將端口的數據讀入CPU,在ALU中進行運算,運算結果再送回端口。執行“讀-修改-寫”類指令時,CPU實際上是通過三態門讀回鎖存器Q端的數據。這種讀鎖存器的方式是為了避免可能出現的一種錯誤。例如,用一根口線直接去驅動端口外的一個NPN晶體管基極,當向口線寫“1”時,該晶體管導通,導通了
2、的三極管集極與發射極間只有0.7V,會把端口引腳的高電平拉低,這樣直接讀引腳就會把本來的“1”誤讀為“0”。但若從鎖存器Q端讀,就能避免這樣的錯誤,得到正確的數據。也就是說,如果某位輸出為1時,有外接器件拉低電平, 讀端口引腳與讀鎖存器就有區別了,讀鎖存器狀態是1,讀引腳狀態是0,鎖存器狀態取決于單片機企圖輸出什么電平,引腳狀態則是引腳的實際電平。因此,當作為讀引腳方式使用時,應先對該口寫“1”,使場效應管截止,再進行讀操作,以防止場效應管處于導通狀態,使引腳為“0”,而引起誤讀。2請說明為什么使用LED需要接限流電阻,當高電平為+5V時,正常點亮一個LED需要多大阻值的限流電阻(設LED的正
3、常工作電流為8mA,導通壓降為0.6V),為什么?答:因為LED導通時,電壓降是基本固定的(如0.6V)。為了使LED既能正常工作(電流為820mA),又不至于被過大的電流損壞,所以必須加一個限流電阻,電阻值為100500。3簡述在使用普通按鍵的時候,為什么要進行去抖動處理,如何處理。答:鍵抖動會引起一次按鍵被誤讀多次。為了確保CPU對鍵的一次閉合僅做一次處理,有必要去除鍵抖動。在鍵閉合穩定時,讀取鍵的狀態;在鍵釋放穩定后,再作處理。按鍵的抖動,可用硬件或軟件兩種方法消除。4簡述LED數碼管動態掃描的原理及其實現方式。答:動態掃描的原理是利用人的視覺暫留,讓人覺得各位LED同時點亮一樣。逐位輪
4、流點亮各個LED,每一位保持一定時間,在510ms之內再一次點亮,重復不止,就可以實現動態掃描。5為什么51單片機在讀口的引腳狀態時,許先向端口寫“1”,請用圖5-1 P1結構圖加以說明。鎖存器DCPQQP1.x讀鎖存器寫鎖存器內部總線讀引腳內部上拉電阻圖5-1 P1口結構圖21V1VCC答:在單片機執行讀引腳操作時,如果鎖存器原來寄存的數據Q=0,那么由于=1,將使V1導通,引腳被始終鉗位在低電平上,不可能輸入高電平。為此,使用讀引腳指令前,必須先用輸出指令置Q=1,使V1截止。5簡述89c51各IO口的驅動能力。答:各IO口單個引腳,允許灌入的最大電流為 10 mA; 每個 8 位的接口(
5、P1、P2 以及 P3),允許向引腳灌入的總電流最大為 15 mA; P0 的驅動能力最強,允許灌入的最大總電流為 26 mA; 全部的四個接口所允許的灌電流之和,最大為 71 mA。 但引腳“輸出高電平”的時候,輸出電流不到 1 mA。6什么是中斷?中斷與子程序最本質的區別?答:中斷是指計算機在執行程序的過程中,當出現異常情況或特殊請求時,計算機停止現行程序的運行,自動轉向對這些異常情況或特殊請求的處理,處理結束后再返回現行程序的間斷處,繼續執行原程序的過程。 中斷是單片機實時地處理內部或外部事件的一種內部機制。當某種內部或外部事件發生時,單片機的中斷系統將迫使CPU暫停正在執行的程序,轉而
6、去進行中斷事件的處理,中斷處理完畢后,又返回被中斷的程序處,繼續執行下去。中斷與子程序的最本質的區別:子程序是預先安排好的;中斷是隨機發生的。7編制中斷服務程序時,為什么在主程序的初始化程序中,必須設置EA1 這條指令(或達到同樣功能的對IE賦值的指令),以及在中斷服務程序中為什么通常需要保護現場和恢復現場?答:中斷允許寄存器IE中有1個總的開關中斷控制位EA,當EA=0時,所有的中斷請求被屏蔽,CPU不接受任何中斷;只有當EA=1時,CPU才開放中斷。所以主程序的初始化程序中,必須設置EA1(或者用IE1xxxxxxxB,x表示1或0) 這條指令。現場是指中斷時刻單片機中某些寄存器和儲存器單
7、元中的數據或狀態,為了使中斷服務程序的執行不破壞這些數據和狀態,以免在中斷返回后影響主程序的運行,因此要這些數據和狀態送入堆棧保存,這就是現場保護。中斷結束后,在返回主程序前,則需要把保存的現場數據和狀態從堆棧中彈出,以恢復那些寄存器和存儲器單元中的原有內容,這就是現場恢復。8單片機89C51有哪些中斷源,CPU對其中斷如何請求?答:89C51中斷系統有5個中斷源:INT0:外部中斷0請求,低電平有效。通過P3.2引腳輸入。INT1:外部中斷1請求,低電平有效。通過P3.3引腳輸入。T0:定時器/計數器0溢出中斷請求。T1:定時器/計數器1溢出中斷請求。TXD/RXD:串行口中斷請求。當串行口
8、完成一幀數據的發送或接收時,便可請求中斷。9簡述單片機89C51中斷的自然優先級順序,如何提高某一中斷源的優先級別。答:中斷源,其自然優先級的順序如下:外部中斷0(PX0) 最 高定時器/計數器0溢出中斷(PT0)外部中斷1(PX1)定時器/計數器1溢出中斷(PT1)串行口中斷(PS) 最 低SFR中的IP寄存器中有對應的控制位,若某幾個控制位為1,則相應的中斷源就規定為高優先級中斷;反之,若某幾個控制位為0,則相應
9、的中斷源就規定為低優先級中斷。當同時接收到幾個同一優先級的中斷請求時,響應哪個中斷源則取決于內部自然優先級的順序。10簡述51系列單片機中斷響應的條件。答:有中斷源發出中斷請求;中斷總允許位EA=1,即CPU開中斷;申請中斷的中斷源的中斷允許位為1,即中斷沒有屏蔽;無同級或更高級中斷正在被服務;當前的指令周期已經結束;若現在指令為RETI或者是訪問IE或IP指令,則該指令以及緊接著的另一條指令已執行完。11用匯編語言編程時,在51系列單片機執行中斷服務程序的指令較多時,為什么一般都要在入口地址(又稱中斷矢量地址)開始的地方放一條跳轉指令?答:因為51系列單片機的兩個相鄰中斷源中斷服務程序入口地
10、址相距只有8個單元,當中斷服務程序較長容納不下的,一般都要在相應的中斷服務程序入口地址中放一條跳轉指令。12為什么一般都把主程序的起始地址放在0030H之后?答:因為0000H0030H中有中斷的矢量地址,為了避免沖突,一般都把主程序的起始地址放在0030H之后。13中斷服務子程序返回指令RETI和普通子程序返回指令RET的區別?答:RETI指令在返回的同時清除相應的優先級觸發器,以便允許下次中斷。14簡述51單片機定時/計數器4種工作模式的特點。答:模式1:是16位的定時器/計數器;模式2:把TL0(或TL1)配置成一個可以自動重裝載的8位定時器/計數器;模式3:對T0和T1大不相同。若將T
11、0設置為模式3,則TL0和TH0被分為兩個相互獨立的8位計數器。定時器T1無工作模式3狀態。模式0:與模式1幾乎完全相同,唯一的差別是模式0中,寄存器TL0用5位,TH0用8位。這種方式是為了與48系列兼容的,目前一般不使用。15定時/計數器用作定時器時,其計數脈沖由誰提供?定時時間與哪些因素有關?答:定時/計數器作定時時,其計數脈沖由系統振蕩器產生的內部時鐘信號12分頻后提供。定時時間與時鐘頻率和定時初值有關。16畫出51單片機計數/定時器方式1的邏輯結構框圖,說明它們的工作原理,如何使用門控和非門控啟動計數的方法。答:方式1的邏輯結構振蕩器÷12控制TxTRxGATE&1
12、INTx中斷TFxTHx(8位)C/T=0C/T=1TLx(8位)如圖所示,當GATE = 0時,經非門后,或門輸出1,這樣TRx將直接控制定時器的啟動和關閉。這時如果TRx=1,則接通控制開關,定時器從初值開始計數直至溢出。溢出時,16位加計數器為0,TFx置位,并申請中斷。如要循環計數,則定時器需重置初值,且需用軟件將TFx復位。TRx = 0,則與門被封鎖,控制開關被關斷,停止計數。當GATE = 1時,與門的輸出由輸入INTx的電平和TRx位的狀態來確定。這時若TRx=1,則引腳INTx可直接開啟或關斷計數器:當INTx為高電平時,允許計數;低電平時則停止計數。若TRx=0,則與門被封
13、鎖(即輸出為0),控制開關被關斷,不能計數。控制啟動、停止計數方式如下: 非門控方式當GATE0,控制權由 TRx 決定,TRx1計數啟動,TRx0計數停止。這種方式實際上是用軟件控制啟動、停止計數。 門控方式當GATE1、TRx1,控制權由INTx 決定INTx1計數啟動,INTx0計數停止。這種方式實際上是用外部硬件INTx引腳控制啟動、停止計數。17在使用8051的定時器/計數器前,應對它進行初始化,其步驟是什么?答: (1)確定T/C的工作方式編程TMOD寄存器; (2)計算T/C中的計數初值,并裝載到TH和TL; (3)T/C在中斷方式工作時,須開CPU中斷和源中斷編程IE寄存器;
14、(4)啟動定時器/計數器編程TCON中TR1或TR0位。18在有串行通信時,定時器/計數器1的作用是什么,怎樣確定串行口的波特率?答:在有串行通信時,定時器/計數器1的作用是串行口發生器。 串行口的波特率根據串行口的工作方式具有不同的計算方式: 方式0的波特率固定為晶體振蕩器的十二分之一; 方式1的波特率=2SMOD.(定時器1的溢出率)/32; 方式2波特率=2SMOD.(fosc/64); 方式3波特率同方式1(定時器l作波特率發生器)。19簡述89C51串口通信的四種方式及其特點。答:方式0:同步移位寄存器輸入/輸出方式,常用于擴展I/O口。波特率固定為振蕩頻率的1/12,并不受PCON
15、寄存器中SMOD位的影響。方式1:用于串行發送或接收,為10位通用異步接口。TXD與RXD分別用于發送與接收數據。收發一幀數據的格式為1位起始位、8位數據位(低位在前)、1位停止位,共10位。波特率由定時器T1的溢出率與SMOD值同時決定。方式2:用于串行發送或接收,為11位通用異步接口。TXD與RXD分別用于發送與接收數據。收發一幀數據的格式為1位起始位、8位數據位(低位在前)、1位可編程的第9數據位和1位停止位,共11位。波特率取決于PCON中SMOD位的值:當SMOD0時,波特率為晶振的1/64;當SMOD1時,波特率為晶振的1/32。方式3:用于串行發送或接收,為11位通用異步接口。T
16、XD與RXD分別用于發送與接收數據。幀格式與方式2相同,波特率與方式1相同。20單片機的串口可以與PC的串口直接連接進行通訊嗎?為什么?應如何連接?單片機與PC的串行接口圖答:MCS-51系列單片機串行口與PC機的RS-232C接口不能直接對接,PC機RS232采用負邏輯電平,即邏輯“0”:+3V+15V;邏輯“1”:-3V-15V,單片機采用的是TTL電平,即電壓小于0.4V 為低電平,大于2.4V為高電平;因此二者不能直接相連,使用時必須進行電平轉換,否則將使TTL電路燒壞!必須進行電平轉換。常用的轉換芯片有MAX232等。連接圖如上。21試敘述利用SM2控制位進行多級通訊的過程?答:見8
17、.7及8.7.1節。22RS485總線有何特點?答:RS-232C是利用傳輸信號線與公共地之間的電壓差,RS-485是利用信號導線之間的信號電壓差。它通過傳輸線驅動器,把邏輯電平變換成電位差,完成始端的信號傳送;通過傳輸線接收器,把電位差轉換成邏輯電平,完成終端的信息接收。RS-485比-232C傳輸距離長、速度快,傳輸速率最大可達10 Mb/s,最大距離可達1200 m。RS-485是一點對多點的通訊接口,一般采用雙絞線的結構。普通的PC機一般不帶RS-485接口,因此要使用RS-232/RS-485轉換器。在計算機和單片機組成的RS-485通信系統中,通常下位機由單片機系統組成,主要完成工
18、業現場信號的采集和控制。上位機為工業PC機,負責監視下位機的運行狀態,并對其狀態信息進行集中處理,以圖文方式顯示下位機的工作狀態和工業現場被控設備的工作狀態。系統中的各節點(包括上位機)的識別是通過設置不同的站地址來實現的。單片機可以通過MAX1487等來完成TTL/ RS-485的電平轉換。23. 簡述LCM1602的主要顯示性能。答:LCM1602可顯示192個5x7點陣字符,主要是數字和英文大小寫字母(1602顯示的數字和字母的碼值,與ASCII碼表中的數字和字母的碼值相同)。另外,它具有64B的自定義字符RAM,可自行定義8個5x7點陣字符用于顯示。24.如何用軟件消除鍵盤的抖動?答:
19、由于按鍵是機械開關結構,所以當用手按下其中一個鍵時,往往會出現所按鍵在閉合位置和斷開位置之間發生跳幾下后才會穩定到閉合狀態的情況。在釋放一個鍵時,也會出現類似的情況,這就是鍵的抖動,抖動的持續時間不一,但通常不會大于10ms。 若抖動問題不解決,就會引起對閉合鍵的多次讀入。對于鍵抖動最方便的解決方法就是當發現有鍵按下后,不是立即進行掃描,而是延時大約10ms后再進行。由于一個鍵按下的時間一般會持續上百毫秒,所以延遲10ms后再掃描處理并不遲。25如何確定LED數碼顯示器的段碼?答:根據所選用的LED數碼管的極性(共陽極還是共陰極)以及數碼中每一個筆段的引腳與CPU(或其它控制芯片) IO口的引
20、腳的連接來定(稱自定的段碼表)。一般資料上提供的段碼表是標準接法的段碼,即數碼管的a、b、c、d、e、f、g、dp的引腳要依次接在CPU的Px.0Px.7上,這種接法有時會使在PCB布線的時候不大方便,不如自定的段碼表靈活。26段碼表數組變量一定要放在CODE存儲區嗎?放在其它存儲區會減少程序的代碼嗎?答:最好放在Code存儲區,當然也可以放在內部RAM或外部RAM區,但這樣作會占用本來就非常稀少的內部RAM資源和不多的外部RAM資源。由于放在其它區域仍然要采用程序中的段碼表,所以不僅不能減少程序的代碼量還會增加把段碼表傳送的程序指令,增加程序的代碼數量。二、選擇題1. 89c51單片機在晶振
21、12MHz時,計數器對外部脈沖最大計數頻率為_C_。 A. 12MHz B. 1MHz C. 0.5MHz D. 6MHz2. 89c51外接晶振頻率為6MHz,其計數器允許輸入外部脈沖的最高頻為 A 。 A. 0.25MHz B. 1MHz C. 6MHz D. 12MHz 3. 下列幾種中斷優先級的次序中, C 為可實現的次序。 A. ,T1, ,T0,串口 B. 串口,T0,,T1, C. ,T0,T1,串口 D. 串口,,T1,T04. 各中斷源發出的中斷請求信號,都會標記在MCS-51中的 B 中。 (A)TMOD (B) TCON、SCON (C) IE (D) IP6下面哪一種僅
22、適用于定時器T0(D)。A.方式0 B.方式1 C.方式2 D.方式37下列說法正確的是 C A、 各中斷發出的中斷請求信號,都會標記在MCS51系統的IE寄存器中。B、 各中斷發出的中斷請求信號,都會標記在MCS51系統的IP寄存器中。C、 各中斷發出的中斷請求信號,都會標記在MCS51系統的TCON與SCON寄存器中。D、 各中斷發出的中斷請求信號,都會標記在MCS51系統的TMOD寄存器中。8在MCS51中,需要外加電路實現中斷撤除的是: A A、電平方式的外部中斷 &
23、#160;B、定時中斷 C、外部串行中斷 D、跳變方式的外部中斷9下列說法正確的是 A A、 特殊功能寄存器PCON,與定時器/計數器的控制無關。B、 特殊功能寄存器TMOD,與定時器/計數器的控制無關。C、 特殊功能寄存器IE, 與定時器/計數器的控制無關。D、 特殊功能寄存器TCON,與定時器/計數器的控制無關。10下列說法中不正確的是 D A、 同一
24、級別的中斷請求按時間的先后順序響應。B、 同級中斷不能嵌套。C、 低優先級中斷請求不能中斷高優先級中斷請求,但是高優先級中斷請求能中斷低優先級中斷請求。D、 同一時間同一級別的多中斷請求,將形成阻塞,系統無法響應。三、填空題1. 89c51有 5 個中斷源,可分為 2 個優先級。上電復位時 INT0 中斷源的優先級別最高。2當單片機接到外設的中斷申請時,單片機響應中斷,單片機將暫停主程序的執行,轉去執行 中斷服務 程序,執行完 中斷服務 ,再執行 主 程序。389c51
25、單片機的中斷源有:外部0中斷,定時器T0中斷,外部1中斷,定時器T1中斷,串行口通訊中斷。4閱讀以下程序后填空#include <reg51.h>unsigned char a;void main(void) TMOD=0x02; TL0 =0xd8; TH0 =0xd8; EA=1; ET0=1; TR0=1; while(1); void Timer0() interrupt 1 a+;1)本程序把定時器/計數器 T0 設置成方式 。2)本程序執行時,變量a的內容將 。3)程序在 語句處發生中斷,執行完中斷服務程序后,返回到 語句處。4)本程序中斷服務程序的入口地址為 。5)是
26、否可將interrupt 1改為interrupt 3? 。答案:1)T0; 2;2)+1;3)while(1); while(1);4)000BH;5)不能。四、是非題1. MCS-51中的基本型89c51共有五個中斷源,這五個中斷請求源全部來自外部引腳。F2. 對MCS-51系列芯片中,當使用內部RAM時,EA引線端應接高電平;而不使用內部RAM時,EA引線端則應接低電平。F3. MCS-51中的89c51單片機P3口的各口線,必須作為第二功能使用。F五、編程題1. 在P3.2-P3.4三個引腳上分別接有三個發光二極管,用C51編程實現三個發光二極管依次閃亮,循環不止。電路原理圖如圖5-2
27、所示。圖5-3 LED循環閃爍程序框圖圖5-2 LED循環閃爍原理圖圖解:程序框圖如圖5-3。其C51程序如下:#include <reg51.h>/LED數碼管位連接定義sbit LED1=P32; /定義SFR中引腳的“位” sbit LED2=P33;sbit LED3=P34;/*- 功能:毫秒延時函數 參數:當晶振為11.0592MHz時,x為ms數,誤差都為16us;x1000為1秒-*/void delayms(unsigned int x) unsigned char j;while(x-) for(j=0;j<113;j+); void main(void)
28、 /主程序 while(1) LED1=0;LED2=1;LED3=1; delayms(1000);圖5-5 兩位數碼管動態顯示程序框圖 LED1=1;LED2=0;LED3=1; delayms(1000); LED1=1;LED2=1;LED3=0; delayms(1000); 2電路原理圖如圖5-4。編寫程序LED顯示00,每秒鐘加1,至99,如此循環不止。圖5-4 兩位LED數碼管靜態顯示解:程序框圖如圖5-5,程序如下:#include <reg51.h>#define uchar unsigned char#define uint unsigned intuchar
29、 code dispcode=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff;/*- 功能:毫秒延時函數 參數:當晶振為11.0592MHz時,x為ms數,誤差都為17us;x1000為1秒-*/void delayms(unsigned int x) unsigned char j;while(x-) for(j=0;j<113;j+); void main(void) /主程序 uchar num=0; while(1) P1=dispcodenum/10; P3= dispcodenum%10;delayms(1000)
30、; num+; if (num>99) num=0; 3設計一動態顯示4位8段LED數碼管的電路原理圖,并編寫程序顯示“5678”。圖5-6 4位LED動態顯示解:電路原理圖如圖5-6。程序如下:#include <reg51.h>#define uchar unsigned char#define uint unsigned int/*-LED數碼管位選線連接定義注:LED數碼管段碼線連接在P0口 -*/sbit LED1=P20;sbit LED2=P21;sbit LED3=P22;sbit LED4=P23;uchar code dispcode= /LED顯示09、
31、黑的段碼定義0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff;uchar ledbuf4; /4LED顯示緩沖區,ledbuf0為高位,ledbuf4為低位/*-功能:延時子程序參數:x需延時的毫秒數 當晶振為11.0592MHz時,延時為xms-*/void delayms(uint x) uchar j; while(x-) for(j=0;j<113;j+); /*-功能:顯示4位LED函數(ledbuf0為高位,ledbuf4為低位)說明:P00xff;在Proteus仿真中才用,實際應用時可去掉-*/void Dis_
32、4LED(uchar *ledbuf) P0=dispcodeledbuf0;LED1=1;LED2=0;LED3=0;LED4=0; delayms(1); P0=dispcodeledbuf1;LED1=0;LED2=1;LED3=0;LED4=0; delayms(1); P0=dispcodeledbuf2;LED1=0;LED2=0;LED3=1;LED4=0; delayms(1); P0=dispcodeledbuf3;LED1=0;LED2=0;LED3=0;LED4=1; delayms(1); void main(void) ledbuf0=5; ledbuf1=6; le
33、dbuf2=7; ledbuf3=8; while(1) Dis_4LED(ledbuf); 7根據圖5-7的電路原理,設計一個獨立式鍵盤管理程序,在檢測到鍵按下時,點亮對應的LED。鍵閉合時,采用軟件延時消抖的處理,鍵釋放時不加消抖動處理。圖5-7解: 45首先設計一個頭文件(文件名key.h),內容如下:/*-文件名:key.h頭文件功能:三獨立鍵處理函數 -*/#ifndef _KEY_H_#define _KEY_H_#include <reg51.h>#define uchar unsigned char#define UP 0x01 /定義鍵號#define DOWN
34、0x02#define ENTER 0x03 sbit UP_key =P10; /定義鍵與51單片機的引腳sbit DOWN_key =P11;sbit ENTER_key=P12;/*- 功能:毫秒延時函數 參數:當晶振為11.0592MHz時,x為ms數;誤差都為16us;x1000為1秒 引用舉例:delayms(500); 表示延時500毫秒。-*/void delayms(unsigned int x) unsigned char j;while(x-) for(j=0;j<113;j+); /*- 功能: 獲取鍵號 返回: key=鍵號1-3; key=0無鍵按下。引用舉例
35、:如之前定義了一個uchar的變量 Key_NUM,則可以 Key_NUM=KeycanNUM(); Key_NUM將被賦予按鍵后的鍵號值。-*/ uchar KeyscanNUM(void) uchar key=0; / 無鍵按下,key=0 UP_key=1;DOWN_key=1;ENTER_key=1; if (UP_key=0 )delayms(10); if(UP_key=0) key=UP; else key=0; if (DOWN_key=0 )delayms(10); if(DOWN_key=0)key=DOWN; else key=0; if (ENTER_key=0)del
36、ayms(10); if(ENTER_key=0)key=ENTER;else key=0; return key; #endif程序(文件名3keydemo.c)如下:/*-文件名:3keydemo.c功能:獨立鍵處理演示程序-*/#include "key.h"sbit LED_RED = P32; /定義LED引腳sbit LED_YELLOW= P33;sbit LED_GREEN = P34;/*-鍵處理子函數功能:按UP鍵紅燈亮,按ENTER鍵黃燈亮,按DOWN鍵綠燈亮,-*/void KeyProc(uchar key) switch(key) case UP
37、: LED_RED=0;LED_YELLOW=1;LED_GREEN=1;break; case DOWN: LED_RED=1;LED_YELLOW=0;LED_GREEN=1;break; case ENTER:LED_RED=1;LED_YELLOW=1;LED_GREEN=0;break; /*主程序void main (void) uchar key;while(1) key=KeyscanNUM(); if(key=UP | key=DOWN | key=ENTER) KeyProc(key); key=0; 8根據圖5-8所示電路,(1)編寫LED(09)的段碼;(2)設計一個程
38、序,開機后LED顯示0,以后每按一次鍵,顯示的數字加1,顯示9后,再回到0,并照此循環。圖5-8解:#include <reg51.h>#define uchar unsigned charsbit key=P34; /鍵引腳uchar keycounter=0;uchar code dispcode=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff; / LED(09)的段碼void main(void) /主程序 P2=dispcode0; while(1) if(key=0) /如鍵按下 if(key=1) / 檢測
39、鍵是否松開 keycounter+; if(keycounter>9)keycounter=0; P2=dispcodekeycounter; 9用Proteus設計一個4x4的鍵盤,一位7段LED數碼管顯示的電路,編寫程序將按鍵的編碼顯示出來(0F)。圖5-9解:電路原理圖如圖5-9。#include "4x4KEY.H" /4x4KEY.H見教材5.2.4, 但要把無鍵按下的返回值改為16#define uchar unsigned charuchar code dispcode=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x
40、80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf; / LED(0F,)的段碼void main(void) uchar keynum=16; P2=dispcode16; /顯示“” while(1) Keynum=Get_Key();if(keynum !=16) /有鍵按下 P2=dispcodekeynum;/P2顯示按鍵值 10利用51單片機的定時器和中斷方式,在共陽極的兩個LED上顯示0099(每次增加1秒)反復循環的秒鐘。請設計電路原理圖和程序。解:電路原理圖如圖5-10,程序如下:#include <reg51.h>#define
41、 uchar unsigned char#define uint unsigned intuchar code DispCode= 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff;uchar num;uchar timecounter=100;sbit LED1=P36;sbit LED0=P37;void delayms(unsigned int x)圖5-10 動態LED顯示原理圖 兩位LED數碼管動態顯示 unsigned char j; while(x-) for(j=0;j<113;j+);void main(voi
42、d) /主程序 TMOD=0x01; TL0=0xf0; TH0=0xd8; EA=1; /開總允許中斷 ET0=1; TR0=1; while(1) P1=DispCodenum/10;LED1=1;LED0=0;delayms(5); P1=DispCodenum%10;LED1=0;LED0=1;delayms(5); void timer0(void) interrupt 1 TL0=0xf0; TH0=0xd8; timecounter-; if(timecounter=0) timecounter=100; num+; if(num>99)num=0; 11如圖5-11,編寫
43、程序,每次按鍵使外部中斷0產生中斷,在中斷服務程序中使外接發光二極管LED改變一次亮滅狀態。解:程序如下:#include <reg51.h> 5V INT0 P1.05V圖5.11 原理圖sbit P1_0=P10;void main(void) /主程序 IT0=1; /負跳變觸發中斷 EA=1; /開總允許中斷 EX0=1; /開INT0中斷while(1); /無限循環,等待下一次中斷void Int0(void) interrupt 0 /中斷服務程序,工作寄存器采用0組(省略了using 0) P1_0=P10; /P1.0取反,改變LED亮滅的狀態12如圖5.12,已
44、知MCS-51單片機系統晶振頻率為12MHz,試編寫程序,用定時器T0,工作方式2,使P1.0引腳輸出如下周期方波。0.1ms 0.1ms 圖5.12 方波圖解:每隔0.1ms改變一次P1.0的輸出狀態,即形成周期方波,用T0方式2,定時實現。計算初值:C=28-t/T=256(0.0001)/10-6=256-100=156=9CH程序如下:#include <reg51.h>sbit P1_0=P10;void main(void) /主程序 TMOD=0x02; /置定時器T0為方式2TL0 =0x9c; /置定時器初值 TH0 =0x9c; EA=1; /開總中斷 ET0=
45、1; /開T0中斷 TR0=1; /啟動定時while(1); /無限循環,等待下一次定時中斷void Timer0() interrupt 1 /T0中斷服務程序 P1_0=P10; /P1.0取反,產生方波13如圖5.13,用P1.0驅動LED亮1秒、滅1秒地閃爍,設晶振頻率為12MHz。解: MCS-51定時器最長的定時時間達不到1秒,這里采用了一種長定時方法:先做一個10ms即0.01秒的定時,增加一個軟件計數器(如TimeCouter),記錄0.01秒定時中斷次數,計滿100個中斷為1秒。程序框圖見圖5.14。計數初值=65536 - 0.01/10-6=D8F0HS為TimeCou
46、nterP1.089C51+5V200圖5.13 原理圖圖5.14 定時器例2程序框圖#include <reg51.h>#define uchar unsigned charsbit Led=P10;uchar TimeCouter100;void main(void) /主程序 TMOD=0x10; /置定時器T1為方式1TL1 =0xf0; /置定時器初值 TH1 =0xd8; EA=1; /開總中斷 ET1=1; /開T1中斷 TR1=1; /啟動定時 Led=0;while(1); /無限循環,等待下一次定時中斷 void Timer1() interrupt 3 /T1
47、中斷服務程序 TL1 =0xf0; /重置定時器初值 TH1 =0xd8; TimeCounter-; if(TimeCounter=0) TimeCounter=100; Led=Led;15 引腳輸入被檢測信號,用門控方式測量正脈沖寬度(設脈寬小于65.5ms)。分析:采用T1的門控制方式,使T1的啟動受的控制,當GATA=1,TR1=1時,一旦引腳輸入高電平時,T1才啟動計時,直至出現低電平,停止計時。為了測量確保真正從高電平上升沿開始計時,T1的計數要先等到出現一個高電平后,下一個高電平到來才開始進行,見圖5.15。程序主要部分如下:#include <reg51.h>#defined uint unsigned intsbit InputPulse=P33;void main(void) /主程序 uchar PulseWide; TMOD=0x90; /置T1,門控方式、定時器,工作方式1TL1 =0x00; /置定時器初值 TH1 =0x00; while(InputPulse=0) TR1=1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 方案:辦公腳手架施工規范
- 現代化進程中的職業教育:路徑優化與實證分析
- 小學語文教師專業發展:學科知識復習資料匯編
- 5G技術對農業新質生產力影響的研究與實踐探索
- 物理知識精粹
- 村級扶貧電站管理辦法
- 大型集團采購決策中的比價機制設計與風險控制
- 語文雙基教學中的多感官協同訓練模式研究
- 家庭安全自查表
- 起重機事故鑒定
- 江西省金控科技產業集團有限公司招聘筆試題庫2025
- 2025年湖北省中考英語試題(附答案)
- 2025至2030中國家用血壓計行業發展趨勢分析與未來投資戰略咨詢研究報告
- 吉林省長春市2023?2024學年高二下冊期末考試數學科試卷附解析
- 主管護師《相關專業知識》考試真題及答案(2025年)
- 綠化所倉庫管理制度
- 聘請美容學徒合同協議
- 2025年全國保密教育線上培訓考試試題庫(含答案)含答案詳解
- 2025年江蘇省南京市鼓樓區中考一模英語試卷(含答案)
- 機場旅客醫療救援應急預案
- 非計劃再次手術知識培訓
評論
0/150
提交評論