時間:2022-12-25 21:11:21
序論:好文章的創作是一個不斷探索和完善的過程,我們為您推薦十篇單片機原理與應用范例,希望它們能助您一臂之力,提升您的閱讀品質,帶來更深刻的閱讀感受。
中圖分類號:G642 文獻標識碼:A 文章編號:1009-3044(2015)30-0123-02
An Exploration on the Teaching of the SCM Course
YU Lei, LIU Huai-yu
(Huaibei Normal University, Huaibei 235000, China)
Abstract: For the existing problems in teaching of SCM(single chip microcomputer) course and the need for innovative personnel training, some ideas and plans in Theory Teaching and Experiment Teaching are given. To establish teaching system of SCM, it takes the interest as the guide and the design as the main line, with the combination of theory and experiment for the purpose, it also takes the training of innovative ability and practical ability as the target.The result shows that it improves the students' professional ability and innovation ability with the new teaching system.
Key words: SCM; Proteus simulation; C51 language; virtual lab; innovative training
《單片機原理與應用》是高等院校電子信息工程、通信工程、自動化、電氣控制等專業所開設的一門必修課。該課程綜合性、實踐性以及應用性都很強,不僅要求學生掌握單片機及其相關知識,還要求學生具有單片機應用系統設計的能力,對培養學生的實踐動手能力和創新能力具有重要的意義。然而,既讓學生掌握基礎知識,又讓學生盡快地掌握設計技巧,這無疑是對學生能力和耐心的一個挑戰,在實際的教學過程中,一些學生反映該課程比較抽象難懂,從而導致部分學生“遇難而止”,失去了學習單片機的激情和興趣。
針對這個問題,我們從單片機理論教學和單片機實驗教學兩個方面進行了一些探索,這對學生的學習興趣和實踐動手能力有了很大的提高。
1 單片機理論教學
理論教學是獲取專業知識的基礎和主要途徑,良好的教學氛圍不僅能使同學們輕松地掌握理論知識,還能提高同學們的學習興趣。
1.1 抓住學生的好奇心
好奇心往往是興趣培養的動力源泉,抓住學生的好奇心在提高學習興趣方面至關重要。如我在上第一節課時,沒有去過分地強調什么是單片機,學好單片機有什么好處等,而是告訴同學們今天給他們帶來一個非常有趣的玩具,然后直接拿了我們自己設計的一款循跡小車,并讓某位同學在地上隨意畫出的一條路徑,通過觀察一下小車的運行情況,讓同學們發揮想象力,猜想一下小車怎么知道行駛路線、怎么進行方向控制等,最后告訴他們“這都是由我們將要學習的單片機進行控制的”。這樣就一下子吸引了學生的眼光,也激發了學習和探索單片機的興趣。
1.2 “虛擬實驗室”式的課堂教學
《單片機原理與應用》不僅需要熟悉硬件電路的設計和結構,還要掌握軟件編程方法和技巧,一段程序對不對,到底在控制方面起不起作用,那要結合軟硬件一起來進行調試,為此,我們將“虛擬實驗室”搬進了課堂。“虛擬實驗室”由Proteus和Keil C51軟件組成,其中,Proteus提供了豐富的模擬和數字器件模型,可以完整地仿真51系列單片機及其相連的模擬和數字電路,充當了實驗室里開發板的角色;而Keil C51軟件是一個51系列單片機軟件開發平臺,采用C51語言進行編程,在調試程序和仿真等方面有很強的功能。采用Proteus和Keil C51軟件相結合,能將抽象、生澀、陌生的知識直觀化、形象化、具體化,更容易讓人接受。
1.3 “找茬”互動教學
通過Proteus畫出硬件電路圖,將Keil C51軟件編寫程序寫進去,演示一下正確的結果,如果僅僅如此,那么久而久之學生也會感到乏味,因此一定要在教學的過程中制造一點“麻煩”,讓同學們來“找茬”。如在講到單片機P0-P3口時,為了強調“P0口做I/O時必須外加上拉電阻”這個知識點,在Proteus畫P0控制LED電路圖時,故意不加上拉電阻,結果發現P0引腳變灰色,LED不亮,然后再試一試其他端口,LED卻可以點亮,讓學生找出哪地方出現了問題,怎么去修改,P0口和其他端口有什么區別等。這樣就會加深學生的印象,無形中牢牢掌握了該知識點,這要比“強調-強調-再強調”有效地多。同樣的方法也可以用在Keil C51軟件編程中。
2 單片機實驗教學
理論教學和實驗教學是緊密結合的,單片機實驗教學對于培養學生的動手能力和創新意識有著十分重要的作用。
2.1 驗證與設計相結合
驗證型實驗并不是簡簡單單地驗證一下結果正確與否,而是通過實驗來發現問題并尋求解決問題的方法,從而鞏固和提高所學的知識。然而,目前的單片機實驗大多數以驗證為主,實驗內容比較單一,實驗本身沒有太大的創造性,對學生的設計能力要求不高,學生只需在實驗箱上連接幾條線,編寫或修改一段簡單的實驗程序就可以完成,這樣學生只知道怎么做,根本不知道自己為什么要這么做,嚴重束縛了學生的想象力和創造力。因此,必須通過設計型實驗來彌補其中的不足。實驗課上由被動轉為主動, 不再是依葫蘆畫瓢。
如在講到“中斷”時,除了讓同學們驗證一下單片機5個中斷源的設置和工作原理外,可以讓他們設計一款簡單的頻率計或是數字鐘,這樣就可以將中斷、數碼管動態掃描、按鍵掃描等綜合應用到一起,為單片機系統的設計打下了良好的基礎。
2.2 命題和自命題相結合
在設計型實驗中,也要采用命題和自命題相結合的方式。先以命題形式出現,由老師出題,這樣題目涵蓋面比較廣,可以全面考查到各個知識點,如上面提到的數字鐘的設計。自命題型實驗是讓一組學生根據自己的興趣和愛好,自己出題目,一般只注重開發的過程,而不重視最終的結果,因為有可能部分學生出的題目過難而最終無法實現。對于無法完成的小組,要找出原因,是硬件本身的缺陷,還是軟件設計方面的不足,自己在命題時,忽略掉哪些因素等等。自命題型實驗關鍵就是激發學生的創新思維,培養學生的團隊意識,提高組織協調能力、發現問題和解決問題的能力。
從命題到自命題,從“讓我做什么”到“我要做什么”,讓學生體味一下兩者的不同之處,在經過實戰演習后,熟練掌握工程項目的開發流程,
3 結語
《單片機原理與應用》是一門軟硬件綜合、應用性比較強的課程,在整個的教學過程中,建立以興趣為引導,以單片機系統的設計為主線,以理論和實驗相結合為宗旨,以培養創新能力和實踐能力為目標的單片機課程教學體系,運用多媒體技術和“虛擬實驗室”軟件等多種手段,由整體到具體、由簡單到復雜、由模塊到系統,循序漸進,加強學生動手操作能力和單片機系統開發能力的培養。經過教學改革,我校學生在全國大學生電子設計大賽、全國信息技術應用水平大賽等各項比賽中所取得了良好的成績,對提高學生的專業知識水平和創新能力方面具有明顯的優勢。
參考文獻:
[1] 胡敬朋, 王聰. 單片機項目教學研究及實踐[J]. 電氣電子教學學報, 2009, 31(5): 82-84.
1、計算機的數據表示和數據運算
2、計算機的各種編碼
3、計算機的組成及工作過程
二、考核要求:
1、識記計算機的各種編碼
2、領會計算機的組成及工作過程
3、簡明應用計算機的數據表示和數據運算
第二章51單片機的硬件結構和原理
一、考核知識點:
1、單片機的發展史及各方面的應用
2、51單片機的分類和內部結構
3、單片機的引腳和功能
4、單片機工作的時序
二、考核要求:
1、識記單片機的發展史及各方面的應用
2、識記單片機的引腳和功能
3、領會單片機工作的時序
4、簡明應用51單片機的分類和內部結構
第三章51單片機指令系統
一、考核知識點:
1、單片機的尋址方式
2、單片機的指令系統
3、助記符指令和二進制代碼指令的異同
二、考核要求:
1、領會助記符指令和二進制代碼指令的異同
2、綜合應用單片機的尋址方式
3、綜合應用單片機的指令系統
第四章匯編語言程序設計
一、考核知識點:
1、偽指令
2、匯編語言設計技巧
3、匯編語言到機器語言的編譯過程
二、考核要求:
1、領會偽指令
2、簡明應用匯編語言設計技巧
3、綜合應用匯編語言到機器語言的編譯過程
第五章51單片機的中斷系統
一、考核知識點:
1、中斷基本概念
2、中斷系統的程序編制
3、中斷系統的初步應用
二、考核要求:
1、領會中斷基本概念
2、簡明應用中斷系統解決工程問題
3、綜合簡明應用中斷系統的程序編制
第六章51單片機的內部定時器/計數器及串行接口
一、考核知識點:
1、單片機內部定時器/計數器的結構及工作原理
2、定時器/計數器的程序編制
3、定時器/計數器的初步應用
4、串行口的基本概念
5、串行口的程序編制
6、串行口的初步應用
二、考核要求:
1、識記串行口的基本概念
2、領會單片機內部定時器/計數器的結構及工作原理
3、簡明應用定時器/計數器解決工程問題
4、簡明應用串行口的程序編制
5、簡明應用串行口解決工程問題
6、綜合應用定時器/計數器的程序編制
第七章單片機的系統擴展與接口技術
一、考核知識點:
1、單片機外部總線的擴展
2、外部存儲器的擴展
3、I/O接口的擴展
4、管理功能部件的擴展
5、A/D和D/A接口功能的擴展
二、考核要求:
1、識記單片機外部總線的擴展
2、識記管理功能部件的擴展
3、簡明應用A/D和D/A接口功能的擴展
4、綜合應用外部存儲器的擴展
5、綜合應用I/O接口的擴展
第八章單片機應用系統設計
一、考核知識點:
1、單片機應用系統的開發過程
2、單片機開發工具的分類和使用
3、單片機應用系統的軟件和硬件調試過程
二、考核要求:
1、識記單片機應用系統的軟件和硬件調試過程
2、領會單片機應用系統的開發過程
3、領會單片機開發工具的分類和使用
第九章單片機系統的抗干擾技術
一、考核知識點:
1、單片機干擾源與分類
2、干擾對單片機系統的影響
3、硬件抗干擾技術
4、軟件抗干擾技術
5、數字濾波
二、考核要求:
1、識記單片機干擾源與分類
2、識記干擾對單片機系統的影響
3、識記數字濾波
4、簡明應用硬件抗干擾技術
5、簡明應用軟件抗干擾技術
第十章其它單片機簡介
一、考核知識點:
1、AT89C系列單片機的特點與性能
2、其它8位單片機的特點與性能
3、16位、32位單片機的特點與性能
二、考核要求:
1、識記其它8位單片機的特點與性能
2、識記16位、32位單片機的特點與性能
3、領會AT89C系列單片機的特點與性能
《單片機原理及應用技術》考試大綱
《單片機原理及應用技術》課程是一門面向應用的專業技術課。單片機原理與應用介紹了單片機的基本知識和單片機技術的應用,其內容與工程實際緊密聯系,實用性很強,是一門在理論指導下,偏重于實際應用的課程。本課程具有實用性強、理論和實踐結合、軟硬件結合等特點。本課程圍繞使用較為廣泛的MCS-51系列單片機進行學習。本課程已成為理、工科電子類專業的一門基礎課程,這是從電子系統設計角度考慮的,它體現了電子系統設計的方法和硬件結構的變化。通過該課程的學習,要求學生掌握80C51單片機的工作原理、編程技術,掌握單片機應用系統的擴展方法和實際應用。因此,以單片機為內核,分析和設計一個簡單的計算機應用系統是我們學習本課程要達到的目的。
第一部分考試大綱
1單片機概述
本章為單片機的基本概念。
1.掌握有關單片機的基本概念、單片機的特點、單片機的應用。
2.理解單片機的總體組成。
3.了解單片微型計算機的產生、發展歷史、主要品種及系列。
2單片機結構和原理
本章以80C51單片機為例介紹了主要硬件結構和主要功能,著重掌握系統所提供的資源特性及其功能特性。
1.掌握80C51的內部結構。
2.掌握80C51單片機的存儲器組成。
3.掌握單片機并行輸入/輸出端口結構及功能。
4.了解單片機的時序概念和復位工作方式。
5.掌握單片機引腳功能
3指令系統
1.掌握指令與偽指令的正確格式。
2.掌握七種尋址方式的使用及尋址方式的含義。
3.掌握
五類指令的功能和使用,特別是傳送指令。
4.理解書中所列例題與習題。
4匯編語言程序設計舉例
本章為MCS-51的一些常用偽指令,介紹順序結構程序設計、分支結構程序設計、循環結構程序設計和子程序的設計。
1.程序設計的基本步驟、各種基本的結構化程序設計方法;讀懂較復雜的常用程序。
2.掌握數據傳送指令的編寫。
3.理解算術運算程序設計。
4.理解數碼轉換程序設計。
5.理解查表程序設計。
6.理解子程序設計和參數傳遞。
7.理解邏輯運算程序設計
5中斷系統
1.掌握有關中斷、中斷源、中斷優先級等概念。
2.掌握中斷響應過程。
3.掌握中斷優先級排列。
4.掌握中斷允許寄存器IE、中斷優先級寄存器IP各位的含義及設置。
5.掌握外部中斷的兩種觸發方式:電平觸發、邊沿觸發。
6定時/計數器
1.掌握定時器/計數器的四種工作方式及有何不同。
2.掌握TMOD和TCON中各位的含義、作用。
4.掌握不同工作方式計數初值與定時時間的關系,即能根據定時時間算出計數初值,完成定時器的初始化編程和簡單應用編程。
7串行通信
1.理解有關通信、協議的概念。
2.理解串行口的四種工作方式。
3.掌握SBUF的含義及作用。
4.了解串行口的工作原理。
5.了解SCON中每一位的含義及SMOD位的作用。
6.掌握串行通信總線RS-232C標準、RS-232C電平轉換。
7.了解RS-232C與MCS-51的接口。
8系統擴展技術
1.掌握總線、驅動、鎖存和譯碼、地址重疊的概念。
2.掌握程序存儲器的擴展:EPROM程序存儲器及其擴展方法。
3.掌握數據存儲器的擴展:靜態存儲器SRAM及其擴展方法。
4.掌握簡單I/O口的擴展。
5.掌握8255A可編程并行接口:結構、控制字、工作方式、與8255A的接口方法。
9A/D和D/A轉換器接口技術
1.掌握DAC0832與單片機的接口方法與編程。
2.掌握ADC0809與單片機的接口方法與編程。
10鍵盤/顯示接口技術
1.掌握LED顯示器結構、工作原理和顯示方式。
2.掌握鍵盤接口原理。
3.理解LED顯示器與80C51單片機接口。
4.理解鍵輸入程序設計方法。
5.了解行列式鍵盤與80C51單片機接口。
11、功率接口技術
1.掌握簡單開關量接口、光電耦合接口和繼電器接口。
2.晶閘管與故態繼電器的應用接口。
12、單片機系統設計技術
掌握單片機系統的設計、開發、調試的原則、步驟及方法。
13、實用舉例
了解一兩個典型的單片機開發應用系統的設計思想和實現方法。
14、新型單片機介紹
了解MCS-51常見8位單片機。
第二部分考試考核改革方案
一、考試考核要求
《單片機技術及應用》選擇具有代表性的、使用較為廣泛的MCS-51系列單片機進行學習(具體以80C51為例),介紹了80C51單片機的硬件組成、軟件編程及一般應用系統組成。通過本課程的學習,要求掌握80C51單片機的系統結構、指令系統、程序設計方法、系統擴展方法、單片機常用接口等應用技術。本課程的教學過程由面授輔導、自學、實驗及作業四個環節組成,因此本課程考試考核要求為:
1.作業、實驗成績與期末考試成績共同評定為課程總成績。
2.作業、實驗占課程總分的60,期末理論考試占總分的40。
為使學生不把注意力僅僅放在期末考試上,培養學生系統學習的能力,加強學生各方面能力的培養,平時、實驗課、作業、考試都納入本課程的成績評定。平時的成績包括出勤、課堂提問和隨堂測試。期末考試可以選擇筆試、口試和進行實際實驗、設計等多種形式。
二、平時成績考核要求及說明
1.每章作業按要求完成后交教師批改,完成作業80為12分(及格);所有作業均完成,且質量較好者,20分(滿分)。中間情況酌情給分。
2.每次實驗均能按照教師安排進行,實驗態度好,至少完成5個實驗且實驗報告完整,為18分(及格);能基本獨立完成6個或以上實驗,實驗報告完整、無誤,實驗質量高,30分(滿分)。中間情況酌情給分。如果實驗有創新的特點,酌情加分。
3.作業與實驗的平均分為平時成績,滿分50分。
4.課程設計單獨計算成績,考評方法見其大綱。
三、理論考試說明
1.單片機技術及應用理論考試,采用閉卷筆試形式,考試時間120分鐘。
2.期末考試試題根據教學大綱,其范圍和難度按照本方案中制訂的考試考核內容和要求確定。考試命題覆蓋考試大綱要求范圍。
3.期末考試試題類型有以下幾種:
①填空題;
②選擇題;
③判斷題;
④簡答題
⑤綜合應用題。
四、考試考核要求層次
按照教學大綱的要求,理論考試要求分為掌握、理解和了解三個層次。
掌握:
對于本課程的重點內容要求學生達到掌握的程度。即能夠全面、深入理解和熟練掌握所學內容,并能夠用其分析、初步設計和解答與應用相關的問題,能夠舉一反三。要求學生掌握的內容也就是考試的主要內容,在考試中所占比例約70。
理解:
對于本課程的一般內容要求學生能夠理解。即要求學生能夠較好地理解所學內容,并且對所涉及的內容能夠進行簡單分析和判斷。要求學生理解的內容也是考試的內容,在考試中所占比例約25。
了解:
對于本課程的次要內容要求學生能夠了解。要求學生了解的內容,一般是指在眼下不必進一步深入和擴展,有些也許需要學生自己今后在工作中進行深入研究。對要求了解的內容,在考試中占較小比例,不超過5。
實驗五:按鍵電路、顯示電路實驗
一、實驗目的:
1.掌握獨立式按鍵電路與矩陣式按鍵電路的設計方法。
2.掌握數碼管顯示電路的工作原理
3.掌握源程序編輯軟件UltraEdit,編譯軟件KeilC51、仿真軟件Proteus的使用方法
4.掌握硬件仿真器ME-52A的使用方法
二、實驗器材:
1.單片機實驗板
2.單片機硬件仿真器ME-51A
3.計算機
4.電源
三、實驗要求:
1.電路如圖5所示,用單片機的P3口所接的四個獨立式按鍵控制p1口流水燈花樣的方法;具體表現為:p3.0、P3.1、P3.2、P3.3四個小按鍵分別實現了四個控制:
(1)跑燈:即P1.0---1.7亮點流動:
(2)流水燈:即P1.0-1.7依次點
亮(3)交叉閃爍:即P0.0,P0.2,P0.4,P0.6和P0.1,P0.3,P0.5,P0.7輪流點亮
(4)停止;在任何狀態下按此鍵程序停止運行.
2.電路如圖6所示,用P2口所接的4×4矩陣式鍵盤作為輸入,在P1口所接的數碼管上顯示出每個按鍵的0~F序號,鍵盤的布局如下表所示:
F
E
D
C
B
A
9
8
7
6
5
4
3
2
1
四、實驗原理:
1.獨立式按鍵電路顯示如圖5所示,從圖中可看出,判斷有無鍵按下,只要檢測P3.0~P3.3相應端口的高低電平即可,若檢測有某一端口為低電平,表明該端口有按鍵按下,經延時消抖后轉去執行相應的功能子程序。若為高電平,表明無鍵按1.獨立式按鍵電路如圖5所示,下,繼續檢測。
示例程序如下:
ORG000H
LJMPSTAR1
ORG0030H
STAR1:MOVP3,#0FFH;置P3口為輸入態
JNBP3.0,FUN0;判別P3.0是否有鍵按下,是,則轉FUN0
JNBP3.1,FUN1;判別P3.1是否有鍵按下,是,則轉FUN1
JNBP3.2,FUN2;判別P3.2是否有鍵按下,是,則轉FUN2
JNBP3.3,FUN3;判別P3.3是否有鍵按下,是,則轉FUN3
JNBF0,STAR1;曾經有鍵按下F0置1
RET
圖5
FUN0:LCALLDL10MS;消岸抖動
JBP3.0,STAR1
WAITL0:JNBP3.0,WAITL0;等待鍵釋放
SETBF0
FUN01:LCALLFUN00
LCALLSTAR1
LJMPFUN01
FUN1:LCALLDL10MS;消岸抖動
JBP3.1,STAR1
WAITL1:JNBP3.1,WAITL1;等待鍵釋放
SETBF0
FUN10:LCALLFUN11
LCALLSTAR1
LJMPFUN10
FUN2:LCALLDL10MS;消岸抖動
JBP3.2,STAR1
WAITL2:JNBP3.2,WAITL2;等待鍵釋放
SETBF0
FUN20:LCALLFUN22
LCALLSTAR1
LJMPFUN20
FUN3:LCALLDL10MS;消岸抖動
JBP3.3,STAR1
WAITL3:JNBP3.3,WAITL3;等待鍵釋放
CLRF0
MOVP1,#0FFH;關顯示
LJMPSTAR1
FUN00:MOVA,#0FEH;跑燈子程序
FUN000:MOVP1,A
LCALLDL05S
JNBACC.7,OUT
RLA
AJMPFUN000
OUT:RET
FUN11:MOVA,#0FEH;流水燈子程序
FUN111:MOVP1,A
LCALLDL05S
JZOUT
RLA
ANLA,P1
AJMPFUN111
FUN22:MOVA,#0AAH;交叉點亮子程序
MOVP1,A
LCALLDL30S
CPLA
MOVP1,A
LCALLDL30S
RET
;____________;
;延時程序;
;____________;
DL512:MOVR2,#0FFH
LOOP1:DJNZR2,LOOP1
RET
DL10MS:MOVR3,#14H
LOOP2:LCALLDL512
DJNZR3,LOOP2
RET
DL05S:MOVR4,#0AH
LOOP3:LCALLDL10MS
DJNZR4,LOOP3
RET
DL30S:MOVR5,#03H
LOOP4:LCALLDL05S
DJNZR5,LOOP4
RET
END
2.矩陣式按鍵電路顯示如圖6所示。采用掃描方式進行按鍵的識別檢測,并將對應按鍵的鍵號用查表指令將對應的代碼顯示在數碼管上。
圖6
參考程序如下:
ORG0000H
LJMPSTART
ORG0030H
START:MOVSP,#60H;設置堆棧指針
SCAN:MOVR3,#0F7H;置行掃描初值
MOVR1,#00H;到TABLE表中取碼的指針
SCAN1:MOVA,R3
MOVP2,A;掃描輸出
MOVA,P2;重讀P2口狀態
MOVR4,A;暫存于R4呂中
SETBC;C=1
MOVR5,#03H;掃描4列初值
L1:RLCA;A中內容循環左移
JNCKEYIN;C=0,有鍵按下,轉消抖
INCR1;取碼指針加1
DJNZR5,L1;無鍵按下,繼續檢測
MOVA,R3;掃描下一行
SETBC
RRCA
MOVR3,A
JCSCAN1;4行是否掃描完,未完,繼續
LJMPSCAN
KEYIN:MOVR7,#10;削除抖動
D2:MOVR6,#248
DJNZR6,$
DJNZR7,D2
D3:MOVA,P2;按鍵放開否?
XRLA,R4
JZD3
MOVA,R1
MOVDPTR,#TABLE;到TABLE中取碼
MOVCA,@A DPTR
MOVP1,A
LJMPSCAN
TABLE:DB0C0H,0F9H,0A4H,0B0H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH
END
DB80H,90H,88H,83H
DB0C6H,0A1H,86H,8EH
END
五、實驗步驟:
1.運行UltraEdit-32源程序編輯軟件,輸入、編輯匯編語言源程序。
2.運行KeiluVision2源程序編譯軟件,對源程序進行編譯,得到目標代碼文件。
3.運行Proteus模擬仿真軟件,打開已繪制好的仿真電路原理圖,進行模擬仿真。
4.把硬件仿真器ME-52A與單片實驗板連接好,再用硬件仿真器進行仿真驗證。
六、實驗分析與總結
1.用仿真系統調試簡單程序結構、分支程序結構、循環程序結構、子程序結構和中斷結構的關鍵在于,如何將對程序的分析理解和開發系統提供的基本功能有機地結合起來,其前提條件是必須對源程序的作用、結構特點、運行過程與結果有較全面的認識,并能根據程序運行過程中出現的現象和結果分析并判斷產生各種故障現象的原因,再運用排除法逐一檢驗各種判斷是否準確。
2.掌握程序結構特點的基礎上,合理選擇觀測點,通過觀察在觀測點處參數及路徑的變化檢驗程序運行的結果。
3.高調試程序的效率,應對單片機開發系統所提供的幾種程序運行調試方式有
足夠的了解并能熟練地運用。例如,在調試過程中,若要觀察最終結果,則可選擇全速運行調試;若要觀察相關指令的運行結果或運行路徑的變化過程,則可選擇單步運行;若要檢查子程序的運行過程,則可選擇跟蹤運行調試;若要檢查循環程序或中斷服務程序,則可選擇斷點運行調試;若要定點檢查程序運行到某處的結果時,則可選擇快速運行到光標處調試。但實際中究竟選用哪種方法更適宜或哪幾種方法結合使用更快捷,將隨著分析能力與操作的熟練程度逐步提高。4.程序運行結果是否正確時,應運用單片機開發系統所提供的交互界面,將程序運行過程中程序計數器PC(地址)的變化、各單元(內部RAM和外部RAM)內容的變化、特殊功能寄存器內容的變化、堆棧指針SP內容的變化與程序的理論分析結果相對照。
5.程序和調試程序時,需要多次反復的過程,并非一次就能排除全部故障,特別是單片機應用系統的硬件電路和匯編程序相結合的綜合調試就更加復雜,因此,必須通過反復調試,不斷修改硬件和軟件,直到最終符合設計要求為止。如果在調試中能夠根據實驗現象預先對產生故障的原因加以判斷和分析,并制定出相應的調試方法和步驟,可縮小排除故障的范圍,提高調試效率。
七、思考與練習
填空題
1、設X=5AH,Y=36H,則X與Y“或”運算為__7EH_______,X與Y的“異或”運算為___6CH_____。
2、若機器的字長為8位,X=17,Y=35,則X+Y=__110100_____,X-Y=_11101110______(要求結果寫出二進制形式)。
3、單片機的復位操作是____高電平______(高電平/低電平),單片機復位后,堆棧指針SP的值是___07h_____。
4、單片機中,常用作地址鎖存器的芯片是__74HC373____________,常用作地址譯碼器芯片是_____74HC138____________。
5、若選擇內部程序存儲器,應該設置為_____高_______(高電平/低電平),那么,PSEN信號的處理方式為___不用__________________。
6、單片機程序的入口地址是____0000H__________,外部中斷1的入口地址是______0013H_________。
7、若采用6MHz的晶體振蕩器,則MCS-51單片機的振蕩周期為__0.5us_______,機器周期為_____2us__________。
8、擴展芯片的選擇方法有兩種,它們分別是___線選法_______________和_____譯碼法__________。
9、單片機的內部RAM區中,可以位尋址的地址范圍是____20H~2FH______________,特殊功能寄存器中,可位尋址的地址是___是能被8整除的地址_________________。
10、子程序返回指令是___ret______,中斷子程序返回指令是__reti。
11、8051單片機的存儲器的最大特點是內部RAM與外部RAM分開編址。
12、8051最多可以有32個并行輸入輸出口,最少也可以有8個并行口。
13、函數是C語言的基本單位。
14、串行口方式2接收到的第9位數據送SCON寄存器的RB8位中保存。
15、MCS-51內部提供3個可編程的16位定時/計數器,定時器有4種工作方式。
16、一個函數由兩部分組成,即說明部分和語句部分。
17、串行口方式3發送的第9位數據要事先寫入SCON寄存器的TB8位。
18、利用8155H可以擴展3個并行口,256個RAM單元。
19、C語言中輸入和輸出操作是由庫函數scanf和printf等函數來完成。
二、選擇題
1、C語言中最簡單的數據類型包括(B)。
A、整型、實型、邏輯型B、整型、實型、字符型
C、整型、字符型、邏輯型D、整型、實型、邏輯型、字符型
2、當MCS-51單片機接有外部存儲器,P2口可作為(C)。
A、數據輸入口B、數據的輸出口
C、準雙向輸入/輸出口D、輸出高8位地址
3、下列描述中正確的是(D)。
A、程序就是軟件B、軟件開發不受計算機系統的限制
C、軟件既是邏輯實體,又是物理實體D、軟件是程序、數據與相關文檔的集合
4、下列計算機語言中,CPU能直接識別的是(D)。
A、自然語言B、高級語言C、匯編語言D、機器語言
5、MCS-5l單片機的堆棧區是設置在(C)中。
A、片內ROM區B、片外ROM區C、片內RAM區D、片外RAM區
6、以下敘述中正確的是(C)。
A、用C語言實現的算法必須要有輸入和輸出操作
B、用C語言實現的算法可以沒有輸出但必須要有輸入
C、用C程序實現的算法可以沒有輸入但必須要有輸出
D、用C程序實現的算法可以既沒有輸入也沒有輸出
7、定時器/計數器工作方式1是(D)。
A、8位計數器結構B、2個8位計數器結構
C、13位計數結構D、16位計數結構
8、C語言提供的合法的數據類型關鍵字是(B)。
A、DoubleB、shortC、integerD、Char
9、片內RAM的20H~2FH為位尋址區,所包含的位地址是(B)。
A、00H~20HB、00H~7FHC、20H~2FHD、00H~FFH
10、以下能正確定義一維數組的選項是(B)。
A、inta[5]={0,1,2,3,4,5};B、chara[]={0,1,2,3,4,5};
C、chara={’A’,’B’,’C’};D、inta[5]="0123";
11、數據的存儲結構是指(D)。
A、存儲在外存中的數據B、數據所占的存儲空間量
C、數據在計算機中的順序存儲方式D、數據的邏輯結構在計算機中的表示
12、下列關于棧的描述中錯誤的是(C)。
A、棧是先進后出的先性表B、棧只能順序存儲
C、棧具有記憶作用D、對棧的插入和刪除操作中,不需要改變棧底指針
13、在寄存器間接尋址方式中,間址寄存器中存放的數據是(B)。
A、參與操作的數據B、操作數的地址值
C、程序的轉換地址D、指令的操作碼
14、MCS-51單片機的復位信號是(A)有效。
A、高電平B、低電平C、脈沖D、下降沿
15、為了使模塊盡可能獨立,要求(B)。
A、模塊的內聚程度要盡量高,且各模塊間的耦合程度要盡量強
B、模塊的內聚程度要盡量高,且各模塊間的耦合程度要盡量弱
C、模塊的內聚程度要盡量低,且各模塊間的耦合程度要盡量弱
D、模塊的內聚程度要盡量低,且各模塊間的耦合程度要盡量強
16、若MCS-51單片機使用晶振頻率為6MHz時,其復位持續時間應該超過(B)。
A、2μsB、4μsC、8μsD、1ms
17、以下選項中可作為C語言合法常量的是(A)
A、-80B、-080C、-8e1.0D、-80.0e
18、能夠用紫外光擦除ROM中程序的只讀存儲器稱為(C)。
A、掩膜ROMB、PROMC、EPROMD、EEPROM
19、以下不能定義為用戶標識符是(D)。
A、MainB、_0C、_intD、sizeof
20、下選項中,不能作為合法常量的是(B)。//冪不能為小數
A、1.234e04B、1.234e0.4C、1.234e 4D、1.234e0
21、以下敘述中錯誤的是(C)
A、對于double類型數組,不可以直接用數組名對數組進行整體輸入或輸出
B、數組名代表的是數組所占存儲區的首地址,其值不可改變
C、當程序執行中,數組元素的下標超出所定義的下標范圍時,系統將給出“下標越界”的出錯信息
D、可以通過賦初值的方式確定數組元素的個數
22、以下與函數fseek(fp,0L,SEEK_SET)有相同作用的是(D)
A、feof(f
p)B、ftell(fp)C、fgetc(fp)D、rewind(fp)
23、存儲16×16點陣的一個漢字信息,需要的字節數為(A)
A、32B、64C、128D、256
24、已知1只共陰極LED顯示器,其中a筆段為字形代碼的最低位,若需顯示數字1,則它的字形代碼應為(B)。
A、06HB、F9HC、30HD、CFH
25、在C語言中,合法的長整型常數是(A)
A、OLB、4962710C、324562&D、216D
26、以下選項中合法的字符常量是(B)
A、"B"B、’\010’C、68D、D
27、若PSW.4=0,PSW.3=1,要想把寄存器R0的內容入棧,應使用(D)指令。
A、PUSHR0B、PUSH@R0C、PUSH00HD、PUSH08H
28、在片外擴展一片2764程序存儲器芯片要(B)地址線。
A、8根B、13根C、16根D、20根
29、設MCS-51單片機晶振頻率為12MHz,定時器作計數器使用時,其最高的輸入計數頻率應為(C)
A、2MHzB、1MHzC、500kHzD、250kHz
30、下列數據字定義的數表中,(A)是錯誤的。
A、DW“AA”B、DW“A”C、DW“OABC”D、DWOABCH
三、判斷題
(√)1、在對某一函數進行多次調用時,系統會對相應的自動變量重新分配存儲單元。
(×)2、在C語言的復合語句中,只能包含可執行語句。
(√)3、自動變量屬于局部變量。
(×)4、Continue和break都可用來實現循環體的中止。
(√)5、字符常量的長度肯定為1。
(×)6、在MCS-51系統中,一個機器周期等于1.5μs。
(√)7、C語言允許在復合語句內定義自動變量。
(√)8、若一個函數的返回類型為void,則表示其沒有返回值。
(×)9、所有定義在主函數之前的函數無需進行聲明。
(×)10、定時器與計數器的工作原理均是對輸入脈沖進行計數。
(×)11、END表示指令執行到此結束。
(√)12、ADC0809是8位逐次逼近式模/數轉換接口。
(√)13、MCS-51的相對轉移指令最大負跳距是127B。
(×)14、MCS-51的程序存儲器只是用來存放程序的。
(√)15、TMOD中的GATE=1時,表示由兩個信號控制定時器的的啟停。
(×)16、MCS-51的特殊功能寄存器分布在60H~80H地址范圍內。
(×)17、MCS-51系統可以沒有復位電路。
(×)18、片內RAM與外部設備統一編址時,需要專門的輸入/輸出指令。
(√)19、鎖存器、三態緩沖寄存器等簡單芯片中沒有命令寄存和狀態寄存等功能。
(√)20、使用8751且=1時,仍可外擴64KB的程序存儲器。
四、簡答題
1、在使用8051的定時器/計數器前,應對它進行初始化,其步驟是什么?
答:(1)確定T/C的工作方式——編程TMOD寄存器;
(2)計算T/C中的計數初值,并裝載到TH和TL;
(3)T/C在中斷方式工作時,須開CPU中斷和源中斷——編程IE寄存器;
(4)啟動定時器/計數器——編程TCON中TR1或TR0位。
2、什么是重入函數?重入函數一般什么情況下使用,使用時有哪些需要注意的地方?答:多個函數可以同時使用的函數,稱為重入函數。
通常情況下,C51函數不能被遞歸調用,也不能應用導致遞歸調用的結構。有此限制是由于函數參數和局部變量是存儲在固定的地址單元中。重入函數特性允許你聲明一個重入函數。即可以被遞歸調用的函數。
重入函數可以被遞歸調用,也可以同時被兩個或更多的進程調用。重入函數在實時應用中及中斷服務程序代碼和非中斷程序代碼必須共用一個函數的場合中經常用到。
3、8051引腳有多少I/O線?他們和單片機對外的地址總線和數據總線有什么關系?地址總線和數據總線各是幾位?
答:8051引腳共有40個引腳,8051的地址總線由P2和P0口提供,P2口是地址總線的高8位,P0口是地址總線的低8位;數據總線由P0口提供;P0口的地址總線和數據總線是分時進行的,P0口的地址總線需要外接地址鎖存器完成地址鎖存。
地址總線共16位,數據總線是8位。
4、在有串行通信時,定時器/計數器1的作用是什么,怎樣確定串行口的波特率?
答:在有串行通信時,定時器/計數器1的作用是串行口發生器。
串行口的波特率根據串行口的工作方式具有不同的計算方式:
方式0的波特率固定為晶體振蕩器的十二分之一;
方式1的波特率=2SMOD.(定時器1的溢出率)/32;
方式2波特率=2SMOD.(fosc/64);
方式3波特率同方式1(定時器l作波特率發生器)。
5、如何消除鍵盤的抖動?怎樣設置鍵盤中的復合鍵?
答:由于按鍵是機械開關結構,所以當用手按下其中一個鍵時,往往會出現所按鍵在閉合位置和斷開位置之間發生跳幾下后才會穩定到閉合狀態的情況。在釋放一個鍵時,也會出現類似的情況,這就是鍵的抖動,抖動的持續時間不一,但通常不會大于10ms。
若抖動問題不解決,就會引起對閉合鍵的多次讀入。對于鍵抖動最方便的解決方法就是當發現有鍵按下后,不是立即進行掃描,而是延時大約10ms后再進行。由于一個鍵按下的時間一般會持續上百毫秒,所以延遲10ms后再掃描處理并不遲。
復合鍵可以仿照計算機復合鍵的處理方法,通常可以假設一個鍵具有復合功能,再與其它減的鍵值組合成復合鍵。
1、矩陣式鍵盤的結構與工作原理
在鍵盤中按鍵數量較多時,為了減少I/O口的占用,通常將按鍵排列成矩陣形式,如圖1所示。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接。這樣,一個端口(如P1口)就可以構成4*4=16個按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數越多,區別越明顯,比如再多加一條線就可以構成20鍵的鍵盤,而直接用端口線則只能多出一鍵(9鍵)。由此可見,在需要的鍵數比較多時,采用矩陣法來做鍵盤是合理的。
矩陣式結構的鍵盤顯然比直接法要復雜一些,識別也要復雜一些,上圖中,列線通過電阻接正電源,并將行線所接的單片機的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當按鍵沒有按下時,所有的輸出端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會被拉低,這樣,通過讀入輸入線的狀態就可得知是否有鍵按下了。具體的識別及編程方法如下所述。
2、矩陣式鍵盤的按鍵識別方法
確定矩陣式鍵盤上何鍵被按下介紹一種“行掃描法”。
行掃描法行掃描法又稱為逐行(或列)掃描查詢法,是一種最常用的按鍵識別方法,如上圖所示鍵盤,介紹過程如下。
1、判斷鍵盤中有無鍵按下將全部行線Y0-Y3置低電平,然后檢測列線的狀態。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個按鍵之中。若所有列線均為高電平,則鍵盤中無鍵按下。
2、判斷閉合鍵所在的位置在確認有鍵按下后,即可進入確定具體閉合鍵的過程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時,其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測各列線的電平狀態。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。
下面給出一個具體的例子:
圖仍如上所示。8031單片機的P1口用作鍵盤I/O口,鍵盤的列線接到P1口的低4位,鍵盤的行線接到P1口的高4位。列線P1.0-P1.3分別接有4個上拉電阻到正電源 5V,并把列線P1.0-P1.3設置為輸入線,行線P1.4-P.17設置為輸出線。4根行線和4根列線形成16個相交點。
1、檢測當前是否有鍵被按下。檢測的方法是P1.4-P
1.7輸出全“0”,讀取P1.0-P1.3的狀態,若P1.0-P1.3為全“1”,則無鍵閉合,否則有鍵閉合。
2、去除鍵抖動。當檢測到有鍵按下后,延時一段時間再做下一步的檢測判斷。
3、若有鍵被按下,應識別出是哪一個鍵閉合。方法是對鍵盤的行線進行掃描。P1.4-P1.7按下述4種組合依次輸出:
P1.71110
P1.61101
P1.51011
P1.40111
在每組行輸出時讀取P1.0-P1.3,若全為“1”,則表示為“0”這一行沒有鍵閉合,否則有鍵閉合。由此得到閉合鍵的行值和列值,然后可采用計算法或查表法將閉合鍵的行值和列值轉換成所定義的鍵值
4、為了保證鍵每閉合一次CPU僅作一次處理,必須卻除鍵釋放時的抖動。
鍵盤掃描程序:
從以上分析得到鍵盤掃描程序的流程圖如圖2所示。程序如下
SCAN:MOVP1,#0FH
MOVA,P1
ANLA,#0FH
CJNEA,#0FH,NEXT1
SJMPNEXT3
NEXT1:ACALLD20MS
MOVA,#0EFH
NEXT2:MOVR1,A
MOVP1,A
MOVA,P1
ANLA,#0FH
CJNEA,#0FH,KCODE;
MOVA,R1
SETBC
RLCA
JCNEXT2
NEXT3:MOVR0,#00H
RET
KCODE:MOVB,#0FBH
NEXT4:RRCA
INCB
JCNEXT4
MOVA,R1
SWAPA
NEXT5:RRCA
INCB
INCB
INCB
INCB
JCNEXT5
NEXT6:MOVA,P1
ANLA,#0FH
CJNEA,#0FH,NEXT6
MOVR0,#0FFH
RET
鍵盤處理程序就作這么一個簡單的介紹,實際上,鍵盤、顯示處理是很復雜的,它往往占到一個應用程序的大部份代碼,可見其重要性,但說到,這種復雜并不來自于單片機的本身,而是來自于操作者的習慣等等問題,因此,在編寫鍵盤處理程序之前,最好先把它從邏輯上理清,然后用適當的算法表示出來,最后再去寫代碼,這樣,才能快速有效地寫好代碼。
到本課為止,本站教程暫告一個段落!感謝大家的關心和支持!
矩陣按鍵部分由16個輕觸按鍵按照4行4列排列,連接到JP50端口。將行線所接的單片機的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當按鍵沒有按下時,所有的輸出端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會被拉低,這樣,通過讀入輸入線的狀態就可得知是否有鍵按下了。確定矩陣式鍵盤上何鍵被按下,介紹一種“行掃描法”。行掃描法行掃描法又稱為逐行(或列)掃描查詢法,是一種最常用的按鍵識別方法.判斷鍵盤中有無鍵按下:將全部行線置低電平,然后檢測列線的狀態。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個按鍵之中。若所有列線均為高電平,則鍵盤中無鍵按下。判斷閉合鍵所在的位置:在確認有鍵按下后,即可進入確定具體閉合鍵的過程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時,其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測各列線的電平狀態。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。
下面給出一個具體的例子:
電路圖路徑:G:\圖片\電路圖片\xl100097.jpg
8031單片機的P1口用作鍵盤I/O口,鍵盤的列線接到P1口的低4位,鍵盤的行線接到P1口的高4位。列線P1.0-P1.3設置為輸入線,行線P1.4-P.17設置為輸出線。4根行線和4根列線形成16個相交點。
1.檢測當前是否有鍵被按下。檢測的方法是P1.4-P1.7輸出全“0”,讀取P1.0-P1.3的狀態,若P1.0-P1.3為全“1”,則無鍵閉合,否則有鍵閉合。
2.去除鍵抖動。當檢測到有鍵按下后,延時一段時間再做下一步的檢測判斷。
3.若有鍵被按下,應識別出是哪一個鍵閉合。方法是對鍵盤的行線進行掃描。P1.4-P1.7按下述4種組合依次輸出:
P1.71110
P1.61101
P1.51011
P1.40111
在每組行輸出時讀取P1.0-P1.3,若全為“1”,則表示為“0”這一行沒有鍵閉合,否則有鍵閉合。由此得到閉合鍵的行值和列值,然后可采用計算法或查表法將閉合鍵的行值和列值轉換成所定義的鍵值。
4.為了保證鍵每閉合一次CPU僅作一次處理,必須去除鍵釋放時的抖動。
實驗目的:通過XL1000的16位矩陣按鍵,在數碼管上分別顯示0---9,A,B,C,D,E,F。
接線方法:1用一條8PIN數據排線,把矩陣按鍵部份的JP50,接到CPU部份的P1口JP44.
2接8位數碼管的數據線。將數碼管部份的數據口JP5接到CPU部份的P0口JP51.
3接8位數碼管的顯示位線。將數碼管部份的顯示位口JP8接到CPU部份的P2口JP52.
參考程序:
;本程序實現掃描按鍵顯示功能.
;分別按16個鍵盤顯示分別顯示數字123A456B789C*0#D
;鍵盤口P1,數碼管顯示第二位p21,數碼管段位p0口
org0000h
ajmpmain
org0030h
main:
movdptr,#tab;將表頭放入DPTR
lcallkey;調用鍵盤掃描程序
movca,@a dptr;查表后將鍵值送入ACC
movp0,a;將Acc值送入P0口
CLRP2.1;開顯示
ljmpmain;返回反復循環顯示
KEY:
LCALLKS;調用檢測按鍵子程序
JNZK1;有鍵按下繼續
LCALLDELAY2;無鍵按調用延時去抖
AJMPKEY;返回繼續檢測按鍵
K1:LCALLDELAY2
LCALLDELAY2;有鍵按下延時去抖動
LCALLKS;再調用檢測按鍵程序
JNZK2;確認有按下進行下一步
AJMPKEY;無鍵按下返回繼續檢測
K2:MOVR2,#0EFH;將掃描值送入R2暫存
MOVR4,#00H;將第一列值送入R4暫存
K3:MOVP1,R2;將R2的值送入P1口
L6:JBP1.0,L1;P1.0等于1跳轉到L1
MOVA,#00H;將第一行值送入ACC
AJMPLK;跳轉到鍵值處理程序
L1:JBP1.1,L2;P1.1等于1跳轉到L2
MOVA,#04H;將第二行的行值送入ACC
AJMPLK;跳轉到鍵值理程序進行鍵值處理
L2:JBP1.2,L3;P1.2等于1跳轉到L3
MOVA,#08H;將第三行的行值送入ACC
AJMPLK;跳轉到鍵值處理程序
L3:JBP1.3,NEXT;P1.3等于1跳轉到NEXT處
MOVA,#0cH;將第四行的行值送入ACC
LK:ADDA,R4;行值與列值相加后的鍵值送入A
PUSHACC;將A中的值送入堆棧暫存
K4:LCALLDELAY2;調用延時去抖動程序
LCALLKS;調用按鍵檢測程序
JNZK4;按鍵沒有松
開繼續返回檢測POPACC;將堆棧的值送入ACC
RET
NEXT:
INCR4;將列值加一
MOVA,R2;將R2的值送入A
JNBACC.7,KEY;掃描完至KEY處進行下一掃描
RLA;掃描未完將A中的值右移一位進行下一列的掃描
MOVR2,A;將ACC的值送入R2暫存
AJMPK3;跳轉到K3繼續
KS:MOVP1,#0FH;將P1口高四位置0低四位值1
MOVA,P1;讀P1口
XRLA,#0FH;將A中的值與A中的值相異或
RET;子程序返回
DELAY2:;40ms延時去抖動子程序
MOVR5,#08H
L7:MOVR6,#0FAH
L8:DJNZR6,L8
DJNZR5,L7
RET
tab:
db28h,34h,28h,34h,0a9h,60h,20h,7ah,
20h,21h,61h,74h,30h,62h,0a2h,7eh
;0h0hc9878654a321輪流顯示鍵盤因為無法表達*#就用H表示,B用8表示
end
這是我做成功的4X4鍵盤掃描源程序,P1.0-P1.3做四根列線,P1.4-P1.7做四根行線。
數碼管的字型表是按照標準接法做的,按對應的按鍵數碼管顯示對應的數字。
以下是源程序:
KEYBUFEQU30H
ORG00H
START:MOVKEYBUF,#2
MOVP2,#00001111B
WAIT:
MOVP1,#0FFH
CLRP1.4
MOVA,P1
ANLA,#0FH
XRLA,#0FH
JZNOKEY1
LCALLDELY10MS
MOVA,P1
ANLA,#0FH
XRLA,#0FH
JZNOKEY1
MOVA,P1
ANLA,#0FH
CJNEA,#0EH,NK1
MOVKEYBUF,#0
LJMPDK1
NK1:CJNEA,#0DH,NK2
MOVKEYBUF,#1
LJMPDK1
NK2:CJNEA,#0BH,NK3
MOVKEYBUF,#2
LJMPDK1
NK3:CJNEA,#07H,NK4
MOVKEYBUF,#3
LJMPDK1
NK4:NOP
DK1:
MOVA,KEYBUF
MOVDPTR,#TABLE
MOVCA,@A DPTR
MOVP0,A
DK1A:MOVA,P1
ANLA,#0FH
XRLA,#0FH
JNZDK1A
NOKEY1:
MOVP1,#0FFH
CLRP1.5
MOVA,P1
ANLA,#0FH
XRLA,#0FH
JZNOKEY2
LCALLDELY10MS
MOVA,P1
ANLA,#0FH
XRLA,#0FH
JZNOKEY2
MOVA,P1
ANLA,#0FH
CJNEA,#0EH,NK5
MOVKEYBUF,#4
LJMPDK2
NK5:CJNEA,#0DH,NK6
MOVKEYBUF,#5
LJMPDK2
NK6:CJNEA,#0BH,NK7
MOVKEYBUF,#6
LJMPDK2
NK7:CJNEA,#07H,NK8
MOVKEYBUF,#7
LJMPDK2
NK8:NOP
DK2:
MOVA,KEYBUF
MOVDPTR,#TABLE
MOVCA,@A DPTR
MOVP0,A
DK2A:MOVA,P1
ANLA,#0FH
XRLA,#0FH
JNZDK2A
NOKEY2:
MOVP1,#0FFH
CLRP1.6
MOVA,P1
ANLA,#0FH
XRLA,#0FH
JZNOKEY3
LCALLDELY10MS
MOVA,P1
ANLA,#0FH
XRLA,#0FH
JZNOKEY3
MOVA,P1
ANLA,#0FH
CJNEA,#0EH,NK9
MOVKEYBUF,#8
LJMPDK3
NK9:CJNEA,#0DH,NK10
MOVKEYBUF,#9
LJMPDK3
NK10:CJNEA,#0BH,NK11
MOVKEYBUF,#10
LJMPDK3
NK11:CJNEA,#07H,NK12
MOVKEYBUF,#11
LJMPDK3
NK12:NOP
DK3:
MOVA,KEYBUF
MOVDPTR,#TABLE
MOVCA,@A DPTR
MOVP0,A
DK3A:MOVA,P1
ANLA,#0FH
XRLA,#0FH
JNZDK3A
NOKEY3:
MOVP1,#0FFH
CLRP1.7
MOVA,P1
ANLA,#0FH
XRLA,#0FH
JZNOKEY4
LCALLDELY10MS
MOVA,P1
ANLA,#0FH
XRLA,#0FH
JZNOKEY4
MOVA,P1
ANLA,#0FH
CJNEA,#0EH,NK13
MOVKEYBUF,#12
LJMPDK4
NK13:CJNEA,#0DH,NK14
MOVKEYBUF,#13
LJMPDK4
NK14:CJNEA,#0BH,NK15
MOVKEYBUF,#14
LJMPDK4
NK15:CJNEA,#07H,NK16
MOVKEYBUF,#15
LJMPDK4
NK16:NOP
DK4:
MOVA,KEYBUF
MOVDPTR,#TABLE
MOVCA,@A DPTR
MOVP0,A
DK4A:MOVA,P1
ANLA,#0FH
XRLA,#0FH
JNZDK4A
NOKEY4:
LJMPWAIT
DELY10MS:
MOVR6,#10
D1:MOVR7,#248
DJNZR7,$
DJNZR6,D1
RET
TABLE:DB0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H;0-9
DB088H,083H,0C6H,0A1H,086H,08EH,089H,0CFH,0C7H,0C8H;A,B,C,D,E,F,H,I,L,N,
END
;P3.1數據采集控制
;P2.6P2.7個位十位顯示轉換控制
;P1口接8個開關模擬數據
;P1.0-P1.3為個位開關量輸入
;P1.4-P1.7為十位開關量輸入
;此程序僅供參考
;功能P1口接8個開關輸入量4個一組,分別為個位,十位輸入
;P0口接一個數碼管,依次顯示輸入量。P3.1控制是否讀入
;開關量。P2.6P2.7控制是否顯示個位
或十位
ORG100h
LJMPSTAR
STAR:MOVP1,#0FFH
SETBP3.1數據讀入標志
MOVR0,#100,循環工作次數
LOOP:JBP3.1,$P3.1低電平時,采集P1口數據開關量處理顯示階段不再應答P3.1
MOVA,P1
PUSHACC
ANLA,#0FH取個位數值
MOVR1,A個位數值保存到R1
POPACC
ANLA,#0F0H
SWAPA高4位轉成字節信息
MOVR2,A十位數值保存到R2
MOVDPTR,#TABLED
MOVA,R1
MOVCA,@A DPTR
MOVP0,A
CLRP2.6個位顯示
ACALLDELAY500MS
SETBP2.6
MOVA,R2
MOVCA,@A DPTR
MOVP0,A
CLRP2.7十位顯示
ACALLDELAY500MS
SETBP2.7
DJNZR0,LOOP
DELAY500MS:延時500毫秒子程略
RET
TABLED:DB0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8hDB80H,90H,88h,83h,0c6h,0a1h,86h,8eh
END
#include
typedefunsignedcharBYTE;
BYTEcodeTABLED[16]={0Xc0,0Xf9,0Xa4,0Xb0,0X99,0X92,0X82,0X0f8,0X80,0X90,0X88,0X83,0Xc6,0Xa1,0X86,0X8e};
BYTEDATled;
sbitP26=P2^6;
sbitP27=P2^7;
sbitP31=P3^1;
intTIME;
voidtimedelay(DTIME)
intDTIME;
{
intI;
for(I=0;I4;
P0=TABLED[TEMP];
P27=0;
timedelay(TIME);
P27=1;
}
}
}
1.實驗任務
在8X8 LED點陣上顯示柱形,讓其先從左到右平滑移動三次,其次從右到左平滑移動三次,再次從上到下平滑移動三次,最后從下到上平滑移動三次,如此循環下去。
2.電路原理圖
圖4.24.1
3.硬件電路連線
(1).把“單片機系統”區域中的P1端口用8芯排芯連接到“點陣模塊”區域中的“DR1-DR8”端口上;
(2).把“單片機系統”區域中的P3端口用8芯排芯連接到“點陣模塊”區域中的“DC1-DC8”端口上;
4.程序設計內容
(1).8X8 點陣LED工作原理說明
8X8點陣LED結構如下圖所示
圖4.24.2
從圖4.24.2中可以看出,8X8點陣共需要64個發光二極管組成,且每個發光二極管是放置在行線和列線的交叉點上,當對應的某一列置1電平,某一行置0電平,則相應的二極管就亮;因此要實現一根柱形的亮法,如圖49所示,對應的一列為一根豎柱,或者對應的一行為一根橫柱,因此實現柱的亮的方法如下所述:
一根豎柱:對應的列置1,而行則采用掃描的方法來實現。
一根橫柱:對應的行置0,而列則采用掃描的方法來實現。
5.匯編源程序
ORG00H
START:NOP
MOVR3,#3
LOP2:MOVR4,#8
MOVR2,#0
LOP1:MOVP1,#0FFH
MOVDPTR,#TABA
MOVA,R2
MOVCA,@A DPTR
MOVP3,A
INCR2
LCALLDELAY
DJNZR4,LOP1
DJNZR3,LOP2
MOVR3,#3
LOP4:MOVR4,#8
MOVR2,#7
LOP3:MOVP1,#0FFH
MOVDPTR,#TABA
MOVA,R2
MOVCA,@A DPTR
MOVP3,A
DECR2
LCALLDELAY
DJNZR4,LOP3
DJNZR3,LOP4
MOVR3,#3
LOP6:MOVR4,#8
MOVR2,#0
LOP5:MOVP3,#00H
MOVDPTR,#TABB
MOVA,R2
MOVCA,@A DPTR
MOVP1,A
INCR2
LCALLDELAY
DJNZR4,LOP5
DJNZR3,LOP6
MOVR3,#3
LOP8:MOVR4,#8
MOVR2,#7
LOP7:MOVP3,#00H
MOVDPTR,#TABB
MOVA,R2
MOVCA,@A DPTR
MOVP1,A
DECR2
LCALLDELAY
DJNZR4,LOP7
DJNZR3,LOP8
LJMPSTART
DELAY:MOVR5,#10
D2:MOVR6,#20
D1:MOVR7,#248
DJNZR7,$
DJNZR6,D1
DJNZR5,D2
RET
TABA:DB0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
TABB:DB01H,02H,04H,08H,10H,20H,40H,80H
END
6.C語言源程序
#include0;j--);
}
voidmain(void)
{
unsignedchari,j;
while(1)
{
for(j=0;j<3;j )
//fromlefttoright3time
{
for(i=0;i<8;i )
{
P3=taba[i];
P1=0xff;
delay1();
}
}
for(j=0;j<3;j )
//fromrighttoleft3time
{
for(i=0;i<8;i )
{
P3=taba[7-i];
P1=0xff;
delay1();
}
}
for(j=0;j<3;j )
//fromtoptobottom3time
{
for(i=0;i<8;i )
{
P3=0x00;
P1=tabb[7-i];
delay1();
}
}
for(j=0;j<3;j )
//frombottomtotop3time
{
for(i=0;i<8;i )
{
P3=0x00;
P1=tabb[i];
delay1();
}
}}
}
LED點陣顯示實驗
一.實驗要求
編程實現中英文字符的顯示。
二.實驗目的
1.了解LED點陣顯示的基本原理和實現方法。
2.掌握點陣漢字庫的編碼和從標準字庫中提取漢字編碼的方法。
三.實驗電路及連線
點陣顯示模塊WTD3088的(紅色)列輸入線接至內部LED的陰極端,行輸入線接至內部LED的陽極端(若陽極端輸入為高電平,陰極端輸入低電平,則該LED點亮)。發光點的分布如圖22-0所示。
Fig22-0WTD3088LED分布
如圖22-1示,本實驗模塊使用74LS374來控制列輸入線的電平值。將74LS374的某輸出置0,則對應的LED陰極端被置低。如圖22-2示,本實驗模塊使用74LS273來控制行輸入線,并通過9013提供電流驅動。將74LS273的某輸出置1,則對應的LED陽極端被置高。每次系統重新開啟或總清后,74LS273輸出為全0,LED顯示被關閉。
通過編程控制各顯示點對應LED陽極和陰極端的電平,就可以有效的控制各顯示點的亮滅。
Fig22-1LED模塊及列掃描電路
Fig22-2行掃描電路
Fig22-3地址譯碼電路
本實驗模塊使用4塊WTD3088組成16×16點陣,以滿足漢字顯示的要求。為了方便的控制四個單元,使用了一片74LS139譯碼,產生四個地址片選信號:CLKR1=CSLED,CLKR2=CSLED 1,用于行控制的兩片74LS273;CLKC1=CSLED 2,CLKC2=CSLED 3,用于列控制的兩片74LS374。
實驗接線:按示例程序,模塊的CSLED接51/96地址的8000H。
四.實驗說明
使用高亮度LED發光管構成點陣,通過編程控制可以顯示中英文字符、圖形及視頻動態圖形。LED顯示以其組構方式靈活、亮度高、技術成熟、成本低廉等特點在證券、運動場館及各種室內/外顯示場合得到廣泛的應用。
所顯示字符的點陣數據可以自行編寫(即直接點陣畫圖),也可從標準字庫(如ASC16、HZ16)中提取。后者需要正確掌握字庫的編碼方法和字符定位的計算。
實驗盤片中“字符轉換”子目錄下提供的Basc16.exe,BHz16.exe可方便的將單個字符的碼表從標準字庫Asc16,Hzk16中提取出來。具體使用方法是運行上述可執行程序,根據提示輸入所需字符(如是漢字還需要先啟動dos下的漢字環境,如ucdos,pdos95等)。程序將該字符的碼表提取出來,存放在該字符ASC或區位碼為文件名稱的.dat文件中。用戶只需將該文件中內容拷貝、粘貼到自己的程序中即可。但需要注意字節排列順序、字節中每一位與具體顯示點的一一對應關系,必要時還要對碼表稍作修改。同一目錄下還提供了上述可執行程序的源文件,使用BC3.1編寫,供用戶參考。
五.實驗程序框圖
用戶應留心其中行掃描的實現及碼表的處理。
六.實驗程序:
(一)提供LEDA51演示Asc16字符的簡單點陣顯示。
;________*LED點陣顯示示例程序______________________*
;__該程序顯示Asc16字符__
;__為了簡單起見,程序只顯示一個字符__
;__該程序針對T598實驗機的模塊14__
;____________________________________________________
CSLEDEQU8000H
CSR1EQUCSLED;行1273
CSR2EQUCSLED 1H;行2273
CSC1EQUCSLED 2H;列1374
CSC2EQUCSLED 3H;列2374
ORG0000H
MOVSP,#60H
INIT:MOVA,#0H;關閉行
MOVDPTR,#CSR1
MOVX@DPTR,A
MOVDPTR,#CSR2
MOVX@DPTR,A
MOVA,#0FFH;關閉列
MOVDPTR,#CSC1
MOVX@DPTR,A
MOVDPTR,#CSC2
MOVX@DPTR,A
D:MOVR5,#00H
MOVR4,#01H;每次為單行掃描
DISP:
MOVA,R5
MOVDPTR,#ASCE;此處設定所要顯示的字符
MOVCA,@A DPTR
CPLACC;代碼取反,決定顯示的陰陽
MOVDPTR,#CSC2
MOVX@DPTR,A
MOVDPTR,#CSR1
MOVA,R4
MOVX@DPTR,A
RLACC
MOVR4,ACC
INCR5
LCALLDELAY
CJNER5,#8H,DISP
MOVA,#0H
MOVX@DPTR,A
MOVR5,#08H
MOVR4,#01H
DISP2:
MOVA,R5
MOVDPTR,#ASCE
MOVCA,@A DPTR
CPLACC
MOVDPTR,#CSC2
MOVX@DPTR,A
MOVDPTR,#CSR2
MOVA,R4
MOVX@DPTR,A
RLACC
MOVR4,ACC
INCR5
LCALLDELAY
CJNER5,#10H,DISP2
MOVA,#0H
MOVX@DPTR,A
SJMPD
;________延時子程序,協調字符顯示速度____________*
DELAY:MOVR7,#1H
DL1:MOVR6,#00H
DL2:DJNZR6,DL2
DJNZR7,DL1
RET
;________字符點陣字庫______________*
;ASC16字符編碼排列
;0
;1
;|
;|
;14
;15
;高位D7--D0
;請注意編碼的排列次序和實際顯示點陣分布的關系
ASCA:DB00H,00H,10H,38H,6CH,0C6H,0C6H,0FEH
DB0C6H,0C6H,0C6H,0C6H,00H,00H,00H,00H
ASCE:DB00H,00H,0FEH,66H,62H,68H,78H,68H
DB60H,62H,66H,0FEH,00H,00H,00H,00H
ASCD:DB00H,00H,0F8H,6CH,66H,66H,66H,66H
DB66H,66H,6CH,0F8H,00H,00H,00H,00H
ASCK:DB00H,00H,0E6H,66H,66H,6CH,78H,78H
DB6CH,66H,66H,0E6H,00H,00H,00H,00H
;____________________________________________________
END
(二)LEDHZ51兩個示例程序。和Hz16字符的簡單點陣顯示。
;________*LED點陣顯示示例程序______________________*
;__該程序顯示hz16字符__
;__為了簡單起見,程序只顯示一個字符__
;__該程序針對T598實驗機的模塊14__
;____________________________________________________
CSLEDEQU8000H
CSR1EQUCSLED;行1273
CSR2EQUCSLED 1H;行2273
CSC1EQUCSLED 2H;列1374
CSC2EQUCSLED 3H;列2374ORG0000H
MOVSP,#60H
INIT:MOVA,#0H;關閉LED顯示
MOVDPTR,#CSR1
MOVX@DPTR,A
MOVDPTR,#CSR2
MOVX@DPTR,A
MOVA,#0FFH;關閉LED顯示
MOVDPTR,#CSC1
MOVX@DPTR,A
MOVDPTR,#CSC2
MOVX@DPTR,A
D:MOVR5,#00H
MOVR4,#01H
DISP:
MOVA,R5
RLACC
MOVDPTR,#HZAI
MOVCA,@A DPTR
CPLACC
MOVDPTR,#CSC2
MOVX@DPTR,A
MOVA,R5
RLACC
INCACC
MOVDPTR,#HZAI
MOVCA,@A DPTR
CPLACC
MOVDPTR,#CSC1
MOVX@DPTR,A
MOVDPTR,#CSR1
MOVA,R4
MOVX@DPTR,A
RLACC
MOVR4,ACC
INCR5
LCALLDELAY
CJNER5,#8H,DISP
MOVA,#0H
MOVX@DPTR,A
MOVR5,#08H
MOVR4,#01H
DISP2:
MOVA,R5
RLACC
MOVDPTR,#HZAI
MOVCA,@A DPTR
CPLACC
MOVDPTR,#CSC2
MOVX@DPTR,A
MOVA,R5
RLACC
INCACC
MOVDPTR,#HZAI
MOVCA,@A DPTR
CPLACC
MOVDPTR,#CSC1
MOVX@DPTR,A
MOVDPTR,#CSR2
MOVA,R4
MOVX@DPTR,A
RLACC
MOVR4,ACC
INCR5
LCALLDELAY
CJNER5,#10H,DISP2
MOVA,#0H
MOVX@DPTR,A
SJMPD
;________延時子程序,協調字符顯示速度____________*
DELAY:MOVR7,#1H
DL1:MOVR6,#00H
DL2:DJNZR6,DL2
DJNZR7,DL1
RET
;________字符點陣字庫______________*
;HZ16字符編碼排列
;01
;23
;|
;|
;2829
;3031
;高位D7--D0
HZAI:DB00H,78H,3FH,80H,11H,10H,09H,20H
DB7FH,0FEH,42H,02H,82H,04H,7FH,0F8H
DB04H,00H,07H,0F0H,0AH,20H,09H,40H
DB10H,80H,11H,60H,22H,1CH,0CH,08H
HZDI:DB00H,80H,40H,80H,20H,88H,2FH,0FCH
DB08H,88H,08H,88H,0E8H,88H,2FH,0F8H
DB28H,88H,28H,88H,28H,88H,2FH,0F8H
DB28H,08H,50H,06H,8FH,0FCH,00H,00H
HZKE:DB01H,00H,01H,04H,0FFH,0FEH,01H,00H
DB01H,10H,1FH,0F8H,10H,10H,10H,10H
DB10H,10H,1FH,0F0H,14H,50H,04H,40H
DB04H,40H,08H,42H,10H,42H,60H,3EH
;____________________________________________________
END
基于89C51的計算機可鎖定加密鍵盤設計
摘要:介紹PC鍵盤和鍵盤接口的PS/2通信協議,以及用89C51實現可鎖定鍵盤的軟件和硬件設計方法。具有安全可靠、容錯能力強、可以直接采用標準鍵盤進行改裝、便于實現等優點,并保留標準鍵盤的全部功能。
關鍵詞:PS/289C51C51鍵盤
引言
在智能儀器、自動控制等領域,已大量使用嵌入式PC,如Advantech公司的PC/104、AMD公司的DIMM-PC等。為適應開放式、模塊化的要求,嵌入式PC具有標準的PC接口,如VGA顯示器控制接口、以太網接口、RS232接口、PC/AT鍵盤接口等。所以,可以用標準的PC鍵盤對嵌入式PC進行操作與控制。鍵盤在輸入指令之后,可能很長一段時間不用。為計算機安全和防止誤觸發,需要將鍵盤鎖定,還要對某些鍵采取屏蔽措施,但是PC標準鍵盤不能滿足這些要求。本文介紹一種用89C51設計實現的可鎖定加密PC/AT鍵盤。
1鍵盤功能及工作原理
PC鍵盤功能主要有按鍵識別、去抖、重鍵處理、發送掃描碼、自動重發、接收鍵盤命令、處理命令等。鍵盤有編碼鍵盤和非編碼鍵盤。編碼鍵盤程序設計簡單,但硬件電路復雜,價格較高;非編碼鍵盤用軟件來實現識別鍵、編碼轉換、去抖等功能,硬件電路簡單,價格便宜。現代微機系統中廣泛采用非編碼鍵盤。PC鍵盤多采用18行×8列的二維矩陣行列結構。采用行掃描法識別按下的按鍵。
2PS/2協議
PS/2協議是外設與主機之間通信的一種同步雙向串行協議。在該協議中主機擁有較高的優先級,在一定條件下可以終止外設正在進行的發送過程。PS/2協議采用的傳送數據幀的格式為:1位起始位(0)、8位數據位、1位奇偶校驗位、1位停止位(1)。數據發送時低位在前,高位在后。外設每收到主機發來的1幀數據,都要緊隨該幀的停止位發送一個握手位ACK(0)應答主機。然后,外設還要發1幀應答數據(0xF0),表示外設已經完整地接收到了主機的命令;而主機則不需發送握手位,也不需要發送應答幀。
2.1鍵盤到PC鍵盤接口的通信
當時鐘線和數據線均為高電平時,允許鍵盤發送數據,系統將接收數據;當時鐘線被拉為低電平時,表明系統禁止數據傳輸。圖1給出了發送時序,包含1個低電平觸發的起始位、8位數據位、1個奇校驗位和1個高電平的結束位。
2.2PC系統到鍵盤的通信協議
若時鐘線出現高電平,數據線出現低電平,表明系統請求發送,鍵盤準備產生同步時鐘脈沖串,并接收數據。包含了1個低電平觸發的起始位、8位數據位、1個奇校驗位、1個應答位、1個高電平的結束位。圖2為時序圖。
(1)鍵盤命令及執行過程
①FFH:復位鍵盤。系統通過此軟件復位命令使鍵盤進入程序復位和內部自測試,稱為基本保證測試(BAT)。復位鍵盤的過程如下:
a.鍵盤收到FFH后立即回送ACK(FAH)作答;
b.鍵盤接口收到ACK后,將鍵盤時鐘和數據線置為高電平;
c.鍵盤檢測到此狀態后開始BAT操作;
d.如果BAT正確完成,鍵盤發送AAH以表示結束,
否則以FDH(或其它任何值)表示診斷有誤。
②FEH:重新發送。當系統檢測
到從鍵盤送來的任何傳輸錯誤時,它便向鍵盤發送FEH命令。鍵盤接收到此命令后,將重新送出原來的內容。③FDH~F7H:空操作(保留未用)。
④F6H:設置缺省值。此命令使鍵盤所有條件復位到電源接通時的缺省狀態,鍵盤繼續掃描。
⑤F5H:設置缺省值和停止鍵盤。此命令使鍵盤所有條件復位到電源接通時的缺省狀態,并停止鍵盤掃描,等待下一個鍵盤命令。
⑥F4H:啟動鍵盤。鍵盤接收到此命令后,用ACK(FAH)作答,清除輸出緩沖器,并啟動鍵盤開始掃描。
⑦F3H:設置拍發速率和延時參數。每當按下任一鍵時,鍵盤以拍發速率連續送出鍵的接通碼,直到鍵被釋放為止。延時參數是指按下一鍵后,鍵盤輸出的響應時間。
系統缺省設置:拍發速率=10個/s±20,延時=500ms±20。
當要改變設置時可以使用F3H命令,并后跟一個字節的參數。參數定義如表1所列。
表1
D7
D6D5
D4D3
D2D1D0
C
B
A
計算拍發速率和響應延時的公式如下:
拍發速率=1/[(8 A)×2B×0.00417](1/s)
響應延時=(1 C)×250(ms)
注:缺省的延時參數值為2CH。
此命令的執行過程如下:
a.鍵盤收到F3H命令后,用FAH予以響應,并停止
掃描和等待隨后的參數;
b.鍵盤若收到隨后的設置參數,用另一個ACK響
應,并按其參數設置新的拍發速率和響應延時,
之后重新開始掃描(若鍵盤原來是開放的);
c.鍵盤若收到FAH命令,但無隨后的設置參數,則
鍵盤結束命令設置,并保持原來的拍發速率和響
應延時,停止掃描。
⑧F2H,F1,EFH:保留未用。
⑨F0H:設置鍵盤掃描碼命令。此命令用于設置鍵盤的掃描碼,后跟參數指定三種掃描碼的哪一種。鍵盤復位時,默認掃描碼是第二種。
⑩EEH:回送命令。此命令用于輔助診斷,要求鍵盤接收到EEH時也要回送EEH予以響應。若鍵盤原來是開放的,則繼續掃描。
EDH:置位/復位LED指示器。鍵盤右上角有三個LED指示器,分別反映Caps、Num和Scroll三個鍵的鎖定情況。參數字節如表2所列。
表2
D7D3
D2
D1
D0
保留
1=激勵CapsLED
1=激勵NumLED
1=激勵ScrollLED
此命令執行過程與F3H相似。若命令后跟參數,則按參數設定LED狀態并繼續掃描。若僅有命令無參數,則不改變LED原狀態,并停止掃描。
(2)鍵盤響應
鍵盤在下列四種情況下都會向鍵盤接口發送數據。
①按下任一鍵,鍵盤以拍發速率向接口發送鍵盤接通掃描碼。
②釋放所按下的鍵,鍵盤發送斷開掃描碼。
③系統向鍵盤發送鍵盤命令后,鍵盤回送應答。
④當用戶按鍵速度超出鍵盤所能容納的最大鍵個數時,鍵盤做出響應。
后三種情況稱為鍵盤響應。響應字節有7個,定義如下。
①FEH:重新發送響應。當鍵盤收到一個無效的鍵盤命令,或者檢測到奇偶錯的鍵盤命令時,鍵盤回送響應字節為FEH,要求系統重發鍵盤命令。
②FAH:正常應答。對任何一個有效的鍵盤命令,鍵盤回送FAH予以響應。
③00H:超限應答。當用戶按鍵速度超出鍵盤所能容納的最大鍵符個數時(16個字節的緩沖器),鍵盤發送00H。
④FDH:診斷故障應答。鍵盤接受軟件復位命令,執行自測試過程中。若檢測到故障,則以FDH應答。此時,鍵盤停止掃描并等待下一個鍵盤命令。
⑤AAH:診斷正常應答。鍵盤在軟件復位過程中,正常完成BAT測試,以AAH應答。
⑥FEH:回響命令的應答,對鍵盤FEH命令的應答。
⑦F0H:斷開掃描碼前綴,鍵盤對鍵符按下后釋放的應答,第一個字節為F0H,第二個字節為接通掃描碼(有幾個鍵例外)。
3硬件設計
PC系列鍵盤采用18行×8列的矩陣行列結構。89C51單片機有4個8位I/O端口,因此可以采用P0、P2口再加上P3口的2個(P3.6和P3.7)作為行掃描線。P1口作為列輸入線(如果用P0口作列輸入線,必須加上拉電阻)。采用P3.0、P3.1作為數據線和時鐘線與PC系統進行通信,用P3.2、P3.4、P3.5控制鍵盤上的3個指示燈。硬件原理如圖3所示。
鍵盤與計算機通過一個五芯(PS/2接口為六芯)插座相接,4個有效引腳的定義分別是電源(VCC)、地(GND)、串行時鐘線(SCK)、串行數據線(SIO)。
4軟件設計
①消抖及重鍵處理:通過軟件上延時程序來消除抖動;采用后按鍵優先處理,即多鍵同時按下時,只重復發送最后按下鍵的掃描碼。
②程序包括鍵盤掃描子程序、發送鍵碼子程序、發送數據子程序、接收命令子程序、定時器1中斷服務程序、主程序等。鍵盤掃描子程序用于掃描鍵狀態,將被按鍵的位置號存入緩沖器中;發送鍵碼子程序用于將緩沖區鍵的接通碼或斷開碼發送給計算機鍵盤接口或者存在鍵盤密碼緩沖區中;發送數據子程序用于將數據發給計算機鍵盤接口;接收命令子程序用于接收計算機鍵盤接口發來的鍵盤命令;定時器1中斷服務子程序用于給程序中的延時提供標準時鐘,并具有軟件看門狗功能,防止軟件出現死機現象;主程序用于系統初始化,子程序調度,鎖定狀態的顯示等。
圖6發送緩沖區鍵碼子程序流程圖
圖4~6是主要軟件模塊的流程圖。單片機源程序見本刊網絡補充版(.com)。
5結論
本文介紹的PC/AT鍵盤具有結構簡單、設計靈活、安全可靠的特點,可用于標準PC和嵌入式PC。本鍵盤可以在標準的鍵盤基礎上進行改造,只需換掉原來的控制芯片即可,可節省設計成本。
單片機C51編程幾個有用的模塊(1)
KeilC51常用功能模塊使用說明
說明
本文檔包括單片機系統中常用到的時鐘中斷、通訊及鍵盤掃描等模塊(見所附源程序)的說明。這些模塊使用前后臺系統模型。為達到最大的靈活性,需要在用戶工程中定義config.h文件,在其中定義各模塊可選參數的設置,而不是直接更改源代碼。
這些可選內容大部分為宏定義,如果不定義宏相應的功能在編譯時被屏蔽,不會增加代碼長度。具體可選內容見各模塊中的說明。
在Config.h文件中還要包含一個單片機硬件的資源頭文件。
各模塊使用了定義在Common.h中的一些數據類型。如:BIT(bit)BYTE(unsignedchar)等,具體請參見源程序。
時鐘模塊
在單片機軟件設計中,時鐘是重要資源,為了充分利用時鐘資源,故設計本時鐘模塊。本模塊使用定時器0,在完成用戶指定功能的同時,還能夠自動處理一些其它模塊中與時鐘相關的信息。
時鐘模塊由聲明文件Timer.h以及實現文件Timer.c組成。
用戶應該在Config.h中定義宏TIMER_RELOAD來設定定時器0的重裝載初值。推薦的定時器0的中斷時間大于1毫秒。
在程序的初始化階段調用時鐘模塊的初始化函數InitTimerModule()之后,就可以使用時鐘模塊所以支持的各種功能。具體描述如下:
延時:當用戶需要進行一定時間的延時時,可以通過調用Delay()來進行,參數為時鐘中斷的次數。如時鐘中斷周期為1ms,想進行100ms的延時,則可以調用Delay(100)。
注意:
如果延時的絕對時間小于時鐘中斷的周期,則不能夠用本方法做到延時。
定時:當程序中需要使用定時功能時,如等待某外部事件,如果在一定時間內發生則繼續執行,如果在這段時間內發生,則認為出現錯誤,轉向錯誤處理機制。
在此推薦一種編程模式,但用戶可以用自己認為更合理的方式處理此類問題。
這里簡單說明一下關于阻塞式函數及非阻塞式函數。簡單說,阻塞式函數就是當檢測完成條件,如
果不能夠完成則等待,如:
voidCheckSomething()
{
//gbitSuccessFlagisaglobalvariable
while(gbitSuccessFlag==FALSE)
{
//donothingbutwaiting
}
}
可以看到,當bitSuccessFlag沒有被設置為TRUE時,函數保持等待狀態不返回,這樣就是阻塞式的函數。
另外一種情況:
BITCheckSomething()
{
if(gbitSuccessFlag==TRUE)
{
//…
returnTRUE;
}
returnFALSE;
}
在這里,如果所檢測的事件有沒有完成,函數進行檢測之后,立刻返回,通過返回值報告完成情況,如果沒有完成,則等待調用者分配再次執行的機會。這樣的函數就是非阻塞函數。
在應用定時功能時,首先要將檢測函數定義成非阻塞函數。如上面的第二個版本的CheckSomething。
然后下面模式:
BITbitDone=FALSE;
ResetClock();//cleartimerinterrupttimescounter
while(GetClock()
{
if(CheckSomething()==TRUE)
{
bitDone=TRUE;
break;
}
}
if(bitDone==FALSE)
{
//processtimeout
}或者簡單寫成:
BITbitDone=FALSE;
ResetClock();
while(GetClock()=(z))
當然,用戶也可以將IsPackageHeader和IsPackageTailer定義成為函數,通過BIT類型的返回值來向調用者提供與相應宏相同的信息。
另一種辦法需要在Config.h文件中定義宏SCOMM_ComplexPackageFormat。(需要注意的是,不能夠同時定義SCOMM_SimplePackageFormat和SCOMM_ComplexPackageFormat宏,否則會造成嚴重的不可預見性錯誤。
這時需要提供回調函數QueryPackageFormat,原形如下:
BYTEQueryPackageFormat(BYTEbyData,BYTEbyCount,BYTEbyParam);
函數中三個參數的含義與使用簡單數據包格式時判斷數據包尾的宏的參數相同。
函數通過返回值來通知作為調用者的接收函數對接收到的數據如何處理,但目前這種方法僅為需要處理復雜數據包格式時的一種可選方法,但不推薦。用戶如果想使用這種方法可以自己更改接收函數中相應的
#ifdefSCOM_ComplexPackageFormat
#endif//SCOMM_ComplexPackageFormat
預編譯指令之間的內容。
例如指定QueryPackageFormat的返回值的含義:
0:繼續找數據包頭或繼續找數據包尾。
1:找到數據包頭。
2:找到數據包尾。
3:數據包出錯,需要拋棄。
然后更改源代碼來實現上面的協議。
注意:當用戶需要使用字符串的時候,可以利用簡單的包裝函數將字符串轉換為字節數組。所以沒有必要提供專用的字符串處理函數。
鍵盤掃描模塊
鍵盤掃描模塊有兩種工作方式,一種為自動的由時鐘模塊調用,另一種是由程序員自行調用。
1)由時鐘模塊自動調用的方式
將時鐘模塊實現文件(Timer.h)及鍵盤掃描模塊的實現文件(KBScan。c)包含進工程,在Config.h文件中添加TIMER_KBSCANDELAY宏。時鐘模塊自動對時鐘中斷進行計數,當達到TIMER_KBSCANDELAY宏所定義的值后,自動調用鍵盤掃描模塊中的函數KBScanProcess()進行鍵盤掃描,也就是說,這個宏的值可以決定按鍵消抖動的時間。
用戶應該提供兩個回調函數OnKBScan()及OnKeysPressed()。在函數OnKBScan中進行鍵盤掃描,并返回掃描碼。掃描碼的類型缺省為BYTE,當鍵盤規模較大時,BYTE不能夠完全包含鍵盤信息時,可在Config.h文件中重定義宏KBvalue,如下:
#defineKBvalueWORD
這樣,就可以使用16位的鍵盤掃描碼,如果此時還達不到要求,可以將鍵盤掃描碼定義成一個結構,但這樣做將會增加代碼量及消耗更多的RAM資源,故不推薦。
掃描模塊調用OnKBScan取得掃描碼,并調用用戶可以重定義的宏IsNoKeyPressed來判斷是否有鍵按下,缺省的IsNoKeyPressed實現如下:
#defineIsNoKeyPressed(x)((x)==0x00)
即認為OnKBScan返回0掃描碼時為沒有鍵按下,如果掃描函數返回其它非零掃描碼做為無鍵按下的掃描碼時,可以在Config.h文件中重定義IsNoKeyPressed宏的實現。
8位鍵盤掃描碼(缺省值)時,相應的掃描函數為:
BYTEOnKBScan()
當掃描模塊經過軟件消抖動之后,發現有鍵按下,就會調用另一個回調函數OnKeysPressed。函數的聲明應該如下:
voidOnKeyPressed(BYTEbyKBvalue,BYTEbyState)
其中中的參數byKBvalue的類型為BYTE,此為缺省值,如果使用其它類型的掃描碼,就將此參數變為相應類型。這個值由OnKBScan返回。另一個參數byState在通常情況下為零。但當用戶在Config.h中定義宏KBSCAN_BRUSTCOUNT,同時鍵盤上的某鍵被按住不放時,掃描模塊對它自己的調用(注意這里和TIMER_KBSCANDELAY宏不同,TIMER_KBSCANDELAY是時鐘中斷足夠的次數后調用掃描模塊,而KBSCAN_BRUSHCOUNT為掃描模塊自身的被調用次數)進行計數,當達到KBSCAN_BRUSTCOUNT時,掃描模塊調用OnKeysPressed,此時第一個參數的含義不變,而byState變成1,同時計數器復位,又經過一段時間后,用值為3的byState調用OnKeysPressed。這樣就可以很方便的實現多功能鍵或者檢測某鍵的長時間被按下。
2)由用戶自行調用
由用戶自行在程序中調用掃描模塊,而不是由時鐘中斷自行調用。其它與方式1相同。
注意:
1)函數KBScanProcess為非阻塞函數,它將在很快的時間內返回,等待再次分配給它執行的機會。
2)函數KBScanProcess是在時鐘中斷外部運行的,它的過程可以被任何中斷打斷,但不影響系統運行。
3)byState的最大值為250,之后被復位為零。
應用舉例
現在來舉例說明上述幾個模塊的使用方法。
硬件環境描述:
為了控制一盞燈,需要單片機提供一個做控制功能的開關量,這里不描述外部接口電路,只說明當單片機的P10腳為高電平時,燈滅,當P10腳為低電平時,燈亮。
可以通過計算機由串口發送命令來控制,或通過一個按鍵(pus
hbutton不是自鎖式的按鍵)來手動控制(按鍵接在P11腳上,當鍵沒有按下時,P11電平為高,鍵按下時,引腳電平被接低),當使用按鍵手動控制的時候,需要給計算機發送通知。
設定串口通訊指令如下:
數據包由0xff做包頭,4個字節長,第二個字節為命令代碼,第三個字節為數據,最后一個字節為校驗位。
命令和數據代碼有如下組合:
(計算機發給單片機)
0x100x01:計算機控制燈亮。(數據位是非零值即可)
0x100x00:計算機控制燈滅。
(單片機發給計算機)
0x110x01:單片機正常執行控制指令,返回。(數據位是非零值即可)
0x110x00:單片機不能夠正常執行控制指令,或控制指令錯(不明含義的數據包或校驗錯等)。
0x120x01:手動控制燈亮。(數據位是非零值即可)
0x120x00:手動控制燈滅。建立工程:
在硬盤上建立文件夾Projects,在Projects下建立Common文件夾及Example文件夾。將各模塊的頭文件及實現文件拷貝到Common文件夾下(推薦使用這樣的文件組織結構,其它工程也可以建立在Projects下,各工程共享Common文件夾中的代碼)。
啟動KeilC的IDE,在Example下建立新工程,將各模塊的實現文件包含進工程。
在Example文件夾下建立Output文件夾,更改工程設置,將Output作為輸出文件和List文件的輸出文件夾(推薦使用這樣的結構,當保存工程文件時,可以簡單的刪除Output文件夾中的內容而不會誤刪有用的工程文件)。
建立工程配置頭文件Config.h及工程主文件Example.c,并將Exmaple.c文件加入工程。
輸入代碼:
代碼的具體編寫過程略。下面是最后的Config.h文件及Example.c文件。
//
//file:onfig.h
//
#ifndef_CONFIG_H_
#define_CONFIG_H_
#include//使用AT89C52做控制
#include“../Common/Common.h”//使用自定義的數據類型
#defineTIMER_RELOAD922//11.0592MHz晶振,1ms中斷周期
#defineTIMER_KBSCANDELAY40//40ms重檢測按鍵狀態,即40ms消抖
#defineSCOMM_AsyncInterface//使用異步通訊服務
#defineIsPackageHeader(x)((x)==0xff)//判斷包頭是不是0xff
#defineIsPackageTailer(x,y,z)((y)<=(z))//判斷包的長度是不是足夠
#endif//_CONFIG_H_
//
//file:xample.c
//
#include
#include“../Common/Common.h”
#include“../Common/Timer.h”
#include“../Common/Scomm.h”
#include“../Common/KBScan.h”
BITgbitLampState=1;//燈的狀態,缺省為off
staticvoidInitialize()
{
InitTimerModule();//初始化時鐘模塊
InitSCommModule(0xfd,TRUE);//初始化通訊模塊,11.0592MHz晶振,
//波特率為19200
EA=1;//開中斷
}
voidmain()
{
Initialize();//初始化
while(TRUE)//主循環
{
ImpTimerService();//實現時鐘中斷服務,如鍵盤掃描
AsyncRecePackage(4);//接收4個字節長的數據包
}
}
//在中斷外部響應時鐘中斷事件
voidOnTimerEvent()
{
//donothing
}
//控制外部燈
staticvoidTriggerLamp(BITbEnable)
{
P10=~bEnable;//需要反相控制
}
//鍵掃描回調函數
BYTEKBScan()
{
BITb;
P11=1;//讀之前拉高引腳電平
b=P11;//讀入引腳狀態
return~b;//數據反相做掃描碼
}
//計算校驗和
staticBYTECalcCheckSum(BYTE*pbyBuf,BYTEbyLen)
{
BYTEby,bySum=0;
for(by=0;by
return0–bySum;
}
//接收到鍵盤消息回調函數
voidOnKeyPressed(BYTEbyvalue,BYTEbyState)
{
BYTEby[4];
if(byState==0)
{
switch(byvalue)
{
case0x01:
gbitLampState=~gbitLampState;//燈狀態取反
TriggerLamp(gbitLampState);//執行控制
by[0]=0xff;//構造數據包
by[1]=0x12;
by[2]=(BYTE)gbitLampState;
by[3]=CalcCheckSum(by,3);//求校驗和
SendPackage(by,4);//發送數據包
break;
//處理其它掃描碼
default:
break;
}
}
//接收到數據包回調函數
voidOnRecePackage(BYTE*pbyBuf,BYTEbyBufLen)
{
BYTEby[4];
by[0]=0xff;
by[1]=0x11;
if(byBufLen!=4||pbyBuf[3]!=CalcCheckSum(pbyBuf,3))
{
by[2]=0;
by[3]=CalcCheckSum(by,3);
SendPackage(by,4);//處理長度或校驗和不正確
}
switch(pbyBuf[1])
{
case0x10:
gbitLampState=(BIT)pbyBuf[2];
TriggerLamp(gbitLampState);
by[2]=1;
by[3]=CalcCheckSum(by,3);
SendPackage(by,4);//發送成功執行通知
break;
default://不知道的命令
by[2]=0;
by[3]=CalcCheckSum(by,3);
SendPackage(by,4);//發送沒有成功執行通知
break;
}
}
4.課程設計單獨計算成績,考評方法見其大綱。
三、理論考試說明
1.單片機技術及應用理論考試,采用閉卷筆試形式,考試時間120分鐘。
2.期末考試試題根據教學大綱,其范圍和難度按照本方案中制訂的考試考核內容和要求確定。考試命題覆蓋考試大綱要求范圍。
3.期末考試試題類型有以下幾種:
①填空題;
②選擇題;
③判斷題;
④簡答題⑤綜合應用題。
四、考試考核要求層次
按照教學大綱的要求,理論考試要求分為掌握、理解和了解三個層次。
掌握:
對于本課程的重點內容要求學生達到掌握的程度。即能夠全面、深入理解和熟練掌握所學內容,并能夠用其分析、初步設計和解答與應用相關的問題,能夠舉一反三。要求學生掌握的內容也就是考試的主要內容,在考試中所占比例約70。
理解:
對于本課程的一般內容要求學生能夠理解。即要求學生能夠較好地理解所學內容,并且對所涉及的內容能夠進行簡單分析和判斷。要求學生理解的內容也是考試的內容,在考試中所占比例約25。
了解:
對于本課程的次要內容要求學生能夠了解。要求學生了解的內容,一般是指在眼下不必進一步深入和擴展,有些也許需要學生自己今后在工作中進行深入研究。對要求了解的內容,在考試中占較小比例,不超過5。實驗五:按鍵電路、顯示電路實驗一、實驗目的:1.掌握獨立式按鍵電路與矩陣式按鍵電路的設計方法。2.掌握數碼管顯示電路的工作原理3.掌握源程序編輯軟件UltraEdit,編譯軟件KeilC51、仿真軟件Proteus的使用方法4.掌握硬件仿真器ME-52A的使用方法二、實驗器材:1.單片機實驗板2.單片機硬件仿真器ME-51A3.計算機4.電源三、實驗要求:1.電路如圖5所示,用單片機的P3口所接的四個獨立式按鍵控制p1口流水燈花樣的方法;具體表現為:p3.0、P3.1、P3.2、P3.3四個小按鍵分別實現了四個控制:(1)跑燈:即P1.0---1.7亮點流動:(2)流水燈:即P1.0-1.7依次點亮(3)交叉閃爍:即P0.0,P0.2,P0.4,P0.6和P0.1,P0.3,P0.5,P0.7輪流點亮(4)停止;在任何狀態下按此鍵程序停止運行.2.電路如圖6所示,用P2口所接的4×4矩陣式鍵盤作為輸入,在P1口所接的數碼管上顯示出每個按鍵的0~F序號,鍵盤的布局如下表所示:FEDCBA9876543210四、實驗原理:1.獨立式按鍵電路顯示如圖5所示,從圖中可看出,判斷有無鍵按下,只要檢測P3.0~P3.3相應端口的高低電平即可,若檢測有某一端口為低電平,表明該端口有按鍵按下,經延時消抖后轉去執行相應的功能子程序。若為高電平,表明無鍵按1.獨立式按鍵電路如圖5所示,下,繼續檢測。示例程序如下:ORG000HLJMPSTAR1ORG0030HSTAR1:MOVP3,#0FFH;置P3口為輸入態JNBP3.0,FUN0;判別P3.0是否有鍵按下,是,則轉FUN0JNBP3.1,FUN1;判別P3.1是否有鍵按下,是,則轉FUN1JNBP3.2,FUN2;判別P3.2是否有鍵按下,是,則轉FUN2JNBP3.3,FUN3;判別P3.3是否有鍵按下,是,則轉FUN3JNBF0,STAR1;曾經有鍵按下F0置1RET圖5FUN0:LCALLDL10MS;消岸抖動JBP3.0,STAR1WAITL0:JNBP3.0,WAITL0;等待鍵釋放SETBF0FUN01:LCALLFUN00LCALLSTAR1LJMPFUN01FUN1:LCALLDL10MS;消岸抖動JBP3.1,STAR1WAITL1:JNBP3.1,WAITL1;等待鍵釋放SETBF0FUN10:LCALLFUN11LCALLSTAR1LJMPFUN10FUN2:LCALLDL10MS;消岸抖動JBP3.2,STAR1WAITL2:JNBP3.2,WAITL2;等待鍵釋放SETBF0FUN20:LCALLFUN22LCALLSTAR1LJMPFUN20FUN3:LCALLDL10MS;消岸抖動JBP3.3,STAR1WAITL3:JNBP3.3,WAITL3;等待鍵釋放CLRF0MOVP1,#0FFH;關顯示LJMPSTAR1FUN00:MOVA,#0FEH;跑燈子程序FUN000:MOVP1,ALCALLDL05SJNBACC.7,OUTRLAAJMPFUN000OUT:RETFUN11:MOVA,#0FEH;流水燈子程序FUN111:MOVP1,ALCALLDL05SJZOUTRLAANLA,P1AJMPFUN111FUN22:MOVA,#0AAH;交叉點亮子程序MOVP1,ALCALLDL30SCPLAMOVP1,ALCALLDL30SRET;____________;;延時程序;;____________;DL512:MOVR2,#0FFHLOOP1:DJNZR2,LOOP1RETDL10MS:MOVR3,#14HLOOP2:LCALLDL512DJNZR3,LOOP2RETDL05S:MOVR4,#0AHLOOP3:LCALLDL10MSDJNZR4,LOOP3RETDL30S:MOVR5,#03HLOOP4:LCALLDL05SDJNZR5,LOOP4RETEND2.矩陣式按鍵電路顯示如圖6所示。采用掃描方式進行按鍵的識別檢測,并將對應按鍵的鍵號用查表指令將對應的代碼顯示在數碼管上。圖6參考程序如下:ORG0000HLJMPSTARTORG0030HSTART:MOVSP,#60H;設置堆棧指針SCAN:MOVR3,#0F7H;置行掃描初值MOVR1,#00H;到TABLE表中取碼的指針SCAN1:MOVA,R3MOVP2,A;掃描輸出MOVA,P2;重讀P2口狀態MOVR4,A;暫存于R4呂中SETBC;C=1MOVR5,#03H;掃描4列初值L1:RLCA;A中內容循環左移JNCKEYIN;C=0,有鍵按下,轉消抖INCR1;取碼指針加1DJNZR5,L1;無鍵按下,繼續檢測MOVA,R3;掃描下一行SETBCRRCAMOVR3,AJCSCAN1;4行是否掃描完,未完,繼續LJMPSCANKEYIN:MOVR7,#10;削除抖動D2:MOVR6,#248DJNZR6,$DJNZR7,D2D3:MOVA,P2;按鍵放開否?XRLA,R4JZD3MOVA,R1MOVDPTR,#TABLE;到TABLE中取碼MOVCA,@A DPTRMOVP1,ALJMPSCANTABLE:DB0C0H,0F9H,0A4H,0B0H,80H,90H,88H,83H,0C6H,0A1H,86H,8EHENDDB80H,90H,88H,83HDB0C6H,0A1H,86H,8EHEND五、實驗步驟:1.運行UltraEdit-32源程序編輯軟件,輸入、編輯匯編語言源程序。2.運行KeiluVision2源程序編譯軟件,對源程序進行編譯,得到目標代碼文件。3.運行Proteus模擬仿真軟件,打開已繪制好的仿真電路原理圖,進行模擬 仿真。4.把硬件仿真器ME-52A與單片實驗板連接好,再用硬件仿真器進行仿真驗證。六、實驗分析與總結1.用仿真系統調試簡單程序結構、分支程序結構、循環程序結構、子程序結構和中斷結構的關鍵在于,如何將對程序的分析理解和開發系統提供的基本功能有機地結合起來,其前提條件是必須對源程序的作用、結構特點、運行過程與結果有較全面的認識,并能根據程序運行過程中出現的現象和結果分析并判斷產生各種故障現象的原因,再運用排除法逐一檢驗各種判斷是否準確。2.掌握程序結構特點的基礎上,合理選擇觀測點,通過觀察在觀測點處參數及路徑的變化檢驗程序運行的結果。3.高調試程序的效率,應對單片機開發系統所提供的幾種程序運行調試方式有足夠的了解并能熟練地運用。例如,在調試過程中,若要觀察最終結果,則可選擇全速運行調試;若要觀察相關指令的運行結果或運行路徑的變化過程,則可選擇單步運行;若要檢查子程序的運行過程,則可選擇跟蹤運行調試;若要檢查循環程序或中斷服務程序,則可選擇斷點運行調試;若要定點檢查程序運行到某處的結果時,則可選擇快速運行到光標處調試。但實際中究竟選用哪種方法更適宜或哪幾種方法結合使用更快捷,將隨著分析能力與操作的熟練程度逐步提高。4.程序運行結果是否正確時,應運用單片機開發系統所提供的交互界面,將程序運行過程中程序計數器PC(地址)的變化、各單元(內部RAM和外部RAM)內容的變化、特殊功能寄存器內容的變化、堆棧指針SP內容的變化與程序的理論分析結果相對照。5.程序和調試程序時,需要多次反復的過程,并非一次就能排除全部故障,特別是單片機應用系統的硬件電路和匯編程序相結合的綜合調試就更加復雜,因此,必須通過反復調試,不斷修改硬件和軟件,直到最終符合設計要求為止。如果在調試中能夠根據實驗現象預先對產生故障的原因加以判斷和分析,并制定出相應的調試方法和步驟,可縮小排除故障的范圍,提高調試效率。七、思考與練習填空題
1、設X=5AH,Y=36H,則X與Y“或”運算為__7EH_______,X與Y的“異或”運算為___6CH_____。
2、若機器的字長為8位,X=17,Y=35,則X+Y=__110100_____,X-Y=_11101110______(要求結果寫出二進制形式)。
3、單片機的復位操作是____高電平______(高電平/低電平),單片機復位后,堆棧指針SP的值是___07h_____。
4、單片機中,常用作地址鎖存器的芯片是__74HC373____________,常用作地址譯碼器芯片是_____74HC138____________。
5、若選擇內部程序存儲器,應該設置為_____高_______(高電平/低電平),那么,PSEN信號的處理方式為___不用__________________。
6、單片機程序的入口地址是____0000H__________,外部中斷1的入口地址是______0013H_________。
7、若采用6MHz的晶體振蕩器,則MCS-51單片機的振蕩周期為__0.5us_______,機器周期為_____2us__________。
8、擴展芯片的選擇方法有兩種,它們分別是___線選法_______________和_____譯碼法__________。
9、單片機的內部RAM區中,可以位尋址的地址范圍是____20H~2FH______________,特殊功能寄存器中,可位尋址的地址是___是能被8整除的地址_________________。
10、子程序返回指令是___ret______,中斷子程序返回指令是__reti。
11、8051單片機的存儲器的最大特點是內部RAM與外部RAM分開編址。
12、8051最多可以有32個并行輸入輸出口,最少也可以有8個并行口。
13、函數是C語言的基本單位。
14、串行口方式2接收到的第9位數據送SCON寄存器的RB8位中保存。
15、MCS-51內部提供3個可編程的16位定時/計數器,定時器有4種工作方式。
16、一個函數由兩部分組成,即說明部分和語句部分。
17、串行口方式3發送的第9位數據要事先寫入SCON寄存器的TB8位。
18、利用8155H可以擴展3個并行口,256個RAM單元。
19、C語言中輸入和輸出操作是由庫函數scanf和printf等函數來完成。
二、選擇題
1、C語言中最簡單的數據類型包括(B)。
A、整型、實型、邏輯型B、整型、實型、字符型
C、整型、字符型、邏輯型D、整型、實型、邏輯型、字符型
2、當MCS-51單片機接有外部存儲器,P2口可作為(C)。
A、數據輸入口B、數據的輸出口
C、準雙向輸入/輸出口D、輸出高8位地址
3、下列描述中正確的是(D)。
A、程序就是軟件B、軟件開發不受計算機系統的限制
C、軟件既是邏輯實體,又是物理實體D、軟件是程序、數據與相關文檔的集合
4、下列計算機語言中,CPU能直接識別的是(D)。
A、自然語言B、高級語言C、匯編語言D、機器語言
5、MCS-5l單片機的堆棧區是設置在(C)中。
A、片內ROM區B、片外ROM區C、片內RAM區D、片外RAM區
6、以下敘述中正確的是(C)。
A、用C語言實現的算法必須要有輸入和輸出操作
B、用C語言實現的算法可以沒有輸出但必須要有輸入
C、用C程序實現的算法可以沒有輸入但必須要有輸出
D、用C程序實現的算法可以既沒有輸入也沒有輸出
7、定時器/計數器工作方式1是(D)。
A、8位計數器結構B、2個8位計數器結構
C、13位計數結構D、16位計數結構
8、C語言提供的合法的數據類型關鍵字是(B)。
A、DoubleB、shortC、integerD、Char
9、片內RAM的20H~2FH為位尋址區,所包含的位地址是(B)。
A、00H~20HB、00H~7FHC、20H~2FHD、00H~FFH
10、以下能正確定義一維數組的選項是(B)。
A、inta[5]={0,1,2,3,4,5};B、chara[]={0,1,2,3,4,5};
C、chara={’A’,’B’,’C’};D、inta[5]="0123";
11、數據的存儲結構是指(D)。
A、存儲在外存中的數據B、數據所占的存儲空間量
C、數據在計算機中的順序存儲方式D、數據的邏輯結構在計算機中的表示
12、下列關于棧的描述中錯誤的是(C)。
A、棧是先進后出的先性表B、棧只能順序存儲
C、棧具有記憶作用D、對棧的插入和刪除操作中,不需要改變棧底指針
13、在寄存器間接尋址方式中,間址寄存器中存放的數據是(B)。
A、參與操作的數據B、操作數的地址值
C、程序的轉換地址D、指令的操作碼
14、MCS-51單片機的復位信號是(A)有效。
A、高電平B、低電平C、脈沖D、下降沿
15、為了使模塊盡可能獨立,要求(B)。
A、模塊的內聚程度要盡量高,且各模塊間的耦合程度要盡量強
B、模塊的內聚程度要盡量高,且各模塊間的耦合程度要盡量弱
C、模塊的內聚程度要盡量低,且各模塊間的耦合程度要盡量弱
D、模塊的內聚程度要盡量低,且各模塊間的耦合程度要盡量強
16、若MCS-51單片機使用晶振頻率為6MHz時,其復位持續時間應該超過(B)。
A、2μsB、4μsC、8μsD、1ms
17、以下選項中可作為C語言合法常量的是(A)
A、-80B、-080C、-8e1.0D、-80.0e
18、能夠用紫外光擦除ROM中程序的只讀存儲器稱為(C)。
A、掩膜ROMB、PROMC、EPROMD、EEPROM
19、以下不能定義為用戶標識符是(D)。
A、MainB、_0C、_intD、sizeof
20、下選項中,不能作為合法常量的是(B)。//冪不能為小數
A、1.234e04B、1.234e0.4C、1.234e 4D、1.234e0
21、以下敘述中錯誤的是(C)
A、對于double類型數組,不可以直接用數組名對數組進行整體輸入或輸出
B、數組名代表的是數組所占存儲區的首地址,其值不可改變
C、當程序執行中,數組元素的下標超出所定義的下標范圍時,系統將給出“下標越界”的出錯信息
D、可以通過賦初值的方式確定數組元素的個數
22、以下與函數fseek(fp,0L,SEEK_SET)有相同作用的是(D)
A、feof(fp)B、ftell(fp)C、fgetc(fp)D、rewind(fp)
23、存儲16×16點陣的一個漢字信息,需要的字節數為(A)
A、32B、64C、128D、256
24、已知1只共陰極LED顯示器,其中a筆段為字形代碼的最低位,若需顯示數字1,則它的字形代碼應為(B)。
A、06HB、F9HC、30HD、CFH
25、在C語言中,合法的長整型常數是(A)
A、OLB、4962710C、324562&D、216D
26、以下選項中合法的字符常量是(B)
A、"B"B、’\010’C、68D、D
27、若PSW.4=0,PSW.3=1,要想把寄存器R0的內容入棧,應使用(D)指令。
A、PUSHR0B、PUSH@R0C、PUSH00HD、PUSH08H
28、在片外擴展一片2764程序存儲器芯片要(B)地址線。
A、8根B、13根C、16根D、20根
29、設MCS-51單片機晶振頻率為12MHz,定時器作計數器使用時,其最高的輸入計數頻率應為(C)
A、2MHzB、1MHzC、500kHzD、250kHz
30、下列數據字定義的數表中,(A)是錯誤的。
A、DW“AA”B、DW“A”C、DW“OABC”D、DWOABCH
三、判斷題
(√)1、在對某一函數進行多次調用時,系統會對相應的自動變量重新分配存儲單元。
(×)2、在C語言的復合語句中,只能包含可執行語句。
(√)3、自動變量屬于局部變量。
(×)4、Continue和break都可用來實現循環體的中止。
(√)5、字符常量的長度肯定為1。
(×)6、在MCS-51系統中,一個機器周期等于1.5μs。
(√)7、C語言允許在復合語句內定義自動變量。
(√)8、若一個函數的返回類型為void,則表示其沒有返回值。
(×)9、所有定義在主函數之前的函數無需進行聲明。
(×)10、定時器與計數器的工作原理均是對輸入脈沖進行計數。
(×)11、END表示指令執行到此結束。
(√)12、ADC0809是8位逐次逼近式模/數轉換接口。
(√)13、MCS-51的相對轉移指令最大負跳距是127B。
(×)14、MCS-51的程序存儲器只是用來存放程序的。
(√)15、TMOD中的GATE=1時,表示由兩個信號控制定時器的的啟停。
(×)16、MCS-51的特殊功能寄存器分布在60H~80H地址范圍內。
(×)17、MCS-51系統可以沒有復位電路。
(×)18、片內RAM與外部設備統一編址時,需要專門的輸入/輸出指令。
(√)19、鎖存器、三態緩沖寄存器等簡單芯片中沒有命令寄存和狀態寄存等功能。
(√)20、使用8751且=1時,仍可外擴64KB的程序存儲器。
四、簡答題
1、在使用8051的定時器/計數器前,應對它進行初始化,其步驟是什么?
答:(1)確定T/C的工作方式——編程TMOD寄存器;
(2)計算T/C中的計數初值,并裝載到TH和TL;
(3)T/C在中斷方式工作時,須開CPU中斷和源中斷——編程IE寄存器;
(4)啟動定時器/計數器——編程TCON中TR1或TR0位。
2、什么是重入函數?重入函數一般什么情況下使用,使用時有哪些需要注意的地方?
答:多個函數可以同時使用的函數,稱為重入函數。
通常情況下,C51函數不能被遞歸調用,也不能應用導致遞歸調用的結構。有此限制是由于函數參數和局部變量是存儲在固定的地址單元中。重入函數特性允許你聲明一個重入函數。即可以被遞歸調用的函數。
重入函數可以被遞歸調用,也可以同時被兩個或更多的進程調用。重入函數在實時應用中及中斷服務程序代碼和非中斷程序代碼必須共用一個函數的場合中經常用到。
3、8051引腳有多少I/O線?他們和單片機對外的地址總線和數據總線有什么關系?地址總線和數據總線各是幾位?
答:8051引腳共有40個引腳,8051的地址總線由P2和P0口提供,P2口是地址總線的高8位,P0口是地址總線的低8位;數據總線由P0口提供;P0口的地址總線和數據總線是分時進行的,P0口的地址總線需要外接地址鎖存器完成地址鎖存。
地址總線共16位,數據總線是8位。
4、在有串行通信時,定時器/計數器1的作用是什么,怎樣確定串行口的波特率?
答:在有串行通信時,定時器/計數器1的作用是串行口發生器。
串行口的波特率根據串行口的工作方式具有不同的計算方式:
方式0的波特率固定為晶體振蕩器的十二分之一;
方式1的波特率=2SMOD.(定時器1的溢出率)/32;
方式2波特率=2SMOD.(fosc/64);
方式3波特率同方式1(定時器l作波特率發生器)。
5、如何消除鍵盤的抖動?怎樣設置鍵盤中的復合鍵?
答:由于按鍵是機械開關結構,所以當用手按下其中一個鍵時,往往會出現所按鍵在閉合位置和斷開位置之間發生跳幾下后才會穩定到閉合狀態的情況。在釋放一個鍵時,也會出現類似的情況,這就是鍵的抖動,抖動的持續時間不一,但通常不會大于10ms。
若抖動問題不解決,就會引起對閉合鍵的多次讀入。對于鍵抖動最方便的解決方法就是當發現有鍵按下后,不是立即進行掃描,而是延時大約10ms后再進行。由于一個鍵按下的時間一般會持續上百毫秒,所以延遲10ms后再掃描處理并不遲。
復合鍵可以仿照計算機復合鍵的處理方法,通常可以假設一個鍵具有復合功能,再與其它減的鍵值組合成復合鍵。1、矩陣式鍵盤的結構與工作原理
在鍵盤中按鍵數量較多時,為了減少I/O口的占用,通常將按鍵排列成矩陣形式,如圖1所示。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接。這樣,一個端口(如P1口)就可以構成4*4=16個按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數越多,區別越明顯,比如再多加一條線就可以構成20鍵的鍵盤,而直接用端口線則只能多出一鍵(9鍵)。由此可見,在需要的鍵數比較多時,采用矩陣法來做鍵盤是合理的。
矩陣式結構的鍵盤顯然比直接法要復雜一些,識別也要復雜一些,上圖中,列線通過電阻接正電源,并將行線所接的單片機的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當按鍵沒有按下時,所有的輸出端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會被拉低,這樣,通過讀入輸入線的狀態就可得知是否有鍵按下了。具體的識別及編程方法如下所述。
2、矩陣式鍵盤的按鍵識別方法
確定矩陣式鍵盤上何鍵被按下介紹一種“行掃描法”。
行掃描法行掃描法又稱為逐行(或列)掃描查詢法,是一種最常用的按鍵識別方法,如上圖所示鍵盤,介紹過程如下。
1、判斷鍵盤中有無鍵按下將全部行線Y0-Y3置低電平,然后檢測列線的狀態。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個按鍵之中。若所有列線均為高電平,則鍵盤中無鍵按下。
2、判斷閉合鍵所在的位置在確認有鍵按下后,即可進入確定具體閉合鍵的過程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時,其它線為 高電平。在確定某根行線位置為低電平后,再逐行檢測各列線的電平狀態。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。
下面給出一個具體的例子:
圖仍如上所示。8031單片機的P1口用作鍵盤I/O口,鍵盤的列線接到P1口的低4位,鍵盤的行線接到P1口的高4位。列線P1.0-P1.3分別接有4個上拉電阻到正電源 5V,并把列線P1.0-P1.3設置為輸入線,行線P1.4-P.17設置為輸出線。4根行線和4根列線形成16個相交點。
1、檢測當前是否有鍵被按下。檢測的方法是P1.4-P1.7輸出全“0”,讀取P1.0-P1.3的狀態,若P1.0-P1.3為全“1”,則無鍵閉合,否則有鍵閉合。
2、去除鍵抖動。當檢測到有鍵按下后,延時一段時間再做下一步的檢測判斷。
3、若有鍵被按下,應識別出是哪一個鍵閉合。方法是對鍵盤的行線進行掃描。P1.4-P1.7按下述4種組合依次輸出:
P1.71110
P1.61101
P1.51011
P1.40111
在每組行輸出時讀取P1.0-P1.3,若全為“1”,則表示為“0”這一行沒有鍵閉合,否則有鍵閉合。由此得到閉合鍵的行值和列值,然后可采用計算法或查表法將閉合鍵的行值和列值轉換成所定義的鍵值
4、為了保證鍵每閉合一次CPU僅作一次處理,必須卻除鍵釋放時的抖動。
鍵盤掃描程序:
從以上分析得到鍵盤掃描程序的流程圖如圖2所示。程序如下
SCAN:MOVP1,#0FH
MOVA,P1
ANLA,#0FH
CJNEA,#0FH,NEXT1
SJMPNEXT3
NEXT1:ACALLD20MS
MOVA,#0EFH
NEXT2:MOVR1,A
MOVP1,A
MOVA,P1
ANLA,#0FH
CJNEA,#0FH,KCODE;
MOVA,R1
SETBC
RLCA
JCNEXT2
NEXT3:MOVR0,#00H
RET
KCODE:MOVB,#0FBH
NEXT4:RRCA
INCB
JCNEXT4
MOVA,R1
SWAPA
NEXT5:RRCA
INCB
INCB
INCB
INCB
JCNEXT5
NEXT6:MOVA,P1
ANLA,#0FH
CJNEA,#0FH,NEXT6
MOVR0,#0FFH
RET
鍵盤處理程序就作這么一個簡單的介紹,實際上,鍵盤、顯示處理是很復雜的,它往往占到一個應用程序的大部份代碼,可見其重要性,但說到,這種復雜并不來自于單片機的本身,而是來自于操作者的習慣等等問題,因此,在編寫鍵盤處理程序之前,最好先把它從邏輯上理清,然后用適當的算法表示出來,最后再去寫代碼,這樣,才能快速有效地寫好代碼。
到本課為止,本站教程暫告一個段落!感謝大家的關心和支持!矩陣按鍵部分由16個輕觸按鍵按照4行4列排列,連接到JP50端口。將行線所接的單片機的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當按鍵沒有按下時,所有的輸出端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會被拉低,這樣,通過讀入輸入線的狀態就可得知是否有鍵按下了。確定矩陣式鍵盤上何鍵被按下,介紹一種“行掃描法”。行掃描法行掃描法又稱為逐行(或列)掃描查詢法,是一種最常用的按鍵識別方法.判斷鍵盤中有無鍵按下:將全部行線置低電平,然后檢測列線的狀態。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個按鍵之中。若所有列線均為高電平,則鍵盤中無鍵按下。判斷閉合鍵所在的位置:在確認有鍵按下后,即可進入確定具體閉合鍵的過程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時,其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測各列線的電平狀態。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。下面給出一個具體的例子:電路圖路徑:G:\圖片\電路圖片\xl100097.jpg8031單片機的P1口用作鍵盤I/O口,鍵盤的列線接到P1口的低4位,鍵盤的行線接到P1口的高4位。列線P1.0-P1.3設置為輸入線,行線P1.4-P.17設置為輸出線。4根行線和4根列線形成16個相交點。1.檢測當前是否有鍵被按下。檢測的方法是P1.4-P1.7輸出全“0”,讀取P1.0-P1.3的狀態,若P1.0-P1.3為全“1”,則無鍵閉合,否則有鍵閉合。2.去除鍵抖動。當檢測到有鍵按下后,延時一段時間再做下一步的檢測判斷。3.若有鍵被按下,應識別出是哪一個鍵閉合。方法是對鍵盤的行線進行掃描。P1.4-P1.7按下述4種組合依次輸出:P1.71110P1.61101P1.51011P1.40111在每組行輸出時讀取P1.0-P1.3,若全為“1”,則表示為“0”這一行沒有鍵閉合,否則有鍵閉合。由此得到閉合鍵的行值和列值,然后可采用計算法或查表法將閉合鍵的行值和列值轉換成所定義的鍵值。4.為了保證鍵每閉合一次CPU僅作一次處理,必須去除鍵釋放時的抖動。實驗目的:通過XL1000的16位矩陣按鍵,在數碼管上分別顯示0---9,A,B,C,D,E,F。接線方法:1用一條8PIN數據排線,把矩陣按鍵部份的JP50,接到CPU部份的P1口JP44.2接8位數碼管的數據線。將數碼管部份的數據口JP5接到CPU部份的P0口JP51.3接8位數碼管的顯示位線。將數碼管部份的顯示位口JP8接到CPU部份的P2口JP52.參考程序:;本程序實現掃描按鍵顯示功能.;分別按16個鍵盤顯示分別顯示數字123A456B789C*0#D;鍵盤口P1,數碼管顯示第二位p21,數碼管段位p0口org0000hajmpmainorg0030hmain:movdptr,#tab;將表頭放入DPTRlcallkey;調用鍵盤掃描程序movca,@a dptr;查表后將鍵值送入ACCmovp0,a;將Acc值送入P0口CLRP2.1;開顯示ljmpmain;返回反復循環顯示KEY:LCALLKS;調用檢測按鍵子程序JNZK1;有鍵按下繼續LCALLDELAY2;無鍵按調用延時去抖AJMPKEY;返回繼續檢測按鍵K1:LCALLDELAY2LCALLDELAY2;有鍵按下延時去抖動LCALLKS;再調用檢測按鍵程序JNZK2;確認有按下進行下一步AJMPKEY;無鍵按下返回繼續檢測K2:MOVR2,#0EFH;將掃描值送入R2暫存MOVR4,#00H;將第一列值送入R4暫存K3:MOVP1,R2;將R2的值送入P1口L6:JBP1.0,L1;P1.0等于1跳轉到L1MOVA,#00H;將第一行值送入ACCAJMPLK;跳轉到鍵值處理程序L1:JBP1.1,L2;P1.1等于1跳轉到L2MOVA,#04H;將第二行的行值送入ACCAJMPLK;跳轉到鍵值理程序進行鍵值處理L2:JBP1.2,L3;P1.2等于1跳轉到L3MOVA,#08H;將第三行的行值送入ACCAJMPLK;跳轉到鍵值處理程序L3:JBP1.3,NEXT;P1.3等于1跳轉到NEXT處MOVA,#0cH;將第四行的行值送入ACCLK:ADDA,R4;行值與列值相加后的鍵值送入APUSHACC;將A中的值送入堆棧暫存K4:LCALLDELAY2;調用延時去抖動程序LCALL KS;調用按鍵檢測程序JNZK4;按鍵沒有松開繼續返回檢測POPACC;將堆棧的值送入ACCRETNEXT:INCR4;將列值加一MOVA,R2;將R2的值送入AJNBACC.7,KEY;掃描完至KEY處進行下一掃描RLA;掃描未完將A中的值右移一位進行下一列的掃描MOVR2,A;將ACC的值送入R2暫存AJMPK3;跳轉到K3繼續KS:MOVP1,#0FH;將P1口高四位置0低四位值1MOVA,P1;讀P1口XRLA,#0FH;將A中的值與A中的值相異或RET;子程序返回DELAY2:;40ms延時去抖動子程序MOVR5,#08HL7:MOVR6,#0FAHL8:DJNZR6,L8DJNZR5,L7RETtab:db28h,34h,28h,34h,0a9h,60h,20h,7ah,20h,21h,61h,74h,30h,62h,0a2h,7eh;0h0hc9878654a321輪流顯示鍵盤因為無法表達*#就用H表示,B用8表示end這是我做成功的4X4鍵盤掃描源程序,P1.0-P1.3做四根列線,P1.4-P1.7做四根行線。
數碼管的字型表是按照標準接法做的,按對應的按鍵數碼管顯示對應的數字。
以下是源程序:
KEYBUFEQU30H
ORG00H
START:MOVKEYBUF,#2
MOVP2,#00001111B
WAIT:
MOVP1,#0FFH
CLRP1.4
MOVA,P1
ANLA,#0FH
XRLA,#0FH
JZNOKEY1
LCALLDELY10MS
MOVA,P1
ANLA,#0FH
XRLA,#0FH
JZNOKEY1
MOVA,P1
ANLA,#0FH
CJNEA,#0EH,NK1
MOVKEYBUF,#0
LJMPDK1
NK1:CJNEA,#0DH,NK2
MOVKEYBUF,#1
LJMPDK1
NK2:CJNEA,#0BH,NK3
MOVKEYBUF,#2
LJMPDK1
NK3:CJNEA,#07H,NK4
MOVKEYBUF,#3
LJMPDK1
NK4:NOP
DK1:
MOVA,KEYBUF
MOVDPTR,#TABLE
MOVCA,@A DPTR
MOVP0,A
DK1A:MOVA,P1
ANLA,#0FH
XRLA,#0FH
JNZDK1A
NOKEY1:
MOVP1,#0FFH
CLRP1.5
MOVA,P1
ANLA,#0FH
XRLA,#0FH
JZNOKEY2
LCALLDELY10MS
MOVA,P1
ANLA,#0FH
XRLA,#0FH
JZNOKEY2
MOVA,P1
ANLA,#0FH
CJNEA,#0EH,NK5
MOVKEYBUF,#4
LJMPDK2
NK5:CJNEA,#0DH,NK6
MOVKEYBUF,#5
LJMPDK2
NK6:CJNEA,#0BH,NK7
MOVKEYBUF,#6
LJMPDK2
NK7:CJNEA,#07H,NK8
MOVKEYBUF,#7
LJMPDK2
NK8:NOP
DK2:
MOVA,KEYBUF
MOVDPTR,#TABLE
MOVCA,@A DPTR
MOVP0,A
DK2A:MOVA,P1
ANLA,#0FH
XRLA,#0FH
JNZDK2A
NOKEY2:
MOVP1,#0FFH
CLRP1.6
MOVA,P1
ANLA,#0FH
XRLA,#0FH
JZNOKEY3
LCALLDELY10MS
MOVA,P1
ANLA,#0FH
XRLA,#0FH
JZNOKEY3
MOVA,P1
ANLA,#0FH
CJNEA,#0EH,NK9
MOVKEYBUF,#8
LJMPDK3
NK9:CJNEA,#0DH,NK10
MOVKEYBUF,#9
LJMPDK3
NK10:CJNEA,#0BH,NK11
MOVKEYBUF,#10
LJMPDK3
NK11:CJNEA,#07H,NK12
MOVKEYBUF,#11
LJMPDK3
NK12:NOP
DK3:
MOVA,KEYBUF
MOVDPTR,#TABLE
MOVCA,@A DPTR
MOVP0,A
DK3A:MOVA,P1
ANLA,#0FH
XRLA,#0FH
JNZDK3A
NOKEY3:
MOVP1,#0FFH
CLRP1.7
MOVA,P1
ANLA,#0FH
XRLA,#0FH
JZNOKEY4
LCALLDELY10MS
MOVA,P1
ANLA,#0FH
XRLA,#0FH
JZNOKEY4
MOVA,P1
ANLA,#0FH
CJNEA,#0EH,NK13
MOVKEYBUF,#12
LJMPDK4
NK13:CJNEA,#0DH,NK14
MOVKEYBUF,#13
LJMPDK4
NK14:CJNEA,#0BH,NK15
MOVKEYBUF,#14
LJMPDK4
NK15:CJNEA,#07H,NK16
MOVKEYBUF,#15
LJMPDK4
NK16:NOP
DK4:
MOVA,KEYBUF
MOVDPTR,#TABLE
MOVCA,@A DPTR
MOVP0,A
DK4A:MOVA,P1
ANLA,#0FH
XRLA,#0FH
JNZDK4A
NOKEY4:
LJMPWAIT
DELY10MS:
MOVR6,#10
D1:MOVR7,#248
DJNZR7,$
DJNZR6,D1
RET
TABLE:DB0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H;0-9
DB088H,083H,0C6H,0A1H,086H,08EH,089H,0CFH,0C7H,0C8H;A,B,C,D,E,F,H,I,L,N,
END;P3.1數據采集控制
;P2.6P2.7個位十位顯示轉換控制
;P1口接8個開關模擬數據
;P1.0-P1.3為個位開關量輸入
;P1.4-P1.7為十位開關量輸入
;此程序僅供參考
;功能P1口接8個開關輸入量4個一組,分別為個位,十位輸入
;P0口接一個數碼管,依次顯示輸入量。P3.1控制是否讀入
;開關量。P2.6P2.7控制是否顯示個位或十位
ORG100h
LJMPSTAR
STAR:MOVP1,#0FFH
SETBP3.1數據讀入標志
MOVR0,#100,循環工作次數
LOOP:JBP3.1,$P3.1低電平時,采集P1口數據開關量處理顯示階段不再應答P3.1
MOVA,P1
PUSHACC
ANLA,#0FH取個位數值
MOVR1,A個位數值保存到R1
POPACC
ANLA,#0F0H
SWAPA高4位轉成字節信息
MOVR2,A十位數值保存到R2
MOVDPTR,#TABLED
MOVA,R1
MOVCA,@A DPTR
MOVP0,A
CLRP2.6個位顯示
ACALLDELAY500MS
SETBP2.6
MOVA,R2
MOVCA,@A DPTR
MOVP0,A
CLRP2.7十位顯示
ACALLDELAY500MS
SETBP2.7
DJNZR0,LOOP
DELAY500MS:延時500毫秒子程略
RET
TABLED:DB0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h
DB80H,90H,88h,83h,0c6h,0a1h,86h,8eh
END#include
typedefunsignedcharBYTE;
BYTEcodeTABLED[16]={0Xc0,0Xf9,0Xa4,0Xb0,0X99,0X92,0X82,0X0f8,0X80,0X90,0X88,0X83,0Xc6,0Xa1,0X86,0X8e};
BYTEDATled;
sbitP26=P2^6;
sbitP27=P2^7;
sbitP31=P3^1;
intTIME;
voidtimedelay(DTIME)
intDTIME;
{
intI;
for(I=0;I<=DTIME;I );
}
voidmain()
{
intTEMP;
P26=1;
P27=1;
P31=1;
P1=0xFF;
TIME=1000;
while(1){
while(P31==0){
DATled=P1;
TEMP=DATled&0x0f4;
P0=TABLED[TEMP];
P27=0;
timedelay(TIME);
P27=1;
}
}
}1.實驗任務在8X8 LED點陣上顯示柱形,讓其先從左到右平滑移動三次,其次從右到左平滑移動三次,再次從上到下平滑移動三次,最后從下到上平滑移動三次,如此循環下去。2.電路原理圖圖4.24.13.硬件電路連線(1).把“單片機系統”區域中的P1端口用8芯排芯連接到“點陣模塊”區域中的“DR1-DR8”端口上;(2).把“單片機系統”區域中的P3端口用8芯排芯連接到“點陣模塊”區域中的“DC1-DC8”端口上;4.程序設計內容(1).8X8 點陣LED工作原理說明8X8點陣LED結構如下圖所示圖4.24.2從圖4.24.2中可以看出,8X8點陣共需要64個發光二極管組成,且每個發光二極管是放置在行線和列線的交叉點上,當對應的某一列置1電平,某一行置0電平,則相應的二極管就亮;因此要實現一根柱形的亮法,如圖49所示,對應的一列為一根豎柱,或者對應的一行為一根橫柱,因此實現柱的亮的方法如下所述:一根豎柱:對應的列置1,而行則采用掃描的方法來實現。一根橫柱:對應的行置0,而列則采用掃描的方法來實現。5.匯編源程序
ORG00H
START:NOP
MOVR3,#3
LOP2:MOVR4,#8
MOVR2,#0
LOP1:MOVP1,#0FFH
MOVDPTR,#TABA
MOVA,R2
MOVCA,@A DPTR
MOVP3,A
INCR2
LCALLDELAY
DJNZR4,LOP1
DJNZR3,LOP2
MOVR3,#3
LOP4:MOVR4,#8
MOVR2,#7
LOP3:MOVP1,#0FFH
MOVDPTR,#TABA
MOVA,R2
MOVCA,@A DPTR
MOVP3,A
DECR2
LCALLDELAY
DJNZR4,LOP3
DJNZR3,LOP4
MOVR3,#3
LOP6:MOVR4,#8
MOVR2,#0
LOP5:MOVP3,#00H
MOVDPTR,#TABB
MOVA,R2
MOVCA,@A DPTR
MOVP1,A
INCR2
LCALLDELAY
DJNZR4,LOP5
DJNZR3,LOP6
MOVR3,#3
LOP8:MOVR4,#8
MOVR2,#7
LOP7:MOVP3,#00H
MOVDPTR,#TABB
MOVA,R2
MOVCA,@A DPTR
MOVP1,A
DECR2
LCALLDELAY
DJNZR4,LOP7
DJNZR3,LOP8
LJMPSTART
DELAY:MOVR5,#10
D2:MOVR6,#20
D1:MOVR7,#248
DJNZR7,$
DJNZR6,D1
DJNZR5,D2
RET
TABA:DB0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
TABB:DB01H,02H,04H,08H,10H,20H,40H,80H
END
6.C語言源程序
#include
unsignedcharcodetaba[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f0;j--);
}
voidmain(void)
{
unsignedchari,j;
while(1)
{
for(j=0;j<3;j )
//fromlefttoright3time
{
for(i=0;i<8;i )
{
P3=taba[i];
P1=0xff;
delay1();
}
}
for(j=0;j<3;j )
//fromrighttoleft3time
{
for(i=0;i<8;i )
{
P3=taba[7-i];
P1=0xff;
delay1();
}
}
for(j=0;j<3;j )
//fromtoptobottom3time
{
for(i=0;i<8;i )
{
P3=0x00;
P1=tabb[7-i];
delay1();
}
}
for(j=0;j<3;j )
//frombottomtotop3time
{
for(i=0;i<8;i )
{
P3=0x00;
P1=tabb[i];
delay1();
}
}
}
}LED點陣顯示實驗一.實驗要求
編程實現中英文字符的顯示。
二.實驗目的
1.了解LED點陣顯示的基本原理和實現方法。
2.掌握點陣漢字庫的編碼和從標準字庫中提取漢字編碼的方法。
三.實驗電路及連線
點陣顯示模塊WTD3088的(紅色)列輸入線接至內部LED的陰極端,行輸入線接至內部LED的陽極端(若陽極端輸入為高電平,陰極端輸入低電平,則該LED點亮)。發光點的分布如圖22-0所示。
Fig22-0WTD3088LED分布
如圖22-1示,本實驗模塊使用74LS374來控制列輸入線的電平值。將74LS374的某輸出置0,則對應的LED陰極端被置低。如圖22-2示,本實驗模塊使用74LS273來控制行輸入線,并通過9013提供電流驅動。將74LS273的某輸出置1,則對應的LED陽極端被置高。每次系統重新開啟或總清后,74LS273輸出為全0,LED顯示被關閉。
通過編程控制各顯示點對應LED陽極和陰極端的電平,就可以有效的控制各顯示點的亮滅。
Fig22-1LED模塊及列掃描電路Fig22-2行掃描電路
Fig22-3地址譯碼電路
本實驗模塊使用4塊WTD3088組成16×16點陣,以滿足漢字顯示的要求。為了方便的控制四個單元,使用了一片74LS139譯碼,產生四個地址片選信號:CLKR1=CSLED,CLKR2=CSLED 1,用于行控制的兩片74LS273;CLKC1=CSLED 2,CLKC2=CSLED 3,用于列控制的兩片74LS374。
實驗接線:按示例程序,模塊的CSLED接51/96地址的8000H。
四.實驗說明
使用高亮度LED發光管構成點陣,通過編程控制可以顯示中英文字符、圖形及視頻動態圖形。LED顯示以其組構方式靈活、亮度高、技術成熟、成本低廉等特點在證券、運動場館及各種室內/外顯示場合得到廣泛的應用。
所顯示字符的點陣數據可以自行編寫(即直接點陣畫圖),也可從標準字庫(如ASC16、HZ16)中提取。后者需要正確掌握字庫的編碼方法和字符定位的計算。
實驗盤片中“字符轉換”子目錄下提供的Basc16.exe,BHz16.exe可方便的將單個字符的碼表從標準字庫Asc16,Hzk16中提取出來。具體使用方法是運行上述可執行程序,根據提示輸入所需字符(如是漢字還需要先啟動dos下的漢字環境,如ucdos,pdos95等)。程序將該字符的碼表提取出來,存放在該字符ASC或區位碼為文件名稱的.dat文件中。用戶只需將該文件中內容拷貝、粘貼到自己的程序中即可。但需要注意字節排列順序、字節中每一位與具體顯示點的一一對應關系,必要時還要對碼表稍作修改。同一目錄下還提供了上述可執行程序的源文件,使用BC3.1編寫,供用戶參考。
五.實驗程序框圖
用戶應留心其中行掃描的實現及碼表的處理。
六.實驗程序:(一)提供LEDA51演示Asc16字符的簡單點陣顯示。
;________*LED點陣顯示示例程序______________________*
;__該程序顯示Asc16字符__
;__為了簡單起見,程序只顯示一個字符__
;__該程序針對T598實驗機的模塊14__
;____________________________________________________
CSLEDEQU8000H
CSR1EQUCSLED;行1273
CSR2EQUCSLED 1H;行2273
CSC1EQUCSLED 2H;列1374
CSC2EQUCSLED 3H;列2374
ORG0000H
MOVSP,#60H
INIT:MOVA,#0H;關閉行
MOVDPTR,#CSR1
MOVX@DPTR,A
MOVDPTR,#CSR2
MOVX@DPTR,A
MOVA,#0FFH;關閉列
MOVDPTR,#CSC1
MOVX@DPTR,A
MOVDPTR,#CSC2
MOVX@DPTR,A
D:MOVR5,#00H
MOVR4,#01H;每次為單行掃描
DISP:
MOVA,R5
MOVDPTR,#ASCE;此處設定所要顯示的字符
MOVCA,@A DPTR
CPLACC;代碼取反,決定顯示的陰陽
MOVDPTR,#CSC2
MOVX@DPTR,A
MOVDPTR,#CSR1
MOVA,R4
MOVX@DPTR,A
RLACC
MOVR4,ACC
INCR5
LCALLDELAY
CJNER5,#8H,DISP
MOVA,#0H
MOVX@DPTR,A
MOVR5,#08H
MOVR4,#01H
DISP2:
MOVA,R5
MOVDPTR,#ASCE
MOVCA,@A DPTR
CPLACC
MOVDPTR,#CSC2
MOVX@DPTR,A
MOVDPTR,#CSR2
MOVA,R4
MOVX@DPTR,A
RLACC
MOVR4,ACC
INCR5
LCALLDELAY
CJNER5,#10H,DISP2
MOVA,#0H
MOVX@DPTR,A
SJMPD
;________延時子程序,協調字符顯示速度____________*
DELAY:MOVR7,#1H
DL1:MOVR6,#00H
DL2:DJNZR6,DL2
DJNZR7,DL1
RET
;________字符點陣字庫______________*
;ASC16字符編碼排列
;0
;1
;|
;|
;14
;15
;高位D7--D0
;請注意編碼的排列次序和實際顯示點陣分布的關系
ASCA:DB00H,00H,10H,38H,6CH,0C6H,0C6H,0FEH
DB0C6H,0C6H,0C6H,0C6H,00H,00H,00H,00H
ASCE:DB00H,00H,0FEH,66H,62H,68H,78H,68H
DB60H,62H,66H,0FEH,00H,00H,00H,00H
ASCD:DB00H,00H,0F8H,6CH,66H,66H,66H,66H
DB66H,66H,6CH,0F8H,00H,00H,00H,00H
ASCK:DB00H,00H,0E6H,66H,66H,6CH,78H,78H
DB6CH,66H,66H,0E6H,00H,00H,00H,00H
;____________________________________________________
END
(二)LEDHZ51兩個示例程序。和Hz16字符的簡單點陣顯示。
;________*LED點陣顯示示例程序______________________*
;__該程序顯示hz16字符__
;__為了簡單起見,程序只顯示一個字符__
;__該程序針對T598實驗機的模塊14__
;____________________________________________________
CSLEDEQU8000H
CSR1EQUCSLED;行1273
CSR2EQUCSLED 1H;行2273
CSC1EQU CSLED 2H;列1374
CSC2EQUCSLED 3H;列2374
ORG0000H
MOVSP,#60H
INIT:MOVA,#0H;關閉LED顯示
MOVDPTR,#CSR1
MOVX@DPTR,A
MOVDPTR,#CSR2
MOVX@DPTR,A
MOVA,#0FFH;關閉LED顯示
MOVDPTR,#CSC1
MOVX@DPTR,A
MOVDPTR,#CSC2
MOVX@DPTR,A
D:MOVR5,#00H
MOVR4,#01H
DISP:
MOVA,R5
RLACC
MOVDPTR,#HZAI
MOVCA,@A DPTR
CPLACC
MOVDPTR,#CSC2
MOVX@DPTR,A
MOVA,R5
RLACC
INCACC
MOVDPTR,#HZAI
MOVCA,@A DPTR
CPLACC
MOVDPTR,#CSC1
MOVX@DPTR,A
MOVDPTR,#CSR1
MOVA,R4
MOVX@DPTR,A
RLACC
MOVR4,ACC
INCR5
LCALLDELAY
CJNER5,#8H,DISP
MOVA,#0H
MOVX@DPTR,A
MOVR5,#08H
MOVR4,#01H
DISP2:
MOVA,R5
RLACC
MOVDPTR,#HZAI
MOVCA,@A DPTR
CPLACC
MOVDPTR,#CSC2
MOVX@DPTR,A
MOVA,R5
RLACC
INCACC
MOVDPTR,#HZAI
MOVCA,@A DPTR
CPLACC
MOVDPTR,#CSC1
MOVX@DPTR,A
MOVDPTR,#CSR2
MOVA,R4
MOVX@DPTR,A
RLACC
MOVR4,ACC
INCR5
LCALLDELAY
CJNER5,#10H,DISP2
MOVA,#0H
MOVX@DPTR,A
SJMPD
;________延時子程序,協調字符顯示速度____________*
DELAY:MOVR7,#1H
DL1:MOVR6,#00H
DL2:DJNZR6,DL2
DJNZR7,DL1
RET
;________字符點陣字庫______________*
;HZ16字符編碼排列
;01
;23
;|
;|
;2829
;3031
;高位D7--D0
HZAI:DB00H,78H,3FH,80H,11H,10H,09H,20H
DB7FH,0FEH,42H,02H,82H,04H,7FH,0F8H
DB04H,00H,07H,0F0H,0AH,20H,09H,40H
DB10H,80H,11H,60H,22H,1CH,0CH,08H
HZDI:DB00H,80H,40H,80H,20H,88H,2FH,0FCH
DB08H,88H,08H,88H,0E8H,88H,2FH,0F8H
DB28H,88H,28H,88H,28H,88H,2FH,0F8H
DB28H,08H,50H,06H,8FH,0FCH,00H,00H
HZKE:DB01H,00H,01H,04H,0FFH,0FEH,01H,00H
DB01H,10H,1FH,0F8H,10H,10H,10H,10H
DB10H,10H,1FH,0F0H,14H,50H,04H,40H
DB04H,40H,08H,42H,10H,42H,60H,3EH
;____________________________________________________
END基于89C51的計算機可鎖定加密鍵盤設計摘要:介紹PC鍵盤和鍵盤接口的PS/2通信協議,以及用89C51實現可鎖定鍵盤的軟件和硬件設計方法。具有安全可靠、容錯能力強、可以直接采用標準鍵盤進行改裝、便于實現等優點,并保留標準鍵盤的全部功能。關鍵詞:PS/289C51C51鍵盤引言
在智能儀器、自動控制等領域,已大量使用嵌入式PC,如Advantech公司的PC/104、AMD公司的DIMM-PC等。為適應開放式、模塊化的要求,嵌入式PC具有標準的PC接口,如VGA顯示器控制接口、以太網接口、RS232接口、PC/AT鍵盤接口等。所以,可以用標準的PC鍵盤對嵌入式PC進行操作與控制。鍵盤在輸入指令之后,可能很長一段時間不用。為計算機安全和防止誤觸發,需要將鍵盤鎖定,還要對某些鍵采取屏蔽措施,但是PC標準鍵盤不能滿足這些要求。本文介紹一種用89C51設計實現的可鎖定加密PC/AT鍵盤。
1鍵盤功能及工作原理
PC鍵盤功能主要有按鍵識別、去抖、重鍵處理、發送掃描碼、自動重發、接收鍵盤命令、處理命令等。鍵盤有編碼鍵盤和非編碼鍵盤。編碼鍵盤程序設計簡單,但硬件電路復雜,價格較高;非編碼鍵盤用軟件來實現識別鍵、編碼轉換、去抖等功能,硬件電路簡單,價格便宜。現代微機系統中廣泛采用非編碼鍵盤。PC鍵盤多采用18行×8列的二維矩陣行列結構。采用行掃描法識別按下的按鍵。2PS/2協議
PS/2協議是外設與主機之間通信的一種同步雙向串行協議。在該協議中主機擁有較高的優先級,在一定條件下可以終止外設正在進行的發送過程。PS/2協議采用的傳送數據幀的格式為:1位起始位(0)、8位數據位、1位奇偶校驗位、1位停止位(1)。數據發送時低位在前,高位在后。外設每收到主機發來的1幀數據,都要緊隨該幀的停止位發送一個握手位ACK(0)應答主機。然后,外設還要發1幀應答數據(0xF0),表示外設已經完整地接收到了主機的命令;而主機則不需發送握手位,也不需要發送應答幀。
2.1鍵盤到PC鍵盤接口的通信
當時鐘線和數據線均為高電平時,允許鍵盤發送數據,系統將接收數據;當時鐘線被拉為低電平時,表明系統禁止數據傳輸。圖1給出了發送時序,包含1個低電平觸發的起始位、8位數據位、1個奇校驗位和1個高電平的結束位。2.2PC系統到鍵盤的通信協議
若時鐘線出現高電平,數據線出現低電平,表明系統請求發送,鍵盤準備產生同步時鐘脈沖串,并接收數據。包含了1個低電平觸發的起始位、8位數據位、1個奇校驗位、1個應答位、1個高電平的結束位。圖2為時序圖。(1)鍵盤命令及執行過程①FFH:復位鍵盤。系統通過此軟件復位命令使鍵盤進入程序復位和內部自測試,稱為基本保證測試(BAT)。復位鍵盤的過程如下:a.鍵盤收到FFH后立即回送ACK(FAH)作答;b.鍵盤接口收到ACK后,將鍵盤時鐘和數據線置為高電平;c.鍵盤檢測到此狀態后開始BAT操作;d.如果BAT正確完成,鍵盤發送AAH以表示結束,
否則以FDH(或其它任何值)表示診斷有誤。②FEH:重新發送。當系統檢測到從鍵盤送來的任何傳輸錯誤時,它便向鍵盤發送FEH命令。鍵盤接收到此命令后,將重新送出原來的內容。③FDH~F7H:空操作(保留未用)。④F6H:設置缺省值。此命令使鍵盤所有條件復位到電源接通時的缺省狀態,鍵盤繼續掃描。⑤F5H:設置缺省值和停止鍵盤。此命令使鍵盤所有條件復位到電源接通時的缺省狀態,并停止鍵盤掃描,等待下一個鍵盤命令。⑥F4H:啟動鍵盤。鍵盤接收到此命令后,用ACK(FAH)作答,清除輸出緩沖器,并啟動鍵盤開始掃描。⑦F3H:設置拍發速率和延時參數。每當按下任 一鍵時,鍵盤以拍發速率連續送出鍵的接通碼,直到鍵被釋放為止。延時參數是指按下一鍵后,鍵盤輸出的響應時間。
系統缺省設置:拍發速率=10個/s±20,延時=500ms±20。
當要改變設置時可以使用F3H命令,并后跟一個字節的參數。參數定義如表1所列。
表1D7D6D5D4D3D2D1D00CBA
計算拍發速率和響應延時的公式如下:
拍發速率=1/[(8 A)×2B×0.00417](1/s)
響應延時=(1 C)×250(ms)注:缺省的延時參數值為2CH。此命令的執行過程如下:a.鍵盤收到F3H命令后,用FAH予以響應,并停止掃描和等待隨后的參數;b.鍵盤若收到隨后的設置參數,用另一個ACK響應,并按其參數設置新的拍發速率和響應延時,之后重新開始掃描(若鍵盤原來是開放的);c.鍵盤若收到FAH命令,但無隨后的設置參數,則鍵盤結束命令設置,并保持原來的拍發速率和響應延時,停止掃描。⑧F2H,F1,EFH:保留未用。⑨F0H:設置鍵盤掃描碼命令。此命令用于設置鍵盤的掃描碼,后跟參數指定三種掃描碼的哪一種。鍵盤復位時,默認掃描碼是第二種。⑩EEH:回送命令。此命令用于輔助診斷,要求鍵盤接收到EEH時也要回送EEH予以響應。若鍵盤原來是開放的,則繼續掃描。EDH:置位/復位LED指示器。鍵盤右上角有三個LED指示器,分別反映Caps、Num和Scroll三個鍵的鎖定情況。參數字節如表2所列。
表2D7D3D2D1D0保留1=激勵CapsLED1=激勵NumLED1=激勵ScrollLED
此命令執行過程與F3H相似。若命令后跟參數,則按參數設定LED狀態并繼續掃描。若僅有命令無參數,則不改變LED原狀態,并停止掃描。(2)鍵盤響應鍵盤在下列四種情況下都會向鍵盤接口發送數據。①按下任一鍵,鍵盤以拍發速率向接口發送鍵盤接通掃描碼。②釋放所按下的鍵,鍵盤發送斷開掃描碼。③系統向鍵盤發送鍵盤命令后,鍵盤回送應答。④當用戶按鍵速度超出鍵盤所能容納的最大鍵個數時,鍵盤做出響應。后三種情況稱為鍵盤響應。響應字節有7個,定義如下。
①FEH:重新發送響應。當鍵盤收到一個無效的鍵盤命令,或者檢測到奇偶錯的鍵盤命令時,鍵盤回送響應字節為FEH,要求系統重發鍵盤命令。②FAH:正常應答。對任何一個有效的鍵盤命令,鍵盤回送FAH予以響應。③00H:超限應答。當用戶按鍵速度超出鍵盤所能容納的最大鍵符個數時(16個字節的緩沖器),鍵盤發送00H。④FDH:診斷故障應答。鍵盤接受軟件復位命令,執行自測試過程中。若檢測到故障,則以FDH應答。此時,鍵盤停止掃描并等待下一個鍵盤命令。⑤AAH:診斷正常應答。鍵盤在軟件復位過程中,正常完成BAT測試,以AAH應答。⑥FEH:回響命令的應答,對鍵盤FEH命令的應答。⑦F0H:斷開掃描碼前綴,鍵盤對鍵符按下后釋放的應答,第一個字節為F0H,第二個字節為接通掃描碼(有幾個鍵例外)。3硬件設計
PC系列鍵盤采用18行×8列的矩陣行列結構。89C51單片機有4個8位I/O端口,因此可以采用P0、P2口再加上P3口的2個(P3.6和P3.7)作為行掃描線。P1口作為列輸入線(如果用P0口作列輸入線,必須加上拉電阻)。采用P3.0、P3.1作為數據線和時鐘線與PC系統進行通信,用P3.2、P3.4、P3.5控制鍵盤上的3個指示燈。硬件原理如圖3所示。
鍵盤與計算機通過一個五芯(PS/2接口為六芯)插座相接,4個有效引腳的定義分別是電源(VCC)、地(GND)、串行時鐘線(SCK)、串行數據線(SIO)。
4軟件設計①消抖及重鍵處理:通過軟件上延時程序來消除抖動;采用后按鍵優先處理,即多鍵同時按下時,只重復發送最后按下鍵的掃描碼。②程序包括鍵盤掃描子程序、發送鍵碼子程序、發送數據子程序、接收命令子程序、定時器1中斷服務程序、主程序等。鍵盤掃描子程序用于掃描鍵狀態,將被按鍵的位置號存入緩沖器中;發送鍵碼子程序用于將緩沖區鍵的接通碼或斷開碼發送給計算機鍵盤接口或者存在鍵盤密碼緩沖區中;發送數據子程序用于將數據發給計算機鍵盤接口;接收命令子程序用于接收計算機鍵盤接口發來的鍵盤命令;定時器1中斷服務子程序用于給程序中的延時提供標準時鐘,并具有軟件看門狗功能,防止軟件出現死機現象;主程序用于系統初始化,子程序調度,鎖定狀態的顯示等。
圖6發送緩沖區鍵碼子程序流程圖
圖4~6是主要軟件模塊的流程圖。單片機源程序見本刊網絡補充版(.com)。
5結論
本文介紹的PC/AT鍵盤具有結構簡單、設計靈活、安全可靠的特點,可用于標準PC和嵌入式PC。本鍵盤可以在標準的鍵盤基礎上進行改造,只需換掉原來的控制芯片即可,可節省設計成本。單片機C51編程幾個有用的模塊(1)KeilC51常用功能模塊使用說明
說明
本文檔包括單片機系統中常用到的時鐘中斷、通訊及鍵盤掃描等模塊(見所附源程序)的說明。這些模塊使用前后臺系統模型。為達到最大的靈活性,需要在用戶工程中定義config.h文件,在其中定義各模塊可選參數的設置,而不是直接更改源代碼。
這些可選內容大部分為宏定義,如果不定義宏相應的功能在編譯時被屏蔽,不會增加代碼長度。具體可選內容見各模塊中的說明。
在Config.h文件中還要包含一個單片機硬件的資源頭文件。
各模塊使用了定義在Common.h中的一些數據類型。如:BIT(bit)BYTE(unsignedchar)等,具體請參見源程序。
時鐘模塊
在單片機軟件設計中,時鐘是重要資源,為了充分利用時鐘資源,故設計本時鐘模塊。本模塊使用定時器0,在完成用戶指定功能的同時,還能夠自動處理一些其它模塊中與時鐘相關的信息。
時鐘模塊由聲明文件Timer.h以及實現文件Timer.c組成。
用戶應該在Config.h中定義宏TIMER_RELOAD來設定定時器0的重裝載初值。推薦的定時器0的中斷時間大于1毫秒。
在程序的初始化階段調用時鐘模塊的初始化函數InitTimerModule()之后,就可以使用時鐘模塊所以支持的各種功能。具體描述如下:
延時:當用戶需要進行一定時間的延時時,可以通過調用Delay()來進行,參數為時鐘中斷的次數。如時鐘中斷周期為1ms,想進行100ms的延時,則可以調用Delay(100)。
注意:
如果延時的絕對時間小于時鐘中斷的周期,則不能夠用本方法做到延時。
定時:當程序中需要使用定時功能時,如等待某外部事件,如果在一定時間內發生則繼續執行,如果在這段時間內發生,則認為出現錯誤,轉向錯誤處理機制。
在此推薦一種編程模式,但用戶可以用自己認為更合理的方式處理此類問題。
這里簡單說明一下關于阻塞式函數及非阻塞式函數。簡單說,阻塞式函數就是當檢測完成條件,如果不能夠完成則等待,如:
voidCheckSomething()
{
//gbitSuccessFlagisaglobalvariable
while(gbitSuccessFlag==FALSE)
{
//donothingbutwaiting
}
}
可以看到,當bitSuccessFlag沒有被設置為TRUE時,函數保持等待狀態不返回,這樣就是阻塞式的函數。
另外一種情況:
BITCheckSomething()
{
if(gbitSuccessFlag==TRUE)
{
//…
returnTRUE;
}
returnFALSE;
}
在這里,如果所檢測的事件有沒有完成,函數進行檢測之后,立刻返回, 通過返回值報告完成情況,如果沒有完成,則等待調用者分配再次執行的機會。這樣的函數就是非阻塞函數。
在應用定時功能時,首先要將檢測函數定義成非阻塞函數。如上面的第二個版本的CheckSomething。
然后下面模式:
BITbitDone=FALSE;
ResetClock();//cleartimerinterrupttimescounter
while(GetClock()
{
if(CheckSomething()==TRUE)
{
bitDone=TRUE;
break;
}
}
if(bitDone==FALSE)
{
//processtimeout
}
或者簡單寫成:
BITbitDone=FALSE;
ResetClock();
while(GetClock()=(z))
當然,用戶也可以將IsPackageHeader和IsPackageTailer定義成為函數,通過BIT類型的返回值來向調用者提供與相應宏相同的信息。
另一種辦法需要在Config.h文件中定義宏SCOMM_ComplexPackageFormat。(需要注意的是,不能夠同時定義SCOMM_SimplePackageFormat和SCOMM_ComplexPackageFormat宏,否則會造成嚴重的不可預見性錯誤。
這時需要提供回調函數QueryPackageFormat,原形如下:
BYTEQueryPackageFormat(BYTEbyData,BYTEbyCount,BYTEbyParam);
函數中三個參數的含義與使用簡單數據包格式時判斷數據包尾的宏的參數相同。
函數通過返回值來通知作為調用者的接收函數對接收到的數據如何處理,但目前這種方法僅為需要處理復雜數據包格式時的一種可選方法,但不推薦。用戶如果想使用這種方法可以自己更改接收函數中相應的
#ifdefSCOM_ComplexPackageFormat
#endif//SCOMM_ComplexPackageFormat
預編譯指令之間的內容。
例如指定QueryPackageFormat的返回值的含義:
0:繼續找數據包頭或繼續找數據包尾。
1:找到數據包頭。
2:找到數據包尾。
3:數據包出錯,需要拋棄。
然后更改源代碼來實現上面的協議。
注意:當用戶需要使用字符串的時候,可以利用簡單的包裝函數將字符串轉換為字節數組。所以沒有必要提供專用的字符串處理函數。
鍵盤掃描模塊
鍵盤掃描模塊有兩種工作方式,一種為自動的由時鐘模塊調用,另一種是由程序員自行調用。
1)由時鐘模塊自動調用的方式
將時鐘模塊實現文件(Timer.h)及鍵盤掃描模塊的實現文件(KBScan。c)包含進工程,在Config.h文件中添加TIMER_KBSCANDELAY宏。時鐘模塊自動對時鐘中斷進行計數,當達到TIMER_KBSCANDELAY宏所定義的值后,自動調用鍵盤掃描模塊中的函數KBScanProcess()進行鍵盤掃描,也就是說,這個宏的值可以決定按鍵消抖動的時間。
用戶應該提供兩個回調函數OnKBScan()及OnKeysPressed()。在函數OnKBScan中進行鍵盤掃描,并返回掃描碼。掃描碼的類型缺省為BYTE,當鍵盤規模較大時,BYTE不能夠完全包含鍵盤信息時,可在Config.h文件中重定義宏KBvalue,如下:
#defineKBvalueWORD
這樣,就可以使用16位的鍵盤掃描碼,如果此時還達不到要求,可以將鍵盤掃描碼定義成一個結構,但這樣做將會增加代碼量及消耗更多的RAM資源,故不推薦。
掃描模塊調用OnKBScan取得掃描碼,并調用用戶可以重定義的宏IsNoKeyPressed來判斷是否有鍵按下,缺省的IsNoKeyPressed實現如下:
#defineIsNoKeyPressed(x)((x)==0x00)
即認為OnKBScan返回0掃描碼時為沒有鍵按下,如果掃描函數返回其它非零掃描碼做為無鍵按下的掃描碼時,可以在Config.h文件中重定義IsNoKeyPressed宏的實現。
8位鍵盤掃描碼(缺省值)時,相應的掃描函數為:
BYTEOnKBScan()
當掃描模塊經過軟件消抖動之后,發現有鍵按下,就會調用另一個回調函數OnKeysPressed。函數的聲明應該如下:
voidOnKeyPressed(BYTEbyKBvalue,BYTEbyState)
其中中的參數byKBvalue的類型為BYTE,此為缺省值,如果使用其它類型的掃描碼,就將此參數變為相應類型。這個值由OnKBScan返回。另一個參數byState在通常情況下為零。但當用戶在Config.h中定義宏KBSCAN_BRUSTCOUNT,同時鍵盤上的某鍵被按住不放時,掃描模塊對它自己的調用(注意這里和TIMER_KBSCANDELAY宏不同,TIMER_KBSCANDELAY是時鐘中斷足夠的次數后調用掃描模塊,而KBSCAN_BRUSHCOUNT為掃描模塊自身的被調用次數)進行計數,當達到KBSCAN_BRUSTCOUNT時,掃描模塊調用OnKeysPressed,此時第一個參數的含義不變,而byState變成1,同時計數器復位,又經過一段時間后,用值為3的byState調用OnKeysPressed。這樣就可以很方便的實現多功能鍵或者檢測某鍵的長時間被按下。
2)由用戶自行調用
由用戶自行在程序中調用掃描模塊,而不是由時鐘中斷自行調用。其它與方式1相同。
注意:
1)函數KBScanProcess為非阻塞函數,它將在很快的時間內返回,等待再次分配給它執行的機會。
2)函數KBScanProcess是在時鐘中斷外部運行的,它的過程可以被任何中斷打斷,但不影響系統運行。
3)byState的最大值為250,之后被復位為零。應用舉例
現在來舉例說明上述幾個模塊的使用方法。
硬件環境描述:
為了控制一盞燈,需要單片機提供一個做控制功能的開關量,這里不描述外部接口電路,只說明當單片機的P10腳為高電平時,燈滅,當P10腳為低電平時,燈亮。
可以通過計算機由串口發送命令來控制,或通過一個按鍵(pushbutton不是自鎖式的按鍵)來手動控制(按鍵接在P11腳上,當鍵沒有按下時,P11電平為高,鍵按下時,引腳電平被接低),當使用按鍵手動控制的時候,需要給計算機發送通知。
設定串口通訊指令如下:
數據包由0xff做包頭,4個字節長,第二個字節為命令代碼,第三個字節為數據,最后一個字節為校驗位。
命令和數據代碼有如下組合:
(計算機發給單片機)
0x100x01:計算機控制燈亮。(數據位是非零值即可)
0x100x00:計算機控制燈滅。
(單片機發給計算機)
0x110x01:單片機正常執行控制指令,返回。(數據位是非零值即可)
0x110x00:單片機不能夠正常執行控制指令,或控制指令錯(不明含義的數據包或校驗錯等)。
0x120x01:手動控制燈亮。(數據位是非零值即可)
0x120x00:手動控制燈滅。
建立工程:
在硬盤上建立文件夾Projects,在Projects下建立Common文件夾及Example文件夾。將各模塊的頭文件及實現文件拷貝到Common文件夾下(推薦使用這樣的文件組織結構,其它工程也可以建立在Projects下,各工程共享Common文件夾中的代碼)。
啟動KeilC的IDE,在Example下建立新工程,將各模塊的實現文件包含進工程。
在Example文件夾下建立Output文件夾,更改工程設置,將Output作為輸出文件和List文件的輸出文件夾(推薦使用這樣的結構, 當保存工程文件時,可以簡單的刪除Output文件夾中的內容而不會誤刪有用的工程文件)。
建立工程配置頭文件Config.h及工程主文件Example.c,并將Exmaple.c文件加入工程。
輸入代碼:
代碼的具體編寫過程略。下面是最后的Config.h文件及Example.c文件。
//
//file:onfig.h
//
#ifndef_CONFIG_H_
#define_CONFIG_H_
#include//使用AT89C52做控制
#include“../Common/Common.h”//使用自定義的數據類型
#defineTIMER_RELOAD922//11.0592MHz晶振,1ms中斷周期
#defineTIMER_KBSCANDELAY40//40ms重檢測按鍵狀態,即40ms消抖
#defineSCOMM_AsyncInterface//使用異步通訊服務
#defineIsPackageHeader(x)((x)==0xff)//判斷包頭是不是0xff
#defineIsPackageTailer(x,y,z)((y)<=(z))//判斷包的長度是不是足夠
#endif//_CONFIG_H_
//
//file:xample.c
//
#include
#include“../Common/Common.h”
#include“../Common/Timer.h”
#include“../Common/Scomm.h”
#include“../Common/KBScan.h”
BITgbitLampState=1;//燈的狀態,缺省為off
staticvoidInitialize()
{
InitTimerModule();//初始化時鐘模塊
InitSCommModule(0xfd,TRUE);//初始化通訊模塊,11.0592MHz晶振,
//波特率為19200
EA=1;//開中斷
}
voidmain()
{
Initialize();//初始化
while(TRUE)//主循環
{
ImpTimerService();//實現時鐘中斷服務,如鍵盤掃描
AsyncRecePackage(4);//接收4個字節長的數據包
}
}
//在中斷外部響應時鐘中斷事件
voidOnTimerEvent()
{
//donothing
}
//控制外部燈
staticvoidTriggerLamp(BITbEnable)
{
P10=~bEnable;//需要反相控制
}
//鍵掃描回調函數
BYTEKBScan()
{
BITb;
P11=1;//讀之前拉高引腳電平
b=P11;//讀入引腳狀態
return~b;//數據反相做掃描碼
}
//計算校驗和
staticBYTECalcCheckSum(BYTE*pbyBuf,BYTEbyLen)
{
BYTEby,bySum=0;
for(by=0;by
return0–bySum;
}
//接收到鍵盤消息回調函數
voidOnKeyPressed(BYTEbyvalue,BYTEbyState)
{
BYTEby[4];
if(byState==0)
{
switch(byvalue)
{
case0x01:
gbitLampState=~gbitLampState;//燈狀態取反
TriggerLamp(gbitLampState);//執行控制
by[0]=0xff;//構造數據包
by[1]=0x12;
by[2]=(BYTE)gbitLampState;
by[3]=CalcCheckSum(by,3);//求校驗和
SendPackage(by,4);//發送數據包
break;
//處理其它掃描碼
default:
break;
}
}
//接收到數據包回調函數
voidOnRecePackage(BYTE*pbyBuf,BYTEbyBufLen)
{
BYTEby[4];
by[0]=0xff;
by[1]=0x11;
if(byBufLen!=4||pbyBuf[3]!=CalcCheckSum(pbyBuf,3))
{
by[2]=0;
by[3]=CalcCheckSum(by,3);
SendPackage(by,4);//處理長度或校驗和不正確
}
switch(pbyBuf[1])
{
case0x10:
gbitLampState=(BIT)pbyBuf[2];
TriggerLamp(gbitLampState);
by[2]=1;
by[3]=CalcCheckSum(by,3);
SendPackage(by,4);//發送成功執行通知
break;
default://不知道的命令
by[2]=0;
by[3]=CalcCheckSum(by,3);
SendPackage(by,4);//發送沒有成功執行通知
一、緊緊圍繞教學目標修訂教學大綱
根據單片機課程的教學目標,本著以學生為本、淡化理論、突出實用、加強實踐、力求知識的系統和完整為原則,重新修訂了教學大綱。
第一,對教學內容進行了合理的取舍。
第二,重新確定了教學重點內容。既然確定“能夠開發簡單的開關量”產品并確保理論知識的系統性為本門課程的教學目標,那么理論教學重點就放在開發“開關量控制”所必需具備的基礎知識上面,即:單片機的內部結構、指令功能、應用程序的編寫、中斷系統、定時、計數器等。這些內容融會貫通就必須“精講多練”,所以我們把刪除的知識所占用得課時按照一定比例分配給這些內容的理論課和實驗課,突出其重要地位。
二、改革教學方法,提高教學效果
單片機系統有著強烈的現實性,對教學方式不應是單一的固定模式。可以采用:
(一)在課堂上可以將多種教學方式熔融一體,靈活應用
可以采用多媒體、實物教學,從智能控制系統的一個樣板實物外型到該電路的原理圖,采取部部展開,層層推進,讓學生看見實物產生感性認識,聯系到原理產生理性認識,由實踐上升為理論,又由理論去指導實踐,全面向學生傳遞智能系統中單片機的使用。在課堂的教學中采用講授式、啟發式、討論式、測驗等多種教學方法,根據學生的能力及教學內容的需要靈活使用。在教學中多與學生溝通,了解學生對教材、講課、實驗等的要求,根據教學大綱及時加以調整教學內容及模式,達到教學的目的。
(二)加大學生編程的訓練
一是編制有規模的、科學的、實用的學生練習題集與試卷庫,定期讓學生做書面編程,使得他們對指令的記憶加深,二是加大學生實驗室的訓練,培養他們的調試程序能力,為學生自主學習創造條件。
(三)推進“學研產”結合
讓一部分學生利用各種時間投入到實際的項目工程開發中去,培養學生的工程意識,強化學生的工程訓練,使他們了解自動控制系統工程中單片機系統的整個開發過程,保證學生所學的知識與實際社會接軌,讓這些學生以點帶面促進、帶動其他學生的學習興趣。
三、加強單片機實踐教學,培養學生分析問題和解決問題的能力
單片機的實踐性較強,對實踐教學的改革顯得尤為重要。通過改革達到使學生具備科學的思維方式和較強的動手能力,并能運用MCS-51系列芯片進行工程開發和應用的能力。在教學過程中可以用單片機仿真試驗系統良好的人機界面,通過單步執行功能讓學生在顯示窗口上可以看見相關寄存器的變化,并能看到轉移位置;碰到中斷時程序如何轉入中斷入口去執行以及中斷程序結束后程序如何返回。通過程序分析和觀察執行過程,一目了然。
為了使學生具有獨立分析、解決工程中遇到的實際問題的能力和獨立開發單片機應用系統得能力,我們在理論教學結束后另外可以增加兩周集中實訓教學環節,以體現出實踐教學的重要性。比如:我們在分析單片機應用技能基礎上,設計了一個典型系統――單片機溫度(壓力)檢測與監控系統。它由檢測系統、信號放大系統、A/D轉換器、控制系統及單片機系統等六個部分組成。
具體要求如下:檢測系統能把0―100℃的溫度轉換為0-1V的信號。放大及波形變換電路把信號放大到0―5V的直流信號,經A/D后送入單片機系統,單片機系統對測量信號進行濾波,非線性校準,標度變換,通過人機界面顯示出來。報警值可通過人機界面(鍵盤)設定。單片機系統還能完成對控制量的自動設置。本方案是集電工、模擬電子、數字電子、自動檢測、單片機的嵌入式應用于一體的系統,為了提高單片機的應用能力,我們把這個綜合項目進行分解,把總的要求分解到各相應課程的實踐中完成。如溫度檢測與監控系統分解為以下幾個子項目:1.電源變壓器的設計與制作;2.穩壓電源的設計與制作;3.放大器與波形變換電路設計與制作;4.非電量(溫度)檢測設計與制作;5.單片機系統設計與制作。根據各部分之間的接口要求提出相應的指標,把這些項目分配到相應的實訓中。例如把電源變壓器設計與制作在電工實習中完成;穩壓電源、放大器及波形變換電路的設計與制作在電子技術實訓時完成;檢測系統設計與制作在自動檢測實訓階段完成;單片機系統的軟、硬件設計在單片機課程設計階段完成;整個系統的組裝及調試在單片機實訓階段完成。通過變壓器的制作,學生了解了選用漆包線的方法,學會小型變壓器的設計,掌握變壓器的繞制工藝。放大器的制作,使學生學會了放大器的設計、制作、調試工藝和電子測量儀器的選擇與使用。檢測電路的設計,使學生學會了傳感器的選擇和使用,進一步理解傳感器的主要技術對檢測結果的影響,學會測量誤差的分析方法。單片機系統的設計與制作,使學生能根據工程要求,配置單片機應用系統的硬件電路,完成顯示、A/D、鍵盤、程控等子程序的編寫調試,熟練軟件編程環境和仿真器、編程器的使用方法。
四、結束語
單片機系統教學應突出教學的自主性、開放性和創新性,有利于新世紀創新人才的培養,符合高校的教育教學規律。在教學過程中,以加強基礎、培養能力、開拓思維、注重創新、提高素質為指導思想、以培養與提高學生的科學實驗素質、動手能力和創新能力為目標,建立以學生為主體、教師為主導,以層次化、模塊化、全面開放的新的教學模式運作。力爭通過單片機系統教學的改革,使學生能理解、掌握實際的單片機應用系統的開發過程,學會掌握及使用新技術的方法,使學生掌握一個實際單片機應用系統的開發模擬過程。
2選擇合適的多媒體課件以滿足教學需求
把多媒體課件應用到單片機課程的教學過程中,使得單片機教學不再枯燥,不僅可以使學生提高對理論知識的認識,而且通過仿真實例可以使學生熟悉單片機系統的開發方法,進而培養學生的動手和實踐的能力。但是多媒體課件良莠不齊,必須選擇合適的多媒體課件否則事得其反。首先,電子課件的開發工具有很多種,每種工具軟件有各自的特點,要合理選擇。在單片機多媒體課件的開發過程中,筆者所在教學團隊,結合了電子課件開發工具PowerPoint和單片機仿真軟件PROTUES,使用PROTUES針對具體實例開發出仿真程序,同時把仿真結果動態的插入到PowerPoint制作的電子課件中,使得多媒體課件能夠演示單片機工作的動態及結果,感性且直觀,同時又增加了課件的趣味性。其次,要及時更新多媒體課件以適應單片機技術的發展速度。《單片機原理與應用》是一門內容多且雜、實踐能力要求高、發展迅速的課程,為了適應數字系統的不斷發展,多媒體課件中動態仿真實例要盡可能的選擇新事例,一方面能增加知識量,使課程和發展形勢緊密結合,另一方面也能調動學生的學習興趣,從而提高教學效果。
摘要:從單片機行業就業需求特點出發,通過對教學內容和方法的優化組合,對實驗教學、考核方式的改革,以達到改善教學效果,增強學生動手能力,培養學生創新精神的目標,從而使學生適應當今就業要求,最終實現教、學、做、就業的高度統一。關鍵詞:單片機;教學改革;就業需求;創新能力中圖分類號:G424.1
文獻標識碼:A
文章編號:16723198(2009)19021601高校教學改革已成為一種必然趨勢,只有不斷改進教學內容和方法,豐富教學手段,激發學生的學習興趣,加強實踐能力的培養,才能實現教、學、做、就業的高度統一,從某種程度上可緩解大學生的就業問題。1 教學內容和方法的改革根據單片機行業對應聘者的相關要求以及本門課程入門難的特點,教學中打破傳統推車式的教學方式,注重對教學內容和方法進行優化和組合,將本門課程的學習分如下四個階段:第一階段:單片機相關知識及內部結構。首先在講授各部分前,教師應對單片機就業前景、應用現狀等問題給學生做一細致分析。然后以類比的方式(如:人體各部分)講解單片機最小系統,并讓學生明確最小系統是單片機能夠正常工作的基本條件,對單片機有一個整體認識。接下來以最小系統為中心分別對單片機引腳功能、內部結構、晶振、電源、ISP、復位等知識進行簡單講解。此部分應在后面整個學習過程中不斷進行回顧和學習。第二階段:跳過復雜的匯編指令,結合嵌入式C語言講解單片機并行I/O口工作方式。據調研,目前單片機行業主要以嵌入式C語言為主要編程工具,故授課時主要以嵌入式C語言為工具講解,在后面出現編寫程序需要時(如DS18B20等需精確延時的程序時)再穿插講解C、匯編混合編程方法,這樣既和實際工作更加貼近又使學生避過一開始就面對復雜的匯編指令,增強學好的信心。在對單片機并行I/O口講解時,要側重于讓學生明白單片機作為雙向I/O應用時每次讀入前為何需先置1等這類應用型問題。在講解單片機對I/O口的控制方式時,可以采用類比的方式(如:將單片機的各個功能寄存器比喻成我們平時使用的操作系統),以增強學生的理解。經過基礎知識的講解后,教師應拿出大量學時帶領學生從編寫簡單的流水燈程序開始,結合電腦在編譯軟件(如KEIL軟件)下調試,一邊編寫程序一邊講解各部分理論知識(如:程序中頭文件的作用,LED發光二極管的工作原理等),并且逐步由教師帶領學生編寫向教師給任務學生自主設計過渡。在此過程中,需不斷回故前面知識,學習新接口芯片,并同步電腦調試,驗證結果。此部分題目至少涉及如下方面:(1)LED流水燈;(2)獨立式按鍵;(3)LED數碼管;(4)矩陣式按鍵;(5)蜂鳴器。第三階段:中斷、定時器、串行口部分。由于定時器、串行口多使用中斷方式,與外部中斷具有一定的共性,故放在一起進行講解,以達到觸類旁通的目的。首先以學生看得到、摸得著,運用發生在身邊的實際例子(如接電話)進行中斷的相關概念和中斷處理過程的理論講解,然后以外部中斷為代表,結合大量的程序(如每按一次按鍵LED小燈亮滅變化一次等)講解實際中斷的處理過程及編程方法,使學生通過具體的程序充份理解中斷的用途及處理方式。在外部中斷被充分掌握的情況下,利用我們身邊的實例(如:以出租車行駛里程計數等)進行定時器和串行口工作方式的講解,由于前面對中斷的相關概念、外部中斷的工作原理有了很好的理解,故在學習定時器和串行口工作方式時學生就不會感覺太困難。第四階段:綜合設計及系統擴展。結合前面學過的知識,此部分教師拿出部分課時,以任務的方式提出一系列設計任務,學生綜合前面學過的知識進行設計,以達對知識鞏固、整合的目的,對學生創新能力也是一個很好的鍛煉。以上四階段需逐級遞進,每一階段在講授基礎知識后,需通過大量的練習進行消化理解,各部分一定要突出單片機的應用性,使學生體會到單片機的應用就在身邊,以此激發學生的學習興趣。2 改革實驗教學,提高動手能力打破常規按照指導書學生下載程序單純進行驗證的傳統實驗模式,對課內實驗教學進行改革,每次均將實驗分為基礎實驗和設計性實驗兩部分,并逐漸加大設計性實驗的比例。基礎實驗主要讓學生按照實驗指導書指導,對相關理論知識進行驗證、對此部分實驗系統結構、使用方法和軟件調試方法進行掌握,為后面設計性實驗打下基礎。設計性實驗由老師提出相應的設計任務(如:利用現有資源設計一款節日彩燈、設計一個秒表等),學生自主進行設計、實驗。設計性實驗以前面基礎實驗為基礎,但設計任務又脫離指導書,沒有參考的內容,故學生只能自已設計硬件電路的連線,編寫程序并調試,從而達到對學生基礎理論知識和獨立自主創新能力雙方面的鍛煉,而這兩項也是用人單位十分看重的。3 開展課程設計,培養創新能力在單片機教學改革中,增設了課程設計部分。課程一開始教師提供多個具有創新要求的課程設計供學生選擇。一般五、六人為一組,此課題伴隨整個單片機教學,讓學生在學習過程中不斷想到自已的課題,遇到問題時先自已解決,不成功時教師再加以適當指導。在教學過程中可以感受到學生學習的主動性明顯增強,所提問題具有更強的針對性,學習效果也更好。課程設計主要對學生以下幾個方面進行了實戰訓練:(1)根據設計任務的具體要求,查閱資料、制定設計方案及預其目標;(2)使用Protel軟件設計電路原理圖和PCB版圖(也可利用萬能板完成但要保證信號的穩定性);(3)購買元器件并進行電路版的焊接;(4)進行軟件編程;(5)進行軟、硬件聯機調試,完善系統功能;(6)撰寫技術文檔資料。通過課程設計,使學生掌握了單片機系統開發設計的全過程,培養了學生團隊精神和創新能力。4 改革考核方式,注重實際能力改變以往一張試卷定成績的方式,更加注重了實際能力的考核。改革后,本課程的考核分為四方面:第一方面是平時考核,側重于課堂上學生出勤、學習態度及參與問題討論的積極性,占總成績的20%;第二方面是實踐能力的考核,側重于學生的實際操作能力的考核,此部分主要針對平時實驗成績,占總成績的30%;第三方面課題設計考核,根據每個人的工作量及最終效果評定此部分成績,側重于綜合動手能力及自主學習能力的考核,占總成績的20%;第四方面理論考核,側重于基本理論的考核,占總成績的30%。由于考核方式的改革,使學生重視實驗教學,提高了學生的實踐能力、互動性增強,改善了教學效果和質量。5 教改實施效果通過對教改方案的實施,教學取得了明顯的成效。學生學習的主動性大為增強。實際動手能力明顯提高,這點從大四學生畢業設計中得到了很好的體現,學生能較容易地獨立完成DS18B20溫度監測系統、數字電子時鐘、十字路通指揮系統等畢業設計題目,且選擇嵌入式相關工作的學生大部分均成功地找到工作。較快地完成角色的轉變,基本達到了社會對單片機應用技術培養人才的需要。參考文獻[1]李廣弟.單片機基礎(修訂版)[M].北京:北京航空航天大學出版社,2001.[2]劉守義.單片機應用技術[M].西安:西安電子科技大學出版社,2002.[3]于復生.任務驅動教學法在機電一體化系統設計教學中的實踐與探索[J].電氣電子教學學報,2004,(1).[4]陳裕成.單片機原理及應用教學改革探索[J].漳州師范學院學報(自然科學版),2007,(2).
中圖分類號:G642 文獻標識碼:A 文章編號:1674-098X(2014)11(a)-0127-01
隨著人民生活水平的提高和相關技術的發展,單片機技術在工業控制領域和消費電子領域等方面得到了廣泛的應用。作為高校相關學科的專業基礎課,“單片機原理應用”課程也得到了越來越多的重視,本課程的理論性和實踐性都很強[1-2]。要使學生真正學好本課程,不僅要讓學生深刻理解單片機的相關理論知識,重點在于要讓學生學會怎么用好單片機,因此在高校的教學中,必須做到理論教學與實踐教學并重,通過實踐教學帶動和促進理論教學,不斷提高學生的動手能力和創新能力[3]。
1 當前實踐教學現狀
當前的實踐教學中存在的問題可以從以下三方面分析。
1.1 試驗課時和試驗設備不足
以我校電氣工程及其自動化專業本科生的培養方案為例,單片機原理與應用理論教學共76課時,其中含有60個理論學時和16個實驗學時,另外設有一周單片機原理與應用課程設計。從學時分配上,實驗課時占總課時的21.05%,比例偏低。為了在有限的實驗學時內完成教學任務,試驗指導教師只能安排一些基礎性或驗證性實驗,學生缺乏足夠的鍛煉,達不到實驗教學的最終目的。另外,受實驗室中設備數量限制,實踐教學中出現“抱大腿”現象,即一部分同學認真做,一部分同學玩的現象。
1.2 實踐教學內容缺乏創新性
傳統的單片機實驗教學內容中基礎性、驗證性內容多,綜合性、設計性實驗少。課程設計中選題限于試驗箱和試驗臺資源,題目內容很難跟蹤當前技術發展的熱點。為了達到實物設計的目的,課程設計中題目偏重于實驗臺(箱)上能進行的實驗項目,限于資源,題目難度總體來說偏低,實踐教學過程演變成了對實驗課內容的簡單綜合。且選題陳舊,一題多屆,多人一題現象普遍,缺乏綜合性、新穎性,難以激發學生學習的興趣,更無法培養學生的創新能力。
1.3 實踐教學考核體系
傳統的實踐教學的成績考核包含:課程設計報告,設計過程考核和作品設計考核。由于實踐教學內容缺乏創新,容易出現投機取巧的現象,使得考核過程流于形式,難以區分學生在實踐教學過程中取得的成果,也就調動學生在實踐教學過程中的積極性。
2 實踐教學改革內容
傳統的單片機原理與應用的實踐教學無法達到培養學生創新能力和綜合應用能力的要求,需要進行改革。針對這些問題,實踐教學改革在以下幾個方面展開。
2.1 實驗室建設
良好的實驗室條件是能夠開展實踐教學的基礎條件。在實驗室建設中不再選用試驗臺或試驗箱這些昂貴的試驗設備,而是以單片機開發板作為實踐教學的平臺。單片機開發板價格較低,但資源卻非常豐富,可以最大程度上滿足實踐教學的需要。而且可以隨著技術的發展不斷更新教學資源,甚至部分學生會自行購買。
2.2 項目驅動式實踐教學
實踐教學中不再由指導教師給定題目,而是由同學們自選題目,指導教師審查題目。項目的設計既要完全包含本課程的知識點和技能要求,還要與實際相聯系。所選項目可以源自日常生活中遇到的問題,也可以是自己感興趣的課題。所選題目由指導教師審查題目難度及可行性,并給出建議后形成一個小項目。這種選題方法可以最大程度上避免選題陳舊等問題。變抽象為具體,激發學生的學習興趣。
2.3 實踐教學組織
試驗資源增加后,在組織實施實踐教學中,鼓勵單人單組,最多兩人一組。利用興趣引導學習,激發學習的主動性,從而可以最大程度上避免“抱大腿”現象。而且因為試驗資源不再局限于實驗室,可以更充分的利用利用課余時間。在開設課程設計的學期內完成,參加學期末的課程設計答辯。從思想上不再把單片機課程設計當做某一段時間內需要完成的任務。通過長時間的鍛煉可以取得更好的實踐鍛煉效果。
2.4 開發工具多樣化
實踐教學中堅持開放工具的多樣化,不限定使用仿真器調試。實踐教學前期可以使用仿真器調試,鍛煉學生的編程與調試能力。到實踐教學后期,因為大部分程序已經調試完成,此時引導學生脫離仿真器調試程序,鍛煉學生的分析問題和解決此類問題的邏輯思維。
2.5 以知識競賽引領創新
鼓勵以實踐教學的作品參加國家級或者省級電子設計類比賽。參加這類比賽以增強動手能力為主要目的,同時也會保證作品的實用性、新穎性和知識的綜合性。激發學生之間的競爭意識,促進實踐鍛煉的教學效果。
2.6 實踐教學的考核體系建設
學期末組織課程設計答辯,根據所選題目難度、任務工作量、完成情況、答辯表現、課程設計報告給出最終實踐教學的基本成績。根據參加各類大賽的獲獎情況給出創新成績,這兩個成績按一定比例確定最終成績,在我校目前實施的考核體系中,競賽成績所占比例為30%。增加的答辯環節,既可以鑒別該同學是否真正完成了相應的實踐教學鍛煉,避免抄襲現象和“抱大腿”現象,還可以鍛煉學生相應的邏輯思維能力。
3 實踐教學改革的成效
從2012年開始在電氣工程及其自動化、自動化、電子信息工程三個專業進行實踐教學內容及方法的試點改革,約有1000名學生接受了新的實踐教學內容和方法。通過實踐教學改革,激發了學生學習的主動性與積極性,培養了學生的創新意識和綜合運用知識的能力,提高了學生的動手能力。學生參加電子類大賽的人數和獲獎人數以及獲獎等級逐年提高,2012年,在山東省大學生電子設計大賽中參賽的8只代表隊全部獲得山東省一等獎,2013年,在全國大學生電子設計大賽中有兩個不同的題目獲得全國一等獎,還有2個隊伍獲得全國二等獎,剩下的9只代表隊獲得了山東省一等獎。這些數據充分說明學生學習的積極性得到了激發,實踐動手能力得到了明顯的進步。
參考文獻
中圖分類號:TP434 文獻標識碼:A 文章編號:16727800(2013)002018202
0 引言
隨著微電子及計算機技術的迅速發展,單片機以體積小、功能強和性價比高等特點,在工業控制、通信技術和數據采集等領域獲得了廣泛應用。目前,許多學校都開設了《單片機原理與應用》,這門課程將程序語言、串口通信、模擬電路和數字電路等知識綜合起來,是一門理論性、技術性、工程性和實踐性都很強的課程,是計算機、電子類、機電一體化、自動化等專業的專業必修課。掌握好單片機技術對高職生工程素質的培養以及職業技能的提高都大有益處。
1 目前《單片機原理及應用》課程教學的不足
自20世紀80年代后期,我國的高等院校工科專業開始開設單片機課程,至今有20多年了。這期間,在教室講授理論,到實驗室利用實驗箱做實驗的教學模式一直沿用至今。由于單片機技術涉及到硬件電路設計和軟件設計兩方面的知識和技能,學習難度較大,致使初學者上課猶如聽天書,時間不長多數學生就懵懵然而放棄了,入門者寥寥。出現這些問題的原因主要是教學方法上存在一些不足。
(1)理論與實踐教學比例分配不當,重理論輕實踐。目前的單片機課程教學多以理論課為主,實踐課為輔。教材理論體系嚴謹,教師教學思路清晰,但學生往往感覺內容枯燥、概念抽象、指令難記。課堂教學按照教材內容的編排順序、相關知識的邏輯關系進行,學生剛剛接觸數字電路,缺乏編程語言及計算機結構的相關知識,難以順利入門并對課程產生濃厚興趣。同時,大部分教師的教學方法通常以講授為主,缺乏直觀形象的實際操作。這些原因導致學生普遍認為單片機的課程非常難學。
在教學過程中,往往理論教學的學時遠遠多于實驗教學的學時,并且實驗教學一般在“匯編語言設計”講完之后開始進行。這種教學體系的不足之處在于:①以大量的原理介紹引導學生入門,學生理解苦難,學習過程也感覺枯燥乏味;②教學過程中“重理論輕實踐”,實驗只是點綴,造成學生的應用能力培養缺乏,對培養應用型人才的培養目標十分不利;③軟件和硬件介紹時分開,對單片機系統軟硬件結合的設計方法介紹不足,學生在實際工作中缺少系統化的思路。
(2)教學方法老套,無法激起學生的學習興趣。目前,大多數高校的理論教學過程都是采用先基礎后應用的模式,即單片機硬件結構、指令系統、匯編語言設計、外部系統擴展、接口技術和應用系統設計,這種方法雖然思路清晰,但是存在著過于機械性的弊端,缺乏生動、直觀的實物等輔助教學手段,這樣便使學生覺得學習單片機枯燥乏味,沒有現實意義、缺乏興趣,嚴重影響了教學效果。實踐教學形式單一且受重視不夠。當前的實踐課教學大多以單片機實驗箱為實驗平臺,而開設的也多為驗證性實驗。觀察中不難發現,學生在做實驗時大都是用實驗指導書上已經寫好的程序資料,幾乎沒有多少同學去分析程序的流程,更不用說去研究讀懂那些代碼了。另外,對于用到電路硬件的實驗,也只是按實驗指導書要求在實驗箱上做簡單的連線,沒有一個整體的電氣原理圖概念,再加上實驗條件的有限,不可能每個同學都能得到老師的輔導,導致學生過度追求實驗結果,而忽略了硬件設計、軟件調試等過程。
2 《單片機原理與應用》課程教學改革的思路與措施2.1 以“任務驅動”為主要方法的教學內容
任務驅動教學法是一種建立在建構主義學習理論基礎上的教學法,它將以往以傳授知識為主的傳統教學理念,轉變為以解決問題、完成任務為主的多維互動式的教學理念;將再現式教學轉變為探究式學習,使學生處于積極的學習狀態,每一位學生都能根據自己對當前問題的理解,運用共有的知識和自己特有的經驗提出方案、解決問題。
在實際教學中,以學生為主體,項目、工作任務為載體,學生在教師的引領下,由淺入深、由易到難,學習單片機控制系統的設計和制作。為取得良好的學習效果,在課堂上由老師先對學生提出一個課內任務,老師不會完整的告訴學生怎么完成任務,而是只提供知識點,由學生課外完成此任務,并根據任務完成的質量進行考核和評分。
從學生的角度說,任務驅動是一種有效的學習方法。它從淺顯的實例入手,帶動理論的學習和應用軟件的操作,大大提高了學習的效率和興趣,培養他們獨立探索、勇于開拓進取的自學能力。一個“任務” 完成了,學生就會獲得滿足感、成就感,從而激發了他們的求知欲望,逐步形成一個感知心智活動的良性循環。伴隨著一個跟著一個的成就感,減少學生們以往由于片面追求信息技術課程的“系統性”而導致的“只見樹木,不見森林”的教學法帶來的茫然。從教師的角度說,任務驅動是建構主義教學理論基礎上的教學方法,將以往以傳授知識為主的傳統教學理念轉變為以解決問題、完成任務為主的多維互動式的教學理念;將再現式教學轉變為探究式學習,使學生處于積極的學習狀態,每一位學生都能根據自己對當前任務的理解,運用共有的知識和自己特有的經驗提出方案、解決問題。這為每一位學生的思考、探索、發現和創新提供了開放的空間,使課堂教學過程充滿了民主、充滿了個性、充滿了人性,課堂氛圍真正活躍起來。
2.2 變革傳統的實驗模式
(1)設立虛擬仿真實驗室。單片機課程內容抽象,教師操作實驗開發板時演示效果不太好,學生較難理解,因此,計算機虛擬仿真軟件演示起著非常重要的作用。虛擬仿真系統具有以下優勢:①組織單片機實驗的環境簡單,只要有電腦即可進行;②由于只涉及到軟件,不會有硬件損壞的問題,可以避免由于設計錯誤導致的硬件投入浪費,降低使用成本;③繪制原理圖、編制程序均在軟件上實現,程序執行中各元件的運行狀態直觀明了,調試方便。因此,在單片機教學中引入Proteus和Keil C編程調試軟件,采用多媒體教學方法,能在課堂中完成軟件、硬件的調試和系統集成等內容的教學。
(2)利用單片機實驗開發板進行教學。實驗開發板應用十分方便,目前已經集成了鍵盤、流水燈和LED顯示器等通用設備,線路連接簡單,可以進行多個基本項目的實訓。通過開發板的學習實踐,運用項目教學法進行多個項目的操作,能讓學生熟悉單片機及其設備的硬件知識,系統地掌握單片機P0-P3口、串口通信和中斷控制的工作原理。
(3)結合多學科進行綜合實踐。很多學生在學習了單片機課程后,即使掌握了單片機知識,但還是不能融合其他課程的知識進行綜合應用,因此,教師應將其他課程的知識與單片機的相關內容聯系起來。比如,與Protel課程相結合,要求學生利用Protel設計開發板的PCB圖,并制作出PCB開發板,同時自己動手焊接所有的元器件,然后進行系統調試。在此過程中,學生可以享受到自己的勞動成果,更加熟練地掌握Protel知識,更加熟悉元器件之間的硬件連接,對數字電路、模擬電路的工作特點更加了解,對單片機C語言有了更深入的認識,鍛煉了各學科的綜合實踐能力。
2.3 考核方式的改革
與以往傳統單片機原理及應用課程的教學采用純理論的考核方式不同,考試成績由平時考核、實踐技能考核、綜合能力考核3個部分組成。其中,平時考核占30%,包括平時作業、課堂表現和平時測驗,作業和課堂表現側重于知識的掌握,平時測驗側重于知識的運用。實踐技能考核占30%,包括實驗、企業實訓和技能競賽,在每個模塊的項目實踐過程中考核學生解決實際問題的能力;綜合能力考核占40%,包括理論知識和實際應用兩部分,理論知識考核采用“試題庫”,實行開卷考試,主要考察學生對基本概念、基本原理和基本器件的掌握和理解情況,實際應用部分教師根據學生完成的準確性和熟練程度現場評分。這種考核形式注重考察學生的知識遷移能力和融會貫通能力,優于一次期末考試決定結果的傳統考核辦法,在貫徹執行過程中效果較好,反映出了學生的真實水平。
3 改革效果
這種單片機教學方法為學生提供了很好的實踐空間,能充分吸引學生興趣,大大提高了學生學習的積極性和主動性。很多學生主動要求延長學習時間,利用周末到實驗室動手練習。在每次上實訓課時,學生都特別積極,不完成任務不下課,這在以往單片機教學過程中很少見到。通過調查發現,學生對這種教學方法的改革都很認可和喜歡,教學效果得到了很好的改善。
這種教學方法既鍛煉了學生的動手能力,又提高了學生發現問題、分析問題和解決問題的能力,同時還培養了學生的信息檢索能力。實踐證明,該教學方法切實有效,對高職院校單片機教學改革有一定借鑒作用。
參考文獻:
\[1\] 屈莉莉,等.單片機課程實踐性教學環節的建設與改革[J].中山大學學報論叢,2004(3).
《單片機原理與應用》課程是一門理論和實驗結合非常緊密、突出動手能力的課程。實驗教學是其中一個重要環節,既是聯系理論教學的橋梁,又是培養學生實踐、創新能力的重要手段[1-3]。但是在實驗教學中會出現學生理論與實驗脫節、實驗課效果不理想、學生實驗課積極性不高等問題,因此《單片機原理與應用》課程實驗教學改革就成為許多學校非常重視的一項教改課題。
1.《單片機原理與應用》課程實驗教學現狀分析
1.1課程自身特點
1.1.1跨越性。《單片機原理與應用》課程是一門軟硬件相結合、強調實踐性和應用性的課程。學習這門課程的學生需要經歷從電子技術基礎、電路原理、C語言編程等基礎知識向以微處理器為核心、通過軟件編程來實現系統功能的思想轉變過程,這種思想跨越轉變過程對初次接觸該課程的學生來講具有一定難度。
1.1.2橋梁性。《單片機原理與應用》課程是后續嵌入式系統課程、DSP課程、EDA課程及畢業設計等的基礎,具有課程橋梁的重要作用。
1.1.3綜合性及抽象性。《單片機原理與應用》課程涉及的內容較廣泛,包括單片機的硬件組成和功能、軟件編程思想、匯編語言的語句及結構等。并且軟件編程涉及的匯編語言需要和硬件的配置情況有關,內容抽象,不易理解。
由于該課程具有自身特性,因此需要教師在實驗教學中進行改革嘗試,幫助學生更好地適應學習這一類課程的方法,增強學生對該課程的理解性,從而提高他們的實際操作及應用能力。
1.2學生對課程的切身感受及認識
通過調研得知,相當一部分學生渴望將這門課程更好地融于自己的專業發展中,牢固掌握課程基本理論和實踐知識。調研結果表明,問題主要集中在兩個方面:(1)在學習該課程之初,學生在沒有大量實驗操作機會的情況下,表現出的是對程序的編寫問題及對整個課程的困惑,大部分學生對該課程主要應用在哪里沒有概念。(2)對于給予大量實驗操作機會的學生,他們表現出對單片機的極大興趣,他們的問題主要集中為:如何設計具有較好功能的源程序,源程序結構的優化,硬件搭建的合理性等。
因此,良好的實驗教學可以幫助學生理解課程內容,掌握核心知識,從而提高學生的學習積極性和學習效率。
1.3實驗教學中出現的待解決問題
1.3.1實驗項目內容設置不夠完善,不利于調動學生的實驗積極性。各個實驗項目獨立性強,幾乎沒有考慮知識的前后貫穿和最后應用系統的設計,這容易使學生學了后面的忘了前面的,自己設計簡單的應用系統更是無從下手,非常不利于培養學生的實驗積極性。
1.3.2教學模式單一,傳統的實驗教學偏重于驗證性與演示性實驗[4-6]。學生在實驗過程中按實驗講義逐步進行,分析思考問題的機會比較少,只是機械化地驗證實驗內容。學生的注意力主要集中在編程及調試上,忽略了實驗電路原理的重要性。不清楚系統設計流程,當需要自行設計系統時,學生就會感覺困難無從下手。實驗教學沒能起到真正推動學生對單片機原理、模擬電路、數字電路等理論知識理解的作用。單一的實驗教學模式制約對學生創新能力及分析解決實際問題能力的培養,降低學生的學習興趣,影響教學效果。
1.3.3學生實驗中實際發揮空間有限。在實踐教學中,教師經常把主要的實驗步驟、程序代碼都提供給學生,造成實驗教學中學生動手機會少、思考不全面、發揮空間有限的缺點。
2.《單片機原理與應用》課程實驗教學改革研究
針對《單片機原理與應用》課程實驗教學現狀,對該課程實驗教學方法進行探討,在實驗項目、實驗教學模式、實驗教學環境及實驗考核方式上進行改革研究,以提高該課程的實驗教學質量,為學生的課程實驗、課程實訓、畢業設計及相關實踐提供優質的基礎。該課程實驗教學改革方法的研究對提高實驗課堂教學質量、促進人才培養和就業都有著深遠的影響。
2.1實驗項目改革研究
《單片機原理與應用》課程比較側重于學生動手能力的培養,所以針對該課程的實驗項目很多,那么如何根據本學校的學生層次及特點進行實驗項目的分類是改革中需要研究和分析的問題。筆者以溫州醫科大學實際授課實例為例進行闡述。溫州醫科大學針對生物醫學工程專業和電子信息工程專業學生開設該課程。針對學生的專業特點及實驗學時的安排,將實驗項目教學內容分成四部分,可以根據各專業學生層次特點選擇合適的實驗項目。具體實施方法為:
第一部分為軟件模擬實驗,主要目的是熟悉Keil軟件、Proteus軟件等的操作及匯編語言指令的熟練應用,讓學生對整個操作軟件的使用及匯編語言的使用有一個全面了解,為以后的實驗打下堅實的基礎。針對軟件模擬實驗,主要開設的實驗項目包括兩類:基礎類實驗及綜合應用類實驗。基礎類實驗主要包括數據傳送實驗、拆字和拼字實驗、數據加法實驗、查表實驗等;綜合應用類實驗主要包括模擬交通燈、投籃計分及病房呼叫模擬實驗等。
第二部分為基本端口實驗,主要目的是讓學生認識紋機系統的基本硬件。實驗項目主要有端口輸出實驗、定時計數器實驗、按鍵中斷實驗、A/D轉換實驗、多位數碼管顯示實驗、串口通信實驗等。
第三部分為綜合設計性實驗,目的是幫助學生全面掌握所學內容,提高學生綜合運用知識的能力。主要有用定時器設計時鐘實驗、鍵盤結合LCD液晶顯示實驗、利用外部中斷設計流水燈實驗、溫度檢測實驗等。
第四部分為創新性實驗,主要針對那些對單片機有興趣的學生,鍛煉學生的創新能力、動手能力和解決實際問題的能力等,該部分實驗在課下進行,可結合教師的科研項目和各類大學生電子設計大賽,如教師科研課題中的控制系統及大學生電子設計競賽、智能車設計大賽、機電產品創新設計大賽等。
2.2實驗教學模式改革研究
《單片機原理與應用》課程實驗教學模式改革中將PBL教學法與TBL教學法相結合,針對該門課程授課學生專業不同,將實驗分成三個層次:基本實驗、綜合實驗和自選實驗。針對不同層次實驗各自特點和難易程度進行教學方法的選擇和綜合應用。
2.2.1基本實驗主要考核學生基礎知識的掌握,內容較為簡單,可以只采用PBL教學法。教師只需要給出實驗設計的問題,由學生獨立完成,不需要進行分組,培養學生的自主動手能力。
2.2.2綜合實驗不再是單一的知識點、單一的學科,考核的知識可能是跨學科多個知識點,教師只需給出實驗的要求和技術指標,學生自主選擇決定學習哪些知識解決問題,體現典型的PBL教學法的應用優勢。具體實驗過程中主要采用分組討論,單人完成或按組匯報兩種方式。
2.2.3自選實驗在三個實驗層次是難度最高的,學生幾乎不可能單獨完成,同時教師要給予一定的指導,給出明確的學習目標及知識點,適合采用TBL教學法分組討論,按組匯報。設計性實驗往往都是給出一個需要解決的實際問題,實施方法不是唯一的,這是PBL教學法應用最適合的情況。因此,對于設計性實驗最好采用兩種方法綜合應用。
2.3實驗教學環境的改革研究
根據學生的實際情況和要求,為學生創造寬松的實驗環境。
2.3.1對學生實驗中用到的硬件實驗仿真平臺可以根據學生的特點及基礎進行針對性選擇及操作。對于大多數學生,可以選用基礎開發板與仿真器的硬件仿真平臺在實驗課堂中完成相應的實驗項目設計,對于能力較強的學生,可以鼓勵學生自己做單片機最小系統板或者選用高級開發板與仿真器結合的硬件仿真平臺,對于積極性較高的學生,可以建議大家在實驗課業余時間選用開發板自己燒寫程序在實驗課堂之外對實驗感興趣的內容進行仿真學習,為學生創造寬松的實驗環境,使學生可以不拘束于課上時間進行實驗。
2.3.2對于軟件仿真平臺,學生可以用匯編語言完成簡單程序的設計,能夠用C51語言完成簡單和復雜程序的設計,學生的前序課程中學過C語言,這樣大大降低學生學習的難度,同時學生從對比中加深對匯編語言和C51語言的理解。
2.4實驗考核方式改革研究
傳統的單片機實驗課程不單獨考核,評價方式主要以實驗報告為依據。這種評價方式使學生對實驗教學環節不重視,很難調動起學生在實驗教學環節中的積極性。本次改革項目將實驗考核方式分為四個部分:把學生每次實驗課堂的態度及積極操作的自我關注程度作為實驗平時成績的考核依據,占實驗成績的20%;平時實驗報告占實驗成績的20%;綜合實驗項目考核占實驗成績的50%;自選實驗項目占實驗成績的10%。
3.結語
為了提高《單片機原理與應用》課程的實驗教學質量,給學生的課程實驗、課程實訓、畢業設計及相關實踐提供優質的基礎,提高學生的實際應用和創新能力,本課題結合學校各專業學生實驗教學的實際情況,對該課程實驗教學方面的教學方法進行探討與改革。經在實際實驗教學中的改革實踐表明,通過對實驗項目的合理設計,可以培養學生的實驗積極性和主觀能動性。通過對實驗教學模式的改革,激發學生的實驗興趣。通過對實驗教學環境的改造及考核方式的改變,可以引導學生重視自身實驗技能的培養。從本校學生畢業設計過程及實習過程中可以看出,學生在實際工程應用項目的開發數量和質量都有較大程度的提高。隨著實驗教學改革的不斷深入和完善,該課程會取得更良好的實驗教學效果,使學生的綜合設計能力及創新能力有明顯的提高。
參考文獻:
[1]李有光,聞新,南英.本科生AVR單片機實驗教學探索與研究[J].實驗室研究與探索,2015,34(9):216-218.
[2]祖一康,徐妙婧.單片機教學改革實踐研究[J].湖北理工學院學報,2015,31(5):67-70.
[3]金國華,滕君華,馬寶山,張大力.單片機課程設計中應用能力的分層培養[J].中國現代教育裝備,2015,11:81-83.
中圖分類號:G642.0 文獻標志碼:A 文章編號:1674-9324(2015)20-0101-02
單片機由于其結構簡單、易于控制及價格低廉等優點,使得其廣泛應用在儀器儀表、工業控制和自動化控制等領域中。隨著電子技術的飛速發展,企業對單片機應用型人才的需求越來越多,而且越來越看重具有動手能力、團隊意識和創新能力的學生。因此,理工科學校的教育工作者和學生越來越重視單片機原理及應用課程的教學成果。然而該課程作為高等工科院校電子、機械和測控等專業重要的專業必修課,是一門綜合性、實踐性很強的課程。對于工科學生來說,很好地掌握單片機技術,不僅有助于深入地學習專業知識技能,提高自身的整體專業素養,培養動手能力與團隊意識,更重要的是能夠獲得實用的專業技能和創新能力,增強就業競爭力。
面對市場對人才日益嚴峻的要求,如何培養出適應社會需求的創新型和專業型人才,是教師面臨的一項緊迫而艱巨的任務。這不僅僅要求教師提高自身水平和積累工程項目經驗,還要求不斷反思教學過程,在教學方法上進行改革和探索。
一、單片機教學特點及存在的問題
單片機原理及應用課程教學與其他理論科目教學方式不完全相同,這門課程強調的是專業知識的應用,要求學生能夠將基本理論與實際工程相結合,達到解決工程問題的基本能力。因此,在重視理論教學的同時,必須重視實驗教學。但是,在具體的教學過程中,不但學生普遍感到難學,授課教師也存在許多困惑,這些都是由于課程特點引起的。
它的主要特點[1]有:(1)概念多,專有名詞多,內容抽象,對于初學者來說難以適應,由此會感覺入門較難。(2)編程語言指令多,且需要掌握每條指令的功能及操作數來源。(3)邏輯性和完整性強,各部分知識銜接緊密。(4)課程的圖示說明多。(5)綜合性強,涉及內容較多,涵蓋了模擬電路、數字電路、自動控制系統等諸多基礎課程的內容。(6)解決實際問題的能力強。單片機教學的這些特點,使得學生在開始學的時候難以入門,難以了解單片機的整體結構,從而對單片機的學習失去信心,以至于出現學生普遍認為課程難學、教師普遍認為課程難教的局面。
多年的單片機教學經驗表明很多學生學完課程之后并沒有達到預期的效果,不能將學到的知識應用于實踐,或無法將知識點連成知識面進而形成知識體系。另外傳統的實驗教學以驗證性的實驗為主,學生在規定的時間內,用統一的模式,按照指導書上規定的步驟做相同的實驗。對于包含工程開發的軟硬件協同設計難以開展,學生對基礎知識的綜合應用能力較差,自主設計和創造能力也普遍存在問題。
二、CDIO模式下課程教學改革探索
1.CDIO工程教育模式。CDIO是一種國際化高等工程教育的創新模式,是由麻省理工學院(MIT)、瑞典皇家工學院(Royal Institute of Technology)等四所跨國大學合作開發的一整套工程教育理念和實施體系[2,3]。它以產品研發到產品運行的生命周期為載體,讓學生以主動的、實踐的、課程之間有機聯系的方式學習工程[4-6]。主要包括技術知識與推理、個人和職業能力與態度、人際交往能力,團隊合作和交流、企業和社會環境下的構思設計實施運行系統等四個層面,這種模式不僅注重培養學生扎實的專業技術知識,更關注團隊協作精神和創新精神的培養,并通過“做中學”和“基于項目的教育和學習”的教學模式培養既有扎實的專業技能,又有良好的團隊協作能力和創新能力的國際化工程師。國內外的經驗都表明CDIO“做中學”的理念和方法是先進可行的,適合工科教育教學過程各個環節的改革。
2.以項目為導向,改進教學方式和教學內容。教學方式上,將本專業有著豐富科學研究和教學經驗的教師組織成一個項目實施團隊,建立相對穩定的承擔單片機原理及應用課程教學和實踐環節的教師隊伍。研究CDIO高等工程教育模式的理念和本質,轉變觀念,改革教學內容、教學方式和教學手段,緊密結合有關科研項目,將CDIO理念和教師在科研中的實踐經驗和體會融入教學內容、課堂教學和實驗教學環節中。項目中每位成員根據自己承擔的科研項目,每學年提出一個適合單片機項目化教學的項目,并將學生進行分組,每組4人,每組都包含1~2名興趣比較濃厚、學習動手能力較強的同學,每個小組選擇一個項目,該項目貫穿于單片機教學內容和過程的始終。最后再完成一個綜合性強的實踐環節。通過這種方法提高學生學習的積極性和主動性、動手實踐能力、團隊協作能力和創新能力。
3.改革教學模式。在實際的教學中,將提出的適合單片機項目化教學的項目分配給學生小組,讓學生以團隊的形式完成整個項目的設計,包括方案設計、軟件實現、硬件設計以及測試和調試等整個過程。使項目貫穿于單片機原理及應用課程教學內容和過程的始終,學生分組完成,教師提供輔導。選用的項目可分步實現,彼此關聯,從小到大,從簡到繁,從局部到整體,層層推進,形成一個完整、全面的單片機應用系統的教學項目。在實際的教學改革中,我們依托于“RS232串口通信”、“數控式直流電流源設計”、“智能負載”、“溫濕度測量系統”、“數控直流穩壓電源”等項目,將以包含能力訓練的項目教學方式讓學生深入理解專業知識和提升其專業技能。將教學內容相關的知識分解到各個教學項目當中,這樣可以增強學生學習單片機課程的興趣,培養他們的團隊意識和創新能力以及提高在嚴峻就業環境下的競爭力。
4.考核方式的改革。傳統的單片機的期末成績主要由學生的平時成績和卷面成績按照一定的比例構成(一般為3∶7),卷面成績則全部由試卷考試的形式決定。這種傳統的考核方式評價不了學生的實踐能力和創新能力,也不能完全作為掌握單片機基礎知識的判斷依據。而CDIO工程教育則要求學生在掌握專業知識的基礎上,具備一定的工程實踐能力,也符合廣大學生的學習目的。
因此,在本次改革中,為了確保考核方式的合理性、公平性和有效性,單片機的成績將以CDIO工程教育基本理念為指導,與項目結合的形式完成對學生能力的綜合評價,并采取教師點評和學生互評等各種方式(如表1)進行。這種以“過程”為基礎開展,關注學生知識、技能的學習過程,關注實踐環節及工程應用能力,力求知識與能力的協調統一的教學考核,不僅增強了衡量學生掌握知識的依據,而且有利于引導學生注重動手實踐能力和自身綜合素質的提高。
三、教學改革的實際效果
1.激發了學生的學習興趣。以項目化方式指導學生學習的教學方式,增強了學生學習單片機的興趣和熱情。工程教學中始終貫穿著項目,學生需要按照項目的任務和要求系統地學習基礎知識和應用能力,有助于學生明確學習目標。這種由傳統單調的課程教學到靈活的項目教學方式,也極大地提高了學生的學習氛圍和興趣。
2.培養了學生綜合運用知識的能力。要完成CDIO項目中的工程任務,必須運用諸如數字電路、模擬電路、自動化控制和單片機技術等多學科的基礎知識。學生需要綜合運用所學知識來解決項目中遇到的問題,使學生綜合運用知識的能力得到培養。通過完成遇到問題到解決問題的過程,學生也加深了對知識的掌握。
3.鍛煉了學生的團隊協作精神。由于在整個工程項目的學習過程中,學生被分為3~4人一組,在分散學習、查閱資料、討論及實踐活動的過程中,都是以小組的形式進行,每個小組都是一個小團體,全體組員共同參與學習環節中的各項活動。彼此互相配合,廣泛交流的過程,鍛煉了學生的團隊協作精神和團隊意識。
4.提高了學生的思維、實踐動手能力。CDIO教學模式“做中學”的理念,強調教學與實踐的統一。在教學過程中安排的大量項目實踐活動,需要學生親自動手完成項目要求的各個實踐任務,并參與到項目開發的始終。參與工程的開發能夠發散學生的思維,提高實踐動手能力。從項目完成的情況來看,此次改革有效地提高了學生的創新能力和解決問題的能力。
四、結語
經過全體課題組教師的不斷努力,“單片機原理及應用”課程教學改革已經取得了初步成效,教學效果得到了顯著提高。通過單片機教學改革的實踐,結果證明,在CDIO工程教學模式下,采用以項目為驅動的教學方式不僅生動有趣,還能提高學生的創新能力和實踐能力。而且理論與實踐緊密結合的教學改革,激發了學生學習的興趣,培養了學生的團隊協作能力和團隊意識。
參考文獻:
[1]李曉林,牛昱光,閻高偉.單片機原理與接口技術[M].第2版.北京:電子工業出版社,2011.
[2]馬衛國.基于CDIO的單片機原理及應用課程教學改革探討[J].中國現代教育裝備,2011,(19):70-72.
[3]張翼成,劉美,王濤.CDIO模式下“單片機原理及應用”課程教學改革[J].計算機教育,2012,(32):22.
中圖分類號:G642.0 文獻標識碼:A 文章編號:1007-0079(2014)33-0065-02
“單片機原理與應用”課程是一門很重要的專業基礎課,把編程語言知識、模擬電子技術、數字電子技術、電路知識等綜合在一起,屬于技術性、工程性、實踐性很強的一門課程。該課程作為電氣工程自動化、自動化、機電一體化等專業最重要的核心課程之一,它是“自動化”高素質復合技能型人才所需自動控制類知識結構的載體之一,占據著相當重要的地位。
然而,傳統的“單片機原理與應用”教學一般以學科體系為出發點,注重課程本身的體系結構和前后的邏輯聯系,理論性很強,但卻忽略了“可學性”,學生缺乏明確的目標,致使學生學得吃力,老師教得辛苦,教學效果不佳。傳統的“單片機原理與應用”教學,一般以單片機的結構為主線,按部就班,先講單片機的硬件結構,再講指令和軟件編程,然后是單片機系統的擴展和各種器件的應用,最后再講一些實例。按照此種教學結構,學生普遍感到難學。很多書一開始就提出的總線、地址、寄存器等概念,學生往往難以理解;到了后面,如果還是延續以往教材中單片機的七種尋址方式則更抽象,有很多學生直到學完單片機還不能理解尋址方式究竟是什么意思,為什么需要這么多尋址方式。然后是單片機指令、111條指令,如果再不分重點,等到指令全部學完,大部分學生已對單片機望而生畏,開始打退堂鼓了,到了考試時候,老師也愁,題目出的簡單還怕學生不會,至于應用能力就更不知道從何談起了。
因此,對單片機課程進行教學改革是十分必要的。通過對教學理論的深入學習和教學實踐的摸索,筆者越來越認同“興趣是最好的老師”這一看法,而階段性成果是引導教學、激發學生興趣的有效辦法之一。基于此,論文提出“任務驅動”這一教學模式,主要包括以下內容:
一、改革課程內容體系結構,突出課程特點
單片機是一門實踐性很強的課程,然而在以往的教學模式中卻表現為抽象性強、理論要求高、記憶內容多的特點,這樣就要求對選修課程學生的記憶力、思辯能力和思維靈活性的要求較高,大部分學生難以掌握,顯然不符合教學的期望,同單片機應用為王的本質相背離,也不符合教學的特點。單片機又是一門發展很快的學科,大部分教材的教學語言還是采用“匯編語言”,而實際情況是在現實的應用過程中,除了特殊的一些行業外,絕大部分都采用C語言進行開發,匯編的可移植性、復雜性都限制了應用,因此在實際教學中也必須開展改革。另外新技術、新器件不斷涌現,而我國現行的相關教材中知識相對陳舊,很多里面的芯片都已經停產。教學內容很少體現單片機知識在相關專業中的實際應用,使得學用脫節――既未能體現“素質教育”的現代教育理念,也沒有體現單片機針對各專業所應有的“專業基礎性”。因此,內容上必須改革,補充新的知識,調整體系結構。
為了增加學生的積極性,改革后的單片機課程內容采用模塊、課題、任務體系結構,將課程劃分為多個模塊,每一模塊由多個課題組成,每一課題由一個或多個任務組成,每一任務由任務目標、任務分析、相關知識和任務實施四個相互連貫的部分組成。
二、改革教學內容組織方式,提升學生主動性和積極性
開展“單片機原理與應用”課程學習方法的研究,為學生提供有針對性的學習指導,激發學生的學習興趣,培養學生的自學能力,應是教學改革中亟待加強的重點內容之一。
進行教學內容組織方式改革,這好比是從原先的“C語言”到“C++”的轉換,從原先的“順序結構”、流水賬的教學方式轉換為面向任務的教學模式,實際上是一種隨著需求變化自然而然的蛻變。
每次教學均圍繞一個任務目標進行各教學環節的組織,以任務目標為主線進行各相關知識點和技能點的講解。以教師為主導,以學生為中心,邊講邊學,邊學邊練。在實施過程中,教師和學生都思路明確,知道本輪教學的目的是什么,是為什么在服務,學生不再是被動接受教師的填鴨式灌輸。在教學過程中,雙方一起對任務進行分析,教師教授相關知識,在任務實施階段開展師生互動,在課內外利用計算機仿真軟件和開發的實驗平臺進行驗證,鼓勵學生上講臺進行分析和操作。要求學生對課堂教學任務電路和程序進行設計或修改,培養學生單片機應用電路和程序的設計方法,并用提問、作業等形式來檢查學習情況。教師對學生存在的疑問進行實時解答,早發現早解決,減少將問題帶到學期結束的情況,為后續其他課程的開展提供較好的基礎。
這部分的關鍵在于教師對整體內容的把握、任務的設計和節奏的控制。因為浙江省地處東南沿海地區,民營企業發展良好,筆者所在的專業同周邊企業有著長期良好的校企合作,因此很多教學任務設計的實際上是來源于企業的實際需求,因此在任務的設計上很接地氣,能體現一般企業甚至行業現階段與本課程相關的大致水平,應用性非常強,通過對橫向項目的提煉和重組,對照教學大綱的要求往往能夠設計出若干教學任務,經由系教學會議討論后可以確定下來。隨著新的項目開展,逐步替換一些較老的任務案例,保持有序的更新,這樣學生也能了解到目前相關行業的情況,而不會出去兩眼一抹黑,特別是某些企業可能就是他們身邊較好的企業,能夠在心里得到認同,產生共鳴。首先就覺得這門課程對他有用,接下來就能更好地去了解該任務設計中的前因后果,學習如何組織實施。這一過程,自然而然就提升了學生學習的積極性,進而改進學習效果。
三、改革實踐性教學設計方式
我們一直強調“單片機原理與應用”課程的實踐性強,單片機的實踐部分實質上可以表現為兩方面:一方面是對單片機編程的實踐,另一方面是對單片機相關的硬件設計方面的實踐,兩者相輔相成,缺一不可。往往很多單片機教學中受限于課時和實驗設備,大多只開展前者,而后者的實訓十分欠缺。
為此主要采用兩種方式。首先,考慮到學生人數眾多,為了更多學生受益,引入“Proteus”仿真軟件。該軟件支持51系列和其他主流單片機,以及相關的單片機接口電路,教師提供主要案例,指導學生開展虛擬實驗,構建出虛擬實驗平臺,有助于學生開展課外的學習,輔助開展實踐教學,作為輔助手段可以讓學生加強對單片機編程的訓練;其次,設計開發“自制單片機綜合實驗平臺”,以往大學采購的單片機教學實驗平臺基本上模塊固化,真正實驗的時候基本不需要對硬件原理進行思考,依據實驗手冊簡單地連接幾根導線就可以了,實際上對硬件設計的學習幫助作用微乎其微。正是認識到了這一不足,自主開發的實驗平臺加強了學生對硬件設計能力培養的環節。在具備普通實驗平臺的實際編程能力培養的基礎上,該實驗平臺的組織上采用了靈活的接口形式,所有模塊都是可以拆卸的,為配合單片機課程教學中的“任務驅動”模式,會有不同的模塊,這一措施使得實驗內容的選擇更為合理和豐富,方便開展綜合型、創新型實驗。這些模塊通過統一的接口形式,類似于DCS、PLC等裝置的卡件形式,插入到本實驗平臺中。模塊并非都是直接可用,有些模塊需要學生依照原理進行組裝,有些需要進行焊接,甚至還有一些空白的模塊需要學生按照任務的要求,設計硬件方案,選擇器件,自行完成功能模塊。因此實際在一次實驗的開展過程中,不但對單片機編程進行了實訓,另外對器件的認知、電路的設計組裝等都進行了培訓。由于硬件的差異,軟件程序也是各有區別,有效避免了從實驗手冊代碼一抄,實驗完成這一現象,在這幾年的教學實踐中通常都能較好地完成。同時鼓勵學生在課后自己設計實驗,自己做實驗,開放式實驗教學也取得了較好的效果。
四、改革考核形式,保障教學任務的有效實施
成績是課程的永恒話題,不論是想自己的能力得到肯定,還是想取得良好的成績問鼎獎學金還是其他因素,學生對成績還是比較看重的,因此有些教學如果平時學生不主動,只要拿住考試的指揮棒,學生還是會投入相應的精力,但這種方式往往會使學生的學習目的是去應付考試,甚至作弊。這就需要改革考試方式,避免一考定音。
考核的方式方法和考核的內容將直接影響教學過程的實施,關系到教師如何教和學生如何學。因此,應通過對考核方式方法的改革來促進教學過程的改革。
本課程以往的考核形式相對單一,考題側重于記憶,例如背幾條指令、說幾個部件的作用、編幾條程序等,導致有的學生單片機考試成績很好,但卻不會實際運用。因此在改革中,注重應用能力的培養,提高平時成績所占的比例。由于課程是“任務驅動”,整個課程下來已經有好幾次任務,一次任務結束后對每位同學完成的結果予以記錄和評分,評判依據可以按完成任務的先后順序、完成的質量及學生表達能力等方面。記錄結果由同學簽字確認。考慮到時間,可以以組為單位進行實訓時,教師還應對每位同學提出相關的問題或進行單獨操作,這對主動性差的同學來說能起到很好的促進作用。(平時作業就分散在任務之中)因此平時的成績也自然而然地給出了,大家對自己平時的成績也明了。實際上到期末考試前,學生大致能對自己的成績有一個初步的定位。教學實踐表明,最終的成績同平時的成績并無太大的變化。通過這一方式的改變,一方面提高了學生對平時學習的重視程度,基本杜絕了平時不努力、考試前臨時突擊這一現象。最終成績能較好地體現學生在本課程的學習情況,學習風氣得到了有效的提升。
五、結語
針對“單片機原理與應用”課程特點,提出了“任務驅動”這一教學模式,基于此改革課程內容體系結構、教學內容的組織形式,并對課堂教學、實踐教學的形式和內容進行了變革,有效調動了學生的學習興趣,提高了學習的主動性,并在這一過程中學生掌握了實際的知識和技能。通過改革考試形式,在一定程度杜絕了大學課程平時不努力、考前臨時突擊這一現象,促使學生腳踏實地,對學習成績的提升起到了一定的作用。
參考文獻: