目錄/提綱:……
一、考核知識點:
二、考核要求:
一、考核知識點:
二、考核要求:
一、考核知識點:
二、考核要求:
一、考核知識點:
二、考核要求:
一、考核知識點:
二、考核要求:
一、考核知識點:
二、考核要求:
一、考核知識點:
二、考核要求:
一、考核知識點:
二、考核要求:
一、考核知識點:
二、考核要求:
一、考核知識點:
二、考核要求:
一、考試考核要求
二、平時成績考核要求及說明
三、理論考試說明
四、考試考核要求層次
一、實驗?zāi)康模?br>二、實驗器材:
三、實驗要求:
四、實驗原理:
五、實驗步驟:
六、實驗分析與總結(jié)
七、思考與練習
二、選擇題
三、判斷題
四、簡答題
(一)提供leda51演示asc16字符的簡單點陣顯示
(二)ledhz51兩個示例程序
三、理論考試說明
四、考試考核要求層次
一、實驗?zāi)康模?br>二、實驗器材:
三、實驗要求:
四、實驗原理:
五、實驗步驟:
六、實驗分析與總結(jié)
七、思考與練習
二、選擇題
三、判斷題
四、簡答題
(一)提供leda51演示asc16字符的簡單點陣顯示
(二)ledhz51兩個示例程序
……
第一章 微型計算機基礎(chǔ)
一、 考核知識點:
1、 計算機的數(shù)據(jù)表示和數(shù)據(jù)運算
2、 計算機的各種編碼
3、 計算機的組成及工作過程
二、 考核要求:
1、識記計算機的各種編碼
2、領(lǐng)會計算機的組成及工作過程
3、簡明應(yīng)用計算機的數(shù)據(jù)表示和數(shù)據(jù)運算
第二章 51單片機的硬件結(jié)構(gòu)和原理
一、考核知識點:
1、 單片機的發(fā)展史及各方面的應(yīng)用
2、 51單片機的分類和內(nèi)部結(jié)構(gòu)
3、 單片機的引腳和功能
4、 單片機工作的時序
二、 考核要求:
1、 識記單片機的發(fā)展史及各方面的應(yīng)用
2、識記單片機的引腳和功能
3、領(lǐng)會單片機工作的時序
4、簡明應(yīng)用51單片機的分類和內(nèi)部結(jié)構(gòu)
第三章 51單片機指令系統(tǒng)
一、 考核知識點:
1、 單片機的尋址方式
2、 單片機的指令系統(tǒng)
3、 助記符指令和二進制代碼指令的異同
二、 考核要求:
1、領(lǐng)會助記符指令和二進制代碼指令的異同
2、綜合應(yīng)用單片機的尋址方式
3、綜合應(yīng)用單片機的指令系統(tǒng)
第四章 匯編語言程序設(shè)計
一、考核知識點:
1、 偽指令
2、 匯編語言設(shè)計技巧
3、 匯編語言到機器語言的編譯過程
二、考核要求:
1、領(lǐng)會偽指令
2、簡明應(yīng)用匯編語言設(shè)計技巧
3、綜合應(yīng)用匯編語言到機器語言的編譯過程
第五章 51單片機的中斷系統(tǒng)
一、 考核知識點:
1、 中斷基本概念
2、 中斷系統(tǒng)的程序編制
3、 中斷系統(tǒng)的初步應(yīng)用
二、 考核要求:
1、領(lǐng)會中斷基本概念
2、簡明應(yīng)用中斷系統(tǒng)解決工程問題
3、綜合簡明應(yīng)用中斷系統(tǒng)的程序編制
第六章 51單片機的內(nèi)部定時器/計數(shù)器及串行接口
一、考核知識點:
1、 單片機內(nèi)部定時器/計數(shù)器的結(jié)構(gòu)及工作原理
2、 定時器/計數(shù)器的程序編制
3、 定時器/計數(shù)器的初步應(yīng)用
4、 串行口的基本概念
5、 串行口的程序編制
6、 串行口的初步應(yīng)用
二、考核要求:
1、識記串行口的基本概念
2、領(lǐng)會單片機內(nèi)部定時器/計數(shù)器的結(jié)構(gòu)及工作原理
3、簡明應(yīng)用定時器/計數(shù)器解決工程問題
4、簡明應(yīng)用串行口的程序編制
5、簡明應(yīng)用串行口解決工程問題
6、綜合應(yīng)用定時器/計數(shù)器的程序編制
第七章 單片機的系統(tǒng)擴展與接口技術(shù)
一、 考核知識點:
1、 單片機外部總線的擴展
2、 外部存儲器的擴展
3、 i/o接口的擴展
4、 管理功能部件的擴展
5、 a/d和d/a接口功能的擴展
二、 考核要求:
1、識記單片機外部總線的擴展
2、識記管理功能部件的擴展
3、簡明應(yīng)用a/d和d/a接口功能的擴展
4、綜合應(yīng)用外部存儲器的擴展
5、綜合應(yīng)用i/o接口的擴展
第八章 單片機應(yīng)用系統(tǒng)設(shè)計
一、 考核知識點:
1、 單片機應(yīng)用系統(tǒng)的開發(fā)過程
2、 單片機開發(fā)工具的分類和使用
3、 單片機應(yīng)用系統(tǒng)的軟件和硬件調(diào)試過程
二、 考核要求:
1、識記單片機應(yīng)用系統(tǒng)的軟件和硬件調(diào)試過程
2、領(lǐng)會單片機應(yīng)用系統(tǒng)的開發(fā)過程
3、領(lǐng)會單片機開發(fā)工具的分類和使用
第九章 單片機系統(tǒng)的抗干擾技術(shù)
一、考核知識點:
1、 單片機干擾源與分類
2、 干擾對單片機系統(tǒng)的影響
3、 硬件抗干擾技術(shù)
4、 軟件抗干擾技術(shù)
5、 數(shù)字濾波
二、考核要求:
1、識記單片機干擾源與分類
2、識記干擾對單片機系統(tǒng)的影響
3、識記數(shù)字濾波
4、簡明應(yīng)用硬件抗干擾技術(shù)
5、簡明應(yīng)用軟件抗干擾技術(shù)
第十章 其它單片機簡介
一、考核知識點:
1、 at89c系列單片機的特點與性能
2、 其它8位單片機的特點與性能
3、 16位、32位單片機的特點與性能
二、考核要求:
1、識記其它8位單片機的特點與性能
2、識記16位、32位單片機的特點與性能
3、領(lǐng)會at89c系列單片機的特點與性能
《單片機原理及應(yīng)用技術(shù)》考試大綱
《單片機原理及應(yīng)用技術(shù)》課程是一門面向應(yīng)用的專業(yè)技術(shù)課。單片機原理與應(yīng)用介紹了單片機的基本知識和單片機技術(shù)的應(yīng)用,其內(nèi)容與工程實際緊密聯(lián)系,實用性很強,是一門在理論指導下, 偏重于實際應(yīng)用的課程。本課程具有實用性強、理論和實踐結(jié)合、軟硬件結(jié)合等特點。本課程圍繞使用較為廣泛的mcs-51系列單片機進行學習。本課程已成為理、工科電子類專業(yè)的一門基礎(chǔ)課程,這是從電子系統(tǒng)設(shè)計角度考慮的,它體現(xiàn)了電子系統(tǒng)設(shè)計的方法和硬件結(jié)構(gòu)的變化。通過該課程的學習,要求學生掌握80c51單片機的工作原理、編程技術(shù),掌握單片機應(yīng)用系統(tǒng)的擴展方法和實際應(yīng)用。因此,以單片機為內(nèi)核,分析和設(shè)計一個簡單的計算機應(yīng)用系統(tǒng)是我們學習本課程要達到的目的。
第一部分 考試大綱
1 單片機概述
本章為單片機的基本概念。
1.掌握有關(guān)單片機的基本概念、單片機的特點、單片機的應(yīng)用。
2.理解單片機的總體組成。
3.了解單片微型計算機的產(chǎn)生、發(fā)展歷史、主要品種及系列。
2 單片機結(jié)構(gòu)和原理
本章以80c51單片機為例介紹了主要硬件結(jié)構(gòu)和主要功能,著重掌握系統(tǒng)所提供的資源特性及其功能特性。
1.掌握80c51的內(nèi)部結(jié)構(gòu)。
2.掌握80c51單片機的存儲器組成。
3.掌握單片機并行輸入/輸出端口結(jié)構(gòu)及功能。
4.了解單片機的時序概念和復位工作方式。
5.掌握單片機引腳功能
3 指令系統(tǒng)
1.掌握指令與偽指令的正確格式。
2.掌握七種尋址方式的使用及尋址方式的含義。
3.掌握五類指令的功能和使用,特別是傳送指令。
4.理解書中所列例題與習題。
4 匯編語言程序設(shè)計舉例
本章為mcs-51的一些常用偽指令,介紹順序結(jié)構(gòu)程序設(shè)計、分支結(jié)構(gòu)程序設(shè)計、循環(huán)結(jié)構(gòu)程序設(shè)計和子程序的設(shè)計。
1.程序設(shè)計的基本步驟、各種基本的結(jié)構(gòu)化程序設(shè)計方法;讀懂較復雜的常用程序。
2.掌握數(shù)據(jù)傳送指令的編寫。
3. 理解算術(shù)運算程序設(shè)計。
4. 理解數(shù)碼轉(zhuǎn)換程序設(shè)計。
5. 理解查表程序設(shè)計。
6. 理解子程序設(shè)計和參數(shù)傳遞。
7. 理解邏輯運算程序設(shè)計
5中斷系統(tǒng)
1.掌握有關(guān)中斷、中斷源、中斷優(yōu)先級等概念。
2.掌握中斷響應(yīng)過程。
3.掌握中斷優(yōu)先級排列。
4.掌握中斷允許寄存器ie、中斷優(yōu)先級寄存器ip各位的含義及設(shè)置。
5.掌握外部中斷的兩種觸發(fā)方式:電平觸發(fā)、邊沿觸發(fā)。
6 定時/計數(shù)器
1.掌握定時器/計數(shù)器的四種工作方式及有何不同。
2.掌握tmod和tcon中各位的含義、作用。
4.掌握不同工作方式計數(shù)初值與定時時間的關(guān)系,即能根據(jù)定時時間算出計數(shù)初值,完成定時器的初始化編程和簡單應(yīng)用編程。
7 串行通信
1.理解有關(guān)通信、協(xié)議的概念。
2.理解串行口的四種工作方式。
3.掌握sbuf的含義及作用。
4.了解串行口的工作原理。
5.了解scon中每一位的含義及smod位的作用。
6.掌握串行通信總線rs-232c標準、rs-232c電平轉(zhuǎn)換。
7.了解rs-232c與mcs-51的接口。
8 系統(tǒng)擴展技術(shù)
1.掌握總線、驅(qū)動、鎖存和譯碼、地址重疊的概念。
2.掌握程序存儲器的擴展:eprom程序存儲器及其擴展方法。
3.掌握數(shù)據(jù)存儲器的擴展:靜態(tài)存儲器sram及其擴展方法。
4.掌握簡單i/o口的擴展。
5.掌握8255a可編程并行接口:結(jié)構(gòu)、控制字、工作方式、與8255a的接口方法。
9 a/d和d/a轉(zhuǎn)換器接口技術(shù)
1.掌握dac0832與單片機的接口方法與編程。
2.掌握adc0809與單片機的接口方法與編程。
10 鍵盤/顯示接口技術(shù)
1.掌握led顯示器結(jié)構(gòu)、工作原理和顯示方式。
2.掌握鍵盤接口原理。
3.理解led顯示器與80c51單片機接口。
4.理解鍵輸入程序設(shè)計方法。
5.了解行列式鍵盤與80c51單片機接口。
11、功率接口技術(shù)
1.掌握簡單開關(guān)量接口、光電耦合接口和繼電器接口。
2.晶閘管與故態(tài)繼電器的應(yīng)用接口。
12、單片機系統(tǒng)設(shè)計技術(shù)
掌握單片機系統(tǒng)的設(shè)計、開發(fā)、調(diào)試的原則、步驟及方法
……(新文秘網(wǎng)http://jey722.cn省略5844字,正式會員可完整閱讀)……
_____2us__________。
8、外圍擴展芯片的選擇方法有兩種,它們分別是___線選法_______________和_____譯碼法__________。
9、單片機的內(nèi)部ram區(qū)中,可以位尋址的地址范圍是____20h~2fh______________,特殊功能寄存器中,可位尋址的地址是___是能被8整除的地址_________________。
10、子程序返回指令是___ret______,中斷子程序返回指令是__ reti 。
11、8051單片機的存儲器的最大特點是 內(nèi)部ram 與 外部ram 分開編址。
12、8051最多可以有 32 個并行輸入輸出口,最少也可以有 8 個并行口。
13、 函數(shù) 是c語言的基本單位。
14、串行口方式2接收到的第9位數(shù)據(jù)送 scon 寄存器的 rb8 位中保存。
15、mcs-51內(nèi)部提供 3 個可編程的 16 位定時/計數(shù)器,定時器有 4 種工作方式。
16、一個函數(shù)由兩部分組成,即 說明部分 和 語句部分 。
17、串行口方式3發(fā)送的第9位數(shù)據(jù)要事先寫入 scon 寄存器的 tb8 位。
18、利用8155h可以擴展 3 個并行口, 256 個ram單元。
19、c語言中輸入和輸出操作是由庫函數(shù) scanf 和 printf 等函數(shù)來完成。
二、選擇題
1、c語言中最簡單的數(shù)據(jù)類型包括( b )。
a、整型、實型、邏輯型 b、整型、實型、字符型
c、整型、字符型、邏輯型 d、整型、實型、邏輯型、字符型
2、當mcs-51單片機接有外部存儲器,p2口可作為 ( c )。
a、數(shù)據(jù)輸入口 b、數(shù)據(jù)的輸出口
c、準雙向輸入/輸出口 d、輸出高8位地址
3、下列描述中正確的是( d )。
a、程序就是軟件 b、軟件開發(fā)不受計算機系統(tǒng)的限制
c、軟件既是邏輯實體,又是物理實體 d、軟件是程序、數(shù)據(jù)與相關(guān)文檔的集合
4、下列計算機語言中,cpu能直接識別的是( d )。
a、 自然語言 b、 高級語言 c、 匯編語言 d、機器語言
5、mcs-5l單片機的堆棧區(qū)是設(shè)置在( c )中。
a、片內(nèi)rom區(qū) b、片外rom區(qū) c、片內(nèi)ram區(qū) d、片外ram區(qū)
6、以下敘述中正確的是( c )。
a、用c語言實現(xiàn)的算法必須要有輸入和輸出操作
b、用c語言實現(xiàn)的算法可以沒有輸出但必須要有輸入
c、用c程序?qū)崿F(xiàn)的算法可以沒有輸入但必須要有輸出
d、用c程序?qū)崿F(xiàn)的算法可以既沒有輸入也沒有輸出
7、定時器/計數(shù)器工作方式1是( d )。
a、8位計數(shù)器結(jié)構(gòu) b、2個8位計數(shù)器結(jié)構(gòu)
c、13位計數(shù)結(jié)構(gòu) d、16位計數(shù)結(jié)構(gòu)
8、c語言提供的合法的數(shù)據(jù)類型關(guān)鍵字是( b )。
a、double b、short c、integer d、char
9、片內(nèi)ram的20h~2fh為位尋址區(qū),所包含的位地址是( b )。
a、00h~20h b、00h~7fh c、20h~2fh d、00h~ffh
10、以下能正確定義一維數(shù)組的選項是( b )。
a、int a[5]={0,1,2,3,4,5}; b、char a[ ]={0,1,2,3,4,5};
c、char a={'a','b','c'}; d、int a[5]="0123";
11、數(shù)據(jù)的存儲結(jié)構(gòu)是指(d )。
a、存儲在外存中的數(shù)據(jù) b、數(shù)據(jù)所占的存儲空間量
c、數(shù)據(jù)在計算機中的順序存儲方式 d、數(shù)據(jù)的邏輯結(jié)構(gòu)在計算機中的表示
12、下列關(guān)于棧的描述中錯誤的是(c )。
a、棧是先進后出的先性表 b、棧只能順序存儲
c、棧具有記憶作用 d、對棧的插入和刪除操作中,不需要改變棧底指針
13、在寄存器間接尋址方式中,間址寄存器中存放的數(shù)據(jù)是( b )。
a、參與操作的數(shù)據(jù) b、操作數(shù)的地址值
c、程序的轉(zhuǎn)換地址 d、指令的操作碼
14、mcs-51單片機的復位信號是( a )有效。
a、高電平 b、低電平 c、脈沖 d、下降沿
15、為了使模塊盡可能獨立,要求( b )。
a、模塊的內(nèi)聚程度要盡量高,且各模塊間的耦合程度要盡量強
b、模塊的內(nèi)聚程度要盡量高,且各模塊間的耦合程度要盡量弱
c、模塊的內(nèi)聚程度要盡量低,且各模塊間的耦合程度要盡量弱
d、模塊的內(nèi)聚程度要盡量低,且各模塊間的耦合程度要盡量強
16、若mcs-51單片機使用晶振頻率為6mhz時,其復位持續(xù)時間應(yīng)該超過( b )。
a、2μs b、4μs c、8μs d、1ms
17、以下選項中可作為c語言合法常量的是( a )
a、-80 b、-080 c、-8e1.0 d、-80.0e
18、能夠用紫外光擦除rom中程序的只讀存儲器稱為( c )。
a、掩膜rom b、prom c、eprom d、eeprom
19、以下不能定義為用戶標識符是( d )。
a、main b、_0 c、_int d、sizeof
20、下選項中,不能作為合法常量的是( b )。//冪不能為小數(shù)
a、1.234e04 b、1.234e0.4 c、1.234e+4 d、1.234e0
21、以下敘述中錯誤的是( c )
a、對于double類型數(shù)組,不可以直接用數(shù)組名對數(shù)組進行整體輸入或輸出
b、數(shù)組名代表的是數(shù)組所占存儲區(qū)的首地址,其值不可改變
c、當程序執(zhí)行中,數(shù)組元素的下標超出所定義的下標范圍時,系統(tǒng)將給出“下標越界”的出錯信息
d、可以通過賦初值的方式確定數(shù)組元素的個數(shù)
22、以下與函數(shù)fseek(fp,0l,seek_set)有相同作用的是( d )
a、feof(fp) b、ftell(fp) c、fgetc(fp) d、rewind(fp)
23、存儲16*16點陣的一個漢字信息,需要的字節(jié)數(shù)為( a )
a、 32 b、 64 c、 128 d、 256
24、已知1只共陰極led顯示器,其中a筆段為字形代碼的最低位,若需顯示數(shù)字1,則它的字形代碼應(yīng)為( b )。
a、06h b、f9h c、30h d、cfh
25、在c語言中,合法的長整型常數(shù)是( a )
a、 ol b、 4962710 c、 324562& d、 216d
26、以下選項中合法的字符常量是( b )
a、 "b" b、 ’\010’ c、 68 d、 d
27、若psw.4=0,psw.3=1,要想把寄存器r0的內(nèi)容入棧,應(yīng)使用( d )指令。
a、push r0 b、push @r0 c、push 00h d、push 08h
28、在片外擴展一片2764程序存儲器芯片要( b )地址線。
a、8根 b、13根 c、16根 d、20根
29、設(shè)mcs-51單片機晶振頻率為12mhz,定時器作計數(shù)器使用時,其最高的輸入計數(shù)頻率應(yīng)為( c )
a、2mhz b、1mhz c、500khz d、250khz
30、下列數(shù)據(jù)字定義的數(shù)表中,( a )是錯誤的。
a、dw “aa” b、dw “a” c、dw “oabc” d、dw oabch
三、判斷題
( √ )1、在對某一函數(shù)進行多次調(diào)用時,系統(tǒng)會對相應(yīng)的自動變量重新分配存儲單元。
。 * )2、在c語言的復合語句中,只能包含可執(zhí)行語句。
。 √ )3、自動變量屬于局部變量。
。 * )4、continue 和break都可用來實現(xiàn)循環(huán)體的中止。
。 √ )5、字符常量的長度肯定為1。
( * )6、在mcs-51系統(tǒng)中,一個機器周期等于1.5μs。
。 √ )7、c語言允許在復合語句內(nèi)定義自動變量。
。 √ )8、若一個函數(shù)的返回類型為void,則表示其沒有返回值。
。 * )9、所有定義在主函數(shù)之前的函數(shù)無需進行聲明。
。 * )10、定時器與計數(shù)器的工作原理均是對輸入脈沖進行計數(shù)。
。 * )11、end表示指令執(zhí)行到此結(jié)束。
。 √ )12、adc0809是8位逐次逼近式模/數(shù)轉(zhuǎn)換接口。
。 √ )13、mcs-51的相對轉(zhuǎn)移指令最大負跳距是127b。
。 * )14、mcs-51的程序存儲器只是用來存放程序的。
。 √ )15、tmod中的gate=1時,表示由兩個信號控制定時器的的啟停。
。 * )16、mcs-51的特殊功能寄存器分布在60h~80h地址范圍內(nèi)。
。 * )17、mcs-51系統(tǒng)可以沒有復位電路。
。 * )18、片內(nèi)ram與外部設(shè)備統(tǒng)一編址時,需要專門的輸入/輸出指令。
。 √ )19、鎖存器、三態(tài)緩沖寄存器等簡單芯片中沒有命令寄存和狀態(tài)寄存等功能。
。 √ )20、使用8751且 =1時,仍可外擴64kb的程序存儲器。
四、簡答題
1、在使用8051的定時器/計數(shù)器前,應(yīng)對它進行初始化,其步驟是什么?
答: (1)確定t/c的工作方式——編程tmod寄存器;
(2)計算t/c中的計數(shù)初值,并裝載到th和tl;
(3)t/c在中斷方式工作時,須開cpu中斷和源中斷——編程ie寄存器;
(4)啟動定時器/計數(shù)器——編程tcon中tr1或tr0位。
2、什么是重入函數(shù)?重入函數(shù)一般什么情況下使用,使用時有哪些需要注意的地方?
答: 多個函數(shù)可以同時使用的函數(shù),稱為重入函數(shù)。
通常情況下,c51函數(shù)不能被遞歸調(diào)用,也不能應(yīng)用導致遞歸調(diào)用的結(jié)構(gòu)。有此限制是由于函數(shù)參數(shù)和局部變量是存儲在固定的地址單元中。重入函數(shù)特性允許你聲明一個重入函數(shù)。即可以被遞歸調(diào)用的函數(shù)。
重入函數(shù)可以被遞歸調(diào)用,也可以同時被兩個或更多的進程調(diào)用。重入函數(shù)在實時應(yīng)用中及中斷服務(wù)程序代碼和非中斷程序代碼必須共用一個函數(shù)的場合中經(jīng)常用到。
3、8051引腳有多少i/o線?他們和單片機對外的地址總線和數(shù)據(jù)總線有什么關(guān)系?地址總線和數(shù)據(jù)總線各是幾位?
答:8051引腳共有40個引腳,8051的地址總線由p2和p0口提供,p2口是地址總線的高8位,p0口是地址總線的低8位;數(shù)據(jù)總線由p0口提供;p0口的地址總線和數(shù)據(jù)總線是分時進行的,p0口的地址總線需要外接地址鎖存器完成地址鎖存。
地址總線共16位,數(shù)據(jù)總線是8位。
4、在有串行通信時,定時器/計數(shù)器1的作用是什么,怎樣確定串行口的波特率?
答:在有串行通信時,定時器/計數(shù)器1的作用是串行口發(fā)生器。
串行口的波特率根據(jù)串行口的工作方式具有不同的計算方式:
方式0的波特率固定為晶體振蕩器的十二分之一;
方式1的波特率=2smod.(定時器1的溢出率)/32;
方式2波特率=2smod.(fosc/64);
方式3波特率同方式1(定時器l作波特率發(fā)生器)。
5、如何消除鍵盤的抖動?怎樣設(shè)置鍵盤中的復合鍵?
答:由于按鍵是機械開關(guān)結(jié)構(gòu),所以當用手按下其中一個鍵時,往往會出現(xiàn)所按鍵在閉合位置和斷開位置之間發(fā)生跳幾下后才會穩(wěn)定到閉合狀態(tài)的情況。在釋放一個鍵時,也會出現(xiàn)類似的情況,這就是鍵的抖動,抖動的持續(xù)時間不一,但通常不會大于10ms。
若抖動問題不解決,就會引起對閉合鍵的多次讀入。對于鍵抖動最方便的解決方法就是當發(fā)現(xiàn)有鍵按下后,不是立即進行掃描,而是延時大約10ms后再進行。由于一個鍵按下的時間一般會持續(xù)上百毫秒,所以延遲10ms后再掃描處理并不遲。
復合鍵可以仿照計算機復合鍵的處理方法,通?梢约僭O(shè)一個鍵具有復合功能,再與其它減的鍵值組合成復合鍵。
1、矩陣式鍵盤的結(jié)構(gòu)與工作原理
在鍵盤中按鍵數(shù)量較多時,為了減少i/o口的占用,通常將按鍵排列成矩陣形式,如圖1所示。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接。這樣,一個端口(如p1口)就可以構(gòu)成4*4=16個按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構(gòu)成20鍵的鍵盤,而直接用端口線則只能多出一鍵(9鍵)。由此可見,在需要的鍵數(shù)比較多時,采用矩陣法來做鍵盤是合理的。
矩陣式結(jié)構(gòu)的鍵盤顯然比直接法要復雜一些,識別也要復雜一些,上圖中,列線通過電阻接正電源,并將行線所接的單片機的i/o口作為輸出端,而列線所接的i/o口則作為輸入。這樣,當按鍵沒有按下時,所有的輸出端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會被拉低,這樣,通過讀入輸入線的狀態(tài)就可得知是否有鍵按下了。具體的識別及編程方法如下所述。
2、矩陣式鍵盤的按鍵識別方法
確定矩陣式鍵盤上何鍵被按下介紹一種“行掃描法”。
行掃描法 行掃描法又稱為逐行(或列)掃描查詢法,是一種最常用的按鍵識別方法,如上圖所示鍵盤,介紹過程如下。
1、判斷鍵盤中有無鍵按下 將全部行線y0-y3置低電平,然后檢測列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個按鍵之中。若所有列線均為高電平,則鍵盤中無鍵按下。
2、判斷閉合鍵所在的位置 在確認有鍵按下后,即可進入確定具體閉合鍵的過程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時,其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測各列線的電平狀態(tài)。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。
下面給出一個具體的例子:
圖仍如上所示。8031單片機的p1口用作鍵盤i/o口,鍵盤的列線接到p1口的低4位,鍵盤的行線接到p1口的高4位。列線p1.0-p1.3分別接有4個上拉電阻到正電源+5v,并把列線p1.0-p1.3設(shè)置為輸入線,行線p1.4-p.17設(shè)置為輸出線。4根行線和4根列線形成16個相交點。
1、檢測當前是否有鍵被按下。檢測的方法是p1.4-p1.7輸出全“0”,讀取p1.0-p1.3的狀態(tài),若p1.0-p1.3為全“1”,則無鍵閉合,否則有鍵閉合。
2、去除鍵抖動。當檢測到有鍵按下后,延時一段時間再做下一步的檢測判斷。
3、若有鍵被按下,應(yīng)識別出是哪一個鍵閉合。方法是對鍵盤的行線進行掃描。p1.4-p1.7按下述4種組合依次輸出:
p1.7 1 1 1 0
p1.6 1 1 0 1
p1.5 1 0 1 1
p1.4 0 1 1 1
在每組行輸出時讀取p1.0-p1.3,若全為“1”,則表示為“0”這一行沒有鍵閉合,否則有鍵閉合。由此得到閉合鍵的行值和列值,然后可采用計算法或查表法將閉合鍵的行值和列值轉(zhuǎn)換成所定義的鍵值
4、為了保證鍵每閉合一次cpu僅作一次處理,必須卻除鍵釋放時的抖動。
鍵盤掃描程序:
從以上分析得到鍵盤掃描程序的流程圖如圖2所示。程序如下
scan: mov p1,#0fh
mov a,p1
anl a,#0fh
cjne a,#0fh,ne*t1
sjmp ne*t3
ne*t1: acall d20ms
mov a,#0efh
ne*t2: mov r1,a
mov p1,a
mov a,p1
anl a,#0fh
cjne a,#0fh,kcode;
mov a,r1
setb c
rlc a
jc ne*t2
ne*t3: mov r0,#00h
ret
kcode: mov b,#0fbh
ne*t4: rrc a
inc b
jc ne*t4
mov a,r1
swap a
ne*t5: rrc a
inc b
inc b
inc b
inc b
jc ne*t5
ne*t6: mov a,p1
anl a,#0fh
cjne a,#0fh,ne*t6
mov r0,#0ffh
ret
鍵盤處理程序就作這么一個簡單的介紹,實際上,鍵盤、顯示處理是很復雜的,它往往占到一個應(yīng)用程序的大部份代碼,可見其重要性,但說到,這種復雜并不來自于單片機的本身,而是來自于操作者的習慣等等問題,因此,在編寫鍵盤處理程序之前,最好先把它從邏輯上理清,然后用適當?shù)乃惴ū硎境鰜恚詈笤偃懘a,這樣,才能快速有效地寫好代碼。
到本課為止,本站教程暫告一個段落!感謝大家的關(guān)心和支持!
矩陣按鍵部分由16個輕觸按鍵按照4行4列排列,連接到j(luò)p50端口。將行線所接的單片機的i/o口作為輸出端,而列線所接的i/o口則作為輸入。這樣,當按鍵沒有按下時,所有的輸出端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會被拉低,這樣,通過讀入輸入線的狀態(tài)就可得知是否有鍵按下了。確定矩陣式鍵盤上何鍵被按下,介紹一種“行掃描法”。 行掃描法 行掃描法又稱為逐行(或列)掃描查詢法,是一種最常用的按鍵識別方法.判斷鍵盤中有無鍵按下: 將全部行線置低電平,然后檢測列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個按鍵之中。若所有列線均為高電平,則鍵盤中無鍵按下。 判斷閉合鍵所在的位置: 在確認有鍵按下后,即可進入確定具體閉合鍵的過程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時,其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測各列線的電平狀態(tài)。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。
下面給出一個具體的例子:
電路圖路徑:g:\圖片\電路圖片\*l100097.jpg
8031單片機的p1口用作鍵盤i/o口,鍵盤的列線接到p1口的低4位,鍵盤的行線接到p1口的高4位。列線p1.0-p1.3設(shè)置為輸入線,行線p1.4-p.17設(shè)置為輸出線。4根行線和4根列線形成16個相交點。
1.檢測當前是否有鍵被按下。檢測的方法是p1.4-p1.7輸出全“0”,讀取p1.0-p1.3的狀態(tài),若p1.0-p1.3為全“1”,則無鍵閉合,否則有鍵閉合。
2.去除鍵抖動。當檢測到有鍵按下后,延時一段時間再做下一步的檢測判斷。
3. 若有鍵被按下,應(yīng)識別出是哪一個鍵閉合。方法是對鍵盤的行線進行掃描。p1.4-p1.7按下述4種組合依次輸出:
p1.7 1 1 1 0
p1.6 1 1 0 1
p1.5 1 0 1 1
p1.4 0 1 1 1
在每組行輸出時讀取p1.0-p1.3,若全為“1”,則表示為“0”這一行沒有鍵閉合,否則有鍵閉合。由此得到閉合鍵的行值和列值,然后可采用計算法或查表法將閉合鍵的行值和列值轉(zhuǎn)換成所定義的鍵值。
4. 為了保證鍵每閉合一次cpu僅作一次處理,必須去除鍵釋放時的抖動。
實驗?zāi)康模?通過*l1000的16位矩陣按鍵, 在數(shù)碼管上分別顯示0---9,a,b,c,d,e,f。
接線方法: 1用一條8pin數(shù)據(jù)排線,把矩陣按鍵部份的jp50,接到cpu部份的p1口jp44.
2 接8位數(shù)碼管的數(shù)據(jù)線。將數(shù)碼管部份的數(shù)據(jù)口 jp5接到cpu部份的p0口jp51.
3 接8位數(shù)碼管的顯示位線。將數(shù)碼管部份的顯示位口 jp8接到cpu部份的p2口jp52.
參考程序:
;本程序?qū)崿F(xiàn)掃描按鍵顯示功能.
;分別按16個鍵盤顯示分別顯示數(shù)字123a456b789c*0#d
;鍵盤口p1,數(shù)碼管顯示第二位p21, 數(shù)碼管段位p0口
org 0000h
ajmp main
org 0030h
main:
mov dptr,#tab ;將表頭放入dptr
lcall key ;調(diào)用鍵盤掃描程序
movc a,@a+dptr ;查表后將鍵值送入acc
mov p0,a ;將acc值送入p0口
clr p2.1 ;開顯示
ljmp main ;返回反復循環(huán)顯示
key:
lcall ks ;調(diào)用檢測按鍵子程序
jnz k1 ;有鍵按下繼續(xù)
lcall delay2 ;無鍵按調(diào)用延時去抖
ajmp key ;返回繼續(xù)檢測按鍵
k1: lcall delay2
lcall delay2 ;有鍵按下延時去抖動
lcall ks ;再調(diào)用檢測按鍵程序
jnz k2 ;確認有按下進行下一步
ajmp key ;無鍵按下返回繼續(xù)檢測
k2: mov r2,#0efh ;將掃描值送入 r2暫存
mov r4,#00h ;將第一列值送入r4暫存
k3: mov p1,r2 ;將r2的值送入p1口
l6: jb p1.0,l1 ;p1.0等于1跳轉(zhuǎn)到l1
mov a,#00h ;將第一行值送入acc
ajmp lk ;跳轉(zhuǎn)到鍵值處理程序
l1: jb p1.1,l2 ;p1.1等于1跳轉(zhuǎn)到l2
mov a,#04h ;將第二行的行值送入acc
ajmp lk ;跳轉(zhuǎn)到鍵值理程序進行鍵值處理
l2: jb p1.2,l3 ;p1.2等于1跳轉(zhuǎn)到l3
mov a,#08h ;將第三行的行值送入acc
ajmp lk ;跳轉(zhuǎn)到鍵值處理程序
l3: jb p1.3,ne*t ;p1.3等于1跳轉(zhuǎn)到ne*t處
mov a,#0ch ;將第四行的行值送入acc
lk: add a,r4 ;行值與列值相加后的鍵值送入a
push acc ;將a中的值送入堆棧暫存
k4: lcall delay2 ;調(diào)用延時去抖動程序
lcall ks ;調(diào)用按鍵檢測程序
jnz k4 ;按鍵沒有松開繼續(xù)返回檢測
pop acc ;將堆棧的值送入acc
ret
ne*t:
inc r4 ;將列值加一
mov a,r2 ;將r2的值送入a
jnb acc.7,key ;掃描完至key處進行下一掃描
rl a ;掃描未完將a中的值右移一位進行下一列的掃描
mov r2,a ;將acc的值送入r2暫存
ajmp k3 ;跳轉(zhuǎn)到k3繼續(xù)
ks: mov p1,#0fh ;將p1口高四位置0低四位值1
mov a,p1 ;讀p1口
*rl a,#0fh ;將a中的值與a中的值相異或
ret ;子程序返回
delay2: ;40ms延時去抖動子程序
mov r5,#08h
l7: mov r6,#0fah
l8: djnz r6,l8
djnz r5,l7
ret
tab:
db 28h,34h,28h,34h,0a9h,60h,20h,7ah,
20h,21h,61h,74h,30h,62h,0a2h,7eh
;0h0hc9878654a321 輪流顯示鍵盤因為無法表達*# 就用h表示,b用8表示
end
這是我做成功的4*4鍵盤掃描源程序,p1.0-p1.3做四根列線,p1.4-p1.7做四根行線。
數(shù)碼管的字型表是按照標準接法做的,按對應(yīng)的按鍵數(shù)碼管顯示對應(yīng)的數(shù)字。
以下是源程序:
keybuf equ 30h
org 00h
start: mov keybuf,#2
mov p2,#00001111b
wait:
mov p1,#0ffh
clr p1.4
mov a,p1
anl a,#0fh
*rl a,#0fh
jz nokey1
lcall dely10ms
mov a,p1
anl a,#0fh
*rl a,#0fh
jz nokey1
mov a,p1
anl a,#0fh
cjne a,#0eh,nk1
mov keybuf,#0
ljmp dk1
nk1: cjne a,#0dh,nk2
mov keybuf,#1
ljmp dk1
nk2: cjne a,#0bh,nk3
mov keybuf,#2
ljmp dk1
nk3: cjne a,#07h,nk4
mov keybuf,#3
ljmp dk1
nk4: nop
dk1:
mov a,keybuf
mov dptr,#table
movc a,@a+dptr
mov p0,a
dk1a: mov a,p1
anl a,#0fh
*rl a,#0fh
jnz dk1a
nokey1:
mov p1,#0ffh
clr p1.5
mov a,p1
anl a,#0fh
*rl a,#0fh
jz nokey2
lcall dely10ms
mov a,p1
anl a,#0fh
*rl a,#0fh
jz nokey2
mov a,p1
anl a,#0fh
cjne a,#0eh,nk5
mov keybuf,#4
ljmp dk2
nk5: cjne a,#0dh,nk6
mov keybuf,#5
ljmp dk2
nk6: cjne a,#0bh,nk7
mov keybuf,#6
ljmp dk2
nk7: cjne a,#07h,nk8
mov keybuf,#7
ljmp dk2
nk8: nop
dk2:
mov a,keybuf
mov dptr,#table
movc a,@a+dptr
mov p0,a
dk2a: mov a,p1
anl a,#0fh
*rl a,#0fh
jnz dk2a
nokey2:
mov p1,#0ffh
clr p1.6
mov a,p1
anl a,#0fh
*rl a,#0fh
jz nokey3
lcall dely10ms
mov a,p1
anl a,#0fh
*rl a,#0fh
jz nokey3
mov a,p1
anl a,#0fh
cjne a,#0eh,nk9
mov keybuf,#8
ljmp dk3
nk9: cjne a,#0dh,nk10
mov keybuf,#9
ljmp dk3
nk10: cjne a,#0bh,nk11
mov keybuf,#10
ljmp dk3
nk11: cjne a,#07h,nk12
mov keybuf,#11
ljmp dk3
nk12: nop
dk3:
mov a,keybuf
mov dptr,#table
movc a,@a+dptr
mov p0,a
dk3a: mov a,p1
anl a,#0fh
*rl a,#0fh
jnz dk3a
nokey3:
mov p1,#0ffh
clr p1.7
mov a,p1
anl a,#0fh
*rl a,#0fh
jz nokey4
lcall dely10ms
mov a,p1
anl a,#0fh
*rl a,#0fh
jz nokey4
mov a,p1
anl a,#0fh
cjne a,#0eh,nk13
mov keybuf,#12
ljmp dk4
nk13: cjne a,#0dh,nk14
mov keybuf,#13
ljmp dk4
nk14: cjne a,#0bh,nk15
mov keybuf,#14
ljmp dk4
nk15: cjne a,#07h,nk16
mov keybuf,#15
ljmp dk4
nk16: nop
dk4:
mov a,keybuf
mov dptr,#table
movc a,@a+dptr
mov p0,a
dk4a: mov a,p1
anl a,#0fh
*rl a,#0fh
jnz dk4a
nokey4:
ljmp wait
dely10ms:
mov r6,#10
d1: mov r7,#248
djnz r7,$
djnz r6,d1
ret
table: db 0c0h,0f9h,0a4h,0b0h,099h,092h,082h,0f8h,080h,090h ;0-9
db 088h,083h,0c6h,0a1h,086h,08eh,089h,0cfh,0c7h,0c8h ;a,b,c,d,e,f,h,i,l,n,
end
; p3.1 數(shù)據(jù)采集控制
; p2.6 p2.7 個位 十位顯示轉(zhuǎn)換控制
; p1口接8個開關(guān)模擬數(shù)據(jù)
; p1.0 - p1.3 為個位開關(guān)量輸入
; p1.4 - p1.7 為十位開關(guān)量輸入
; 此程序僅供參考
; 功能 p1口接8個開關(guān)輸入量 4個一組,分別為個位,十位輸入
; p0口接一個數(shù)碼管,依次顯示輸入量。p3.1控制是否讀入
; 開關(guān)量。 p2.6 p2.7控制是否顯示 個位 或十位
org 100h
ljmp star
star: mo ……(未完,全文共91254字,當前僅顯示16413字,請閱讀下面提示信息。
收藏《單片機原理與應(yīng)用考試大綱》)