版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第五章第五章 輸入輸出接口輸入輸出接口 P0-P3P0-P3 計(jì)算機(jī)對外設(shè)進(jìn)行數(shù)據(jù)操計(jì)算機(jī)對外設(shè)進(jìn)行數(shù)據(jù)操作時(shí),作時(shí),只有通過接口才能完成只有通過接口才能完成與與外設(shè)數(shù)據(jù)外設(shè)數(shù)據(jù)的交換。的交換。 CPU輸入接口輸入接口輸入設(shè)備輸入設(shè)備輸出接口輸出接口輸出設(shè)備輸出設(shè)備 由于由于CPUCPU的數(shù)據(jù)線是外設(shè)或存貯器和的數(shù)據(jù)線是外設(shè)或存貯器和CPUCPU進(jìn)行數(shù)據(jù)傳輸?shù)奈ㄒ还餐ㄟM(jìn)行數(shù)據(jù)傳輸?shù)奈ㄒ还餐ǖ溃瑸榱耸沟?,為了使掛接在掛接在總線總線上上的的器件在數(shù)據(jù)傳遞時(shí)不發(fā)生器件在數(shù)據(jù)傳遞時(shí)不發(fā)生沖突,沖突,CPUCPU和外設(shè)之和外設(shè)之間必須有接口電路(簡稱接口或間必須有接口電路(簡稱接口或I/OI/O口)
2、口)。接口起著緩沖、鎖存數(shù)據(jù),地接口起著緩沖、鎖存數(shù)據(jù),地址譯碼、信息格式轉(zhuǎn)換、傳遞狀態(tài)(外設(shè)狀態(tài)),發(fā)布命令等功能。址譯碼、信息格式轉(zhuǎn)換、傳遞狀態(tài)(外設(shè)狀態(tài)),發(fā)布命令等功能。 I/OI/O接口種類:接口種類:I/OI/O接口有并行接口、串行接口、定時(shí)接口有并行接口、串行接口、定時(shí)/ /計(jì)數(shù)器、計(jì)數(shù)器、A/DA/D、D/AD/A等,根據(jù)等,根據(jù)不同的不同的外設(shè)選擇不同的接口。單片機(jī)已將這些接口外設(shè)選擇不同的接口。單片機(jī)已將這些接口集成到主集成到主芯片芯片內(nèi)部,內(nèi)部,所以一般所以一般無需無需再再外加接口外加接口。 本章介紹單片機(jī)的并行接口,用于和外設(shè)的并行數(shù)據(jù)通信。本章介紹單片機(jī)的并行接口,用
3、于和外設(shè)的并行數(shù)據(jù)通信。 51 51單片機(jī)有單片機(jī)有P0P0、P1P1、P2P2、P3P3四個(gè)四個(gè)8 8位雙向位雙向I/OI/O口,每個(gè)端口可以按字口,每個(gè)端口可以按字節(jié)輸入或輸出,也可以按位進(jìn)行輸入或輸出,用作位控十分方便。節(jié)輸入或輸出,也可以按位進(jìn)行輸入或輸出,用作位控十分方便。P0P0口口為三態(tài)雙向口,能帶為三態(tài)雙向口,能帶8 8個(gè)個(gè)TTLTTL電路;電路;P1P1、P2P2、P3P3口為準(zhǔn)雙向口,負(fù)載能力口為準(zhǔn)雙向口,負(fù)載能力為為4 4個(gè)個(gè)TTLTTL電路。電路。15 5.1 P0.1 P0P3P3端口的功能和內(nèi)部結(jié)構(gòu)端口的功能和內(nèi)部結(jié)構(gòu) P0P0P3P3端口的功能如下:端口的功能如下
4、: POPO口口: 1.: 1.作為輸入作為輸入/ /輸出口。輸出口。 2.2.作為地址作為地址/ /數(shù)據(jù)總線數(shù)據(jù)總線 , ,接外圍芯片時(shí)接外圍芯片時(shí)POPO口分時(shí)輸出低口分時(shí)輸出低 8 8 位地址與數(shù)據(jù)信號。位地址與數(shù)據(jù)信號。 P1P1口口: 1.: 1.作為輸入作為輸入/ /輸出口。輸出口。 2. 2.在增強(qiáng)型在增強(qiáng)型(52(52系列系列) )和和ISPISP型型( (在系統(tǒng)編程型在系統(tǒng)編程型) )中中P1P1口還有口還有如下功能如下功能: : P1.0 T2P1.0 T2引腳引腳, ,定時(shí)定時(shí)/ /計(jì)數(shù)器計(jì)數(shù)器2 2外部計(jì)數(shù)脈沖輸入外部計(jì)數(shù)脈沖輸入 P1.1 T2EXP1.1 T2EX引
5、腳引腳, ,定時(shí)定時(shí)/ /計(jì)數(shù)器計(jì)數(shù)器2 2觸發(fā)和觸發(fā)和捕捉捕捉控制控制 P1.5 MOSIP1.5 MOSI引腳引腳, ,在系統(tǒng)編程在系統(tǒng)編程的的數(shù)據(jù)輸入數(shù)據(jù)輸入 P1.6 MISOP1.6 MISO引腳引腳, ,在系統(tǒng)編程在系統(tǒng)編程的的數(shù)據(jù)輸出數(shù)據(jù)輸出 P1.7 SCKP1.7 SCK引腳引腳, ,在系統(tǒng)編程在系統(tǒng)編程的的時(shí)鐘輸入時(shí)鐘輸入2P2P2口口: 1.: 1.作為輸入作為輸入/ /輸出口。輸出口。 2.2.作為高作為高8 8位地址總線。位地址總線。 P3P3口口: 1.: 1.作第一功能使用時(shí),其功能為輸入作第一功能使用時(shí),其功能為輸入/ /輸出口。輸出口。 2.2.作第二功能使用
6、時(shí),每一位功能定義如下表所示作第二功能使用時(shí),每一位功能定義如下表所示: : 端口引腳端口引腳第第 二二 功功 能能P3.0P3.0RXD RXD (串行輸入線)串行輸入線)P3.1P3.1TXD TXD (串行輸出線)串行輸出線)P3.2P3.2INT0INT0(外部中斷外部中斷0 0輸入線)輸入線)P3.3P3.3INT1INT1 (外部中斷(外部中斷1 1輸入線)輸入線)P3.4P3.4T0 T0 (定時(shí)器定時(shí)器0 0外部計(jì)數(shù)脈沖輸入)外部計(jì)數(shù)脈沖輸入)P3.5P3.5T1 T1 (定時(shí)器定時(shí)器1 1外部計(jì)數(shù)脈沖輸入外部計(jì)數(shù)脈沖輸入P3.6P3.6WRWR (外部數(shù)據(jù)存儲器寫選通信號入)
7、外部數(shù)據(jù)存儲器寫選通信號入)P3.7P3.7RDRD (外部數(shù)據(jù)存儲器讀選通信號入)外部數(shù)據(jù)存儲器讀選通信號入)3 5.1.2 5.1.2 端口的內(nèi)部結(jié)構(gòu)端口的內(nèi)部結(jié)構(gòu) 四個(gè)端口的某一位的結(jié)構(gòu)見圖四個(gè)端口的某一位的結(jié)構(gòu)見圖5.15.1,同一個(gè)端口的各位具有相同,同一個(gè)端口的各位具有相同的結(jié)構(gòu)。由圖可見,四個(gè)端口的結(jié)構(gòu)有以下相同之處:的結(jié)構(gòu)。由圖可見,四個(gè)端口的結(jié)構(gòu)有以下相同之處: 都有兩個(gè)輸入緩沖器,分別受都有兩個(gè)輸入緩沖器,分別受來自來自CPUCPU內(nèi)部內(nèi)部的的讀鎖存器和讀引腳讀鎖存器和讀引腳控制信號的控制。控制信號的控制。 都有鎖存器都有鎖存器( (即專用寄存器即專用寄存器POPOP3)P
8、3)。 都是場效應(yīng)管輸出驅(qū)動。都是場效應(yīng)管輸出驅(qū)動。 依據(jù)每個(gè)端口的不同功能,內(nèi)部結(jié)構(gòu)亦有不同之處,以下重依據(jù)每個(gè)端口的不同功能,內(nèi)部結(jié)構(gòu)亦有不同之處,以下重點(diǎn)介紹不同之處。點(diǎn)介紹不同之處。41.1.POPO口口 POPO口的輸出驅(qū)動電路由上拉場效應(yīng)管口的輸出驅(qū)動電路由上拉場效應(yīng)管T1T1和驅(qū)動場效應(yīng)和驅(qū)動場效應(yīng)T2T2組成,控制電組成,控制電路包括一個(gè)與門,路包括一個(gè)與門, 一個(gè)非門和一個(gè)模擬開關(guān)一個(gè)非門和一個(gè)模擬開關(guān)MUXMUX。P0.n鎖存器DQQP0.nP0.nVccVcc&地址/數(shù)據(jù)控制輸入緩沖輸入緩沖讀鎖存器讀引腳內(nèi)部總線寫鎖存器P0口的位結(jié)構(gòu)圖MUXMUXT1T2T2CLCL 多
9、路選擇開關(guān)的作用多路選擇開關(guān)的作用:相當(dāng)一個(gè)單刀雙擲開關(guān),:相當(dāng)一個(gè)單刀雙擲開關(guān),用用來作為來作為普通普通I/OI/O口還是作為口還是作為數(shù)據(jù)數(shù)據(jù)/ /地址地址總線的選擇開關(guān)??偩€的選擇開關(guān)。 5 當(dāng)控制當(dāng)控制=1 =1 時(shí),時(shí),MUX MUX 開關(guān)向上,作為總線,將地址開關(guān)向上,作為總線,將地址/ /數(shù)據(jù)分時(shí)地輸數(shù)據(jù)分時(shí)地輸出,完成總線的功能。如下圖所示:出,完成總線的功能。如下圖所示: 當(dāng)控制當(dāng)控制 =0 =0 時(shí),時(shí),MUXMUX 開關(guān)向開關(guān)向下,作為下,作為I/OI/O線,將鎖存器的反相線,將鎖存器的反相端與輸出接通,此時(shí)如果端與輸出接通,此時(shí)如果: : 作為輸出時(shí),是通過鎖存器作為輸
10、出時(shí),是通過鎖存器來完成的,由于來完成的,由于T1T1已經(jīng)截止,所已經(jīng)截止,所以此時(shí)以此時(shí)常常要外加上拉電阻常常要外加上拉電阻,否,否則得不到高電平。則得不到高電平。6 如果作為輸入時(shí),又分讀引腳和讀鎖存器兩種。如果作為輸入時(shí),又分讀引腳和讀鎖存器兩種。a) 51a) 51系列中有一些讀系列中有一些讀- -修改修改- -寫指令,例如寫指令,例如 INC P0 , INC P0 , 它的它的執(zhí)行就是先讀執(zhí)行就是先讀P0P0的鎖存器,加的鎖存器,加1 1后,再寫入鎖存器。如右圖后,再寫入鎖存器。如右圖所示:所示:b) b) 另外則是讀引腳,在讀引腳時(shí),另外則是讀引腳,在讀引腳時(shí),P0P0口的口的T
11、1T1已成高阻態(tài),但已成高阻態(tài),但T2T2口不定,口不定,所以一般都要先寫所以一般都要先寫1 1,再讀入,再讀入。如。如左圖所示:左圖所示: 以上兩種讀命令,已經(jīng)在芯片設(shè)計(jì)中考慮了,遇到這兩種指令(讀引以上兩種讀命令,已經(jīng)在芯片設(shè)計(jì)中考慮了,遇到這兩種指令(讀引腳和讀存儲器)會分別自動地進(jìn)行,不需要用戶擔(dān)心。腳和讀存儲器)會分別自動地進(jìn)行,不需要用戶擔(dān)心。7P1.n鎖存器DQQP1.nVccR輸入緩沖輸入緩沖讀鎖存器讀引腳內(nèi)部總線寫鎖存器P1口的位結(jié)構(gòu)圖T12. P12. P1口口 通用通用I/OI/O端口,準(zhǔn)雙向、靜態(tài)。(所謂準(zhǔn)雙向,是指在讀入前,要先端口,準(zhǔn)雙向、靜態(tài)。(所謂準(zhǔn)雙向,是指在
12、讀入前,要先寫寫1 1,凡是這樣的端口稱之準(zhǔn)雙向口)。與,凡是這樣的端口稱之準(zhǔn)雙向口)。與P0P0口相比,它的結(jié)構(gòu)比較簡單,口相比,它的結(jié)構(gòu)比較簡單,直接用一個(gè)上拉電阻代替了直接用一個(gè)上拉電阻代替了MOSMOS管,輸出有鎖存,輸入時(shí)為了能正確地讀管,輸出有鎖存,輸入時(shí)為了能正確地讀入引腳的信號,一定要先寫入引腳的信號,一定要先寫1 1。 P1P1口是口是51 51 系列單片機(jī)中,系列單片機(jī)中,唯一一個(gè)單功能唯一一個(gè)單功能的端口,由于輸?shù)亩丝冢捎谳敵鲂盘栨i存且無出信號鎖存且無其他變化,所以其他變化,所以也稱之靜態(tài)口。也稱之靜態(tài)口。常常用作普通的常常用作普通的輸入和輸出。輸入和輸出。83 3、P
13、2P2口口 動態(tài)地址端口,主要用于存儲器擴(kuò)充時(shí),輸出尋找動態(tài)地址端口,主要用于存儲器擴(kuò)充時(shí),輸出尋找片外片外RAMRAM和和ROMROM單元單元的高的高8 8位地址。從結(jié)構(gòu)圖中可知,它比位地址。從結(jié)構(gòu)圖中可知,它比P1P1口增加了多路開關(guān)和反向器,當(dāng)口增加了多路開關(guān)和反向器,當(dāng)控制控制=0=0,開關(guān)與左邊接通,則通過內(nèi)部總線,輸出執(zhí)行,開關(guān)與左邊接通,則通過內(nèi)部總線,輸出執(zhí)行MOVXMOVX時(shí)的時(shí)的RAMRAM地址地址的高的高8 8位。當(dāng)控制位。當(dāng)控制=1=1時(shí),開關(guān)與右邊接通,輸出執(zhí)行時(shí),開關(guān)與右邊接通,輸出執(zhí)行MOVCMOVC時(shí)的時(shí)的ROMROM地址的高地址的高8 8位。當(dāng)作普通的位。當(dāng)作
14、普通的I/OI/O口時(shí),多路開關(guān)與左邊接通。也存在讀鎖存器和讀引口時(shí),多路開關(guān)與左邊接通。也存在讀鎖存器和讀引腳的不同。腳的不同。MUXRP0.n鎖存器DQQP2.nVcc地址 控制輸入緩沖輸入緩沖讀鎖存器讀引腳內(nèi)部總線寫鎖存器P2口的位結(jié)構(gòu)圖TROMRAM94 4、P3P3口口 雙功能靜態(tài)雙功能靜態(tài)I/OI/O口,它既可以作一般的口,它既可以作一般的I/OI/O端口,也能作為具有控制端口,也能作為具有控制總線功能的端口。從結(jié)構(gòu)圖中可見,當(dāng)作為普通靜態(tài)總線功能的端口。從結(jié)構(gòu)圖中可見,當(dāng)作為普通靜態(tài)I/OI/O口輸出時(shí),第二口輸出時(shí),第二輸出功能為輸出功能為1 1,此時(shí)的電路結(jié)構(gòu)與,此時(shí)的電路結(jié)
15、構(gòu)與P1P1口相同。當(dāng)作為第二功能輸出時(shí),鎖口相同。當(dāng)作為第二功能輸出時(shí),鎖存器的存器的Q=1Q=1,輸出第二功能的信號。當(dāng)作為普通靜態(tài),輸出第二功能的信號。當(dāng)作為普通靜態(tài)I/O I/O 口輸入時(shí),與其口輸入時(shí),與其他準(zhǔn)雙向口一樣,先寫他準(zhǔn)雙向口一樣,先寫1 1,再讀入引腳的信號。,再讀入引腳的信號。 RP0.n鎖存器DQQP3.nVcc第二輸出功能輸入緩沖輸入緩沖讀鎖存器讀引腳內(nèi)部總線寫鎖存器P3口的位結(jié)構(gòu)圖T第二輸入功能10歸納四個(gè)并行口使用的注意事項(xiàng)如下:歸納四個(gè)并行口使用的注意事項(xiàng)如下:如果單片機(jī)內(nèi)部有程序存儲器,不需要擴(kuò)展外部存貯器時(shí),單片機(jī)如果單片機(jī)內(nèi)部有程序存儲器,不需要擴(kuò)展外部
16、存貯器時(shí),單片機(jī)的四個(gè)口均可作的四個(gè)口均可作I/OI/O口使用??谑褂?。四個(gè)口在作輸入口使用時(shí),均應(yīng)先對其寫四個(gè)口在作輸入口使用時(shí),均應(yīng)先對其寫“1 1”,以避免誤讀。,以避免誤讀。P0P0口作口作I/OI/O口使用時(shí)應(yīng)外接口使用時(shí)應(yīng)外接10 K10 K的上拉電阻。的上拉電阻。當(dāng)當(dāng)P2P2只有某幾根線作地址使用時(shí),剩下的線不能作只有某幾根線作地址使用時(shí),剩下的線不能作I/OI/O口線使用??诰€使用。P3P3口的某些口線作第二功能時(shí),剩下的口線可以單獨(dú)作口的某些口線作第二功能時(shí),剩下的口線可以單獨(dú)作I/OI/O口線使用??诰€使用。5.2 5.2 編程舉例編程舉例 例例5-1.5-1.設(shè)計(jì)一電路,
17、監(jiān)視某開關(guān)設(shè)計(jì)一電路,監(jiān)視某開關(guān)K K,用發(fā)光二極管用發(fā)光二極管LEDLED顯示開關(guān)狀態(tài),如顯示開關(guān)狀態(tài),如果開關(guān)合上,果開關(guān)合上,LED LED 亮、亮、 開關(guān)打開,開關(guān)打開,LEDLED熄滅。熄滅。 分析:設(shè)計(jì)電路如圖分析:設(shè)計(jì)電路如圖5.25.2如示。開關(guān)接在如示。開關(guān)接在P1.1P1.1,LEDLED接接P1.0P1.0,當(dāng)開關(guān)斷開,當(dāng)開關(guān)斷開時(shí),時(shí),P1.1P1.1為為+5+5V V,對應(yīng)數(shù)字量為對應(yīng)數(shù)字量為“1 1”,開關(guān)合上時(shí),開關(guān)合上時(shí)P1.1P1.1電平為電平為0 0V V,對應(yīng)對應(yīng)數(shù)字量為數(shù)字量為“0 0”,這樣就可以用,這樣就可以用JBJB指令對開關(guān)狀態(tài)進(jìn)行檢測指令對開關(guān)
18、狀態(tài)進(jìn)行檢測,從而進(jìn)入不,從而進(jìn)入不同的程序段處理。同的程序段處理。 。11用匯編編程如下:用匯編編程如下: CLR P1.0 CLR P1.0 ;使發(fā)光二極管滅使發(fā)光二極管滅AGA:SETB P1.1 AGA:SETB P1.1 ;先對先對P1.1P1.1口寫入口寫入“1 1” JB P1.1JB P1.1,LIG LIG ;開關(guān)開,轉(zhuǎn)開關(guān)開,轉(zhuǎn)LIGLIG SETB P1.0 SETB P1.0 ;開關(guān)合上,二極管亮開關(guān)合上,二極管亮 SJMP AGASJMP AGALIG:CLR P1.0 LIG:CLR P1.0 ;開關(guān)打開,二極管滅開關(guān)打開,二極管滅 SJMP AGASJMP AGA
19、用用C C語言編程如下:語言編程如下: #include #include sbit p1_0=P10; sbit p1_0=P10; sbit p1_1=P11; sbit p1_1=P11; / /* * 定義位變量定義位變量 * */ / void main( ) void main( ) p1_0=0; p1_0=0; / /* * 使發(fā)光二極管滅使發(fā)光二極管滅 * */ / while(1) while(1) p1_1=1; p1_1=1; / /* * 對輸入位對輸入位P1.1P1.1寫寫“1 1” * */ / if (p1_1=0) p1_0=1; if (p1_1=0) p1
20、_0=1; / /* * 開關(guān)閉合二極管亮開關(guān)閉合二極管亮 * */ / else p1_0=0; else p1_0=0; / /* * 開關(guān)打開二極管滅開關(guān)打開二極管滅 * */ / +5+5V VP1.0P1.0LEDLEDP1.0P1.0+5+5V VLEDLED1為了提高為了提高LED的亮度,的亮度,可以接成灌電流形式:可以接成灌電流形式:或者加驅(qū)動電路:或者加驅(qū)動電路:12例例5-2.5-2.在圖在圖5.35.3中中P1.4P1.4P1.7P1.7接四個(gè)發(fā)光二極管接四個(gè)發(fā)光二極管,P1.0,P1.0P1.3P1.3接四個(gè)開關(guān),接四個(gè)開關(guān),編程將開關(guān)的狀態(tài)反映到發(fā)光二極管上。編程將開
21、關(guān)的狀態(tài)反映到發(fā)光二極管上。89C51/89S51+5V+5V1K4330 4P1.0EAP1.1P1.2P1.3P1.4P1.5P1.6P1.713用匯編語言編程:用匯編語言編程: ORG 0000H MOV P1,#0FFH ;高四位的高四位的LED全滅,全滅, 低四位輸入線送低四位輸入線送“1”, ABC: MOV A,P1 ;讀讀P1口引腳開關(guān)狀態(tài),并送入口引腳開關(guān)狀態(tài),并送入A SWAP A ;低四位開關(guān)狀態(tài)換到高四位低四位開關(guān)狀態(tài)換到高四位 ANL A,#0F0H ;保留高四位保留高四位 MOV P1,A ;從從P1口輸出口輸出 ORL P1,#0FH ;高四位不變,低四位送高四位
22、不變,低四位送“1”,準(zhǔn)備下一輪讀開關(guān),準(zhǔn)備下一輪讀開關(guān) SJMP ABC ;循環(huán)執(zhí)行循環(huán)執(zhí)行用用C C語言編程如下:語言編程如下: sfr P1=0 x90; main( ) P1=0 xff; / /* * P1 P1低四位置低四位置“1 1”,高四位燈全滅,高四位燈全滅 * */ / while(1) P1=P14; / /* * 讀入讀入P1P1引腳,左移四位后再從引腳,左移四位后再從P1P1口輸出口輸出 * */ / P1=P1|0 x0f; / /* * P1 P1高四位不變,低四位置高四位不變,低四位置“1 1”,再讀開關(guān),再讀開關(guān) * */ / 14例例5-3.5-3.用用P1
23、.0P1.0輸出輸出1 1KHzKHz和和500500HzHz的音頻信號驅(qū)動揚(yáng)聲器作報(bào)警,要求的音頻信號驅(qū)動揚(yáng)聲器作報(bào)警,要求1 1KHzKHz信號響信號響100100msms,500Hz500Hz信號響信號響200200msms,交替進(jìn)行;交替進(jìn)行;P1.7P1.7接一開關(guān)進(jìn)行控制,接一開關(guān)進(jìn)行控制,當(dāng)開關(guān)合上響報(bào)警信號,當(dāng)開關(guān)斷開告警信號停止,編出程序。當(dāng)開關(guān)合上響報(bào)警信號,當(dāng)開關(guān)斷開告警信號停止,編出程序。 200200* *500us500us200200* *1ms1ms用用C C語言編程如下:語言編程如下: #include sbit P10=P10; sbit P17=P17;m
24、ain( )unsigned char i,j;While (1)P171;While (P17=0) for (i=1; i=200; i+) / /* * 控制控制1KH1KH響響100100毫秒毫秒 * */ / P10=P10; for (j=0; j=50; j+); / /* * 軟件軟件延時(shí)延時(shí)500500微秒微秒* */ / for (i=1; i=200; i+) / /* * 控制控制500HZ500HZ響響200200毫秒毫秒 * */ / P10=P10; for (j=0; j=100; j+); / /* * 軟件軟件延時(shí)延時(shí)1 1毫秒毫秒 * */ / 165.3
25、 5.3 用并行口設(shè)計(jì)用并行口設(shè)計(jì)LEDLED數(shù)碼顯示器和鍵盤電路數(shù)碼顯示器和鍵盤電路 5.3.15.3.1用并行口設(shè)計(jì)用并行口設(shè)計(jì)LEDLED顯示電路顯示電路 1 1、 LEDLED顯示器及其原理顯示器及其原理 LEDLED有著顯示亮度高,響應(yīng)速有著顯示亮度高,響應(yīng)速度快的特點(diǎn),最常用的是七段式度快的特點(diǎn),最常用的是七段式LEDLED顯示器,又稱數(shù)碼管。七段顯示器,又稱數(shù)碼管。七段LEDLED顯示器內(nèi)部由七個(gè)條形和一顯示器內(nèi)部由七個(gè)條形和一個(gè)小圓點(diǎn)發(fā)光二極管組成,常見個(gè)小圓點(diǎn)發(fā)光二極管組成,常見LEDLED的管腳排列見右圖,其中的管腳排列見右圖,其中COMCOM為公共點(diǎn),根據(jù)內(nèi)部發(fā)光二極管為
26、公共點(diǎn),根據(jù)內(nèi)部發(fā)光二極管的接線形式,可分成共陰極型圖的接線形式,可分成共陰極型圖( (b)b)和共陽極型圖和共陽極型圖( (c)c)。 鍵盤和顯示器是單片機(jī)應(yīng)用系統(tǒng)中常用的輸入輸出裝置。鍵盤和顯示器是單片機(jī)應(yīng)用系統(tǒng)中常用的輸入輸出裝置。LEDLED數(shù)碼顯數(shù)碼顯示器是常用的顯示器之一,下面介紹用單片機(jī)并行口設(shè)計(jì)示器是常用的顯示器之一,下面介紹用單片機(jī)并行口設(shè)計(jì)LEDLED數(shù)碼顯示電數(shù)碼顯示電路和鍵盤電路的方法。路和鍵盤電路的方法。 17 LEDLED數(shù)碼管的數(shù)碼管的g ga a七個(gè)發(fā)光二極管因加正電壓而發(fā)亮,因加零電壓而七個(gè)發(fā)光二極管因加正電壓而發(fā)亮,因加零電壓而不能發(fā)亮,不同亮暗的組合就能形
27、成不同的字形,這種組合稱之為字形碼不能發(fā)亮,不同亮暗的組合就能形成不同的字形,這種組合稱之為字形碼( (段碼段碼) )。顯示顯示”0 0”, ,字形碼為字形碼為3fh.3fh.顯示顯示”1 1”, ,字形碼為字形碼為06h.06h.注意,在使用的時(shí)候與接口連接的順序,習(xí)慣上按如圖,注意,在使用的時(shí)候與接口連接的順序,習(xí)慣上按如圖,a a是是 LSBLSB。18 顯然共陽極和共陰極的字形碼是不同的顯然共陽極和共陰極的字形碼是不同的(互為反碼)(互為反碼),其字形碼見,其字形碼見表表5.25.2。LEDLED數(shù)碼管每段需數(shù)碼管每段需10102020mama的驅(qū)動電流,可用的驅(qū)動電流,可用TTLTT
28、L或或CMOSCMOS器件驅(qū)動。器件驅(qū)動。 字形碼的控制輸出可采用硬件譯碼方式,如采用字形碼的控制輸出可采用硬件譯碼方式,如采用BCD 7BCD 7段譯碼段譯碼/ /驅(qū)動驅(qū)動器器7474LS48LS48、74LS4974LS49、CD4511(CD4511(共陰極共陰極) )或或7474LS46LS46、74LS4774LS47、CD4513CD4513( (共陽極共陽極) ),也可用軟件查表方式輸出。,也可用軟件查表方式輸出。2 2、LEDLED數(shù)碼管的接口數(shù)碼管的接口 數(shù)碼管的接口有靜態(tài)接口和動態(tài)接口。數(shù)碼管的接口有靜態(tài)接口和動態(tài)接口。 靜態(tài)接口靜態(tài)接口:為固定顯示方式,無閃爍:為固定顯示
29、方式,無閃爍。它的原理就是采用鎖存器來。它的原理就是采用鎖存器來存儲要顯示的字形碼,存儲要顯示的字形碼,這種接法占用接口多,如果這種接法占用接口多,如果POPO口和口和P2P2口要用作數(shù)口要用作數(shù)據(jù)線和地址線,單片機(jī)據(jù)線和地址線,單片機(jī)就只剩就只剩P1P1口來連口來連接一個(gè)數(shù)碼管。接一個(gè)數(shù)碼管。目前也常用帶串目前也常用帶串口的鎖存器來實(shí)現(xiàn)多口的鎖存器來實(shí)現(xiàn)多個(gè)數(shù)碼管個(gè)數(shù)碼管的連接。的連接。 動態(tài)接口動態(tài)接口:采用各數(shù)碼管輪流循環(huán)顯示的方法,當(dāng)循環(huán)顯示頻率較:采用各數(shù)碼管輪流循環(huán)顯示的方法,當(dāng)循環(huán)顯示頻率較高時(shí),利用人眼的視覺暫留特性,高時(shí),利用人眼的視覺暫留特性,達(dá)到類似靜態(tài)顯示的效果達(dá)到類似
30、靜態(tài)顯示的效果,這種顯示,這種顯示需要用兩個(gè)接口,一個(gè)用來完成字形碼的輸出需要用兩個(gè)接口,一個(gè)用來完成字形碼的輸出( (字形選擇字形選擇) ),另一個(gè)完成,另一個(gè)完成各數(shù)碼管的輪流點(diǎn)亮各數(shù)碼管的輪流點(diǎn)亮( (數(shù)位選擇數(shù)位選擇) )。 19 例如圖例如圖5.55.5是接有五個(gè)共陰極數(shù)碼管的動態(tài)顯示接口電路,用是接有五個(gè)共陰極數(shù)碼管的動態(tài)顯示接口電路,用7474LS373LS373接成直通的方式作驅(qū)動電路,陰極用非門接成直通的方式作驅(qū)動電路,陰極用非門7474LS04LS04反相門驅(qū)動,字形選擇由反相門驅(qū)動,字形選擇由P1P1口提供,位選擇由口提供,位選擇由P3P3口控制。當(dāng)口控制。當(dāng)P3.0P3
31、.0P3.4P3.4輪流輸出輪流輸出1 1時(shí),五個(gè)數(shù)碼管輪時(shí),五個(gè)數(shù)碼管輪流顯示。流顯示。P1.7P1.7接開關(guān),當(dāng)開關(guān)打向位置接開關(guān),當(dāng)開關(guān)打向位置“1 1”時(shí),時(shí), 顯示顯示“1234512345”字樣,當(dāng)字樣,當(dāng)開關(guān)打向開關(guān)打向“2 2”時(shí),顯示時(shí),顯示“HELLOHELLO”字樣。字樣。 20 用匯編語言:用匯編語言: ORG 0000H MOV P3,#0 ;清顯示清顯示 TEST:SETB P1.7 JB P1.7,DIR1 ;檢測開關(guān)檢測開關(guān) MOV DPTR,#TAB1 ; 開關(guān)置于開關(guān)置于1,取取12345字形表頭地址字形表頭地址 SJMP DIR DIR1:MOV DPTR
32、,#TAB2 ; 開關(guān)置于開關(guān)置于2,取取“HELLO”字形表頭字形表頭地址地址 DIR:MOV R0,#0 ;R0存字形表偏移量存字形表偏移量 MOV R1,#01 ;R1置數(shù)碼表位選代碼置數(shù)碼表位選代碼 NEXT:MOV A,R0 MOVC A,A+DPTR ; 查字形碼表查字形碼表1 MOV P1,A ;送送P1口輸出口輸出 MOV A,R1 MOV P3,A ;輸出位選碼輸出位選碼 ACALL DELAY ;延時(shí)延時(shí) INC R0 ;指向下一位字形指向下一位字形 RL A ;指向下一位指向下一位 MOV R1,A CJNE R1,#20H,NEXT ; ;五個(gè)五個(gè) 數(shù)碼管顯示完數(shù)碼管顯
33、示完? ? SJMP TEST 21 DELAY: MOV R6,#20 ; ; 延時(shí)延時(shí)20ms20ms子程序子程序 DL2: MOV R7,#7DH DL1: NOP NOP DJNZ R7,DL1 DJNZ R6,DL2 RET TAB1:db 06H,5BH,4FH,66H,6DH ; ; “1 15 5”的字形碼的字形碼 TAB2:db 78H,79H,38H,38H,3FH ; ; “HELLOHELLO”的字形碼的字形碼 END22用用C C語言完成上述功能編程:語言完成上述功能編程: #include #define uint unsigned int #define ucha
34、r unsigned char sbit P17=P17; main( ) uchar code tab15=0 x86,0 xdb,0 xcf,0 xe6,0 xed; /* “1 15 5”的字形碼,的字形碼, 最高位送最高位送“1 1”* */ / uchar code tab25=0 xf8,0 xf9,0 xb8,0 xb8,0 xbf; / /* *“HELLOHELLO”的段碼,最高的段碼,最高 位送位送 “1 1”* */ / uchar i; uint j; while (1) P3=0 x01; for (i=0;i5;i+) if (P17=1) P1= tab1i; e
35、lse P1= tab2i; for (j=0;j=25000;j+); P3=1; 因?yàn)橐驗(yàn)镻1.7 P1.7 與開關(guān)連接,與開關(guān)連接,每次要讀此引腳,所每次要讀此引腳,所以要先寫以要先寫1 1。 分析程序可知,分析程序可知,C C語言的和匯編的略有不語言的和匯編的略有不同,用同,用C C編的程序當(dāng)操作開關(guān)的速度足夠快,編的程序當(dāng)操作開關(guān)的速度足夠快,可能會出現(xiàn)數(shù)字和字符混合顯示的情況??赡軙霈F(xiàn)數(shù)字和字符混合顯示的情況。235.3.2 5.3.2 用并行口設(shè)計(jì)鍵盤電路用并行口設(shè)計(jì)鍵盤電路 鍵盤是計(jì)算機(jī)系統(tǒng)中不可缺少的輸入設(shè)備,當(dāng)按鍵少時(shí)可接成線性鍵鍵盤是計(jì)算機(jī)系統(tǒng)中不可缺少的輸入設(shè)備,當(dāng)按
36、鍵少時(shí)可接成線性鍵盤盤( (如圖如圖5.35.3中的按鍵中的按鍵 ) ),當(dāng)按鍵較多時(shí),當(dāng)按鍵較多時(shí),常采用常采用矩陣矩陣式鍵盤式鍵盤的形式,的形式,這樣這樣可以節(jié)省可以節(jié)省I/OI/O線線。例如例如用用兩個(gè)接口可接兩個(gè)接口可接6464個(gè)按鍵個(gè)按鍵,每個(gè)按鍵有它每個(gè)按鍵有它唯一唯一的行值的行值和列值,行值和列值的組合就是識別這個(gè)按鍵的編碼。矩陣的行線和列線和列值,行值和列值的組合就是識別這個(gè)按鍵的編碼。矩陣的行線和列線分別通過兩并行接口和分別通過兩并行接口和 CPU CPU 通信。鍵盤通信。鍵盤電路電路的關(guān)鍵是如何識別按鍵而得到的關(guān)鍵是如何識別按鍵而得到相應(yīng)按鍵的鍵值。相應(yīng)按鍵的鍵值。 所以鍵
37、盤處理程序的任務(wù)是:所以鍵盤處理程序的任務(wù)是: 確定有無鍵按下;確定有無鍵按下; 判斷是哪一個(gè)鍵按下,判斷是哪一個(gè)鍵按下, 鍵的值或功能是什么;鍵的值或功能是什么; 還要還要設(shè)法設(shè)法消除按鍵在閉合或斷開時(shí)的抖動。消除按鍵在閉合或斷開時(shí)的抖動。 通常用并口來構(gòu)成鍵盤電路,將并口分成兩部分,一個(gè)輸出掃描碼,通常用并口來構(gòu)成鍵盤電路,將并口分成兩部分,一個(gè)輸出掃描碼, 使按鍵逐行動態(tài)接地使按鍵逐行動態(tài)接地( (稱行掃描稱行掃描) ),另一個(gè)輸入按鍵狀態(tài),另一個(gè)輸入按鍵狀態(tài)( (稱回饋信號,鍵稱回饋信號,鍵盤的列值盤的列值) ), 由行掃描值和回饋信號共同形成鍵編碼來識別按鍵、通過軟由行掃描值和回饋信
38、號共同形成鍵編碼來識別按鍵、通過軟件查表,查出該鍵的功能。也可由硬件編碼器完成鍵的編碼。件查表,查出該鍵的功能。也可由硬件編碼器完成鍵的編碼。24 下圖中,用下圖中,用8 8XX51XX51的并行口的并行口P1P1接接4 44 4矩陣鍵盤,以矩陣鍵盤,以P1.0P1.0P1.3P1.3作輸出線,作輸出線,以以P1.4P1.4P1.7P1.7作輸入線,鍵盤掃描程序的流程如圖作輸入線,鍵盤掃描程序的流程如圖5.75.7所示。所示。EEDEBE7EEDDDBD7DEBDBBB7BE7D7B777+5VP1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.78XX51P225Y返回鍵編碼返回鍵
39、編碼置行掃描初值置行掃描初值掃描位從掃描位從P1口輸出口輸出P1口的高四位和低四位口的高四位和低四位構(gòu)成構(gòu)成鍵編碼鍵編碼NN(有鍵按下)有鍵按下)N開始開始P1.0P1.3輸出輸出0延時(shí)去抖動延時(shí)去抖動P1.4P1.7全為全為1? ?P1.4P1.7全為全為1? ?YY(無鍵按下無鍵按下)11讀讀P1.4P1.7值值有鍵按下有鍵按下 ? ?更新掃描碼更新掃描碼掃到最后一行掃到最后一行? ?NY26對鍵盤的程序流程圖對鍵盤的程序流程圖5.75.7說明如下:說明如下: 當(dāng)當(dāng)P1.0P1.0P1.3P1.3輸出輸出0 0時(shí),如無鍵按下,時(shí),如無鍵按下,P1.4P1.4P1.7P1.7的輸入值均為的輸
40、入值均為“1 1”,如果其中有一個(gè)不是如果其中有一個(gè)不是 “1 1”,說明有鍵按下,再使,說明有鍵按下,再使P1.0P1.0P1.3P1.3逐個(gè)輸出零逐個(gè)輸出零( (行掃描行掃描) ),檢查,檢查P1.4P1.4P1.7P1.7的輸入值有無零,從而查出是哪行哪列的鍵按的輸入值有無零,從而查出是哪行哪列的鍵按下。在判斷按鍵時(shí),由于按鍵下。在判斷按鍵時(shí),由于按鍵時(shí)時(shí)會會產(chǎn)生抖產(chǎn)生抖動,動,一般采用:一般采用:1 1、軟件、軟件延時(shí)延時(shí),編程編程跳過抖動時(shí)段后再重讀跳過抖動時(shí)段后再重讀來確認(rèn);來確認(rèn);2 2、硬件消抖硬件消抖,用用R-SR-S觸發(fā)器閂鎖電路觸發(fā)器閂鎖電路;但后者但后者電路電路較較復(fù)雜
41、,復(fù)雜,需要額外的硬件,需要額外的硬件,在矩陣鍵盤中在矩陣鍵盤中多多不采用。不采用。27匯編語言程序清單如下:匯編語言程序清單如下: ORG 0000HTEST: MOV P1,#0F0H ; P1.0P1.3輸出輸出0, P1.4P1.7 寫寫1,作輸入位作輸入位 MOV A,P1 ;讀鍵盤,檢測有無鍵按下;讀鍵盤,檢測有無鍵按下 ANL A,#0F0H ; 屏蔽屏蔽P1.0P1.3,檢測,檢測P1.4P1.是否全為是否全為1 CJNE A, #0F0H,AREAD ; P1.4P1.7不全為不全為1,有鍵按下,有鍵按下 SJMP TEST ;P1.4P1.7全為全為1,無鍵按下,重檢測鍵盤
42、,無鍵按下,重檢測鍵盤 AREAD: ACALL DELAY10MS ;延時(shí)去抖動延時(shí)去抖動 MOV P1,#0F0H ;讀前先寫讀前先寫1 MOV A,P1 ;再讀鍵盤再讀鍵盤 ANL A,#0F0H ; 屏蔽屏蔽P1.0P1.3,檢測,檢測P1.4P1.是否全為是否全為1 CJNE A, #0F0H,HAVE ; P1.4P1.7不全為不全為1,有鍵按下,有鍵按下 SJMP TEST ;P1.4P1.7全為全為1,無鍵按下,重檢測鍵盤,無鍵按下,重檢測鍵盤HAVE: MOV A,#0FEH ;有鍵按下,逐行掃描鍵盤,置掃描初值;有鍵按下,逐行掃描鍵盤,置掃描初值NEXT: MOV B,A
43、;掃描碼暫存于掃描碼暫存于B B(行碼)(行碼) MOV P1,A ;輸出掃描碼輸出掃描碼READ: MOV A,P1 ;讀鍵盤讀鍵盤 ANL A,#0F0H ; 屏蔽屏蔽P1.0P1.0P1.3P1.3,檢測,檢測P1.4P1.4P1.7P1.7是否全為是否全為1 1 CJNE A,0F0H,YES ;P1.4P1.4P1.7P1.7不全為不全為1 1,該行有鍵按下,該行有鍵按下 MOV A,B ;被掃行無鍵按下,準(zhǔn)備查下一行被掃行無鍵按下,準(zhǔn)備查下一行 RL A ;置下一行掃描碼置下一行掃描碼 CJNE A,#0EFH,NEXT ;未掃到到最后一行循環(huán)未掃到到最后一行循環(huán)1 1、判、判斷有
44、無斷有無鍵按下鍵按下2 2、消、消除抖動除抖動3 3、識、識別鍵值別鍵值28YES: MOV R2, A ; 暫存暫存列碼列碼(高(高4位)位) MOV A, B ;恢復(fù)行碼恢復(fù)行碼 ANL A,#0FH ;取行掃描碼取行掃描碼(低(低4位)位) ORL A,R2 ;行碼、列碼合并為鍵編碼行碼、列碼合并為鍵編碼 MOV B,A ;鍵編碼存于鍵編碼存于B B,為后面處理做準(zhǔn)備,為后面處理做準(zhǔn)備 MOV R0, 0FFH ;讓讓R0R0為為-1-1AGAIN: INC R0 ;R0R0加加1 1 MOV A,R0 ;準(zhǔn)備查表準(zhǔn)備查表1 1,從零開始,從零開始 MOV DPTR,#TAB1 MOVC
45、 A, A+DPTR CJNE A, B, AGAIN ;查得的結(jié)果與實(shí)際的鍵編碼比較,不同則查下一個(gè)查得的結(jié)果與實(shí)際的鍵編碼比較,不同則查下一個(gè) MOV A,R0 ;相同,將鍵編碼對應(yīng)的序號存入相同,將鍵編碼對應(yīng)的序號存入A,A,準(zhǔn)備顯示準(zhǔn)備顯示 MOV DPTR,#TAB2 MOVC A,A+DPTR MOV P2, A ;送至端口送至端口2 2 顯示,然后返回去處理下一按鍵顯示,然后返回去處理下一按鍵 AJMP TESTTAB1: DB EEH,DEH,BEH,7EH.TAB2: DB 06H,5BH,4FH,66H,6DH.注:底層為紅色的是增加按鍵序號顯示的程序段。注:底層為紅色的是
46、增加按鍵序號顯示的程序段。29C語言程序清單如下語言程序清單如下: #include reg51.h#define uchar unsigned char#define uint unsigned intvoid dlms (void);uchar kbscan(void); / /* * 函數(shù)說明函數(shù)說明 * */ /void main (void) uchar key, i; uchar TAB1=0 x00,0 xEE,0 xDE,0 xBE,0 x7E,.; / /* * 鍵碼表鍵碼表 * */ / uchar TAB2=0 x00,0 x06,0 x5B,0 x4F,0 x66,.;
47、 / /* * 共陰極段碼共陰極段碼表表 * */ / while (1) key=kbscan( ); / /* * 調(diào)鍵掃描函數(shù),返回鍵碼送調(diào)鍵掃描函數(shù),返回鍵碼送keykey保存保存 * */ / for (i=0,i=16,i+) if (key=TAB1 i ) P2=tab2 i ; dlms( ); 注:底層為紅色的是增加按鍵序號顯示的程序段。注:底層為紅色的是增加按鍵序號顯示的程序段。30增加了一項(xiàng),當(dāng)無鍵按下增加了一項(xiàng),當(dāng)無鍵按下掃描返回為掃描返回為0時(shí),無顯示。時(shí),無顯示。void dlms (void) / /* * 延時(shí)延時(shí) * */ / uchar i; for (i=200;i0;i- -) ;uchar kbscan (void ) / /* * 鍵盤掃描函數(shù)鍵盤掃描函數(shù) * */ / uchar sccode, recode; P1=0 xf0; / /* * P1.0 P1.0P1.3P1.3發(fā)全發(fā)全0 0, P1.4P1.4P1.7P1.7輸入輸入 * */ / if(P1 & 0 xf0)!=0 xf0) / /* * 如如P1P1口高四位不全為口高四位不全為1 1,有鍵按下,有鍵按下 * */ / dlms ( ); / /* * 延時(shí)去抖動延時(shí)去抖動 * */ / if (P1 & 0
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 法院土地征收合同范例
- 農(nóng)資化肥銷售合同范例
- 新舊油罐銷售合同范例
- 借用建筑合同范例
- 與員工合作合同范例
- 2025年朝陽貨運(yùn)從業(yè)資格證怎么考
- 宅基地多次轉(zhuǎn)讓合同范例
- 瓜蔬銷售合同范例
- 出售水果大棚合同范例
- 物質(zhì)檢測合同范例
- 西北工業(yè)大學(xué)四開題報(bào)告模板
- 麓湖營銷體系及邏輯
- 九年級歷史上冊 第19課《巴黎公社》導(dǎo)學(xué)案 中華書局版-中華書局版初中九年級上冊歷史學(xué)案
- 中國地理分區(qū)空白圖(共5頁)
- CTCS列控系統(tǒng)及車載設(shè)備介紹
- 豐田質(zhì)量三不政策的確運(yùn)用
- 某某單位關(guān)于開展談心談話活動的情況報(bào)告情況統(tǒng)計(jì)五篇范文
- 無線鐵塔及天饋線安裝專項(xiàng)施工方案
- 在全市深化工程招投標(biāo)領(lǐng)域突出問題系統(tǒng)治理工作推進(jìn)會上的發(fā)言講話
- 氣動夯管技術(shù)在管道施工中的應(yīng)用
- ARAMCO阿美認(rèn)證檢驗(yàn)員考試題及答案(共56頁)
評論
0/150
提交評論