復(fù)習(xí)綱要-控制系 洪偉 2012.1.4_第1頁
復(fù)習(xí)綱要-控制系 洪偉 2012.1.4_第2頁
復(fù)習(xí)綱要-控制系 洪偉 2012.1.4_第3頁
復(fù)習(xí)綱要-控制系 洪偉 2012.1.4_第4頁
復(fù)習(xí)綱要-控制系 洪偉 2012.1.4_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

復(fù)習(xí)綱要

——控制系洪偉2012.1.41單片機(jī)組成結(jié)構(gòu)2數(shù)的表示3S12XS單片機(jī)CPU4S12XS單片機(jī)存儲器5S12XS單片機(jī)中斷6S12XS單片機(jī)程序設(shè)計7S12XS單片機(jī)外設(shè)Page

1

1單片機(jī)組成結(jié)構(gòu)

通用概念

單片機(jī):微處理器(Microprocessor)+存儲器(Memory)+輸入輸出部件(Peripheral)——>一個芯片

微處理器:CPU(運(yùn)算器+控制器+核心寄存器堆)

存儲器:ROM+RAM輸入輸出部件:PIT、A/D、SCI、SPI總線結(jié)構(gòu):上述部件之間通過三條總線連接:地址、數(shù)據(jù)和控制總線Page

2Page

3Numberingandcodingsystems

2數(shù)的表示機(jī)器數(shù):一個數(shù)在機(jī)器中的表示形式稱為機(jī)器數(shù)(實(shí)質(zhì)即編碼)真值:機(jī)器數(shù)所代表的真實(shí)數(shù)值本身稱為真值。有符號數(shù)和無符號數(shù):有些問題中沒有負(fù)數(shù)問題。此時全部編碼長度都只用來表達(dá)數(shù)值,此稱無符號數(shù)。帶符號數(shù)的符號的表達(dá)方法:一個二進(jìn)位表示“符號位”?!?”表示“+”,用“0”表示“-”;帶符號數(shù)的補(bǔ)碼表示:正數(shù)的補(bǔ)碼與其原碼相同;負(fù)數(shù)的補(bǔ)碼是其原碼除符號位外逐位取反,末位加18位無符號數(shù)的范圍是0~255;8位有符號數(shù)的范圍是-128~+127char;unsignedchar;16位無符號數(shù)的范圍是0~65535;16位有符號數(shù)的范圍是-32768~+32767

int;unsignedint;00000000—>00000001—>01111111—>10000000—>10000001—>11111111

0+1+127-128-127-1Page

4Numberingandcodingsystems

2數(shù)的表示數(shù)制(進(jìn)位制與非進(jìn)位制)J進(jìn)位制計數(shù):有J個數(shù)字符號;0、1、2、…、J-1。J稱為“基”;數(shù)位:自小數(shù)點(diǎn)開始向左各位稱為第0位、第1位、…;自小數(shù)點(diǎn)開始向右各位稱為第-1位、第-2位、…。逢J進(jìn)位,既在較高位增1;“權(quán)”:數(shù)字符號“1”在某位置所代表的數(shù)值稱為該位的權(quán)。顯然,在J進(jìn)位計數(shù)制下,第k位的權(quán)為Jk。小數(shù)點(diǎn)向左/右移動一位數(shù)值縮小/擴(kuò)大J倍。常用進(jìn)制:十進(jìn)制二進(jìn)制0b00010101;%00010101十六進(jìn)制0x13;$13不同進(jìn)制數(shù)之間的轉(zhuǎn)換算法Freescale單片機(jī)發(fā)展歷程

3S12XS單片機(jī)CPU位數(shù)指CPU數(shù)據(jù)總線的位數(shù)。位數(shù)的高低體現(xiàn)了CPU處理能力的強(qiáng)弱。S12XS單片機(jī)(MC9S12XS128):16位單片機(jī)MCS51系列單片機(jī):8位單片機(jī)ARM系列單片機(jī):32位單片機(jī)Page

5Page

6中央處理器CPU:中央處理器包括算術(shù)邏輯單元ALU、控制器寄存器組:①16位累加器或8位累加器A和B;②16位變址寄存器X和Y;③16位程序計數(shù)器PC;④16位條件碼寄存器CCR;⑤16位堆棧指針SP;

3S12XS單片機(jī)CPUPage

600000IPLSXHINZVCPage

716位程序計數(shù)器PC:程序由指令序列構(gòu)成,保存在程序存儲器中;PC(ProgramCounter,即程序計數(shù)器):保存下一條待執(zhí)行的指令地址;單片機(jī)系統(tǒng)復(fù)位后,首先讀取中斷向量表中復(fù)位向量地址0xFFFE和0xFFFF單元中的內(nèi)容,將該內(nèi)容賦給PC,即以該內(nèi)容為起始地址執(zhí)行程序;PC所指的指令每次被從程序存儲器中讀取出來以后,PC更新指向下一條指令設(shè)指令長度為n,所以程序順序執(zhí)行時,PC值更新為PC+n。S12XS單片機(jī)1<=n<=8當(dāng)程序出現(xiàn)分支和循環(huán)結(jié)構(gòu)、調(diào)用子程序、中斷等情況時,PC將不再是按序遞增到相鄰的下一條指令。此時PC可以采用絕對尋址或者相對尋址的方式進(jìn)行更新:(PC=address)或(PC=PC+offset)。程序控制指令用于實(shí)現(xiàn)上述PC值的更新,即控制程序的跳轉(zhuǎn)。①轉(zhuǎn)移指令;BRA;BEQ②循環(huán)控制指令;DBEQ③跳轉(zhuǎn)與子程序調(diào)用;JSR;BSR;RTS;RTI

3S12XS單片機(jī)CPUPage

7Page

816位條件碼寄存器CCR:C標(biāo)志在運(yùn)算時,發(fā)生最高的D7位向前進(jìn)位或借位的情況它將置位。對于無符號數(shù)加來說,說明和超過了255。對于無符號數(shù)減來說,說明被減數(shù)小于減數(shù),這在比較二無符號數(shù)大小時很有意義;H標(biāo)志在運(yùn)算時,發(fā)生D3位向D4的進(jìn)位或借位的情況它將置位。這種進(jìn)位或借位對于BCD數(shù)運(yùn)算的+6/-6調(diào)整才有意義;V標(biāo)志最高位向進(jìn)位位的進(jìn)位和次高位向最高位的進(jìn)位如果相同,未發(fā)生溢出;否則,產(chǎn)生溢出。對于有符號數(shù)的運(yùn)算來講,表示已經(jīng)發(fā)生了溢出,即超出了編碼長度所能表達(dá)的數(shù)值范圍。此時雖結(jié)果已經(jīng)錯誤,但其符號仍可按相反解釋代表結(jié)果的正負(fù)!對于無符號數(shù)的運(yùn)算來說,無任何特殊意義。不必關(guān)心;N標(biāo)志反映運(yùn)算結(jié)果是否為負(fù)數(shù)(D7);Z標(biāo)志反映運(yùn)算結(jié)果是否為0。

3S12XS單片機(jī)CPUPage

8Page

916位堆棧指針SP:堆棧是一段連續(xù)的RAM存儲器空間;堆棧按照后入先出的方式工作(LastInFirstOut);

只能向/從棧頂加入或取出數(shù)據(jù),sp寄存器用來指明棧頂;對于大多數(shù)CPU而言,“棧頂”是指低位的地址空間堆棧有兩種基本的操作方式:1、推入PUSH:

(sp)-n(sp),將內(nèi)容加入到堆頂2、取出PULL:

將棧頂?shù)膬?nèi)容取出,(sp)+n(sp)(字節(jié)操作,n=1;字操作,n=2)堆棧的作用1、中斷時使用堆棧來保存返回地址和寄存器上下文

2、C語言程序使用堆棧來保存局部變量

3、C語言編譯器使用堆棧來完成函數(shù)調(diào)用時參數(shù)傳遞和返回值傳遞

4、匯編語言可以使用堆棧暫存數(shù)據(jù)

3S12XS單片機(jī)CPUPage

9HighaddrLowaddrTOP0x100x110x120x130x10isthefirstpusheditem0x13isthelastpusheditemTOP210021FCPage

1016位堆棧指針SP(續(xù)):堆棧指針的初始位置由程序代碼確定,

指向預(yù)先劃定的堆??臻g的底部

1、自己編寫匯編指令,安排堆棧是一段連續(xù)的RAM存儲器空間;2、CodeWarrior自動生成的初始代堆棧溢出:堆??臻g和變量空間是使用同一RAM存儲器空間,RAM空間總大小終究是有限的……

估算應(yīng)用程序需要使用的堆棧空間的大小有時并不容易

1、函數(shù)的局部變量區(qū)

2、子程序嵌套

3、中斷及其嵌套

4、c庫函數(shù)的使用情況不好掌握

3S12XS單片機(jī)CPUPage

10HighaddrLowaddrMemoryblockVariablesoccupiedstackoccupyHighaddrLowaddrMemoryblockVariablesoccupiedstackoccupy匯編指令CW自動生成Page

11存儲器分類:RAM:讀寫存儲器。可以讀出,也可以寫入。ROM:只讀存儲器。只能讀出,不能修改。Flash:讀寫存儲器。高密度,不揮發(fā),功耗低,可靠性高。

4S12XS單片機(jī)存儲器Page

11半導(dǎo)體存儲器RAM雙極型MOS靜態(tài)動態(tài)ROMPROMEEPROMEPROM掩模ROM數(shù)據(jù)閃存:可以順序讀取存儲單元的內(nèi)容程序閃存:可以隨機(jī)讀取任意單元的內(nèi)容閃存(工藝)Page

12存儲器基本內(nèi)存空間分配:

(地址線:16根

216=26*210=64KB)I/O空間(2KB)RAM(12KB)運(yùn)算的中間數(shù)據(jù)程序FLASH(48KB)程序+常數(shù)表數(shù)據(jù)FLASH(2KB)

(EEPROM)掉電不丟失的常數(shù)如已經(jīng)調(diào)試好的PID參數(shù)

4S12XS單片機(jī)存儲器Page

121KBEEPROM1KBEEPROMMC9S12XS1288KBRAM16KBFLASH16KBFLASH復(fù)位、中斷向量區(qū)2KBI/O空間$0000$0800$0C00$4000$FFFF$FF004KBRAM$2000$10002KB數(shù)據(jù)閃存8KBRAM128KBFLASH2KBI/O16KBFLASH$8000$C000典型的64KB存儲空間分配5S12XS單片機(jī)中斷Page

13中斷:一個需要CPU立刻處理的內(nèi)部/外部事件中斷工作流程:中斷請求中斷標(biāo)志全局的中斷使能專門的中斷使能中斷源信號正常流程中斷請求MCU響應(yīng)中斷中斷優(yōu)先級保存返回地址查找中斷執(zhí)行中斷恢復(fù)返回地址管理保存現(xiàn)場向量表服務(wù)程序恢復(fù)現(xiàn)場5S12XS單片機(jī)中斷中斷向量表:CPU為每個響應(yīng)的中斷源指定一個標(biāo)號,這個標(biāo)號就叫做中斷向量號。每個中斷的中斷服務(wù)程序的地址都按照其中斷向量號的順序保存成一張表,叫做中斷向量表。中斷向量表是一段連續(xù)的存儲空間在復(fù)位后有默認(rèn)的起始位置(S12X單片機(jī):$FFFE~$FF10,120個中斷向量)S12X單片機(jī)有三個中斷向量地址是固定不變的,它們是復(fù)位向量($FFFE)、時鐘監(jiān)控復(fù)位($FFFC)和看門狗復(fù)位($FFFA)。其他向量可通過修改中斷向量基地址寄存器IVBR,將中斷向量表轉(zhuǎn)移到任意一個以256字節(jié)為邊界的地址空間。通過改寫中斷向量基址寄存器可以重新定位向量表每個中斷在向量表中都有相應(yīng)的表項(xiàng),該表項(xiàng)的值為該中斷對應(yīng)的服務(wù)程序的地址(地址指針)由程序代碼確定中斷向量表的每個表項(xiàng)Page

145S12XS單片機(jī)中斷中斷程序設(shè)計方法:主程序中斷源—>中斷控制(全局和專門)[—>堆棧設(shè)置][—>中斷優(yōu)先級]中斷服務(wù)程序(清中斷標(biāo)志)中斷向量表voidinitPIT(void){//定時中斷初始化函數(shù)50ms

PITCFLMT_PITE=0;//關(guān)閉PIT模塊PITCE_PCE0=1;

//定時器通道0使能

PITMUX_PMUX0=0;//定時器通道0使用微計數(shù)器0PITMTLD0=200-1;

//8位定時器初值設(shè)定。在40MHzBusClock下為5us.PITLD0=PITTIME-1;

//16位定時器初值設(shè)定。PITTIME*0.005ms

PITINTE_PINTE0=1;//定時器中斷通道0中斷使能

PITCFLMT_PITE=1;//定時器通道0使能

}voidmain(void){initPIT();

EnableInterrupts;//清除CCR的I位,開中斷(CLI)for(;;);//無限循環(huán)}voidinterrupt66PIT0(void){

PITTF_PTF0=1;//清中斷標(biāo)志位PORTB=~PORTB;//B口輸出取反}設(shè)置斷點(diǎn)(觀察SP變化)(觀察中斷向量表$FF7A)12Page

155S12XS單片機(jī)中斷宏定義與子程序的區(qū)別

宏和子程序都是為了簡化源程序的編寫,提高程序的可維護(hù)性,但是它們二者之間存在著本質(zhì)的區(qū)別:

1.程序?qū)晖ㄟ^宏擴(kuò)展來加入其定義體,宏調(diào)用多少次,就相應(yīng)擴(kuò)展多少次,所以,調(diào)用宏不會縮短目標(biāo)程序,它只是源程序級的簡化;而子程序代碼在目標(biāo)程序中只出現(xiàn)一次,調(diào)用子程序是執(zhí)行同一程序段,因此,目標(biāo)程序也得到相應(yīng)的簡化;2.宏引用語句擴(kuò)展后,目標(biāo)程序中就不再有宏引用語句,運(yùn)行時,不會有額外的時間開銷,而子程序的調(diào)用在目標(biāo)程序中仍存在,子程序的調(diào)用和返回均需要額外時間開銷。3.宏引用時,參數(shù)是通過“實(shí)參”替換“形參”的方式來實(shí)現(xiàn)傳遞的,參數(shù)形式靈活多樣。對宏調(diào)用來說,參數(shù)傳遞錯誤通常是語法錯誤,會由匯編程序發(fā)現(xiàn);而子程序調(diào)用時,參數(shù)是通過寄存器、堆棧或約定存儲單元進(jìn)行傳遞的;對子程序來說,參數(shù)傳遞錯誤通常反映為邏輯或運(yùn)行錯誤,不易排除??傊?,當(dāng)程序片段不長,速度是關(guān)鍵因素時,可采用宏來簡化源程序,但當(dāng)程序片段較長,存儲空間是關(guān)鍵因素時,可采用子程序的方法來簡化源程序和目標(biāo)程序。Page

165S12XS單片機(jī)中斷子程序調(diào)用與中斷調(diào)用(中斷響應(yīng))的區(qū)別1.子程序調(diào)用是程序預(yù)先安排好的,中斷是隨機(jī)發(fā)生的,由中斷源信號決定;2.調(diào)用子程序,是為主程序服務(wù)的,而中斷程序與主程序毫無關(guān)系;3.子程序是由調(diào)用指令給出目標(biāo)地址,中斷是根據(jù)中斷源標(biāo)號通過查詢中斷向量表獲得中斷服務(wù)程序的入口地址;4.子程序嵌套可以實(shí)現(xiàn)若干級,嵌套的級數(shù)受MCU設(shè)置的堆棧大小的限制,而中斷嵌套級數(shù)主要由中斷優(yōu)先級數(shù)來決定;5.S12XS單片機(jī)中斷響應(yīng)時自動保護(hù)現(xiàn)場(核心寄存器堆),返回時自動恢復(fù)現(xiàn)場。Page

176S12XS單片機(jī)程序設(shè)計集成開發(fā)環(huán)境IDE(IntegratedDevelopmentEnvironment):由匯編工具、交叉C編譯器、I/O模塊的專家?guī)?、源碼級調(diào)試工具等組成,能夠?yàn)橛脩糇詣咏⒐こ涛募?,生成系統(tǒng)初始化程序、設(shè)置中斷向量等,使應(yīng)用程序的開發(fā)傻瓜化。(CODEWARRIOR)標(biāo)準(zhǔn)ANSIC:通用計算機(jī)上有操作系統(tǒng)的C語言嵌入式C:C編譯器需特殊處理與CPU硬件相關(guān)的內(nèi)容,隨著單片機(jī)系統(tǒng)程序空間的增大(可達(dá)4M),C語言的應(yīng)用越來越廣泛(>4K)。嵌入式C的優(yōu)勢:移植性好、庫函數(shù)豐富、可讀性好、便于使用RTOS。匯編語言的優(yōu)勢:編寫系統(tǒng)的硬件相關(guān)部分更直觀、方便,代碼少、執(zhí)行速度快。常用于:系統(tǒng)的初始化中斷向量的初始化,開、關(guān)中斷I/O口的輸入輸出函數(shù)Page

18集成開發(fā)環(huán)境IDE:將應(yīng)用程序的編輯、編譯、鏈接、定位、調(diào)試等集成在一個大的軟件包中,簡化開發(fā)工作。但用戶往往不清楚操作的原理。編輯程序源代碼:*.c,*.asm,*.h;預(yù)編譯:對源代碼文件中的文件包含(include)、預(yù)編譯語句(#define)等進(jìn)行分析、 檢查聲明、定義的完整性,轉(zhuǎn)換成C編譯器可接受的格式;編譯:檢查和報告相關(guān)的語法錯誤,然后將C程序轉(zhuǎn)換成匯編器可接受的代碼。匯編:生成針對某種CPU的匯編浮動代碼文件,*.obj;鏈接:將浮動的*.obj文件模塊按指定順序鏈接起來,并且將所用到的C語言標(biāo)準(zhǔn)庫函 數(shù)也從各自所在的函數(shù)庫中調(diào)出,把*.obj文件中缺失的那些參數(shù)補(bǔ)上,*.prm;定位:根據(jù)目標(biāo)系統(tǒng)硬件的情況,給程序分配程序空間的地址、數(shù)據(jù)空間的地址以及 程序運(yùn)行的其實(shí)地址等,生成可執(zhí)行的目標(biāo)代碼,*.abs,*.sx;下載:將*.sx文件下載到單片機(jī)的程序空間的相應(yīng)地址內(nèi);調(diào)試、運(yùn)行反匯編:將目標(biāo)代碼反匯編成匯編語言,以便用戶對應(yīng)用程序中特別關(guān)鍵的部分進(jìn)一 步優(yōu)化(project->Disassemble)。6S12XS單片機(jī)程序設(shè)計Page

196S12XS單片機(jī)程序設(shè)計Page

20C源文件匯編源文件庫文件目標(biāo)文件C編譯器匯編編譯器鏈接器執(zhí)行文件映射文件列表文件匯編反編譯文件反編譯器鏈接配置文件*.h*.c*.c++*.asm*.inc*.prm*.obj*.lst*.map*.sx*.abs6S12XS單片機(jī)程序設(shè)計匯編程序設(shè)計:匯編指令

1.數(shù)據(jù)傳送指令

2.算術(shù)與邏輯運(yùn)算指令

3.程序控制指令

1.隱含尋址

2.立即數(shù)尋址

3.直接尋址

4.擴(kuò)展尋址

5.變址尋址6.但自動加減5位偏移量的間接尋址

7.相對尋址

8.位尋址匯編偽指令(匯編管理指令):將編譯需要的信息傳遞給編譯器,不生成可執(zhí)行代碼。

XDEFEntryEntry:

CLIANDCC #$BFM_LENGTH:LDAA#30LDAB#$2CMPBMONTHBEQFEBRARYLDX#TABLE1;LDAAMONTHDECALDAAA,XRTSFEBRARY:DECALDABYEAR+1ANDB#3BEQFINIDECAFINI:RTS

ENDPage

21功能尋址方式6S12XS單片機(jī)程序設(shè)計嵌入C程序設(shè)計:程序結(jié)構(gòu)(示例程序只看結(jié)構(gòu),不分析內(nèi)容)

#include<hidef.h>/*commondefinesandmacros*/#include"derivative.h"/*derivative-specificdefinitions*/#definePITTIME10000

constunsignedcharDisplayDecode[]={~0x3f,~0x06};unsignedcharshowdata[4];voidmain(void){EnableInterrupts;initIO();initPIT();//ATD,SPI,SCIfor(;;){Keyresult=KeyScan();Show();……}}voidinterrupt66PIT0(void){PITTF_PTF0=1;……}voiddelay(unsignedintcountert){……}unsignedcharKeyScan(){ if((PORTA>>4)!=0x0F) {switch((PORTA>>4)) {case0x0E: Keynumber=0;break; default: Keynumber=3;break;} while((PORTA>>4)!=0x0F)Show();} elseOutput<<=1; return(Keyvalue1);}Page

221234Page

23Numberingandcodingsystems7S12XS單片機(jī)外設(shè)

并行I/O

時鐘產(chǎn)生器模塊

異步串行通信SCI

同步串行通信SPIATD轉(zhuǎn)換模塊

周期中斷定時器PITPage

24Numberingandcodingsystems7S12XS單片機(jī)外設(shè)

——并行I/O

并行I/O通常在微控制器中將8個IO口合成一組,對應(yīng)一個字節(jié)的數(shù)據(jù);

11個并口(A、B、E、K、T、S、M、P、H、J、AD),配置方式分為兩類;

大多數(shù)與其它模塊復(fù)用引腳(SCI、SPI、PWM、CAN、AD);

可以通過寫寄存器配置其方向(輸入或輸出)、使能低功耗輸出以及上拉或

下拉電阻端口方向寄存器DDRA、DDRB按位控制:0->輸入1->輸出,復(fù)位后清0,默認(rèn)為輸入口端口數(shù)據(jù)寄存器PORTA、PORTB按位輸出或輸入:0->低電平1->高電平DDRA=0x0F;//A0~A3輸出A4~A7輸入PORTA=Output;//A0~A3輸出

Input=PORTA;//A4~A7輸入Page

25Numberingandcodingsystems7S12XS單片機(jī)外設(shè)

——并行I/O數(shù)碼管的顯示7段數(shù)碼管編碼bcdefgaNgfedcba01111113F111062111115B3111114F41111665111116D61111117D711107811111117F91111116F共陰型:1–表示點(diǎn)亮0–表示熄滅共陽型:取反DPPage

26Numberingandcodingsystems7S12XS單片機(jī)外設(shè)

——并行I/O數(shù)碼管的顯示7段數(shù)碼管編碼動態(tài)顯示原理1、段控制信息確定顯示碼2、位控制信號確定顯示位3、利用視覺暫留現(xiàn)象,刷新頻率得大于80Hz,即所有LED在12ms內(nèi)必須刷新一次以得到穩(wěn)定的數(shù)字顯示constunsignedcharDisplayDecode[]={~0x3f,~0x06,~0x5b,~0x4f,~0x66,~0x6d,~0x7d,~0x07,~0x7f,~0x6f,~0x77,~0x7c,~0x39,~0x5e,~0x79,~0x71,~0x40};//0-9,A-F//數(shù)碼管顯示譯碼

unsignedcharShowcode(unsignedcharnum){

return(DisplayDecode[num]);}

Page

26段控制位控制Page

27Numberingandcodingsystems7S12XS單片機(jī)外設(shè)

——并行I/O數(shù)碼管的顯示多位顯示 voidShow() { unsignedcharDisplayNumber; PTT=0x0f; for(DisplayNumber=0;DisplayNumber<4;DisplayNumber++) { PTP=Showcode(showdata[DisplayNumber]); if(DisplayNumber==2)PTP&=0x7f; switch(DisplayNumber) { case0: PTT=0xfe; break; case1: PTT=0xfd; break; case2: PTT=0xfb; break; default: PTT=0xf7; break; } delay(1); } }Page

28Numberingandcodingsystems7S12XS單片機(jī)外設(shè)

——并行I/O數(shù)碼管的顯示延時子程序

voiddelay(unsignedintcountert)//3ms { unsignedinti,j; for(i=0;i<countert;i++) for(j=0;j<4000;)j++; }晶振16M,總線時鐘8M,延時為:4000*(1+2+3)/(8*106)s=3ms123/1Numberingandcodingsystems7S12XS單片機(jī)外設(shè)

——并行I/O鍵盤識別1、有無鍵按下2、軟件延時消抖3、掃描求鍵碼4、等待鍵釋放5、查表求鍵值掃描策略1、循環(huán)掃描;2、定時掃描:需要確定掃描頻率,觸點(diǎn)接觸時間在幾十到幾百ms量級;3、鍵盤中斷:任何按鍵按下時都產(chǎn)生中斷,在中斷服務(wù)程序中啟動鍵盤掃描,需要設(shè)計相應(yīng)的硬件電路。查表求鍵值Page

29Page

30

5V行端口輸出000011011111X1(PA4)X2(PA5)X3(PA6)X4(PA7)列端口輸入0123456789ABCDEF1、當(dāng)所有行輸出為0,列輸入碼若不全為1,說明有鍵按下;2、令一行輸出為0,其余行輸出為1,列輸入碼若不全為1,說明該行有鍵按下;

3、根據(jù)行輸出碼和列輸入碼中同時為0的行號和列號,可以確定鍵號。Y1(PA0)Y2(PA1)Y3(PA2)Y4(PA3)7S12XS單片機(jī)外設(shè)

——并行I/O鍵盤掃描法軟硬件設(shè)計示例程序:unsignedcharKeyScan(){unsignedcharInput,Output,Keynumber,Keyvalue1,i;

Keyvalue1=0xFF;

Output=0xF0;PORTA=Output;Input=PORTA>>4;

if(Input!=0x0F) { delay(4); Input=PORTA>>4;

if(Input!=0x0F){

Output=0x01;

for(i=0;i<RowSize;i++){ PORTA=~Output;Input=PORTA>>4;

if(Input!=0x0F){

switch(Input){ case0x0E:Keynumber=0;break; case0x0D:Keynumber=1;break; case0x0B:Keynumber=2;break; case0x07:Keynumber=3;break;}

Keynumber=Keynumber+i*ColumnSize;

Keyvalue1=KeyDecode[Keynumber];break;} elseOutput<<=1; } } } return(Keyvalue1);}第十四章數(shù)碼管的顯示與鍵盤識別

—鍵盤識別Page

315V000011011111Y1(PA0)X1(PA4)Y2(PA1)Y3(PA2)Y4(PA3)X2(PA5)X3(PA6)X4(PA7)0123456789ABCDEF變化:1、硬件連線的變化2、4*4—>3*53、鍵值安排的變化第十四章數(shù)碼管的顯示與鍵盤識別

—鍵盤識別Page

321234567890ABCDEF鍵值表:constunsignedcharKeyDecode[]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,

0x09,0x00,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};

行端口輸出000011011111Y1X1Y2Y3Y4X2X3X4列端口輸入0123456789ABCDEFREFDIV[5..0]:分頻因子,有效值為0~63。例如:已知16M晶體,設(shè)置FREF=2M,則REFDV=16/2-1=7。

REFDV=00000111

溫馨提示

  • 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

提交評論