時(shí)間:2022-12-25 21:11:21
序論:好文章的創(chuàng)作是一個(gè)不斷探索和完善的過(guò)程,我們?yōu)槟扑]十篇單片機(jī)原理與應(yīng)用范例,希望它們能助您一臂之力,提升您的閱讀品質(zhì),帶來(lái)更深刻的閱讀感受。
中圖分類(lèi)號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):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
《單片機(jī)原理與應(yīng)用》是高等院校電子信息工程、通信工程、自動(dòng)化、電氣控制等專(zhuān)業(yè)所開(kāi)設(shè)的一門(mén)必修課。該課程綜合性、實(shí)踐性以及應(yīng)用性都很強(qiáng),不僅要求學(xué)生掌握單片機(jī)及其相關(guān)知識(shí),還要求學(xué)生具有單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)的能力,對(duì)培養(yǎng)學(xué)生的實(shí)踐動(dòng)手能力和創(chuàng)新能力具有重要的意義。然而,既讓學(xué)生掌握基礎(chǔ)知識(shí),又讓學(xué)生盡快地掌握設(shè)計(jì)技巧,這無(wú)疑是對(duì)學(xué)生能力和耐心的一個(gè)挑戰(zhàn),在實(shí)際的教學(xué)過(guò)程中,一些學(xué)生反映該課程比較抽象難懂,從而導(dǎo)致部分學(xué)生“遇難而止”,失去了學(xué)習(xí)單片機(jī)的激情和興趣。
針對(duì)這個(gè)問(wèn)題,我們從單片機(jī)理論教學(xué)和單片機(jī)實(shí)驗(yàn)教學(xué)兩個(gè)方面進(jìn)行了一些探索,這對(duì)學(xué)生的學(xué)習(xí)興趣和實(shí)踐動(dòng)手能力有了很大的提高。
1 單片機(jī)理論教學(xué)
理論教學(xué)是獲取專(zhuān)業(yè)知識(shí)的基礎(chǔ)和主要途徑,良好的教學(xué)氛圍不僅能使同學(xué)們輕松地掌握理論知識(shí),還能提高同學(xué)們的學(xué)習(xí)興趣。
1.1 抓住學(xué)生的好奇心
好奇心往往是興趣培養(yǎng)的動(dòng)力源泉,抓住學(xué)生的好奇心在提高學(xué)習(xí)興趣方面至關(guān)重要。如我在上第一節(jié)課時(shí),沒(méi)有去過(guò)分地強(qiáng)調(diào)什么是單片機(jī),學(xué)好單片機(jī)有什么好處等,而是告訴同學(xué)們今天給他們帶來(lái)一個(gè)非常有趣的玩具,然后直接拿了我們自己設(shè)計(jì)的一款循跡小車(chē),并讓某位同學(xué)在地上隨意畫(huà)出的一條路徑,通過(guò)觀察一下小車(chē)的運(yùn)行情況,讓同學(xué)們發(fā)揮想象力,猜想一下小車(chē)怎么知道行駛路線、怎么進(jìn)行方向控制等,最后告訴他們“這都是由我們將要學(xué)習(xí)的單片機(jī)進(jìn)行控制的”。這樣就一下子吸引了學(xué)生的眼光,也激發(fā)了學(xué)習(xí)和探索單片機(jī)的興趣。
1.2 “虛擬實(shí)驗(yàn)室”式的課堂教學(xué)
《單片機(jī)原理與應(yīng)用》不僅需要熟悉硬件電路的設(shè)計(jì)和結(jié)構(gòu),還要掌握軟件編程方法和技巧,一段程序?qū)Σ粚?duì),到底在控制方面起不起作用,那要結(jié)合軟硬件一起來(lái)進(jìn)行調(diào)試,為此,我們將“虛擬實(shí)驗(yàn)室”搬進(jìn)了課堂。“虛擬實(shí)驗(yàn)室”由Proteus和Keil C51軟件組成,其中,Proteus提供了豐富的模擬和數(shù)字器件模型,可以完整地仿真51系列單片機(jī)及其相連的模擬和數(shù)字電路,充當(dāng)了實(shí)驗(yàn)室里開(kāi)發(fā)板的角色;而Keil C51軟件是一個(gè)51系列單片機(jī)軟件開(kāi)發(fā)平臺(tái),采用C51語(yǔ)言進(jìn)行編程,在調(diào)試程序和仿真等方面有很強(qiáng)的功能。采用Proteus和Keil C51軟件相結(jié)合,能將抽象、生澀、陌生的知識(shí)直觀化、形象化、具體化,更容易讓人接受。
1.3 “找茬”互動(dòng)教學(xué)
通過(guò)Proteus畫(huà)出硬件電路圖,將Keil C51軟件編寫(xiě)程序?qū)戇M(jìn)去,演示一下正確的結(jié)果,如果僅僅如此,那么久而久之學(xué)生也會(huì)感到乏味,因此一定要在教學(xué)的過(guò)程中制造一點(diǎn)“麻煩”,讓同學(xué)們來(lái)“找茬”。如在講到單片機(jī)P0-P3口時(shí),為了強(qiáng)調(diào)“P0口做I/O時(shí)必須外加上拉電阻”這個(gè)知識(shí)點(diǎn),在Proteus畫(huà)P0控制LED電路圖時(shí),故意不加上拉電阻,結(jié)果發(fā)現(xiàn)P0引腳變灰色,LED不亮,然后再試一試其他端口,LED卻可以點(diǎn)亮,讓學(xué)生找出哪地方出現(xiàn)了問(wèn)題,怎么去修改,P0口和其他端口有什么區(qū)別等。這樣就會(huì)加深學(xué)生的印象,無(wú)形中牢牢掌握了該知識(shí)點(diǎn),這要比“強(qiáng)調(diào)-強(qiáng)調(diào)-再?gòu)?qiáng)調(diào)”有效地多。同樣的方法也可以用在Keil C51軟件編程中。
2 單片機(jī)實(shí)驗(yàn)教學(xué)
理論教學(xué)和實(shí)驗(yàn)教學(xué)是緊密結(jié)合的,單片機(jī)實(shí)驗(yàn)教學(xué)對(duì)于培養(yǎng)學(xué)生的動(dòng)手能力和創(chuàng)新意識(shí)有著十分重要的作用。
2.1 驗(yàn)證與設(shè)計(jì)相結(jié)合
驗(yàn)證型實(shí)驗(yàn)并不是簡(jiǎn)簡(jiǎn)單單地驗(yàn)證一下結(jié)果正確與否,而是通過(guò)實(shí)驗(yàn)來(lái)發(fā)現(xiàn)問(wèn)題并尋求解決問(wèn)題的方法,從而鞏固和提高所學(xué)的知識(shí)。然而,目前的單片機(jī)實(shí)驗(yàn)大多數(shù)以驗(yàn)證為主,實(shí)驗(yàn)內(nèi)容比較單一,實(shí)驗(yàn)本身沒(méi)有太大的創(chuàng)造性,對(duì)學(xué)生的設(shè)計(jì)能力要求不高,學(xué)生只需在實(shí)驗(yàn)箱上連接幾條線,編寫(xiě)或修改一段簡(jiǎn)單的實(shí)驗(yàn)程序就可以完成,這樣學(xué)生只知道怎么做,根本不知道自己為什么要這么做,嚴(yán)重束縛了學(xué)生的想象力和創(chuàng)造力。因此,必須通過(guò)設(shè)計(jì)型實(shí)驗(yàn)來(lái)彌補(bǔ)其中的不足。實(shí)驗(yàn)課上由被動(dòng)轉(zhuǎn)為主動(dòng), 不再是依葫蘆畫(huà)瓢。
如在講到“中斷”時(shí),除了讓同學(xué)們驗(yàn)證一下單片機(jī)5個(gè)中斷源的設(shè)置和工作原理外,可以讓他們?cè)O(shè)計(jì)一款簡(jiǎn)單的頻率計(jì)或是數(shù)字鐘,這樣就可以將中斷、數(shù)碼管動(dòng)態(tài)掃描、按鍵掃描等綜合應(yīng)用到一起,為單片機(jī)系統(tǒng)的設(shè)計(jì)打下了良好的基礎(chǔ)。
2.2 命題和自命題相結(jié)合
在設(shè)計(jì)型實(shí)驗(yàn)中,也要采用命題和自命題相結(jié)合的方式。先以命題形式出現(xiàn),由老師出題,這樣題目涵蓋面比較廣,可以全面考查到各個(gè)知識(shí)點(diǎn),如上面提到的數(shù)字鐘的設(shè)計(jì)。自命題型實(shí)驗(yàn)是讓一組學(xué)生根據(jù)自己的興趣和愛(ài)好,自己出題目,一般只注重開(kāi)發(fā)的過(guò)程,而不重視最終的結(jié)果,因?yàn)橛锌赡懿糠謱W(xué)生出的題目過(guò)難而最終無(wú)法實(shí)現(xiàn)。對(duì)于無(wú)法完成的小組,要找出原因,是硬件本身的缺陷,還是軟件設(shè)計(jì)方面的不足,自己在命題時(shí),忽略掉哪些因素等等。自命題型實(shí)驗(yàn)關(guān)鍵就是激發(fā)學(xué)生的創(chuàng)新思維,培養(yǎng)學(xué)生的團(tuán)隊(duì)意識(shí),提高組織協(xié)調(diào)能力、發(fā)現(xiàn)問(wèn)題和解決問(wèn)題的能力。
從命題到自命題,從“讓我做什么”到“我要做什么”,讓學(xué)生體味一下兩者的不同之處,在經(jīng)過(guò)實(shí)戰(zhàn)演習(xí)后,熟練掌握工程項(xiàng)目的開(kāi)發(fā)流程,
3 結(jié)語(yǔ)
《單片機(jī)原理與應(yīng)用》是一門(mén)軟硬件綜合、應(yīng)用性比較強(qiáng)的課程,在整個(gè)的教學(xué)過(guò)程中,建立以興趣為引導(dǎo),以單片機(jī)系統(tǒng)的設(shè)計(jì)為主線,以理論和實(shí)驗(yàn)相結(jié)合為宗旨,以培養(yǎng)創(chuàng)新能力和實(shí)踐能力為目標(biāo)的單片機(jī)課程教學(xué)體系,運(yùn)用多媒體技術(shù)和“虛擬實(shí)驗(yàn)室”軟件等多種手段,由整體到具體、由簡(jiǎn)單到復(fù)雜、由模塊到系統(tǒng),循序漸進(jìn),加強(qiáng)學(xué)生動(dòng)手操作能力和單片機(jī)系統(tǒng)開(kāi)發(fā)能力的培養(yǎng)。經(jīng)過(guò)教學(xué)改革,我校學(xué)生在全國(guó)大學(xué)生電子設(shè)計(jì)大賽、全國(guó)信息技術(shù)應(yīng)用水平大賽等各項(xiàng)比賽中所取得了良好的成績(jī),對(duì)提高學(xué)生的專(zhuān)業(yè)知識(shí)水平和創(chuàng)新能力方面具有明顯的優(yōu)勢(shì)。
參考文獻(xiàn):
[1] 胡敬朋, 王聰. 單片機(jī)項(xiàng)目教學(xué)研究及實(shí)踐[J]. 電氣電子教學(xué)學(xué)報(bào), 2009, 31(5): 82-84.
1、計(jì)算機(jī)的數(shù)據(jù)表示和數(shù)據(jù)運(yùn)算
2、計(jì)算機(jī)的各種編碼
3、計(jì)算機(jī)的組成及工作過(guò)程
二、考核要求:
1、識(shí)記計(jì)算機(jī)的各種編碼
2、領(lǐng)會(huì)計(jì)算機(jī)的組成及工作過(guò)程
3、簡(jiǎn)明應(yīng)用計(jì)算機(jī)的數(shù)據(jù)表示和數(shù)據(jù)運(yùn)算
第二章51單片機(jī)的硬件結(jié)構(gòu)和原理
一、考核知識(shí)點(diǎn):
1、單片機(jī)的發(fā)展史及各方面的應(yīng)用
2、51單片機(jī)的分類(lèi)和內(nèi)部結(jié)構(gòu)
3、單片機(jī)的引腳和功能
4、單片機(jī)工作的時(shí)序
二、考核要求:
1、識(shí)記單片機(jī)的發(fā)展史及各方面的應(yīng)用
2、識(shí)記單片機(jī)的引腳和功能
3、領(lǐng)會(huì)單片機(jī)工作的時(shí)序
4、簡(jiǎn)明應(yīng)用51單片機(jī)的分類(lèi)和內(nèi)部結(jié)構(gòu)
第三章51單片機(jī)指令系統(tǒng)
一、考核知識(shí)點(diǎn):
1、單片機(jī)的尋址方式
2、單片機(jī)的指令系統(tǒng)
3、助記符指令和二進(jìn)制代碼指令的異同
二、考核要求:
1、領(lǐng)會(huì)助記符指令和二進(jìn)制代碼指令的異同
2、綜合應(yīng)用單片機(jī)的尋址方式
3、綜合應(yīng)用單片機(jī)的指令系統(tǒng)
第四章匯編語(yǔ)言程序設(shè)計(jì)
一、考核知識(shí)點(diǎn):
1、偽指令
2、匯編語(yǔ)言設(shè)計(jì)技巧
3、匯編語(yǔ)言到機(jī)器語(yǔ)言的編譯過(guò)程
二、考核要求:
1、領(lǐng)會(huì)偽指令
2、簡(jiǎn)明應(yīng)用匯編語(yǔ)言設(shè)計(jì)技巧
3、綜合應(yīng)用匯編語(yǔ)言到機(jī)器語(yǔ)言的編譯過(guò)程
第五章51單片機(jī)的中斷系統(tǒng)
一、考核知識(shí)點(diǎn):
1、中斷基本概念
2、中斷系統(tǒng)的程序編制
3、中斷系統(tǒng)的初步應(yīng)用
二、考核要求:
1、領(lǐng)會(huì)中斷基本概念
2、簡(jiǎn)明應(yīng)用中斷系統(tǒng)解決工程問(wèn)題
3、綜合簡(jiǎn)明應(yīng)用中斷系統(tǒng)的程序編制
第六章51單片機(jī)的內(nèi)部定時(shí)器/計(jì)數(shù)器及串行接口
一、考核知識(shí)點(diǎn):
1、單片機(jī)內(nèi)部定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)及工作原理
2、定時(shí)器/計(jì)數(shù)器的程序編制
3、定時(shí)器/計(jì)數(shù)器的初步應(yīng)用
4、串行口的基本概念
5、串行口的程序編制
6、串行口的初步應(yīng)用
二、考核要求:
1、識(shí)記串行口的基本概念
2、領(lǐng)會(huì)單片機(jī)內(nèi)部定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)及工作原理
3、簡(jiǎn)明應(yīng)用定時(shí)器/計(jì)數(shù)器解決工程問(wèn)題
4、簡(jiǎn)明應(yīng)用串行口的程序編制
5、簡(jiǎn)明應(yīng)用串行口解決工程問(wèn)題
6、綜合應(yīng)用定時(shí)器/計(jì)數(shù)器的程序編制
第七章單片機(jī)的系統(tǒng)擴(kuò)展與接口技術(shù)
一、考核知識(shí)點(diǎn):
1、單片機(jī)外部總線的擴(kuò)展
2、外部存儲(chǔ)器的擴(kuò)展
3、I/O接口的擴(kuò)展
4、管理功能部件的擴(kuò)展
5、A/D和D/A接口功能的擴(kuò)展
二、考核要求:
1、識(shí)記單片機(jī)外部總線的擴(kuò)展
2、識(shí)記管理功能部件的擴(kuò)展
3、簡(jiǎn)明應(yīng)用A/D和D/A接口功能的擴(kuò)展
4、綜合應(yīng)用外部存儲(chǔ)器的擴(kuò)展
5、綜合應(yīng)用I/O接口的擴(kuò)展
第八章單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)
一、考核知識(shí)點(diǎn):
1、單片機(jī)應(yīng)用系統(tǒng)的開(kāi)發(fā)過(guò)程
2、單片機(jī)開(kāi)發(fā)工具的分類(lèi)和使用
3、單片機(jī)應(yīng)用系統(tǒng)的軟件和硬件調(diào)試過(guò)程
二、考核要求:
1、識(shí)記單片機(jī)應(yīng)用系統(tǒng)的軟件和硬件調(diào)試過(guò)程
2、領(lǐng)會(huì)單片機(jī)應(yīng)用系統(tǒng)的開(kāi)發(fā)過(guò)程
3、領(lǐng)會(huì)單片機(jī)開(kāi)發(fā)工具的分類(lèi)和使用
第九章單片機(jī)系統(tǒng)的抗干擾技術(shù)
一、考核知識(shí)點(diǎn):
1、單片機(jī)干擾源與分類(lèi)
2、干擾對(duì)單片機(jī)系統(tǒng)的影響
3、硬件抗干擾技術(shù)
4、軟件抗干擾技術(shù)
5、數(shù)字濾波
二、考核要求:
1、識(shí)記單片機(jī)干擾源與分類(lèi)
2、識(shí)記干擾對(duì)單片機(jī)系統(tǒng)的影響
3、識(shí)記數(shù)字濾波
4、簡(jiǎn)明應(yīng)用硬件抗干擾技術(shù)
5、簡(jiǎn)明應(yīng)用軟件抗干擾技術(shù)
第十章其它單片機(jī)簡(jiǎn)介
一、考核知識(shí)點(diǎn):
1、AT89C系列單片機(jī)的特點(diǎn)與性能
2、其它8位單片機(jī)的特點(diǎn)與性能
3、16位、32位單片機(jī)的特點(diǎn)與性能
二、考核要求:
1、識(shí)記其它8位單片機(jī)的特點(diǎn)與性能
2、識(shí)記16位、32位單片機(jī)的特點(diǎn)與性能
3、領(lǐng)會(huì)AT89C系列單片機(jī)的特點(diǎn)與性能
《單片機(jī)原理及應(yīng)用技術(shù)》考試大綱
《單片機(jī)原理及應(yīng)用技術(shù)》課程是一門(mén)面向應(yīng)用的專(zhuān)業(yè)技術(shù)課。單片機(jī)原理與應(yīng)用介紹了單片機(jī)的基本知識(shí)和單片機(jī)技術(shù)的應(yīng)用,其內(nèi)容與工程實(shí)際緊密聯(lián)系,實(shí)用性很強(qiáng),是一門(mén)在理論指導(dǎo)下,偏重于實(shí)際應(yīng)用的課程。本課程具有實(shí)用性強(qiáng)、理論和實(shí)踐結(jié)合、軟硬件結(jié)合等特點(diǎn)。本課程圍繞使用較為廣泛的MCS-51系列單片機(jī)進(jìn)行學(xué)習(xí)。本課程已成為理、工科電子類(lèi)專(zhuān)業(yè)的一門(mén)基礎(chǔ)課程,這是從電子系統(tǒng)設(shè)計(jì)角度考慮的,它體現(xiàn)了電子系統(tǒng)設(shè)計(jì)的方法和硬件結(jié)構(gòu)的變化。通過(guò)該課程的學(xué)習(xí),要求學(xué)生掌握80C51單片機(jī)的工作原理、編程技術(shù),掌握單片機(jī)應(yīng)用系統(tǒng)的擴(kuò)展方法和實(shí)際應(yīng)用。因此,以單片機(jī)為內(nèi)核,分析和設(shè)計(jì)一個(gè)簡(jiǎn)單的計(jì)算機(jī)應(yīng)用系統(tǒng)是我們學(xué)習(xí)本課程要達(dá)到的目的。
第一部分考試大綱
1單片機(jī)概述
本章為單片機(jī)的基本概念。
1.掌握有關(guān)單片機(jī)的基本概念、單片機(jī)的特點(diǎn)、單片機(jī)的應(yīng)用。
2.理解單片機(jī)的總體組成。
3.了解單片微型計(jì)算機(jī)的產(chǎn)生、發(fā)展歷史、主要品種及系列。
2單片機(jī)結(jié)構(gòu)和原理
本章以80C51單片機(jī)為例介紹了主要硬件結(jié)構(gòu)和主要功能,著重掌握系統(tǒng)所提供的資源特性及其功能特性。
1.掌握80C51的內(nèi)部結(jié)構(gòu)。
2.掌握80C51單片機(jī)的存儲(chǔ)器組成。
3.掌握單片機(jī)并行輸入/輸出端口結(jié)構(gòu)及功能。
4.了解單片機(jī)的時(shí)序概念和復(fù)位工作方式。
5.掌握單片機(jī)引腳功能
3指令系統(tǒng)
1.掌握指令與偽指令的正確格式。
2.掌握七種尋址方式的使用及尋址方式的含義。
3.掌握
五類(lèi)指令的功能和使用,特別是傳送指令。
4.理解書(shū)中所列例題與習(xí)題。
4匯編語(yǔ)言程序設(shè)計(jì)舉例
本章為MCS-51的一些常用偽指令,介紹順序結(jié)構(gòu)程序設(shè)計(jì)、分支結(jié)構(gòu)程序設(shè)計(jì)、循環(huán)結(jié)構(gòu)程序設(shè)計(jì)和子程序的設(shè)計(jì)。
1.程序設(shè)計(jì)的基本步驟、各種基本的結(jié)構(gòu)化程序設(shè)計(jì)方法;讀懂較復(fù)雜的常用程序。
2.掌握數(shù)據(jù)傳送指令的編寫(xiě)。
3.理解算術(shù)運(yùn)算程序設(shè)計(jì)。
4.理解數(shù)碼轉(zhuǎn)換程序設(shè)計(jì)。
5.理解查表程序設(shè)計(jì)。
6.理解子程序設(shè)計(jì)和參數(shù)傳遞。
7.理解邏輯運(yùn)算程序設(shè)計(jì)
5中斷系統(tǒng)
1.掌握有關(guān)中斷、中斷源、中斷優(yōu)先級(jí)等概念。
2.掌握中斷響應(yīng)過(guò)程。
3.掌握中斷優(yōu)先級(jí)排列。
4.掌握中斷允許寄存器IE、中斷優(yōu)先級(jí)寄存器IP各位的含義及設(shè)置。
5.掌握外部中斷的兩種觸發(fā)方式:電平觸發(fā)、邊沿觸發(fā)。
6定時(shí)/計(jì)數(shù)器
1.掌握定時(shí)器/計(jì)數(shù)器的四種工作方式及有何不同。
2.掌握TMOD和TCON中各位的含義、作用。
4.掌握不同工作方式計(jì)數(shù)初值與定時(shí)時(shí)間的關(guān)系,即能根據(jù)定時(shí)時(shí)間算出計(jì)數(shù)初值,完成定時(shí)器的初始化編程和簡(jiǎn)單應(yīng)用編程。
7串行通信
1.理解有關(guān)通信、協(xié)議的概念。
2.理解串行口的四種工作方式。
3.掌握SBUF的含義及作用。
4.了解串行口的工作原理。
5.了解SCON中每一位的含義及SMOD位的作用。
6.掌握串行通信總線RS-232C標(biāo)準(zhǔn)、RS-232C電平轉(zhuǎn)換。
7.了解RS-232C與MCS-51的接口。
8系統(tǒng)擴(kuò)展技術(shù)
1.掌握總線、驅(qū)動(dòng)、鎖存和譯碼、地址重疊的概念。
2.掌握程序存儲(chǔ)器的擴(kuò)展:EPROM程序存儲(chǔ)器及其擴(kuò)展方法。
3.掌握數(shù)據(jù)存儲(chǔ)器的擴(kuò)展:靜態(tài)存儲(chǔ)器SRAM及其擴(kuò)展方法。
4.掌握簡(jiǎn)單I/O口的擴(kuò)展。
5.掌握8255A可編程并行接口:結(jié)構(gòu)、控制字、工作方式、與8255A的接口方法。
9A/D和D/A轉(zhuǎn)換器接口技術(shù)
1.掌握DAC0832與單片機(jī)的接口方法與編程。
2.掌握ADC0809與單片機(jī)的接口方法與編程。
10鍵盤(pán)/顯示接口技術(shù)
1.掌握LED顯示器結(jié)構(gòu)、工作原理和顯示方式。
2.掌握鍵盤(pán)接口原理。
3.理解LED顯示器與80C51單片機(jī)接口。
4.理解鍵輸入程序設(shè)計(jì)方法。
5.了解行列式鍵盤(pán)與80C51單片機(jī)接口。
11、功率接口技術(shù)
1.掌握簡(jiǎn)單開(kāi)關(guān)量接口、光電耦合接口和繼電器接口。
2.晶閘管與故態(tài)繼電器的應(yīng)用接口。
12、單片機(jī)系統(tǒng)設(shè)計(jì)技術(shù)
掌握單片機(jī)系統(tǒng)的設(shè)計(jì)、開(kāi)發(fā)、調(diào)試的原則、步驟及方法。
13、實(shí)用舉例
了解一兩個(gè)典型的單片機(jī)開(kāi)發(fā)應(yīng)用系統(tǒng)的設(shè)計(jì)思想和實(shí)現(xiàn)方法。
14、新型單片機(jī)介紹
了解MCS-51常見(jiàn)8位單片機(jī)。
第二部分考試考核改革方案
一、考試考核要求
《單片機(jī)技術(shù)及應(yīng)用》選擇具有代表性的、使用較為廣泛的MCS-51系列單片機(jī)進(jìn)行學(xué)習(xí)(具體以80C51為例),介紹了80C51單片機(jī)的硬件組成、軟件編程及一般應(yīng)用系統(tǒng)組成。通過(guò)本課程的學(xué)習(xí),要求掌握80C51單片機(jī)的系統(tǒng)結(jié)構(gòu)、指令系統(tǒng)、程序設(shè)計(jì)方法、系統(tǒng)擴(kuò)展方法、單片機(jī)常用接口等應(yīng)用技術(shù)。本課程的教學(xué)過(guò)程由面授輔導(dǎo)、自學(xué)、實(shí)驗(yàn)及作業(yè)四個(gè)環(huán)節(jié)組成,因此本課程考試考核要求為:
1.作業(yè)、實(shí)驗(yàn)成績(jī)與期末考試成績(jī)共同評(píng)定為課程總成績(jī)。
2.作業(yè)、實(shí)驗(yàn)占課程總分的60,期末理論考試占總分的40。
為使學(xué)生不把注意力僅僅放在期末考試上,培養(yǎng)學(xué)生系統(tǒng)學(xué)習(xí)的能力,加強(qiáng)學(xué)生各方面能力的培養(yǎng),平時(shí)、實(shí)驗(yàn)課、作業(yè)、考試都納入本課程的成績(jī)?cè)u(píng)定。平時(shí)的成績(jī)包括出勤、課堂提問(wèn)和隨堂測(cè)試。期末考試可以選擇筆試、口試和進(jìn)行實(shí)際實(shí)驗(yàn)、設(shè)計(jì)等多種形式。
二、平時(shí)成績(jī)考核要求及說(shuō)明
1.每章作業(yè)按要求完成后交教師批改,完成作業(yè)80為12分(及格);所有作業(yè)均完成,且質(zhì)量較好者,20分(滿分)。中間情況酌情給分。
2.每次實(shí)驗(yàn)均能按照教師安排進(jìn)行,實(shí)驗(yàn)態(tài)度好,至少完成5個(gè)實(shí)驗(yàn)且實(shí)驗(yàn)報(bào)告完整,為18分(及格);能基本獨(dú)立完成6個(gè)或以上實(shí)驗(yàn),實(shí)驗(yàn)報(bào)告完整、無(wú)誤,實(shí)驗(yàn)質(zhì)量高,30分(滿分)。中間情況酌情給分。如果實(shí)驗(yàn)有創(chuàng)新的特點(diǎn),酌情加分。
3.作業(yè)與實(shí)驗(yàn)的平均分為平時(shí)成績(jī),滿分50分。
4.課程設(shè)計(jì)單獨(dú)計(jì)算成績(jī),考評(píng)方法見(jiàn)其大綱。
三、理論考試說(shuō)明
1.單片機(jī)技術(shù)及應(yīng)用理論考試,采用閉卷筆試形式,考試時(shí)間120分鐘。
2.期末考試試題根據(jù)教學(xué)大綱,其范圍和難度按照本方案中制訂的考試考核內(nèi)容和要求確定。考試命題覆蓋考試大綱要求范圍。
3.期末考試試題類(lèi)型有以下幾種:
①填空題;
②選擇題;
③判斷題;
④簡(jiǎn)答題
⑤綜合應(yīng)用題。
四、考試考核要求層次
按照教學(xué)大綱的要求,理論考試要求分為掌握、理解和了解三個(gè)層次。
掌握:
對(duì)于本課程的重點(diǎn)內(nèi)容要求學(xué)生達(dá)到掌握的程度。即能夠全面、深入理解和熟練掌握所學(xué)內(nèi)容,并能夠用其分析、初步設(shè)計(jì)和解答與應(yīng)用相關(guān)的問(wèn)題,能夠舉一反三。要求學(xué)生掌握的內(nèi)容也就是考試的主要內(nèi)容,在考試中所占比例約70。
理解:
對(duì)于本課程的一般內(nèi)容要求學(xué)生能夠理解。即要求學(xué)生能夠較好地理解所學(xué)內(nèi)容,并且對(duì)所涉及的內(nèi)容能夠進(jìn)行簡(jiǎn)單分析和判斷。要求學(xué)生理解的內(nèi)容也是考試的內(nèi)容,在考試中所占比例約25。
了解:
對(duì)于本課程的次要內(nèi)容要求學(xué)生能夠了解。要求學(xué)生了解的內(nèi)容,一般是指在眼下不必進(jìn)一步深入和擴(kuò)展,有些也許需要學(xué)生自己今后在工作中進(jìn)行深入研究。對(duì)要求了解的內(nèi)容,在考試中占較小比例,不超過(guò)5。
實(shí)驗(yàn)五:按鍵電路、顯示電路實(shí)驗(yàn)
一、實(shí)驗(yàn)?zāi)康模?/p>
1.掌握獨(dú)立式按鍵電路與矩陣式按鍵電路的設(shè)計(jì)方法。
2.掌握數(shù)碼管顯示電路的工作原理
3.掌握源程序編輯軟件UltraEdit,編譯軟件KeilC51、仿真軟件Proteus的使用方法
4.掌握硬件仿真器ME-52A的使用方法
二、實(shí)驗(yàn)器材:
1.單片機(jī)實(shí)驗(yàn)板
2.單片機(jī)硬件仿真器ME-51A
3.計(jì)算機(jī)
4.電源
三、實(shí)驗(yàn)要求:
1.電路如圖5所示,用單片機(jī)的P3口所接的四個(gè)獨(dú)立式按鍵控制p1口流水燈花樣的方法;具體表現(xiàn)為:p3.0、P3.1、P3.2、P3.3四個(gè)小按鍵分別實(shí)現(xiàn)了四個(gè)控制:
(1)跑燈:即P1.0---1.7亮點(diǎn)流動(dòng):
(2)流水燈:即P1.0-1.7依次點(diǎn)
亮(3)交叉閃爍:即P0.0,P0.2,P0.4,P0.6和P0.1,P0.3,P0.5,P0.7輪流點(diǎn)亮
(4)停止;在任何狀態(tài)下按此鍵程序停止運(yùn)行.
2.電路如圖6所示,用P2口所接的4×4矩陣式鍵盤(pán)作為輸入,在P1口所接的數(shù)碼管上顯示出每個(gè)按鍵的0~F序號(hào),鍵盤(pán)的布局如下表所示:
F
E
D
C
B
A
9
8
7
6
5
4
3
2
1
四、實(shí)驗(yàn)原理:
1.獨(dú)立式按鍵電路顯示如圖5所示,從圖中可看出,判斷有無(wú)鍵按下,只要檢測(cè)P3.0~P3.3相應(yīng)端口的高低電平即可,若檢測(cè)有某一端口為低電平,表明該端口有按鍵按下,經(jīng)延時(shí)消抖后轉(zhuǎn)去執(zhí)行相應(yīng)的功能子程序。若為高電平,表明無(wú)鍵按1.獨(dú)立式按鍵電路如圖5所示,下,繼續(xù)檢測(cè)。
示例程序如下:
ORG000H
LJMPSTAR1
ORG0030H
STAR1:MOVP3,#0FFH;置P3口為輸入態(tài)
JNBP3.0,FUN0;判別P3.0是否有鍵按下,是,則轉(zhuǎn)FUN0
JNBP3.1,FUN1;判別P3.1是否有鍵按下,是,則轉(zhuǎn)FUN1
JNBP3.2,FUN2;判別P3.2是否有鍵按下,是,則轉(zhuǎn)FUN2
JNBP3.3,FUN3;判別P3.3是否有鍵按下,是,則轉(zhuǎn)FUN3
JNBF0,STAR1;曾經(jīng)有鍵按下F0置1
RET
圖5
FUN0:LCALLDL10MS;消岸抖動(dòng)
JBP3.0,STAR1
WAITL0:JNBP3.0,WAITL0;等待鍵釋放
SETBF0
FUN01:LCALLFUN00
LCALLSTAR1
LJMPFUN01
FUN1:LCALLDL10MS;消岸抖動(dòng)
JBP3.1,STAR1
WAITL1:JNBP3.1,WAITL1;等待鍵釋放
SETBF0
FUN10:LCALLFUN11
LCALLSTAR1
LJMPFUN10
FUN2:LCALLDL10MS;消岸抖動(dòng)
JBP3.2,STAR1
WAITL2:JNBP3.2,WAITL2;等待鍵釋放
SETBF0
FUN20:LCALLFUN22
LCALLSTAR1
LJMPFUN20
FUN3:LCALLDL10MS;消岸抖動(dòng)
JBP3.3,STAR1
WAITL3:JNBP3.3,WAITL3;等待鍵釋放
CLRF0
MOVP1,#0FFH;關(guān)顯示
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;交叉點(diǎn)亮子程序
MOVP1,A
LCALLDL30S
CPLA
MOVP1,A
LCALLDL30S
RET
;____________;
;延時(shí)程序;
;____________;
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所示。采用掃描方式進(jìn)行按鍵的識(shí)別檢測(cè),并將對(duì)應(yīng)按鍵的鍵號(hào)用查表指令將對(duì)應(yīng)的代碼顯示在數(shù)碼管上。
圖6
參考程序如下:
ORG0000H
LJMPSTART
ORG0030H
START:MOVSP,#60H;設(shè)置堆棧指針
SCAN:MOVR3,#0F7H;置行掃描初值
MOVR1,#00H;到TABLE表中取碼的指針
SCAN1:MOVA,R3
MOVP2,A;掃描輸出
MOVA,P2;重讀P2口狀態(tài)
MOVR4,A;暫存于R4呂中
SETBC;C=1
MOVR5,#03H;掃描4列初值
L1:RLCA;A中內(nèi)容循環(huán)左移
JNCKEYIN;C=0,有鍵按下,轉(zhuǎn)消抖
INCR1;取碼指針加1
DJNZR5,L1;無(wú)鍵按下,繼續(xù)檢測(cè)
MOVA,R3;掃描下一行
SETBC
RRCA
MOVR3,A
JCSCAN1;4行是否掃描完,未完,繼續(xù)
LJMPSCAN
KEYIN:MOVR7,#10;削除抖動(dòng)
D2:MOVR6,#248
DJNZR6,$
DJNZR7,D2
D3:MOVA,P2;按鍵放開(kāi)否?
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
五、實(shí)驗(yàn)步驟:
1.運(yùn)行UltraEdit-32源程序編輯軟件,輸入、編輯匯編語(yǔ)言源程序。
2.運(yùn)行KeiluVision2源程序編譯軟件,對(duì)源程序進(jìn)行編譯,得到目標(biāo)代碼文件。
3.運(yùn)行Proteus模擬仿真軟件,打開(kāi)已繪制好的仿真電路原理圖,進(jìn)行模擬仿真。
4.把硬件仿真器ME-52A與單片實(shí)驗(yàn)板連接好,再用硬件仿真器進(jìn)行仿真驗(yàn)證。
六、實(shí)驗(yàn)分析與總結(jié)
1.用仿真系統(tǒng)調(diào)試簡(jiǎn)單程序結(jié)構(gòu)、分支程序結(jié)構(gòu)、循環(huán)程序結(jié)構(gòu)、子程序結(jié)構(gòu)和中斷結(jié)構(gòu)的關(guān)鍵在于,如何將對(duì)程序的分析理解和開(kāi)發(fā)系統(tǒng)提供的基本功能有機(jī)地結(jié)合起來(lái),其前提條件是必須對(duì)源程序的作用、結(jié)構(gòu)特點(diǎn)、運(yùn)行過(guò)程與結(jié)果有較全面的認(rèn)識(shí),并能根據(jù)程序運(yùn)行過(guò)程中出現(xiàn)的現(xiàn)象和結(jié)果分析并判斷產(chǎn)生各種故障現(xiàn)象的原因,再運(yùn)用排除法逐一檢驗(yàn)各種判斷是否準(zhǔn)確。
2.掌握程序結(jié)構(gòu)特點(diǎn)的基礎(chǔ)上,合理選擇觀測(cè)點(diǎn),通過(guò)觀察在觀測(cè)點(diǎn)處參數(shù)及路徑的變化檢驗(yàn)程序運(yùn)行的結(jié)果。
3.高調(diào)試程序的效率,應(yīng)對(duì)單片機(jī)開(kāi)發(fā)系統(tǒng)所提供的幾種程序運(yùn)行調(diào)試方式有
足夠的了解并能熟練地運(yùn)用。例如,在調(diào)試過(guò)程中,若要觀察最終結(jié)果,則可選擇全速運(yùn)行調(diào)試;若要觀察相關(guān)指令的運(yùn)行結(jié)果或運(yùn)行路徑的變化過(guò)程,則可選擇單步運(yùn)行;若要檢查子程序的運(yùn)行過(guò)程,則可選擇跟蹤運(yùn)行調(diào)試;若要檢查循環(huán)程序或中斷服務(wù)程序,則可選擇斷點(diǎn)運(yùn)行調(diào)試;若要定點(diǎn)檢查程序運(yùn)行到某處的結(jié)果時(shí),則可選擇快速運(yùn)行到光標(biāo)處調(diào)試。但實(shí)際中究竟選用哪種方法更適宜或哪幾種方法結(jié)合使用更快捷,將隨著分析能力與操作的熟練程度逐步提高。4.程序運(yùn)行結(jié)果是否正確時(shí),應(yīng)運(yùn)用單片機(jī)開(kāi)發(fā)系統(tǒng)所提供的交互界面,將程序運(yùn)行過(guò)程中程序計(jì)數(shù)器PC(地址)的變化、各單元(內(nèi)部RAM和外部RAM)內(nèi)容的變化、特殊功能寄存器內(nèi)容的變化、堆棧指針SP內(nèi)容的變化與程序的理論分析結(jié)果相對(duì)照。
5.程序和調(diào)試程序時(shí),需要多次反復(fù)的過(guò)程,并非一次就能排除全部故障,特別是單片機(jī)應(yīng)用系統(tǒng)的硬件電路和匯編程序相結(jié)合的綜合調(diào)試就更加復(fù)雜,因此,必須通過(guò)反復(fù)調(diào)試,不斷修改硬件和軟件,直到最終符合設(shè)計(jì)要求為止。如果在調(diào)試中能夠根據(jù)實(shí)驗(yàn)現(xiàn)象預(yù)先對(duì)產(chǎn)生故障的原因加以判斷和分析,并制定出相應(yīng)的調(diào)試方法和步驟,可縮小排除故障的范圍,提高調(diào)試效率。
七、思考與練習(xí)
填空題
1、設(shè)X=5AH,Y=36H,則X與Y“或”運(yùn)算為_(kāi)_7EH_______,X與Y的“異或”運(yùn)算為_(kāi)__6CH_____。
2、若機(jī)器的字長(zhǎng)為8位,X=17,Y=35,則X+Y=__110100_____,X-Y=_11101110______(要求結(jié)果寫(xiě)出二進(jìn)制形式)。
3、單片機(jī)的復(fù)位操作是____高電平______(高電平/低電平),單片機(jī)復(fù)位后,堆棧指針SP的值是___07h_____。
4、單片機(jī)中,常用作地址鎖存器的芯片是__74HC373____________,常用作地址譯碼器芯片是_____74HC138____________。
5、若選擇內(nèi)部程序存儲(chǔ)器,應(yīng)該設(shè)置為_(kāi)____高_(dá)______(高電平/低電平),那么,PSEN信號(hào)的處理方式為_(kāi)__不用__________________。
6、單片機(jī)程序的入口地址是____0000H__________,外部中斷1的入口地址是______0013H_________。
7、若采用6MHz的晶體振蕩器,則MCS-51單片機(jī)的振蕩周期為_(kāi)_0.5us_______,機(jī)器周期為_(kāi)____2us__________。
8、擴(kuò)展芯片的選擇方法有兩種,它們分別是___線選法_______________和_____譯碼法__________。
9、單片機(jī)的內(nèi)部RAM區(qū)中,可以位尋址的地址范圍是____20H~2FH______________,特殊功能寄存器中,可位尋址的地址是___是能被8整除的地址_________________。
10、子程序返回指令是___ret______,中斷子程序返回指令是__reti。
11、8051單片機(jī)的存儲(chǔ)器的最大特點(diǎn)是內(nèi)部RAM與外部RAM分開(kāi)編址。
12、8051最多可以有32個(gè)并行輸入輸出口,最少也可以有8個(gè)并行口。
13、函數(shù)是C語(yǔ)言的基本單位。
14、串行口方式2接收到的第9位數(shù)據(jù)送SCON寄存器的RB8位中保存。
15、MCS-51內(nèi)部提供3個(gè)可編程的16位定時(shí)/計(jì)數(shù)器,定時(shí)器有4種工作方式。
16、一個(gè)函數(shù)由兩部分組成,即說(shuō)明部分和語(yǔ)句部分。
17、串行口方式3發(fā)送的第9位數(shù)據(jù)要事先寫(xiě)入SCON寄存器的TB8位。
18、利用8155H可以擴(kuò)展3個(gè)并行口,256個(gè)RAM單元。
19、C語(yǔ)言中輸入和輸出操作是由庫(kù)函數(shù)scanf和printf等函數(shù)來(lái)完成。
二、選擇題
1、C語(yǔ)言中最簡(jiǎn)單的數(shù)據(jù)類(lèi)型包括(B)。
A、整型、實(shí)型、邏輯型B、整型、實(shí)型、字符型
C、整型、字符型、邏輯型D、整型、實(shí)型、邏輯型、字符型
2、當(dāng)MCS-51單片機(jī)接有外部存儲(chǔ)器,P2口可作為(C)。
A、數(shù)據(jù)輸入口B、數(shù)據(jù)的輸出口
C、準(zhǔn)雙向輸入/輸出口D、輸出高8位地址
3、下列描述中正確的是(D)。
A、程序就是軟件B、軟件開(kāi)發(fā)不受計(jì)算機(jī)系統(tǒng)的限制
C、軟件既是邏輯實(shí)體,又是物理實(shí)體D、軟件是程序、數(shù)據(jù)與相關(guān)文檔的集合
4、下列計(jì)算機(jī)語(yǔ)言中,CPU能直接識(shí)別的是(D)。
A、自然語(yǔ)言B、高級(jí)語(yǔ)言C、匯編語(yǔ)言D、機(jī)器語(yǔ)言
5、MCS-5l單片機(jī)的堆棧區(qū)是設(shè)置在(C)中。
A、片內(nèi)ROM區(qū)B、片外ROM區(qū)C、片內(nèi)RAM區(qū)D、片外RAM區(qū)
6、以下敘述中正確的是(C)。
A、用C語(yǔ)言實(shí)現(xiàn)的算法必須要有輸入和輸出操作
B、用C語(yǔ)言實(shí)現(xiàn)的算法可以沒(méi)有輸出但必須要有輸入
C、用C程序?qū)崿F(xiàn)的算法可以沒(méi)有輸入但必須要有輸出
D、用C程序?qū)崿F(xiàn)的算法可以既沒(méi)有輸入也沒(méi)有輸出
7、定時(shí)器/計(jì)數(shù)器工作方式1是(D)。
A、8位計(jì)數(shù)器結(jié)構(gòu)B、2個(gè)8位計(jì)數(shù)器結(jié)構(gòu)
C、13位計(jì)數(shù)結(jié)構(gòu)D、16位計(jì)數(shù)結(jié)構(gòu)
8、C語(yǔ)言提供的合法的數(shù)據(jù)類(lèi)型關(guān)鍵字是(B)。
A、DoubleB、shortC、integerD、Char
9、片內(nèi)RAM的20H~2FH為位尋址區(qū),所包含的位地址是(B)。
A、00H~20HB、00H~7FHC、20H~2FHD、00H~FFH
10、以下能正確定義一維數(shù)組的選項(xiàng)是(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、數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)是指(D)。
A、存儲(chǔ)在外存中的數(shù)據(jù)B、數(shù)據(jù)所占的存儲(chǔ)空間量
C、數(shù)據(jù)在計(jì)算機(jī)中的順序存儲(chǔ)方式D、數(shù)據(jù)的邏輯結(jié)構(gòu)在計(jì)算機(jī)中的表示
12、下列關(guān)于棧的描述中錯(cuò)誤的是(C)。
A、棧是先進(jìn)后出的先性表B、棧只能順序存儲(chǔ)
C、棧具有記憶作用D、對(duì)棧的插入和刪除操作中,不需要改變棧底指針
13、在寄存器間接尋址方式中,間址寄存器中存放的數(shù)據(jù)是(B)。
A、參與操作的數(shù)據(jù)B、操作數(shù)的地址值
C、程序的轉(zhuǎn)換地址D、指令的操作碼
14、MCS-51單片機(jī)的復(fù)位信號(hào)是(A)有效。
A、高電平B、低電平C、脈沖D、下降沿
15、為了使模塊盡可能獨(dú)立,要求(B)。
A、模塊的內(nèi)聚程度要盡量高,且各模塊間的耦合程度要盡量強(qiáng)
B、模塊的內(nèi)聚程度要盡量高,且各模塊間的耦合程度要盡量弱
C、模塊的內(nèi)聚程度要盡量低,且各模塊間的耦合程度要盡量弱
D、模塊的內(nèi)聚程度要盡量低,且各模塊間的耦合程度要盡量強(qiáng)
16、若MCS-51單片機(jī)使用晶振頻率為6MHz時(shí),其復(fù)位持續(xù)時(shí)間應(yīng)該超過(guò)(B)。
A、2μsB、4μsC、8μsD、1ms
17、以下選項(xiàng)中可作為C語(yǔ)言合法常量的是(A)
A、-80B、-080C、-8e1.0D、-80.0e
18、能夠用紫外光擦除ROM中程序的只讀存儲(chǔ)器稱(chēng)為(C)。
A、掩膜ROMB、PROMC、EPROMD、EEPROM
19、以下不能定義為用戶標(biāo)識(shí)符是(D)。
A、MainB、_0C、_intD、sizeof
20、下選項(xiàng)中,不能作為合法常量的是(B)。//冪不能為小數(shù)
A、1.234e04B、1.234e0.4C、1.234e 4D、1.234e0
21、以下敘述中錯(cuò)誤的是(C)
A、對(duì)于double類(lèi)型數(shù)組,不可以直接用數(shù)組名對(duì)數(shù)組進(jìn)行整體輸入或輸出
B、數(shù)組名代表的是數(shù)組所占存儲(chǔ)區(qū)的首地址,其值不可改變
C、當(dāng)程序執(zhí)行中,數(shù)組元素的下標(biāo)超出所定義的下標(biāo)范圍時(shí),系統(tǒng)將給出“下標(biāo)越界”的出錯(cuò)信息
D、可以通過(guò)賦初值的方式確定數(shù)組元素的個(gè)數(shù)
22、以下與函數(shù)fseek(fp,0L,SEEK_SET)有相同作用的是(D)
A、feof(f
p)B、ftell(fp)C、fgetc(fp)D、rewind(fp)
23、存儲(chǔ)16×16點(diǎn)陣的一個(gè)漢字信息,需要的字節(jié)數(shù)為(A)
A、32B、64C、128D、256
24、已知1只共陰極LED顯示器,其中a筆段為字形代碼的最低位,若需顯示數(shù)字1,則它的字形代碼應(yīng)為(B)。
A、06HB、F9HC、30HD、CFH
25、在C語(yǔ)言中,合法的長(zhǎng)整型常數(shù)是(A)
A、OLB、4962710C、324562&D、216D
26、以下選項(xiàng)中合法的字符常量是(B)
A、"B"B、’\010’C、68D、D
27、若PSW.4=0,PSW.3=1,要想把寄存器R0的內(nèi)容入棧,應(yīng)使用(D)指令。
A、PUSHR0B、PUSH@R0C、PUSH00HD、PUSH08H
28、在片外擴(kuò)展一片2764程序存儲(chǔ)器芯片要(B)地址線。
A、8根B、13根C、16根D、20根
29、設(shè)MCS-51單片機(jī)晶振頻率為12MHz,定時(shí)器作計(jì)數(shù)器使用時(shí),其最高的輸入計(jì)數(shù)頻率應(yīng)為(C)
A、2MHzB、1MHzC、500kHzD、250kHz
30、下列數(shù)據(jù)字定義的數(shù)表中,(A)是錯(cuò)誤的。
A、DW“AA”B、DW“A”C、DW“OABC”D、DWOABCH
三、判斷題
(√)1、在對(duì)某一函數(shù)進(jìn)行多次調(diào)用時(shí),系統(tǒng)會(huì)對(duì)相應(yīng)的自動(dòng)變量重新分配存儲(chǔ)單元。
(×)2、在C語(yǔ)言的復(fù)合語(yǔ)句中,只能包含可執(zhí)行語(yǔ)句。
(√)3、自動(dòng)變量屬于局部變量。
(×)4、Continue和break都可用來(lái)實(shí)現(xiàn)循環(huán)體的中止。
(√)5、字符常量的長(zhǎng)度肯定為1。
(×)6、在MCS-51系統(tǒng)中,一個(gè)機(jī)器周期等于1.5μs。
(√)7、C語(yǔ)言允許在復(fù)合語(yǔ)句內(nèi)定義自動(dòng)變量。
(√)8、若一個(gè)函數(shù)的返回類(lèi)型為void,則表示其沒(méi)有返回值。
(×)9、所有定義在主函數(shù)之前的函數(shù)無(wú)需進(jìn)行聲明。
(×)10、定時(shí)器與計(jì)數(shù)器的工作原理均是對(duì)輸入脈沖進(jìn)行計(jì)數(shù)。
(×)11、END表示指令執(zhí)行到此結(jié)束。
(√)12、ADC0809是8位逐次逼近式模/數(shù)轉(zhuǎn)換接口。
(√)13、MCS-51的相對(duì)轉(zhuǎn)移指令最大負(fù)跳距是127B。
(×)14、MCS-51的程序存儲(chǔ)器只是用來(lái)存放程序的。
(√)15、TMOD中的GATE=1時(shí),表示由兩個(gè)信號(hào)控制定時(shí)器的的啟停。
(×)16、MCS-51的特殊功能寄存器分布在60H~80H地址范圍內(nèi)。
(×)17、MCS-51系統(tǒng)可以沒(méi)有復(fù)位電路。
(×)18、片內(nèi)RAM與外部設(shè)備統(tǒng)一編址時(shí),需要專(zhuān)門(mén)的輸入/輸出指令。
(√)19、鎖存器、三態(tài)緩沖寄存器等簡(jiǎn)單芯片中沒(méi)有命令寄存和狀態(tài)寄存等功能。
(√)20、使用8751且=1時(shí),仍可外擴(kuò)64KB的程序存儲(chǔ)器。
四、簡(jiǎn)答題
1、在使用8051的定時(shí)器/計(jì)數(shù)器前,應(yīng)對(duì)它進(jìn)行初始化,其步驟是什么?
答:(1)確定T/C的工作方式——編程TMOD寄存器;
(2)計(jì)算T/C中的計(jì)數(shù)初值,并裝載到TH和TL;
(3)T/C在中斷方式工作時(shí),須開(kāi)CPU中斷和源中斷——編程IE寄存器;
(4)啟動(dòng)定時(shí)器/計(jì)數(shù)器——編程TCON中TR1或TR0位。
2、什么是重入函數(shù)?重入函數(shù)一般什么情況下使用,使用時(shí)有哪些需要注意的地方?答:多個(gè)函數(shù)可以同時(shí)使用的函數(shù),稱(chēng)為重入函數(shù)。
通常情況下,C51函數(shù)不能被遞歸調(diào)用,也不能應(yīng)用導(dǎo)致遞歸調(diào)用的結(jié)構(gòu)。有此限制是由于函數(shù)參數(shù)和局部變量是存儲(chǔ)在固定的地址單元中。重入函數(shù)特性允許你聲明一個(gè)重入函數(shù)。即可以被遞歸調(diào)用的函數(shù)。
重入函數(shù)可以被遞歸調(diào)用,也可以同時(shí)被兩個(gè)或更多的進(jìn)程調(diào)用。重入函數(shù)在實(shí)時(shí)應(yīng)用中及中斷服務(wù)程序代碼和非中斷程序代碼必須共用一個(gè)函數(shù)的場(chǎng)合中經(jīng)常用到。
3、8051引腳有多少I(mǎi)/O線?他們和單片機(jī)對(duì)外的地址總線和數(shù)據(jù)總線有什么關(guān)系?地址總線和數(shù)據(jù)總線各是幾位?
答:8051引腳共有40個(gè)引腳,8051的地址總線由P2和P0口提供,P2口是地址總線的高8位,P0口是地址總線的低8位;數(shù)據(jù)總線由P0口提供;P0口的地址總線和數(shù)據(jù)總線是分時(shí)進(jìn)行的,P0口的地址總線需要外接地址鎖存器完成地址鎖存。
地址總線共16位,數(shù)據(jù)總線是8位。
4、在有串行通信時(shí),定時(shí)器/計(jì)數(shù)器1的作用是什么,怎樣確定串行口的波特率?
答:在有串行通信時(shí),定時(shí)器/計(jì)數(shù)器1的作用是串行口發(fā)生器。
串行口的波特率根據(jù)串行口的工作方式具有不同的計(jì)算方式:
方式0的波特率固定為晶體振蕩器的十二分之一;
方式1的波特率=2SMOD.(定時(shí)器1的溢出率)/32;
方式2波特率=2SMOD.(fosc/64);
方式3波特率同方式1(定時(shí)器l作波特率發(fā)生器)。
5、如何消除鍵盤(pán)的抖動(dòng)?怎樣設(shè)置鍵盤(pán)中的復(fù)合鍵?
答:由于按鍵是機(jī)械開(kāi)關(guān)結(jié)構(gòu),所以當(dāng)用手按下其中一個(gè)鍵時(shí),往往會(huì)出現(xiàn)所按鍵在閉合位置和斷開(kāi)位置之間發(fā)生跳幾下后才會(huì)穩(wěn)定到閉合狀態(tài)的情況。在釋放一個(gè)鍵時(shí),也會(huì)出現(xiàn)類(lèi)似的情況,這就是鍵的抖動(dòng),抖動(dòng)的持續(xù)時(shí)間不一,但通常不會(huì)大于10ms。
若抖動(dòng)問(wèn)題不解決,就會(huì)引起對(duì)閉合鍵的多次讀入。對(duì)于鍵抖動(dòng)最方便的解決方法就是當(dāng)發(fā)現(xiàn)有鍵按下后,不是立即進(jìn)行掃描,而是延時(shí)大約10ms后再進(jìn)行。由于一個(gè)鍵按下的時(shí)間一般會(huì)持續(xù)上百毫秒,所以延遲10ms后再掃描處理并不遲。
復(fù)合鍵可以仿照計(jì)算機(jī)復(fù)合鍵的處理方法,通常可以假設(shè)一個(gè)鍵具有復(fù)合功能,再與其它減的鍵值組合成復(fù)合鍵。
1、矩陣式鍵盤(pán)的結(jié)構(gòu)與工作原理
在鍵盤(pán)中按鍵數(shù)量較多時(shí),為了減少I(mǎi)/O口的占用,通常將按鍵排列成矩陣形式,如圖1所示。在矩陣式鍵盤(pán)中,每條水平線和垂直線在交叉處不直接連通,而是通過(guò)一個(gè)按鍵加以連接。這樣,一個(gè)端口(如P1口)就可以構(gòu)成4*4=16個(gè)按鍵,比之直接將端口線用于鍵盤(pán)多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構(gòu)成20鍵的鍵盤(pán),而直接用端口線則只能多出一鍵(9鍵)。由此可見(jiàn),在需要的鍵數(shù)比較多時(shí),采用矩陣法來(lái)做鍵盤(pán)是合理的。
矩陣式結(jié)構(gòu)的鍵盤(pán)顯然比直接法要復(fù)雜一些,識(shí)別也要復(fù)雜一些,上圖中,列線通過(guò)電阻接正電源,并將行線所接的單片機(jī)的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當(dāng)按鍵沒(méi)有按下時(shí),所有的輸出端都是高電平,代表無(wú)鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會(huì)被拉低,這樣,通過(guò)讀入輸入線的狀態(tài)就可得知是否有鍵按下了。具體的識(shí)別及編程方法如下所述。
2、矩陣式鍵盤(pán)的按鍵識(shí)別方法
確定矩陣式鍵盤(pán)上何鍵被按下介紹一種“行掃描法”。
行掃描法行掃描法又稱(chēng)為逐行(或列)掃描查詢法,是一種最常用的按鍵識(shí)別方法,如上圖所示鍵盤(pán),介紹過(guò)程如下。
1、判斷鍵盤(pán)中有無(wú)鍵按下將全部行線Y0-Y3置低電平,然后檢測(cè)列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤(pán)中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個(gè)按鍵之中。若所有列線均為高電平,則鍵盤(pán)中無(wú)鍵按下。
2、判斷閉合鍵所在的位置在確認(rèn)有鍵按下后,即可進(jìn)入確定具體閉合鍵的過(guò)程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時(shí),其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測(cè)各列線的電平狀態(tài)。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。
下面給出一個(gè)具體的例子:
圖仍如上所示。8031單片機(jī)的P1口用作鍵盤(pán)I/O口,鍵盤(pán)的列線接到P1口的低4位,鍵盤(pán)的行線接到P1口的高4位。列線P1.0-P1.3分別接有4個(gè)上拉電阻到正電源 5V,并把列線P1.0-P1.3設(shè)置為輸入線,行線P1.4-P.17設(shè)置為輸出線。4根行線和4根列線形成16個(gè)相交點(diǎn)。
1、檢測(cè)當(dāng)前是否有鍵被按下。檢測(cè)的方法是P1.4-P
1.7輸出全“0”,讀取P1.0-P1.3的狀態(tài),若P1.0-P1.3為全“1”,則無(wú)鍵閉合,否則有鍵閉合。
2、去除鍵抖動(dòng)。當(dāng)檢測(cè)到有鍵按下后,延時(shí)一段時(shí)間再做下一步的檢測(cè)判斷。
3、若有鍵被按下,應(yīng)識(shí)別出是哪一個(gè)鍵閉合。方法是對(duì)鍵盤(pán)的行線進(jìn)行掃描。P1.4-P1.7按下述4種組合依次輸出:
P1.71110
P1.61101
P1.51011
P1.40111
在每組行輸出時(shí)讀取P1.0-P1.3,若全為“1”,則表示為“0”這一行沒(méi)有鍵閉合,否則有鍵閉合。由此得到閉合鍵的行值和列值,然后可采用計(jì)算法或查表法將閉合鍵的行值和列值轉(zhuǎn)換成所定義的鍵值
4、為了保證鍵每閉合一次CPU僅作一次處理,必須卻除鍵釋放時(shí)的抖動(dòng)。
鍵盤(pán)掃描程序:
從以上分析得到鍵盤(pán)掃描程序的流程圖如圖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
鍵盤(pán)處理程序就作這么一個(gè)簡(jiǎn)單的介紹,實(shí)際上,鍵盤(pán)、顯示處理是很復(fù)雜的,它往往占到一個(gè)應(yīng)用程序的大部份代碼,可見(jiàn)其重要性,但說(shuō)到,這種復(fù)雜并不來(lái)自于單片機(jī)的本身,而是來(lái)自于操作者的習(xí)慣等等問(wèn)題,因此,在編寫(xiě)鍵盤(pán)處理程序之前,最好先把它從邏輯上理清,然后用適當(dāng)?shù)乃惴ū硎境鰜?lái),最后再去寫(xiě)代碼,這樣,才能快速有效地寫(xiě)好代碼。
到本課為止,本站教程暫告一個(gè)段落!感謝大家的關(guān)心和支持!
矩陣按鍵部分由16個(gè)輕觸按鍵按照4行4列排列,連接到JP50端口。將行線所接的單片機(jī)的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當(dāng)按鍵沒(méi)有按下時(shí),所有的輸出端都是高電平,代表無(wú)鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會(huì)被拉低,這樣,通過(guò)讀入輸入線的狀態(tài)就可得知是否有鍵按下了。確定矩陣式鍵盤(pán)上何鍵被按下,介紹一種“行掃描法”。行掃描法行掃描法又稱(chēng)為逐行(或列)掃描查詢法,是一種最常用的按鍵識(shí)別方法.判斷鍵盤(pán)中有無(wú)鍵按下:將全部行線置低電平,然后檢測(cè)列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤(pán)中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個(gè)按鍵之中。若所有列線均為高電平,則鍵盤(pán)中無(wú)鍵按下。判斷閉合鍵所在的位置:在確認(rèn)有鍵按下后,即可進(jìn)入確定具體閉合鍵的過(guò)程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時(shí),其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測(cè)各列線的電平狀態(tài)。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。
下面給出一個(gè)具體的例子:
電路圖路徑:G:\圖片\電路圖片\xl100097.jpg
8031單片機(jī)的P1口用作鍵盤(pán)I/O口,鍵盤(pán)的列線接到P1口的低4位,鍵盤(pán)的行線接到P1口的高4位。列線P1.0-P1.3設(shè)置為輸入線,行線P1.4-P.17設(shè)置為輸出線。4根行線和4根列線形成16個(gè)相交點(diǎn)。
1.檢測(cè)當(dāng)前是否有鍵被按下。檢測(cè)的方法是P1.4-P1.7輸出全“0”,讀取P1.0-P1.3的狀態(tài),若P1.0-P1.3為全“1”,則無(wú)鍵閉合,否則有鍵閉合。
2.去除鍵抖動(dòng)。當(dāng)檢測(cè)到有鍵按下后,延時(shí)一段時(shí)間再做下一步的檢測(cè)判斷。
3.若有鍵被按下,應(yīng)識(shí)別出是哪一個(gè)鍵閉合。方法是對(duì)鍵盤(pán)的行線進(jìn)行掃描。P1.4-P1.7按下述4種組合依次輸出:
P1.71110
P1.61101
P1.51011
P1.40111
在每組行輸出時(shí)讀取P1.0-P1.3,若全為“1”,則表示為“0”這一行沒(méi)有鍵閉合,否則有鍵閉合。由此得到閉合鍵的行值和列值,然后可采用計(jì)算法或查表法將閉合鍵的行值和列值轉(zhuǎn)換成所定義的鍵值。
4.為了保證鍵每閉合一次CPU僅作一次處理,必須去除鍵釋放時(shí)的抖動(dòng)。
實(shí)驗(yàn)?zāi)康模和ㄟ^(guò)XL1000的16位矩陣按鍵,在數(shù)碼管上分別顯示0---9,A,B,C,D,E,F。
接線方法:1用一條8PIN數(shù)據(jù)排線,把矩陣按鍵部份的JP50,接到CPU部份的P1口JP44.
2接8位數(shù)碼管的數(shù)據(jù)線。將數(shù)碼管部份的數(shù)據(jù)口JP5接到CPU部份的P0口JP51.
3接8位數(shù)碼管的顯示位線。將數(shù)碼管部份的顯示位口JP8接到CPU部份的P2口JP52.
參考程序:
;本程序?qū)崿F(xiàn)掃描按鍵顯示功能.
;分別按16個(gè)鍵盤(pán)顯示分別顯示數(shù)字123A456B789C*0#D
;鍵盤(pán)口P1,數(shù)碼管顯示第二位p21,數(shù)碼管段位p0口
org0000h
ajmpmain
org0030h
main:
movdptr,#tab;將表頭放入DPTR
lcallkey;調(diào)用鍵盤(pán)掃描程序
movca,@a dptr;查表后將鍵值送入ACC
movp0,a;將Acc值送入P0口
CLRP2.1;開(kāi)顯示
ljmpmain;返回反復(fù)循環(huán)顯示
KEY:
LCALLKS;調(diào)用檢測(cè)按鍵子程序
JNZK1;有鍵按下繼續(xù)
LCALLDELAY2;無(wú)鍵按調(diào)用延時(shí)去抖
AJMPKEY;返回繼續(xù)檢測(cè)按鍵
K1:LCALLDELAY2
LCALLDELAY2;有鍵按下延時(shí)去抖動(dòng)
LCALLKS;再調(diào)用檢測(cè)按鍵程序
JNZK2;確認(rèn)有按下進(jìn)行下一步
AJMPKEY;無(wú)鍵按下返回繼續(xù)檢測(cè)
K2:MOVR2,#0EFH;將掃描值送入R2暫存
MOVR4,#00H;將第一列值送入R4暫存
K3:MOVP1,R2;將R2的值送入P1口
L6:JBP1.0,L1;P1.0等于1跳轉(zhuǎn)到L1
MOVA,#00H;將第一行值送入ACC
AJMPLK;跳轉(zhuǎn)到鍵值處理程序
L1:JBP1.1,L2;P1.1等于1跳轉(zhuǎn)到L2
MOVA,#04H;將第二行的行值送入ACC
AJMPLK;跳轉(zhuǎn)到鍵值理程序進(jìn)行鍵值處理
L2:JBP1.2,L3;P1.2等于1跳轉(zhuǎn)到L3
MOVA,#08H;將第三行的行值送入ACC
AJMPLK;跳轉(zhuǎn)到鍵值處理程序
L3:JBP1.3,NEXT;P1.3等于1跳轉(zhuǎn)到NEXT處
MOVA,#0cH;將第四行的行值送入ACC
LK:ADDA,R4;行值與列值相加后的鍵值送入A
PUSHACC;將A中的值送入堆棧暫存
K4:LCALLDELAY2;調(diào)用延時(shí)去抖動(dòng)程序
LCALLKS;調(diào)用按鍵檢測(cè)程序
JNZK4;按鍵沒(méi)有松
開(kāi)繼續(xù)返回檢測(cè)POPACC;將堆棧的值送入ACC
RET
NEXT:
INCR4;將列值加一
MOVA,R2;將R2的值送入A
JNBACC.7,KEY;掃描完至KEY處進(jìn)行下一掃描
RLA;掃描未完將A中的值右移一位進(jìn)行下一列的掃描
MOVR2,A;將ACC的值送入R2暫存
AJMPK3;跳轉(zhuǎn)到K3繼續(xù)
KS:MOVP1,#0FH;將P1口高四位置0低四位值1
MOVA,P1;讀P1口
XRLA,#0FH;將A中的值與A中的值相異或
RET;子程序返回
DELAY2:;40ms延時(shí)去抖動(dòng)子程序
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輪流顯示鍵盤(pán)因?yàn)闊o(wú)法表達(dá)*#就用H表示,B用8表示
end
這是我做成功的4X4鍵盤(pán)掃描源程序,P1.0-P1.3做四根列線,P1.4-P1.7做四根行線。
數(shù)碼管的字型表是按照標(biāo)準(zhǔn)接法做的,按對(duì)應(yīng)的按鍵數(shù)碼管顯示對(duì)應(yīng)的數(shù)字。
以下是源程序:
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數(shù)據(jù)采集控制
;P2.6P2.7個(gè)位十位顯示轉(zhuǎn)換控制
;P1口接8個(gè)開(kāi)關(guān)模擬數(shù)據(jù)
;P1.0-P1.3為個(gè)位開(kāi)關(guān)量輸入
;P1.4-P1.7為十位開(kāi)關(guān)量輸入
;此程序僅供參考
;功能P1口接8個(gè)開(kāi)關(guān)輸入量4個(gè)一組,分別為個(gè)位,十位輸入
;P0口接一個(gè)數(shù)碼管,依次顯示輸入量。P3.1控制是否讀入
;開(kāi)關(guān)量。P2.6P2.7控制是否顯示個(gè)位
或十位
ORG100h
LJMPSTAR
STAR:MOVP1,#0FFH
SETBP3.1數(shù)據(jù)讀入標(biāo)志
MOVR0,#100,循環(huán)工作次數(shù)
LOOP:JBP3.1,$P3.1低電平時(shí),采集P1口數(shù)據(jù)開(kāi)關(guān)量處理顯示階段不再應(yīng)答P3.1
MOVA,P1
PUSHACC
ANLA,#0FH取個(gè)位數(shù)值
MOVR1,A個(gè)位數(shù)值保存到R1
POPACC
ANLA,#0F0H
SWAPA高4位轉(zhuǎn)成字節(jié)信息
MOVR2,A十位數(shù)值保存到R2
MOVDPTR,#TABLED
MOVA,R1
MOVCA,@A DPTR
MOVP0,A
CLRP2.6個(gè)位顯示
ACALLDELAY500MS
SETBP2.6
MOVA,R2
MOVCA,@A DPTR
MOVP0,A
CLRP2.7十位顯示
ACALLDELAY500MS
SETBP2.7
DJNZR0,LOOP
DELAY500MS:延時(shí)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.實(shí)驗(yàn)任務(wù)
在8X8 LED點(diǎn)陣上顯示柱形,讓其先從左到右平滑移動(dòng)三次,其次從右到左平滑移動(dòng)三次,再次從上到下平滑移動(dòng)三次,最后從下到上平滑移動(dòng)三次,如此循環(huán)下去。
2.電路原理圖
圖4.24.1
3.硬件電路連線
(1).把“單片機(jī)系統(tǒng)”區(qū)域中的P1端口用8芯排芯連接到“點(diǎn)陣模塊”區(qū)域中的“DR1-DR8”端口上;
(2).把“單片機(jī)系統(tǒng)”區(qū)域中的P3端口用8芯排芯連接到“點(diǎn)陣模塊”區(qū)域中的“DC1-DC8”端口上;
4.程序設(shè)計(jì)內(nèi)容
(1).8X8 點(diǎn)陣LED工作原理說(shuō)明
8X8點(diǎn)陣LED結(jié)構(gòu)如下圖所示
圖4.24.2
從圖4.24.2中可以看出,8X8點(diǎn)陣共需要64個(gè)發(fā)光二極管組成,且每個(gè)發(fā)光二極管是放置在行線和列線的交叉點(diǎn)上,當(dāng)對(duì)應(yīng)的某一列置1電平,某一行置0電平,則相應(yīng)的二極管就亮;因此要實(shí)現(xiàn)一根柱形的亮法,如圖49所示,對(duì)應(yīng)的一列為一根豎柱,或者對(duì)應(yīng)的一行為一根橫柱,因此實(shí)現(xiàn)柱的亮的方法如下所述:
一根豎柱:對(duì)應(yīng)的列置1,而行則采用掃描的方法來(lái)實(shí)現(xiàn)。
一根橫柱:對(duì)應(yīng)的行置0,而列則采用掃描的方法來(lái)實(shí)現(xiàn)。
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語(yǔ)言源程序
#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點(diǎn)陣顯示實(shí)驗(yàn)
一.實(shí)驗(yàn)要求
編程實(shí)現(xiàn)中英文字符的顯示。
二.實(shí)驗(yàn)?zāi)康?/p>
1.了解LED點(diǎn)陣顯示的基本原理和實(shí)現(xiàn)方法。
2.掌握點(diǎn)陣漢字庫(kù)的編碼和從標(biāo)準(zhǔn)字庫(kù)中提取漢字編碼的方法。
三.實(shí)驗(yàn)電路及連線
點(diǎn)陣顯示模塊WTD3088的(紅色)列輸入線接至內(nèi)部LED的陰極端,行輸入線接至內(nèi)部LED的陽(yáng)極端(若陽(yáng)極端輸入為高電平,陰極端輸入低電平,則該LED點(diǎn)亮)。發(fā)光點(diǎn)的分布如圖22-0所示。
Fig22-0WTD3088LED分布
如圖22-1示,本實(shí)驗(yàn)?zāi)K使用74LS374來(lái)控制列輸入線的電平值。將74LS374的某輸出置0,則對(duì)應(yīng)的LED陰極端被置低。如圖22-2示,本實(shí)驗(yàn)?zāi)K使用74LS273來(lái)控制行輸入線,并通過(guò)9013提供電流驅(qū)動(dòng)。將74LS273的某輸出置1,則對(duì)應(yīng)的LED陽(yáng)極端被置高。每次系統(tǒng)重新開(kāi)啟或總清后,74LS273輸出為全0,LED顯示被關(guān)閉。
通過(guò)編程控制各顯示點(diǎn)對(duì)應(yīng)LED陽(yáng)極和陰極端的電平,就可以有效的控制各顯示點(diǎn)的亮滅。
Fig22-1LED模塊及列掃描電路
Fig22-2行掃描電路
Fig22-3地址譯碼電路
本實(shí)驗(yàn)?zāi)K使用4塊WTD3088組成16×16點(diǎn)陣,以滿足漢字顯示的要求。為了方便的控制四個(gè)單元,使用了一片74LS139譯碼,產(chǎn)生四個(gè)地址片選信號(hào):CLKR1=CSLED,CLKR2=CSLED 1,用于行控制的兩片74LS273;CLKC1=CSLED 2,CLKC2=CSLED 3,用于列控制的兩片74LS374。
實(shí)驗(yàn)接線:按示例程序,模塊的CSLED接51/96地址的8000H。
四.實(shí)驗(yàn)說(shuō)明
使用高亮度LED發(fā)光管構(gòu)成點(diǎn)陣,通過(guò)編程控制可以顯示中英文字符、圖形及視頻動(dòng)態(tài)圖形。LED顯示以其組構(gòu)方式靈活、亮度高、技術(shù)成熟、成本低廉等特點(diǎn)在證券、運(yùn)動(dòng)場(chǎng)館及各種室內(nèi)/外顯示場(chǎng)合得到廣泛的應(yīng)用。
所顯示字符的點(diǎn)陣數(shù)據(jù)可以自行編寫(xiě)(即直接點(diǎn)陣畫(huà)圖),也可從標(biāo)準(zhǔn)字庫(kù)(如ASC16、HZ16)中提取。后者需要正確掌握字庫(kù)的編碼方法和字符定位的計(jì)算。
實(shí)驗(yàn)盤(pán)片中“字符轉(zhuǎn)換”子目錄下提供的Basc16.exe,BHz16.exe可方便的將單個(gè)字符的碼表從標(biāo)準(zhǔn)字庫(kù)Asc16,Hzk16中提取出來(lái)。具體使用方法是運(yùn)行上述可執(zhí)行程序,根據(jù)提示輸入所需字符(如是漢字還需要先啟動(dòng)dos下的漢字環(huán)境,如ucdos,pdos95等)。程序?qū)⒃撟址拇a表提取出來(lái),存放在該字符ASC或區(qū)位碼為文件名稱(chēng)的.dat文件中。用戶只需將該文件中內(nèi)容拷貝、粘貼到自己的程序中即可。但需要注意字節(jié)排列順序、字節(jié)中每一位與具體顯示點(diǎn)的一一對(duì)應(yīng)關(guān)系,必要時(shí)還要對(duì)碼表稍作修改。同一目錄下還提供了上述可執(zhí)行程序的源文件,使用BC3.1編寫(xiě),供用戶參考。
五.實(shí)驗(yàn)程序框圖
用戶應(yīng)留心其中行掃描的實(shí)現(xiàn)及碼表的處理。
六.實(shí)驗(yàn)程序:
(一)提供LEDA51演示Asc16字符的簡(jiǎn)單點(diǎn)陣顯示。
;________*LED點(diǎn)陣顯示示例程序______________________*
;__該程序顯示Asc16字符__
;__為了簡(jiǎn)單起見(jiàn),程序只顯示一個(gè)字符__
;__該程序針對(duì)T598實(shí)驗(yàn)機(jī)的模塊14__
;____________________________________________________
CSLEDEQU8000H
CSR1EQUCSLED;行1273
CSR2EQUCSLED 1H;行2273
CSC1EQUCSLED 2H;列1374
CSC2EQUCSLED 3H;列2374
ORG0000H
MOVSP,#60H
INIT:MOVA,#0H;關(guān)閉行
MOVDPTR,#CSR1
MOVX@DPTR,A
MOVDPTR,#CSR2
MOVX@DPTR,A
MOVA,#0FFH;關(guān)閉列
MOVDPTR,#CSC1
MOVX@DPTR,A
MOVDPTR,#CSC2
MOVX@DPTR,A
D:MOVR5,#00H
MOVR4,#01H;每次為單行掃描
DISP:
MOVA,R5
MOVDPTR,#ASCE;此處設(shè)定所要顯示的字符
MOVCA,@A DPTR
CPLACC;代碼取反,決定顯示的陰陽(yáng)
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
;________延時(shí)子程序,協(xié)調(diào)字符顯示速度____________*
DELAY:MOVR7,#1H
DL1:MOVR6,#00H
DL2:DJNZR6,DL2
DJNZR7,DL1
RET
;________字符點(diǎn)陣字庫(kù)______________*
;ASC16字符編碼排列
;0
;1
;|
;|
;14
;15
;高位D7--D0
;請(qǐng)注意編碼的排列次序和實(shí)際顯示點(diǎn)陣分布的關(guān)系
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兩個(gè)示例程序。和Hz16字符的簡(jiǎn)單點(diǎn)陣顯示。
;________*LED點(diǎn)陣顯示示例程序______________________*
;__該程序顯示hz16字符__
;__為了簡(jiǎn)單起見(jiàn),程序只顯示一個(gè)字符__
;__該程序針對(duì)T598實(shí)驗(yàn)機(jī)的模塊14__
;____________________________________________________
CSLEDEQU8000H
CSR1EQUCSLED;行1273
CSR2EQUCSLED 1H;行2273
CSC1EQUCSLED 2H;列1374
CSC2EQUCSLED 3H;列2374ORG0000H
MOVSP,#60H
INIT:MOVA,#0H;關(guān)閉LED顯示
MOVDPTR,#CSR1
MOVX@DPTR,A
MOVDPTR,#CSR2
MOVX@DPTR,A
MOVA,#0FFH;關(guān)閉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
;________延時(shí)子程序,協(xié)調(diào)字符顯示速度____________*
DELAY:MOVR7,#1H
DL1:MOVR6,#00H
DL2:DJNZR6,DL2
DJNZR7,DL1
RET
;________字符點(diǎn)陣字庫(kù)______________*
;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的計(jì)算機(jī)可鎖定加密鍵盤(pán)設(shè)計(jì)
摘要:介紹PC鍵盤(pán)和鍵盤(pán)接口的PS/2通信協(xié)議,以及用89C51實(shí)現(xiàn)可鎖定鍵盤(pán)的軟件和硬件設(shè)計(jì)方法。具有安全可靠、容錯(cuò)能力強(qiáng)、可以直接采用標(biāo)準(zhǔn)鍵盤(pán)進(jìn)行改裝、便于實(shí)現(xiàn)等優(yōu)點(diǎn),并保留標(biāo)準(zhǔn)鍵盤(pán)的全部功能。
關(guān)鍵詞:PS/289C51C51鍵盤(pán)
引言
在智能儀器、自動(dòng)控制等領(lǐng)域,已大量使用嵌入式PC,如Advantech公司的PC/104、AMD公司的DIMM-PC等。為適應(yīng)開(kāi)放式、模塊化的要求,嵌入式PC具有標(biāo)準(zhǔn)的PC接口,如VGA顯示器控制接口、以太網(wǎng)接口、RS232接口、PC/AT鍵盤(pán)接口等。所以,可以用標(biāo)準(zhǔn)的PC鍵盤(pán)對(duì)嵌入式PC進(jìn)行操作與控制。鍵盤(pán)在輸入指令之后,可能很長(zhǎng)一段時(shí)間不用。為計(jì)算機(jī)安全和防止誤觸發(fā),需要將鍵盤(pán)鎖定,還要對(duì)某些鍵采取屏蔽措施,但是PC標(biāo)準(zhǔn)鍵盤(pán)不能滿足這些要求。本文介紹一種用89C51設(shè)計(jì)實(shí)現(xiàn)的可鎖定加密PC/AT鍵盤(pán)。
1鍵盤(pán)功能及工作原理
PC鍵盤(pán)功能主要有按鍵識(shí)別、去抖、重鍵處理、發(fā)送掃描碼、自動(dòng)重發(fā)、接收鍵盤(pán)命令、處理命令等。鍵盤(pán)有編碼鍵盤(pán)和非編碼鍵盤(pán)。編碼鍵盤(pán)程序設(shè)計(jì)簡(jiǎn)單,但硬件電路復(fù)雜,價(jià)格較高;非編碼鍵盤(pán)用軟件來(lái)實(shí)現(xiàn)識(shí)別鍵、編碼轉(zhuǎn)換、去抖等功能,硬件電路簡(jiǎn)單,價(jià)格便宜?,F(xiàn)代微機(jī)系統(tǒng)中廣泛采用非編碼鍵盤(pán)。PC鍵盤(pán)多采用18行×8列的二維矩陣行列結(jié)構(gòu)。采用行掃描法識(shí)別按下的按鍵。
2PS/2協(xié)議
PS/2協(xié)議是外設(shè)與主機(jī)之間通信的一種同步雙向串行協(xié)議。在該協(xié)議中主機(jī)擁有較高的優(yōu)先級(jí),在一定條件下可以終止外設(shè)正在進(jìn)行的發(fā)送過(guò)程。PS/2協(xié)議采用的傳送數(shù)據(jù)幀的格式為:1位起始位(0)、8位數(shù)據(jù)位、1位奇偶校驗(yàn)位、1位停止位(1)。數(shù)據(jù)發(fā)送時(shí)低位在前,高位在后。外設(shè)每收到主機(jī)發(fā)來(lái)的1幀數(shù)據(jù),都要緊隨該幀的停止位發(fā)送一個(gè)握手位ACK(0)應(yīng)答主機(jī)。然后,外設(shè)還要發(fā)1幀應(yīng)答數(shù)據(jù)(0xF0),表示外設(shè)已經(jīng)完整地接收到了主機(jī)的命令;而主機(jī)則不需發(fā)送握手位,也不需要發(fā)送應(yīng)答幀。
2.1鍵盤(pán)到PC鍵盤(pán)接口的通信
當(dāng)時(shí)鐘線和數(shù)據(jù)線均為高電平時(shí),允許鍵盤(pán)發(fā)送數(shù)據(jù),系統(tǒng)將接收數(shù)據(jù);當(dāng)時(shí)鐘線被拉為低電平時(shí),表明系統(tǒng)禁止數(shù)據(jù)傳輸。圖1給出了發(fā)送時(shí)序,包含1個(gè)低電平觸發(fā)的起始位、8位數(shù)據(jù)位、1個(gè)奇校驗(yàn)位和1個(gè)高電平的結(jié)束位。
2.2PC系統(tǒng)到鍵盤(pán)的通信協(xié)議
若時(shí)鐘線出現(xiàn)高電平,數(shù)據(jù)線出現(xiàn)低電平,表明系統(tǒng)請(qǐng)求發(fā)送,鍵盤(pán)準(zhǔn)備產(chǎn)生同步時(shí)鐘脈沖串,并接收數(shù)據(jù)。包含了1個(gè)低電平觸發(fā)的起始位、8位數(shù)據(jù)位、1個(gè)奇校驗(yàn)位、1個(gè)應(yīng)答位、1個(gè)高電平的結(jié)束位。圖2為時(shí)序圖。
(1)鍵盤(pán)命令及執(zhí)行過(guò)程
①FFH:復(fù)位鍵盤(pán)。系統(tǒng)通過(guò)此軟件復(fù)位命令使鍵盤(pán)進(jìn)入程序復(fù)位和內(nèi)部自測(cè)試,稱(chēng)為基本保證測(cè)試(BAT)。復(fù)位鍵盤(pán)的過(guò)程如下:
a.鍵盤(pán)收到FFH后立即回送ACK(FAH)作答;
b.鍵盤(pán)接口收到ACK后,將鍵盤(pán)時(shí)鐘和數(shù)據(jù)線置為高電平;
c.鍵盤(pán)檢測(cè)到此狀態(tài)后開(kāi)始BAT操作;
d.如果BAT正確完成,鍵盤(pán)發(fā)送AAH以表示結(jié)束,
否則以FDH(或其它任何值)表示診斷有誤。
②FEH:重新發(fā)送。當(dāng)系統(tǒng)檢測(cè)
到從鍵盤(pán)送來(lái)的任何傳輸錯(cuò)誤時(shí),它便向鍵盤(pán)發(fā)送FEH命令。鍵盤(pán)接收到此命令后,將重新送出原來(lái)的內(nèi)容。③FDH~F7H:空操作(保留未用)。
④F6H:設(shè)置缺省值。此命令使鍵盤(pán)所有條件復(fù)位到電源接通時(shí)的缺省狀態(tài),鍵盤(pán)繼續(xù)掃描。
⑤F5H:設(shè)置缺省值和停止鍵盤(pán)。此命令使鍵盤(pán)所有條件復(fù)位到電源接通時(shí)的缺省狀態(tài),并停止鍵盤(pán)掃描,等待下一個(gè)鍵盤(pán)命令。
⑥F4H:?jiǎn)?dòng)鍵盤(pán)。鍵盤(pán)接收到此命令后,用ACK(FAH)作答,清除輸出緩沖器,并啟動(dòng)鍵盤(pán)開(kāi)始掃描。
⑦F3H:設(shè)置拍發(fā)速率和延時(shí)參數(shù)。每當(dāng)按下任一鍵時(shí),鍵盤(pán)以拍發(fā)速率連續(xù)送出鍵的接通碼,直到鍵被釋放為止。延時(shí)參數(shù)是指按下一鍵后,鍵盤(pán)輸出的響應(yīng)時(shí)間。
系統(tǒng)缺省設(shè)置:拍發(fā)速率=10個(gè)/s±20,延時(shí)=500ms±20。
當(dāng)要改變?cè)O(shè)置時(shí)可以使用F3H命令,并后跟一個(gè)字節(jié)的參數(shù)。參數(shù)定義如表1所列。
表1
D7
D6D5
D4D3
D2D1D0
C
B
A
計(jì)算拍發(fā)速率和響應(yīng)延時(shí)的公式如下:
拍發(fā)速率=1/[(8 A)×2B×0.00417](1/s)
響應(yīng)延時(shí)=(1 C)×250(ms)
注:缺省的延時(shí)參數(shù)值為2CH。
此命令的執(zhí)行過(guò)程如下:
a.鍵盤(pán)收到F3H命令后,用FAH予以響應(yīng),并停止
掃描和等待隨后的參數(shù);
b.鍵盤(pán)若收到隨后的設(shè)置參數(shù),用另一個(gè)ACK響
應(yīng),并按其參數(shù)設(shè)置新的拍發(fā)速率和響應(yīng)延時(shí),
之后重新開(kāi)始掃描(若鍵盤(pán)原來(lái)是開(kāi)放的);
c.鍵盤(pán)若收到FAH命令,但無(wú)隨后的設(shè)置參數(shù),則
鍵盤(pán)結(jié)束命令設(shè)置,并保持原來(lái)的拍發(fā)速率和響
應(yīng)延時(shí),停止掃描。
⑧F2H,F(xiàn)1,EFH:保留未用。
⑨F0H:設(shè)置鍵盤(pán)掃描碼命令。此命令用于設(shè)置鍵盤(pán)的掃描碼,后跟參數(shù)指定三種掃描碼的哪一種。鍵盤(pán)復(fù)位時(shí),默認(rèn)掃描碼是第二種。
⑩EEH:回送命令。此命令用于輔助診斷,要求鍵盤(pán)接收到EEH時(shí)也要回送EEH予以響應(yīng)。若鍵盤(pán)原來(lái)是開(kāi)放的,則繼續(xù)掃描。
EDH:置位/復(fù)位LED指示器。鍵盤(pán)右上角有三個(gè)LED指示器,分別反映Caps、Num和Scroll三個(gè)鍵的鎖定情況。參數(shù)字節(jié)如表2所列。
表2
D7D3
D2
D1
D0
保留
1=激勵(lì)CapsLED
1=激勵(lì)NumLED
1=激勵(lì)ScrollLED
此命令執(zhí)行過(guò)程與F3H相似。若命令后跟參數(shù),則按參數(shù)設(shè)定LED狀態(tài)并繼續(xù)掃描。若僅有命令無(wú)參數(shù),則不改變LED原狀態(tài),并停止掃描。
(2)鍵盤(pán)響應(yīng)
鍵盤(pán)在下列四種情況下都會(huì)向鍵盤(pán)接口發(fā)送數(shù)據(jù)。
①按下任一鍵,鍵盤(pán)以拍發(fā)速率向接口發(fā)送鍵盤(pán)接通掃描碼。
②釋放所按下的鍵,鍵盤(pán)發(fā)送斷開(kāi)掃描碼。
③系統(tǒng)向鍵盤(pán)發(fā)送鍵盤(pán)命令后,鍵盤(pán)回送應(yīng)答。
④當(dāng)用戶按鍵速度超出鍵盤(pán)所能容納的最大鍵個(gè)數(shù)時(shí),鍵盤(pán)做出響應(yīng)。
后三種情況稱(chēng)為鍵盤(pán)響應(yīng)。響應(yīng)字節(jié)有7個(gè),定義如下。
①FEH:重新發(fā)送響應(yīng)。當(dāng)鍵盤(pán)收到一個(gè)無(wú)效的鍵盤(pán)命令,或者檢測(cè)到奇偶錯(cuò)的鍵盤(pán)命令時(shí),鍵盤(pán)回送響應(yīng)字節(jié)為FEH,要求系統(tǒng)重發(fā)鍵盤(pán)命令。
②FAH:正常應(yīng)答。對(duì)任何一個(gè)有效的鍵盤(pán)命令,鍵盤(pán)回送FAH予以響應(yīng)。
③00H:超限應(yīng)答。當(dāng)用戶按鍵速度超出鍵盤(pán)所能容納的最大鍵符個(gè)數(shù)時(shí)(16個(gè)字節(jié)的緩沖器),鍵盤(pán)發(fā)送00H。
④FDH:診斷故障應(yīng)答。鍵盤(pán)接受軟件復(fù)位命令,執(zhí)行自測(cè)試過(guò)程中。若檢測(cè)到故障,則以FDH應(yīng)答。此時(shí),鍵盤(pán)停止掃描并等待下一個(gè)鍵盤(pán)命令。
⑤AAH:診斷正常應(yīng)答。鍵盤(pán)在軟件復(fù)位過(guò)程中,正常完成BAT測(cè)試,以AAH應(yīng)答。
⑥FEH:回響命令的應(yīng)答,對(duì)鍵盤(pán)FEH命令的應(yīng)答。
⑦F0H:斷開(kāi)掃描碼前綴,鍵盤(pán)對(duì)鍵符按下后釋放的應(yīng)答,第一個(gè)字節(jié)為F0H,第二個(gè)字節(jié)為接通掃描碼(有幾個(gè)鍵例外)。
3硬件設(shè)計(jì)
PC系列鍵盤(pán)采用18行×8列的矩陣行列結(jié)構(gòu)。89C51單片機(jī)有4個(gè)8位I/O端口,因此可以采用P0、P2口再加上P3口的2個(gè)(P3.6和P3.7)作為行掃描線。P1口作為列輸入線(如果用P0口作列輸入線,必須加上拉電阻)。采用P3.0、P3.1作為數(shù)據(jù)線和時(shí)鐘線與PC系統(tǒng)進(jìn)行通信,用P3.2、P3.4、P3.5控制鍵盤(pán)上的3個(gè)指示燈。硬件原理如圖3所示。
鍵盤(pán)與計(jì)算機(jī)通過(guò)一個(gè)五芯(PS/2接口為六芯)插座相接,4個(gè)有效引腳的定義分別是電源(VCC)、地(GND)、串行時(shí)鐘線(SCK)、串行數(shù)據(jù)線(SIO)。
4軟件設(shè)計(jì)
①消抖及重鍵處理:通過(guò)軟件上延時(shí)程序來(lái)消除抖動(dòng);采用后按鍵優(yōu)先處理,即多鍵同時(shí)按下時(shí),只重復(fù)發(fā)送最后按下鍵的掃描碼。
②程序包括鍵盤(pán)掃描子程序、發(fā)送鍵碼子程序、發(fā)送數(shù)據(jù)子程序、接收命令子程序、定時(shí)器1中斷服務(wù)程序、主程序等。鍵盤(pán)掃描子程序用于掃描鍵狀態(tài),將被按鍵的位置號(hào)存入緩沖器中;發(fā)送鍵碼子程序用于將緩沖區(qū)鍵的接通碼或斷開(kāi)碼發(fā)送給計(jì)算機(jī)鍵盤(pán)接口或者存在鍵盤(pán)密碼緩沖區(qū)中;發(fā)送數(shù)據(jù)子程序用于將數(shù)據(jù)發(fā)給計(jì)算機(jī)鍵盤(pán)接口;接收命令子程序用于接收計(jì)算機(jī)鍵盤(pán)接口發(fā)來(lái)的鍵盤(pán)命令;定時(shí)器1中斷服務(wù)子程序用于給程序中的延時(shí)提供標(biāo)準(zhǔn)時(shí)鐘,并具有軟件看門(mén)狗功能,防止軟件出現(xiàn)死機(jī)現(xiàn)象;主程序用于系統(tǒng)初始化,子程序調(diào)度,鎖定狀態(tài)的顯示等。
圖6發(fā)送緩沖區(qū)鍵碼子程序流程圖
圖4~6是主要軟件模塊的流程圖。單片機(jī)源程序見(jiàn)本刊網(wǎng)絡(luò)補(bǔ)充版(.com)。
5結(jié)論
本文介紹的PC/AT鍵盤(pán)具有結(jié)構(gòu)簡(jiǎn)單、設(shè)計(jì)靈活、安全可靠的特點(diǎn),可用于標(biāo)準(zhǔn)PC和嵌入式PC。本鍵盤(pán)可以在標(biāo)準(zhǔn)的鍵盤(pán)基礎(chǔ)上進(jìn)行改造,只需換掉原來(lái)的控制芯片即可,可節(jié)省設(shè)計(jì)成本。
單片機(jī)C51編程幾個(gè)有用的模塊(1)
KeilC51常用功能模塊使用說(shuō)明
說(shuō)明
本文檔包括單片機(jī)系統(tǒng)中常用到的時(shí)鐘中斷、通訊及鍵盤(pán)掃描等模塊(見(jiàn)所附源程序)的說(shuō)明。這些模塊使用前后臺(tái)系統(tǒng)模型。為達(dá)到最大的靈活性,需要在用戶工程中定義config.h文件,在其中定義各模塊可選參數(shù)的設(shè)置,而不是直接更改源代碼。
這些可選內(nèi)容大部分為宏定義,如果不定義宏相應(yīng)的功能在編譯時(shí)被屏蔽,不會(huì)增加代碼長(zhǎng)度。具體可選內(nèi)容見(jiàn)各模塊中的說(shuō)明。
在Config.h文件中還要包含一個(gè)單片機(jī)硬件的資源頭文件。
各模塊使用了定義在Common.h中的一些數(shù)據(jù)類(lèi)型。如:BIT(bit)BYTE(unsignedchar)等,具體請(qǐng)參見(jiàn)源程序。
時(shí)鐘模塊
在單片機(jī)軟件設(shè)計(jì)中,時(shí)鐘是重要資源,為了充分利用時(shí)鐘資源,故設(shè)計(jì)本時(shí)鐘模塊。本模塊使用定時(shí)器0,在完成用戶指定功能的同時(shí),還能夠自動(dòng)處理一些其它模塊中與時(shí)鐘相關(guān)的信息。
時(shí)鐘模塊由聲明文件Timer.h以及實(shí)現(xiàn)文件Timer.c組成。
用戶應(yīng)該在Config.h中定義宏TIMER_RELOAD來(lái)設(shè)定定時(shí)器0的重裝載初值。推薦的定時(shí)器0的中斷時(shí)間大于1毫秒。
在程序的初始化階段調(diào)用時(shí)鐘模塊的初始化函數(shù)InitTimerModule()之后,就可以使用時(shí)鐘模塊所以支持的各種功能。具體描述如下:
延時(shí):當(dāng)用戶需要進(jìn)行一定時(shí)間的延時(shí)時(shí),可以通過(guò)調(diào)用Delay()來(lái)進(jìn)行,參數(shù)為時(shí)鐘中斷的次數(shù)。如時(shí)鐘中斷周期為1ms,想進(jìn)行100ms的延時(shí),則可以調(diào)用Delay(100)。
注意:
如果延時(shí)的絕對(duì)時(shí)間小于時(shí)鐘中斷的周期,則不能夠用本方法做到延時(shí)。
定時(shí):當(dāng)程序中需要使用定時(shí)功能時(shí),如等待某外部事件,如果在一定時(shí)間內(nèi)發(fā)生則繼續(xù)執(zhí)行,如果在這段時(shí)間內(nèi)發(fā)生,則認(rèn)為出現(xiàn)錯(cuò)誤,轉(zhuǎn)向錯(cuò)誤處理機(jī)制。
在此推薦一種編程模式,但用戶可以用自己認(rèn)為更合理的方式處理此類(lèi)問(wèn)題。
這里簡(jiǎn)單說(shuō)明一下關(guān)于阻塞式函數(shù)及非阻塞式函數(shù)。簡(jiǎn)單說(shuō),阻塞式函數(shù)就是當(dāng)檢測(cè)完成條件,如
果不能夠完成則等待,如:
voidCheckSomething()
{
//gbitSuccessFlagisaglobalvariable
while(gbitSuccessFlag==FALSE)
{
//donothingbutwaiting
}
}
可以看到,當(dāng)bitSuccessFlag沒(méi)有被設(shè)置為T(mén)RUE時(shí),函數(shù)保持等待狀態(tài)不返回,這樣就是阻塞式的函數(shù)。
另外一種情況:
BITCheckSomething()
{
if(gbitSuccessFlag==TRUE)
{
//…
returnTRUE;
}
returnFALSE;
}
在這里,如果所檢測(cè)的事件有沒(méi)有完成,函數(shù)進(jìn)行檢測(cè)之后,立刻返回,通過(guò)返回值報(bào)告完成情況,如果沒(méi)有完成,則等待調(diào)用者分配再次執(zhí)行的機(jī)會(huì)。這樣的函數(shù)就是非阻塞函數(shù)。
在應(yīng)用定時(shí)功能時(shí),首先要將檢測(cè)函數(shù)定義成非阻塞函數(shù)。如上面的第二個(gè)版本的CheckSomething。
然后下面模式:
BITbitDone=FALSE;
ResetClock();//cleartimerinterrupttimescounter
while(GetClock()
{
if(CheckSomething()==TRUE)
{
bitDone=TRUE;
break;
}
}
if(bitDone==FALSE)
{
//processtimeout
}或者簡(jiǎn)單寫(xiě)成:
BITbitDone=FALSE;
ResetClock();
while(GetClock()=(z))
當(dāng)然,用戶也可以將IsPackageHeader和IsPackageTailer定義成為函數(shù),通過(guò)BIT類(lèi)型的返回值來(lái)向調(diào)用者提供與相應(yīng)宏相同的信息。
另一種辦法需要在Config.h文件中定義宏SCOMM_ComplexPackageFormat。(需要注意的是,不能夠同時(shí)定義SCOMM_SimplePackageFormat和SCOMM_ComplexPackageFormat宏,否則會(huì)造成嚴(yán)重的不可預(yù)見(jiàn)性錯(cuò)誤。
這時(shí)需要提供回調(diào)函數(shù)QueryPackageFormat,原形如下:
BYTEQueryPackageFormat(BYTEbyData,BYTEbyCount,BYTEbyParam);
函數(shù)中三個(gè)參數(shù)的含義與使用簡(jiǎn)單數(shù)據(jù)包格式時(shí)判斷數(shù)據(jù)包尾的宏的參數(shù)相同。
函數(shù)通過(guò)返回值來(lái)通知作為調(diào)用者的接收函數(shù)對(duì)接收到的數(shù)據(jù)如何處理,但目前這種方法僅為需要處理復(fù)雜數(shù)據(jù)包格式時(shí)的一種可選方法,但不推薦。用戶如果想使用這種方法可以自己更改接收函數(shù)中相應(yīng)的
#ifdefSCOM_ComplexPackageFormat
#endif//SCOMM_ComplexPackageFormat
預(yù)編譯指令之間的內(nèi)容。
例如指定QueryPackageFormat的返回值的含義:
0:繼續(xù)找數(shù)據(jù)包頭或繼續(xù)找數(shù)據(jù)包尾。
1:找到數(shù)據(jù)包頭。
2:找到數(shù)據(jù)包尾。
3:數(shù)據(jù)包出錯(cuò),需要拋棄。
然后更改源代碼來(lái)實(shí)現(xiàn)上面的協(xié)議。
注意:當(dāng)用戶需要使用字符串的時(shí)候,可以利用簡(jiǎn)單的包裝函數(shù)將字符串轉(zhuǎn)換為字節(jié)數(shù)組。所以沒(méi)有必要提供專(zhuān)用的字符串處理函數(shù)。
鍵盤(pán)掃描模塊
鍵盤(pán)掃描模塊有兩種工作方式,一種為自動(dòng)的由時(shí)鐘模塊調(diào)用,另一種是由程序員自行調(diào)用。
1)由時(shí)鐘模塊自動(dòng)調(diào)用的方式
將時(shí)鐘模塊實(shí)現(xiàn)文件(Timer.h)及鍵盤(pán)掃描模塊的實(shí)現(xiàn)文件(KBScan。c)包含進(jìn)工程,在Config.h文件中添加TIMER_KBSCANDELAY宏。時(shí)鐘模塊自動(dòng)對(duì)時(shí)鐘中斷進(jìn)行計(jì)數(shù),當(dāng)達(dá)到TIMER_KBSCANDELAY宏所定義的值后,自動(dòng)調(diào)用鍵盤(pán)掃描模塊中的函數(shù)KBScanProcess()進(jìn)行鍵盤(pán)掃描,也就是說(shuō),這個(gè)宏的值可以決定按鍵消抖動(dòng)的時(shí)間。
用戶應(yīng)該提供兩個(gè)回調(diào)函數(shù)OnKBScan()及OnKeysPressed()。在函數(shù)OnKBScan中進(jìn)行鍵盤(pán)掃描,并返回掃描碼。掃描碼的類(lèi)型缺省為BYTE,當(dāng)鍵盤(pán)規(guī)模較大時(shí),BYTE不能夠完全包含鍵盤(pán)信息時(shí),可在Config.h文件中重定義宏KBvalue,如下:
#defineKBvalueWORD
這樣,就可以使用16位的鍵盤(pán)掃描碼,如果此時(shí)還達(dá)不到要求,可以將鍵盤(pán)掃描碼定義成一個(gè)結(jié)構(gòu),但這樣做將會(huì)增加代碼量及消耗更多的RAM資源,故不推薦。
掃描模塊調(diào)用OnKBScan取得掃描碼,并調(diào)用用戶可以重定義的宏IsNoKeyPressed來(lái)判斷是否有鍵按下,缺省的IsNoKeyPressed實(shí)現(xiàn)如下:
#defineIsNoKeyPressed(x)((x)==0x00)
即認(rèn)為OnKBScan返回0掃描碼時(shí)為沒(méi)有鍵按下,如果掃描函數(shù)返回其它非零掃描碼做為無(wú)鍵按下的掃描碼時(shí),可以在Config.h文件中重定義IsNoKeyPressed宏的實(shí)現(xiàn)。
8位鍵盤(pán)掃描碼(缺省值)時(shí),相應(yīng)的掃描函數(shù)為:
BYTEOnKBScan()
當(dāng)掃描模塊經(jīng)過(guò)軟件消抖動(dòng)之后,發(fā)現(xiàn)有鍵按下,就會(huì)調(diào)用另一個(gè)回調(diào)函數(shù)OnKeysPressed。函數(shù)的聲明應(yīng)該如下:
voidOnKeyPressed(BYTEbyKBvalue,BYTEbyState)
其中中的參數(shù)byKBvalue的類(lèi)型為BYTE,此為缺省值,如果使用其它類(lèi)型的掃描碼,就將此參數(shù)變?yōu)橄鄳?yīng)類(lèi)型。這個(gè)值由OnKBScan返回。另一個(gè)參數(shù)byState在通常情況下為零。但當(dāng)用戶在Config.h中定義宏KBSCAN_BRUSTCOUNT,同時(shí)鍵盤(pán)上的某鍵被按住不放時(shí),掃描模塊對(duì)它自己的調(diào)用(注意這里和TIMER_KBSCANDELAY宏不同,TIMER_KBSCANDELAY是時(shí)鐘中斷足夠的次數(shù)后調(diào)用掃描模塊,而KBSCAN_BRUSHCOUNT為掃描模塊自身的被調(diào)用次數(shù))進(jìn)行計(jì)數(shù),當(dāng)達(dá)到KBSCAN_BRUSTCOUNT時(shí),掃描模塊調(diào)用OnKeysPressed,此時(shí)第一個(gè)參數(shù)的含義不變,而byState變成1,同時(shí)計(jì)數(shù)器復(fù)位,又經(jīng)過(guò)一段時(shí)間后,用值為3的byState調(diào)用OnKeysPressed。這樣就可以很方便的實(shí)現(xiàn)多功能鍵或者檢測(cè)某鍵的長(zhǎng)時(shí)間被按下。
2)由用戶自行調(diào)用
由用戶自行在程序中調(diào)用掃描模塊,而不是由時(shí)鐘中斷自行調(diào)用。其它與方式1相同。
注意:
1)函數(shù)KBScanProcess為非阻塞函數(shù),它將在很快的時(shí)間內(nèi)返回,等待再次分配給它執(zhí)行的機(jī)會(huì)。
2)函數(shù)KBScanProcess是在時(shí)鐘中斷外部運(yùn)行的,它的過(guò)程可以被任何中斷打斷,但不影響系統(tǒng)運(yùn)行。
3)byState的最大值為250,之后被復(fù)位為零。
應(yīng)用舉例
現(xiàn)在來(lái)舉例說(shuō)明上述幾個(gè)模塊的使用方法。
硬件環(huán)境描述:
為了控制一盞燈,需要單片機(jī)提供一個(gè)做控制功能的開(kāi)關(guān)量,這里不描述外部接口電路,只說(shuō)明當(dāng)單片機(jī)的P10腳為高電平時(shí),燈滅,當(dāng)P10腳為低電平時(shí),燈亮。
可以通過(guò)計(jì)算機(jī)由串口發(fā)送命令來(lái)控制,或通過(guò)一個(gè)按鍵(pus
hbutton不是自鎖式的按鍵)來(lái)手動(dòng)控制(按鍵接在P11腳上,當(dāng)鍵沒(méi)有按下時(shí),P11電平為高,鍵按下時(shí),引腳電平被接低),當(dāng)使用按鍵手動(dòng)控制的時(shí)候,需要給計(jì)算機(jī)發(fā)送通知。
設(shè)定串口通訊指令如下:
數(shù)據(jù)包由0xff做包頭,4個(gè)字節(jié)長(zhǎng),第二個(gè)字節(jié)為命令代碼,第三個(gè)字節(jié)為數(shù)據(jù),最后一個(gè)字節(jié)為校驗(yàn)位。
命令和數(shù)據(jù)代碼有如下組合:
(計(jì)算機(jī)發(fā)給單片機(jī))
0x100x01:計(jì)算機(jī)控制燈亮。(數(shù)據(jù)位是非零值即可)
0x100x00:計(jì)算機(jī)控制燈滅。
(單片機(jī)發(fā)給計(jì)算機(jī))
0x110x01:?jiǎn)纹瑱C(jī)正常執(zhí)行控制指令,返回。(數(shù)據(jù)位是非零值即可)
0x110x00:單片機(jī)不能夠正常執(zhí)行控制指令,或控制指令錯(cuò)(不明含義的數(shù)據(jù)包或校驗(yàn)錯(cuò)等)。
0x120x01:手動(dòng)控制燈亮。(數(shù)據(jù)位是非零值即可)
0x120x00:手動(dòng)控制燈滅。建立工程:
在硬盤(pán)上建立文件夾Projects,在Projects下建立Common文件夾及Example文件夾。將各模塊的頭文件及實(shí)現(xiàn)文件拷貝到Common文件夾下(推薦使用這樣的文件組織結(jié)構(gòu),其它工程也可以建立在Projects下,各工程共享Common文件夾中的代碼)。
啟動(dòng)KeilC的IDE,在Example下建立新工程,將各模塊的實(shí)現(xiàn)文件包含進(jìn)工程。
在Example文件夾下建立Output文件夾,更改工程設(shè)置,將Output作為輸出文件和List文件的輸出文件夾(推薦使用這樣的結(jié)構(gòu),當(dāng)保存工程文件時(shí),可以簡(jiǎn)單的刪除Output文件夾中的內(nèi)容而不會(huì)誤刪有用的工程文件)。
建立工程配置頭文件Config.h及工程主文件Example.c,并將Exmaple.c文件加入工程。
輸入代碼:
代碼的具體編寫(xiě)過(guò)程略。下面是最后的Config.h文件及Example.c文件。
//
//file:onfig.h
//
#ifndef_CONFIG_H_
#define_CONFIG_H_
#include//使用AT89C52做控制
#include“../Common/Common.h”//使用自定義的數(shù)據(jù)類(lèi)型
#defineTIMER_RELOAD922//11.0592MHz晶振,1ms中斷周期
#defineTIMER_KBSCANDELAY40//40ms重檢測(cè)按鍵狀態(tài),即40ms消抖
#defineSCOMM_AsyncInterface//使用異步通訊服務(wù)
#defineIsPackageHeader(x)((x)==0xff)//判斷包頭是不是0xff
#defineIsPackageTailer(x,y,z)((y)<=(z))//判斷包的長(zhǎng)度是不是足夠
#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;//燈的狀態(tài),缺省為off
staticvoidInitialize()
{
InitTimerModule();//初始化時(shí)鐘模塊
InitSCommModule(0xfd,TRUE);//初始化通訊模塊,11.0592MHz晶振,
//波特率為19200
EA=1;//開(kāi)中斷
}
voidmain()
{
Initialize();//初始化
while(TRUE)//主循環(huán)
{
ImpTimerService();//實(shí)現(xiàn)時(shí)鐘中斷服務(wù),如鍵盤(pán)掃描
AsyncRecePackage(4);//接收4個(gè)字節(jié)長(zhǎng)的數(shù)據(jù)包
}
}
//在中斷外部響應(yīng)時(shí)鐘中斷事件
voidOnTimerEvent()
{
//donothing
}
//控制外部燈
staticvoidTriggerLamp(BITbEnable)
{
P10=~bEnable;//需要反相控制
}
//鍵掃描回調(diào)函數(shù)
BYTEKBScan()
{
BITb;
P11=1;//讀之前拉高引腳電平
b=P11;//讀入引腳狀態(tài)
return~b;//數(shù)據(jù)反相做掃描碼
}
//計(jì)算校驗(yàn)和
staticBYTECalcCheckSum(BYTE*pbyBuf,BYTEbyLen)
{
BYTEby,bySum=0;
for(by=0;by
return0–bySum;
}
//接收到鍵盤(pán)消息回調(diào)函數(shù)
voidOnKeyPressed(BYTEbyvalue,BYTEbyState)
{
BYTEby[4];
if(byState==0)
{
switch(byvalue)
{
case0x01:
gbitLampState=~gbitLampState;//燈狀態(tài)取反
TriggerLamp(gbitLampState);//執(zhí)行控制
by[0]=0xff;//構(gòu)造數(shù)據(jù)包
by[1]=0x12;
by[2]=(BYTE)gbitLampState;
by[3]=CalcCheckSum(by,3);//求校驗(yàn)和
SendPackage(by,4);//發(fā)送數(shù)據(jù)包
break;
//處理其它掃描碼
default:
break;
}
}
//接收到數(shù)據(jù)包回調(diào)函數(shù)
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);//處理長(zhǎng)度或校驗(yàn)和不正確
}
switch(pbyBuf[1])
{
case0x10:
gbitLampState=(BIT)pbyBuf[2];
TriggerLamp(gbitLampState);
by[2]=1;
by[3]=CalcCheckSum(by,3);
SendPackage(by,4);//發(fā)送成功執(zhí)行通知
break;
default://不知道的命令
by[2]=0;
by[3]=CalcCheckSum(by,3);
SendPackage(by,4);//發(fā)送沒(méi)有成功執(zhí)行通知
break;
}
}
4.課程設(shè)計(jì)單獨(dú)計(jì)算成績(jī),考評(píng)方法見(jiàn)其大綱。
三、理論考試說(shuō)明
1.單片機(jī)技術(shù)及應(yīng)用理論考試,采用閉卷筆試形式,考試時(shí)間120分鐘。
2.期末考試試題根據(jù)教學(xué)大綱,其范圍和難度按照本方案中制訂的考試考核內(nèi)容和要求確定??荚嚸}覆蓋考試大綱要求范圍。
3.期末考試試題類(lèi)型有以下幾種:
①填空題;
②選擇題;
③判斷題;
④簡(jiǎn)答題⑤綜合應(yīng)用題。
四、考試考核要求層次
按照教學(xué)大綱的要求,理論考試要求分為掌握、理解和了解三個(gè)層次。
掌握:
對(duì)于本課程的重點(diǎn)內(nèi)容要求學(xué)生達(dá)到掌握的程度。即能夠全面、深入理解和熟練掌握所學(xué)內(nèi)容,并能夠用其分析、初步設(shè)計(jì)和解答與應(yīng)用相關(guān)的問(wèn)題,能夠舉一反三。要求學(xué)生掌握的內(nèi)容也就是考試的主要內(nèi)容,在考試中所占比例約70。
理解:
對(duì)于本課程的一般內(nèi)容要求學(xué)生能夠理解。即要求學(xué)生能夠較好地理解所學(xué)內(nèi)容,并且對(duì)所涉及的內(nèi)容能夠進(jìn)行簡(jiǎn)單分析和判斷。要求學(xué)生理解的內(nèi)容也是考試的內(nèi)容,在考試中所占比例約25。
了解:
對(duì)于本課程的次要內(nèi)容要求學(xué)生能夠了解。要求學(xué)生了解的內(nèi)容,一般是指在眼下不必進(jìn)一步深入和擴(kuò)展,有些也許需要學(xué)生自己今后在工作中進(jìn)行深入研究。對(duì)要求了解的內(nèi)容,在考試中占較小比例,不超過(guò)5。實(shí)驗(yàn)五:按鍵電路、顯示電路實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康模?.掌握獨(dú)立式按鍵電路與矩陣式按鍵電路的設(shè)計(jì)方法。2.掌握數(shù)碼管顯示電路的工作原理3.掌握源程序編輯軟件UltraEdit,編譯軟件KeilC51、仿真軟件Proteus的使用方法4.掌握硬件仿真器ME-52A的使用方法二、實(shí)驗(yàn)器材:1.單片機(jī)實(shí)驗(yàn)板2.單片機(jī)硬件仿真器ME-51A3.計(jì)算機(jī)4.電源三、實(shí)驗(yàn)要求:1.電路如圖5所示,用單片機(jī)的P3口所接的四個(gè)獨(dú)立式按鍵控制p1口流水燈花樣的方法;具體表現(xiàn)為:p3.0、P3.1、P3.2、P3.3四個(gè)小按鍵分別實(shí)現(xiàn)了四個(gè)控制:(1)跑燈:即P1.0---1.7亮點(diǎn)流動(dòng):(2)流水燈:即P1.0-1.7依次點(diǎn)亮(3)交叉閃爍:即P0.0,P0.2,P0.4,P0.6和P0.1,P0.3,P0.5,P0.7輪流點(diǎn)亮(4)停止;在任何狀態(tài)下按此鍵程序停止運(yùn)行.2.電路如圖6所示,用P2口所接的4×4矩陣式鍵盤(pán)作為輸入,在P1口所接的數(shù)碼管上顯示出每個(gè)按鍵的0~F序號(hào),鍵盤(pán)的布局如下表所示:FEDCBA9876543210四、實(shí)驗(yàn)原理:1.獨(dú)立式按鍵電路顯示如圖5所示,從圖中可看出,判斷有無(wú)鍵按下,只要檢測(cè)P3.0~P3.3相應(yīng)端口的高低電平即可,若檢測(cè)有某一端口為低電平,表明該端口有按鍵按下,經(jīng)延時(shí)消抖后轉(zhuǎn)去執(zhí)行相應(yīng)的功能子程序。若為高電平,表明無(wú)鍵按1.獨(dú)立式按鍵電路如圖5所示,下,繼續(xù)檢測(cè)。示例程序如下:ORG000HLJMPSTAR1ORG0030HSTAR1:MOVP3,#0FFH;置P3口為輸入態(tài)JNBP3.0,FUN0;判別P3.0是否有鍵按下,是,則轉(zhuǎn)FUN0JNBP3.1,FUN1;判別P3.1是否有鍵按下,是,則轉(zhuǎn)FUN1JNBP3.2,FUN2;判別P3.2是否有鍵按下,是,則轉(zhuǎn)FUN2JNBP3.3,FUN3;判別P3.3是否有鍵按下,是,則轉(zhuǎn)FUN3JNBF0,STAR1;曾經(jīng)有鍵按下F0置1RET圖5FUN0:LCALLDL10MS;消岸抖動(dòng)JBP3.0,STAR1WAITL0:JNBP3.0,WAITL0;等待鍵釋放SETBF0FUN01:LCALLFUN00LCALLSTAR1LJMPFUN01FUN1:LCALLDL10MS;消岸抖動(dòng)JBP3.1,STAR1WAITL1:JNBP3.1,WAITL1;等待鍵釋放SETBF0FUN10:LCALLFUN11LCALLSTAR1LJMPFUN10FUN2:LCALLDL10MS;消岸抖動(dòng)JBP3.2,STAR1WAITL2:JNBP3.2,WAITL2;等待鍵釋放SETBF0FUN20:LCALLFUN22LCALLSTAR1LJMPFUN20FUN3:LCALLDL10MS;消岸抖動(dòng)JBP3.3,STAR1WAITL3:JNBP3.3,WAITL3;等待鍵釋放CLRF0MOVP1,#0FFH;關(guān)顯示LJMPSTAR1FUN00:MOVA,#0FEH;跑燈子程序FUN000:MOVP1,ALCALLDL05SJNBACC.7,OUTRLAAJMPFUN000OUT:RETFUN11:MOVA,#0FEH;流水燈子程序FUN111:MOVP1,ALCALLDL05SJZOUTRLAANLA,P1AJMPFUN111FUN22:MOVA,#0AAH;交叉點(diǎn)亮子程序MOVP1,ALCALLDL30SCPLAMOVP1,ALCALLDL30SRET;____________;;延時(shí)程序;;____________;DL512:MOVR2,#0FFHLOOP1:DJNZR2,LOOP1RETDL10MS:MOVR3,#14HLOOP2:LCALLDL512DJNZR3,LOOP2RETDL05S:MOVR4,#0AHLOOP3:LCALLDL10MSDJNZR4,LOOP3RETDL30S:MOVR5,#03HLOOP4:LCALLDL05SDJNZR5,LOOP4RETEND2.矩陣式按鍵電路顯示如圖6所示。采用掃描方式進(jìn)行按鍵的識(shí)別檢測(cè),并將對(duì)應(yīng)按鍵的鍵號(hào)用查表指令將對(duì)應(yīng)的代碼顯示在數(shù)碼管上。圖6參考程序如下:ORG0000HLJMPSTARTORG0030HSTART:MOVSP,#60H;設(shè)置堆棧指針SCAN:MOVR3,#0F7H;置行掃描初值MOVR1,#00H;到TABLE表中取碼的指針SCAN1:MOVA,R3MOVP2,A;掃描輸出MOVA,P2;重讀P2口狀態(tài)MOVR4,A;暫存于R4呂中SETBC;C=1MOVR5,#03H;掃描4列初值L1:RLCA;A中內(nèi)容循環(huán)左移JNCKEYIN;C=0,有鍵按下,轉(zhuǎn)消抖INCR1;取碼指針加1DJNZR5,L1;無(wú)鍵按下,繼續(xù)檢測(cè)MOVA,R3;掃描下一行SETBCRRCAMOVR3,AJCSCAN1;4行是否掃描完,未完,繼續(xù)LJMPSCANKEYIN:MOVR7,#10;削除抖動(dòng)D2:MOVR6,#248DJNZR6,$DJNZR7,D2D3:MOVA,P2;按鍵放開(kāi)否?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五、實(shí)驗(yàn)步驟:1.運(yùn)行UltraEdit-32源程序編輯軟件,輸入、編輯匯編語(yǔ)言源程序。2.運(yùn)行KeiluVision2源程序編譯軟件,對(duì)源程序進(jìn)行編譯,得到目標(biāo)代碼文件。3.運(yùn)行Proteus模擬仿真軟件,打開(kāi)已繪制好的仿真電路原理圖,進(jìn)行模擬 仿真。4.把硬件仿真器ME-52A與單片實(shí)驗(yàn)板連接好,再用硬件仿真器進(jìn)行仿真驗(yàn)證。六、實(shí)驗(yàn)分析與總結(jié)1.用仿真系統(tǒng)調(diào)試簡(jiǎn)單程序結(jié)構(gòu)、分支程序結(jié)構(gòu)、循環(huán)程序結(jié)構(gòu)、子程序結(jié)構(gòu)和中斷結(jié)構(gòu)的關(guān)鍵在于,如何將對(duì)程序的分析理解和開(kāi)發(fā)系統(tǒng)提供的基本功能有機(jī)地結(jié)合起來(lái),其前提條件是必須對(duì)源程序的作用、結(jié)構(gòu)特點(diǎn)、運(yùn)行過(guò)程與結(jié)果有較全面的認(rèn)識(shí),并能根據(jù)程序運(yùn)行過(guò)程中出現(xiàn)的現(xiàn)象和結(jié)果分析并判斷產(chǎn)生各種故障現(xiàn)象的原因,再運(yùn)用排除法逐一檢驗(yàn)各種判斷是否準(zhǔn)確。2.掌握程序結(jié)構(gòu)特點(diǎn)的基礎(chǔ)上,合理選擇觀測(cè)點(diǎn),通過(guò)觀察在觀測(cè)點(diǎn)處參數(shù)及路徑的變化檢驗(yàn)程序運(yùn)行的結(jié)果。3.高調(diào)試程序的效率,應(yīng)對(duì)單片機(jī)開(kāi)發(fā)系統(tǒng)所提供的幾種程序運(yùn)行調(diào)試方式有足夠的了解并能熟練地運(yùn)用。例如,在調(diào)試過(guò)程中,若要觀察最終結(jié)果,則可選擇全速運(yùn)行調(diào)試;若要觀察相關(guān)指令的運(yùn)行結(jié)果或運(yùn)行路徑的變化過(guò)程,則可選擇單步運(yùn)行;若要檢查子程序的運(yùn)行過(guò)程,則可選擇跟蹤運(yùn)行調(diào)試;若要檢查循環(huán)程序或中斷服務(wù)程序,則可選擇斷點(diǎn)運(yùn)行調(diào)試;若要定點(diǎn)檢查程序運(yùn)行到某處的結(jié)果時(shí),則可選擇快速運(yùn)行到光標(biāo)處調(diào)試。但實(shí)際中究竟選用哪種方法更適宜或哪幾種方法結(jié)合使用更快捷,將隨著分析能力與操作的熟練程度逐步提高。4.程序運(yùn)行結(jié)果是否正確時(shí),應(yīng)運(yùn)用單片機(jī)開(kāi)發(fā)系統(tǒng)所提供的交互界面,將程序運(yùn)行過(guò)程中程序計(jì)數(shù)器PC(地址)的變化、各單元(內(nèi)部RAM和外部RAM)內(nèi)容的變化、特殊功能寄存器內(nèi)容的變化、堆棧指針SP內(nèi)容的變化與程序的理論分析結(jié)果相對(duì)照。5.程序和調(diào)試程序時(shí),需要多次反復(fù)的過(guò)程,并非一次就能排除全部故障,特別是單片機(jī)應(yīng)用系統(tǒng)的硬件電路和匯編程序相結(jié)合的綜合調(diào)試就更加復(fù)雜,因此,必須通過(guò)反復(fù)調(diào)試,不斷修改硬件和軟件,直到最終符合設(shè)計(jì)要求為止。如果在調(diào)試中能夠根據(jù)實(shí)驗(yàn)現(xiàn)象預(yù)先對(duì)產(chǎn)生故障的原因加以判斷和分析,并制定出相應(yīng)的調(diào)試方法和步驟,可縮小排除故障的范圍,提高調(diào)試效率。七、思考與練習(xí)填空題
1、設(shè)X=5AH,Y=36H,則X與Y“或”運(yùn)算為_(kāi)_7EH_______,X與Y的“異或”運(yùn)算為_(kāi)__6CH_____。
2、若機(jī)器的字長(zhǎng)為8位,X=17,Y=35,則X+Y=__110100_____,X-Y=_11101110______(要求結(jié)果寫(xiě)出二進(jìn)制形式)。
3、單片機(jī)的復(fù)位操作是____高電平______(高電平/低電平),單片機(jī)復(fù)位后,堆棧指針SP的值是___07h_____。
4、單片機(jī)中,常用作地址鎖存器的芯片是__74HC373____________,常用作地址譯碼器芯片是_____74HC138____________。
5、若選擇內(nèi)部程序存儲(chǔ)器,應(yīng)該設(shè)置為_(kāi)____高_(dá)______(高電平/低電平),那么,PSEN信號(hào)的處理方式為_(kāi)__不用__________________。
6、單片機(jī)程序的入口地址是____0000H__________,外部中斷1的入口地址是______0013H_________。
7、若采用6MHz的晶體振蕩器,則MCS-51單片機(jī)的振蕩周期為_(kāi)_0.5us_______,機(jī)器周期為_(kāi)____2us__________。
8、擴(kuò)展芯片的選擇方法有兩種,它們分別是___線選法_______________和_____譯碼法__________。
9、單片機(jī)的內(nèi)部RAM區(qū)中,可以位尋址的地址范圍是____20H~2FH______________,特殊功能寄存器中,可位尋址的地址是___是能被8整除的地址_________________。
10、子程序返回指令是___ret______,中斷子程序返回指令是__reti。
11、8051單片機(jī)的存儲(chǔ)器的最大特點(diǎn)是內(nèi)部RAM與外部RAM分開(kāi)編址。
12、8051最多可以有32個(gè)并行輸入輸出口,最少也可以有8個(gè)并行口。
13、函數(shù)是C語(yǔ)言的基本單位。
14、串行口方式2接收到的第9位數(shù)據(jù)送SCON寄存器的RB8位中保存。
15、MCS-51內(nèi)部提供3個(gè)可編程的16位定時(shí)/計(jì)數(shù)器,定時(shí)器有4種工作方式。
16、一個(gè)函數(shù)由兩部分組成,即說(shuō)明部分和語(yǔ)句部分。
17、串行口方式3發(fā)送的第9位數(shù)據(jù)要事先寫(xiě)入SCON寄存器的TB8位。
18、利用8155H可以擴(kuò)展3個(gè)并行口,256個(gè)RAM單元。
19、C語(yǔ)言中輸入和輸出操作是由庫(kù)函數(shù)scanf和printf等函數(shù)來(lái)完成。
二、選擇題
1、C語(yǔ)言中最簡(jiǎn)單的數(shù)據(jù)類(lèi)型包括(B)。
A、整型、實(shí)型、邏輯型B、整型、實(shí)型、字符型
C、整型、字符型、邏輯型D、整型、實(shí)型、邏輯型、字符型
2、當(dāng)MCS-51單片機(jī)接有外部存儲(chǔ)器,P2口可作為(C)。
A、數(shù)據(jù)輸入口B、數(shù)據(jù)的輸出口
C、準(zhǔn)雙向輸入/輸出口D、輸出高8位地址
3、下列描述中正確的是(D)。
A、程序就是軟件B、軟件開(kāi)發(fā)不受計(jì)算機(jī)系統(tǒng)的限制
C、軟件既是邏輯實(shí)體,又是物理實(shí)體D、軟件是程序、數(shù)據(jù)與相關(guān)文檔的集合
4、下列計(jì)算機(jī)語(yǔ)言中,CPU能直接識(shí)別的是(D)。
A、自然語(yǔ)言B、高級(jí)語(yǔ)言C、匯編語(yǔ)言D、機(jī)器語(yǔ)言
5、MCS-5l單片機(jī)的堆棧區(qū)是設(shè)置在(C)中。
A、片內(nèi)ROM區(qū)B、片外ROM區(qū)C、片內(nèi)RAM區(qū)D、片外RAM區(qū)
6、以下敘述中正確的是(C)。
A、用C語(yǔ)言實(shí)現(xiàn)的算法必須要有輸入和輸出操作
B、用C語(yǔ)言實(shí)現(xiàn)的算法可以沒(méi)有輸出但必須要有輸入
C、用C程序?qū)崿F(xiàn)的算法可以沒(méi)有輸入但必須要有輸出
D、用C程序?qū)崿F(xiàn)的算法可以既沒(méi)有輸入也沒(méi)有輸出
7、定時(shí)器/計(jì)數(shù)器工作方式1是(D)。
A、8位計(jì)數(shù)器結(jié)構(gòu)B、2個(gè)8位計(jì)數(shù)器結(jié)構(gòu)
C、13位計(jì)數(shù)結(jié)構(gòu)D、16位計(jì)數(shù)結(jié)構(gòu)
8、C語(yǔ)言提供的合法的數(shù)據(jù)類(lèi)型關(guān)鍵字是(B)。
A、DoubleB、shortC、integerD、Char
9、片內(nèi)RAM的20H~2FH為位尋址區(qū),所包含的位地址是(B)。
A、00H~20HB、00H~7FHC、20H~2FHD、00H~FFH
10、以下能正確定義一維數(shù)組的選項(xiàng)是(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、數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)是指(D)。
A、存儲(chǔ)在外存中的數(shù)據(jù)B、數(shù)據(jù)所占的存儲(chǔ)空間量
C、數(shù)據(jù)在計(jì)算機(jī)中的順序存儲(chǔ)方式D、數(shù)據(jù)的邏輯結(jié)構(gòu)在計(jì)算機(jī)中的表示
12、下列關(guān)于棧的描述中錯(cuò)誤的是(C)。
A、棧是先進(jìn)后出的先性表B、棧只能順序存儲(chǔ)
C、棧具有記憶作用D、對(duì)棧的插入和刪除操作中,不需要改變棧底指針
13、在寄存器間接尋址方式中,間址寄存器中存放的數(shù)據(jù)是(B)。
A、參與操作的數(shù)據(jù)B、操作數(shù)的地址值
C、程序的轉(zhuǎn)換地址D、指令的操作碼
14、MCS-51單片機(jī)的復(fù)位信號(hào)是(A)有效。
A、高電平B、低電平C、脈沖D、下降沿
15、為了使模塊盡可能獨(dú)立,要求(B)。
A、模塊的內(nèi)聚程度要盡量高,且各模塊間的耦合程度要盡量強(qiáng)
B、模塊的內(nèi)聚程度要盡量高,且各模塊間的耦合程度要盡量弱
C、模塊的內(nèi)聚程度要盡量低,且各模塊間的耦合程度要盡量弱
D、模塊的內(nèi)聚程度要盡量低,且各模塊間的耦合程度要盡量強(qiáng)
16、若MCS-51單片機(jī)使用晶振頻率為6MHz時(shí),其復(fù)位持續(xù)時(shí)間應(yīng)該超過(guò)(B)。
A、2μsB、4μsC、8μsD、1ms
17、以下選項(xiàng)中可作為C語(yǔ)言合法常量的是(A)
A、-80B、-080C、-8e1.0D、-80.0e
18、能夠用紫外光擦除ROM中程序的只讀存儲(chǔ)器稱(chēng)為(C)。
A、掩膜ROMB、PROMC、EPROMD、EEPROM
19、以下不能定義為用戶標(biāo)識(shí)符是(D)。
A、MainB、_0C、_intD、sizeof
20、下選項(xiàng)中,不能作為合法常量的是(B)。//冪不能為小數(shù)
A、1.234e04B、1.234e0.4C、1.234e 4D、1.234e0
21、以下敘述中錯(cuò)誤的是(C)
A、對(duì)于double類(lèi)型數(shù)組,不可以直接用數(shù)組名對(duì)數(shù)組進(jìn)行整體輸入或輸出
B、數(shù)組名代表的是數(shù)組所占存儲(chǔ)區(qū)的首地址,其值不可改變
C、當(dāng)程序執(zhí)行中,數(shù)組元素的下標(biāo)超出所定義的下標(biāo)范圍時(shí),系統(tǒng)將給出“下標(biāo)越界”的出錯(cuò)信息
D、可以通過(guò)賦初值的方式確定數(shù)組元素的個(gè)數(shù)
22、以下與函數(shù)fseek(fp,0L,SEEK_SET)有相同作用的是(D)
A、feof(fp)B、ftell(fp)C、fgetc(fp)D、rewind(fp)
23、存儲(chǔ)16×16點(diǎn)陣的一個(gè)漢字信息,需要的字節(jié)數(shù)為(A)
A、32B、64C、128D、256
24、已知1只共陰極LED顯示器,其中a筆段為字形代碼的最低位,若需顯示數(shù)字1,則它的字形代碼應(yīng)為(B)。
A、06HB、F9HC、30HD、CFH
25、在C語(yǔ)言中,合法的長(zhǎng)整型常數(shù)是(A)
A、OLB、4962710C、324562&D、216D
26、以下選項(xiàng)中合法的字符常量是(B)
A、"B"B、’\010’C、68D、D
27、若PSW.4=0,PSW.3=1,要想把寄存器R0的內(nèi)容入棧,應(yīng)使用(D)指令。
A、PUSHR0B、PUSH@R0C、PUSH00HD、PUSH08H
28、在片外擴(kuò)展一片2764程序存儲(chǔ)器芯片要(B)地址線。
A、8根B、13根C、16根D、20根
29、設(shè)MCS-51單片機(jī)晶振頻率為12MHz,定時(shí)器作計(jì)數(shù)器使用時(shí),其最高的輸入計(jì)數(shù)頻率應(yīng)為(C)
A、2MHzB、1MHzC、500kHzD、250kHz
30、下列數(shù)據(jù)字定義的數(shù)表中,(A)是錯(cuò)誤的。
A、DW“AA”B、DW“A”C、DW“OABC”D、DWOABCH
三、判斷題
(√)1、在對(duì)某一函數(shù)進(jìn)行多次調(diào)用時(shí),系統(tǒng)會(huì)對(duì)相應(yīng)的自動(dòng)變量重新分配存儲(chǔ)單元。
(×)2、在C語(yǔ)言的復(fù)合語(yǔ)句中,只能包含可執(zhí)行語(yǔ)句。
(√)3、自動(dòng)變量屬于局部變量。
(×)4、Continue和break都可用來(lái)實(shí)現(xiàn)循環(huán)體的中止。
(√)5、字符常量的長(zhǎng)度肯定為1。
(×)6、在MCS-51系統(tǒng)中,一個(gè)機(jī)器周期等于1.5μs。
(√)7、C語(yǔ)言允許在復(fù)合語(yǔ)句內(nèi)定義自動(dòng)變量。
(√)8、若一個(gè)函數(shù)的返回類(lèi)型為void,則表示其沒(méi)有返回值。
(×)9、所有定義在主函數(shù)之前的函數(shù)無(wú)需進(jìn)行聲明。
(×)10、定時(shí)器與計(jì)數(shù)器的工作原理均是對(duì)輸入脈沖進(jìn)行計(jì)數(shù)。
(×)11、END表示指令執(zhí)行到此結(jié)束。
(√)12、ADC0809是8位逐次逼近式模/數(shù)轉(zhuǎn)換接口。
(√)13、MCS-51的相對(duì)轉(zhuǎn)移指令最大負(fù)跳距是127B。
(×)14、MCS-51的程序存儲(chǔ)器只是用來(lái)存放程序的。
(√)15、TMOD中的GATE=1時(shí),表示由兩個(gè)信號(hào)控制定時(shí)器的的啟停。
(×)16、MCS-51的特殊功能寄存器分布在60H~80H地址范圍內(nèi)。
(×)17、MCS-51系統(tǒng)可以沒(méi)有復(fù)位電路。
(×)18、片內(nèi)RAM與外部設(shè)備統(tǒng)一編址時(shí),需要專(zhuān)門(mén)的輸入/輸出指令。
(√)19、鎖存器、三態(tài)緩沖寄存器等簡(jiǎn)單芯片中沒(méi)有命令寄存和狀態(tài)寄存等功能。
(√)20、使用8751且=1時(shí),仍可外擴(kuò)64KB的程序存儲(chǔ)器。
四、簡(jiǎn)答題
1、在使用8051的定時(shí)器/計(jì)數(shù)器前,應(yīng)對(duì)它進(jìn)行初始化,其步驟是什么?
答:(1)確定T/C的工作方式——編程TMOD寄存器;
(2)計(jì)算T/C中的計(jì)數(shù)初值,并裝載到TH和TL;
(3)T/C在中斷方式工作時(shí),須開(kāi)CPU中斷和源中斷——編程IE寄存器;
(4)啟動(dòng)定時(shí)器/計(jì)數(shù)器——編程TCON中TR1或TR0位。
2、什么是重入函數(shù)?重入函數(shù)一般什么情況下使用,使用時(shí)有哪些需要注意的地方?
答:多個(gè)函數(shù)可以同時(shí)使用的函數(shù),稱(chēng)為重入函數(shù)。
通常情況下,C51函數(shù)不能被遞歸調(diào)用,也不能應(yīng)用導(dǎo)致遞歸調(diào)用的結(jié)構(gòu)。有此限制是由于函數(shù)參數(shù)和局部變量是存儲(chǔ)在固定的地址單元中。重入函數(shù)特性允許你聲明一個(gè)重入函數(shù)。即可以被遞歸調(diào)用的函數(shù)。
重入函數(shù)可以被遞歸調(diào)用,也可以同時(shí)被兩個(gè)或更多的進(jìn)程調(diào)用。重入函數(shù)在實(shí)時(shí)應(yīng)用中及中斷服務(wù)程序代碼和非中斷程序代碼必須共用一個(gè)函數(shù)的場(chǎng)合中經(jīng)常用到。
3、8051引腳有多少I(mǎi)/O線?他們和單片機(jī)對(duì)外的地址總線和數(shù)據(jù)總線有什么關(guān)系?地址總線和數(shù)據(jù)總線各是幾位?
答:8051引腳共有40個(gè)引腳,8051的地址總線由P2和P0口提供,P2口是地址總線的高8位,P0口是地址總線的低8位;數(shù)據(jù)總線由P0口提供;P0口的地址總線和數(shù)據(jù)總線是分時(shí)進(jìn)行的,P0口的地址總線需要外接地址鎖存器完成地址鎖存。
地址總線共16位,數(shù)據(jù)總線是8位。
4、在有串行通信時(shí),定時(shí)器/計(jì)數(shù)器1的作用是什么,怎樣確定串行口的波特率?
答:在有串行通信時(shí),定時(shí)器/計(jì)數(shù)器1的作用是串行口發(fā)生器。
串行口的波特率根據(jù)串行口的工作方式具有不同的計(jì)算方式:
方式0的波特率固定為晶體振蕩器的十二分之一;
方式1的波特率=2SMOD.(定時(shí)器1的溢出率)/32;
方式2波特率=2SMOD.(fosc/64);
方式3波特率同方式1(定時(shí)器l作波特率發(fā)生器)。
5、如何消除鍵盤(pán)的抖動(dòng)?怎樣設(shè)置鍵盤(pán)中的復(fù)合鍵?
答:由于按鍵是機(jī)械開(kāi)關(guān)結(jié)構(gòu),所以當(dāng)用手按下其中一個(gè)鍵時(shí),往往會(huì)出現(xiàn)所按鍵在閉合位置和斷開(kāi)位置之間發(fā)生跳幾下后才會(huì)穩(wěn)定到閉合狀態(tài)的情況。在釋放一個(gè)鍵時(shí),也會(huì)出現(xiàn)類(lèi)似的情況,這就是鍵的抖動(dòng),抖動(dòng)的持續(xù)時(shí)間不一,但通常不會(huì)大于10ms。
若抖動(dòng)問(wèn)題不解決,就會(huì)引起對(duì)閉合鍵的多次讀入。對(duì)于鍵抖動(dòng)最方便的解決方法就是當(dāng)發(fā)現(xiàn)有鍵按下后,不是立即進(jìn)行掃描,而是延時(shí)大約10ms后再進(jìn)行。由于一個(gè)鍵按下的時(shí)間一般會(huì)持續(xù)上百毫秒,所以延遲10ms后再掃描處理并不遲。
復(fù)合鍵可以仿照計(jì)算機(jī)復(fù)合鍵的處理方法,通??梢约僭O(shè)一個(gè)鍵具有復(fù)合功能,再與其它減的鍵值組合成復(fù)合鍵。1、矩陣式鍵盤(pán)的結(jié)構(gòu)與工作原理
在鍵盤(pán)中按鍵數(shù)量較多時(shí),為了減少I(mǎi)/O口的占用,通常將按鍵排列成矩陣形式,如圖1所示。在矩陣式鍵盤(pán)中,每條水平線和垂直線在交叉處不直接連通,而是通過(guò)一個(gè)按鍵加以連接。這樣,一個(gè)端口(如P1口)就可以構(gòu)成4*4=16個(gè)按鍵,比之直接將端口線用于鍵盤(pán)多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構(gòu)成20鍵的鍵盤(pán),而直接用端口線則只能多出一鍵(9鍵)。由此可見(jiàn),在需要的鍵數(shù)比較多時(shí),采用矩陣法來(lái)做鍵盤(pán)是合理的。
矩陣式結(jié)構(gòu)的鍵盤(pán)顯然比直接法要復(fù)雜一些,識(shí)別也要復(fù)雜一些,上圖中,列線通過(guò)電阻接正電源,并將行線所接的單片機(jī)的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當(dāng)按鍵沒(méi)有按下時(shí),所有的輸出端都是高電平,代表無(wú)鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會(huì)被拉低,這樣,通過(guò)讀入輸入線的狀態(tài)就可得知是否有鍵按下了。具體的識(shí)別及編程方法如下所述。
2、矩陣式鍵盤(pán)的按鍵識(shí)別方法
確定矩陣式鍵盤(pán)上何鍵被按下介紹一種“行掃描法”。
行掃描法行掃描法又稱(chēng)為逐行(或列)掃描查詢法,是一種最常用的按鍵識(shí)別方法,如上圖所示鍵盤(pán),介紹過(guò)程如下。
1、判斷鍵盤(pán)中有無(wú)鍵按下將全部行線Y0-Y3置低電平,然后檢測(cè)列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤(pán)中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個(gè)按鍵之中。若所有列線均為高電平,則鍵盤(pán)中無(wú)鍵按下。
2、判斷閉合鍵所在的位置在確認(rèn)有鍵按下后,即可進(jìn)入確定具體閉合鍵的過(guò)程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時(shí),其它線為 高電平。在確定某根行線位置為低電平后,再逐行檢測(cè)各列線的電平狀態(tài)。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。
下面給出一個(gè)具體的例子:
圖仍如上所示。8031單片機(jī)的P1口用作鍵盤(pán)I/O口,鍵盤(pán)的列線接到P1口的低4位,鍵盤(pán)的行線接到P1口的高4位。列線P1.0-P1.3分別接有4個(gè)上拉電阻到正電源 5V,并把列線P1.0-P1.3設(shè)置為輸入線,行線P1.4-P.17設(shè)置為輸出線。4根行線和4根列線形成16個(gè)相交點(diǎn)。
1、檢測(cè)當(dāng)前是否有鍵被按下。檢測(cè)的方法是P1.4-P1.7輸出全“0”,讀取P1.0-P1.3的狀態(tài),若P1.0-P1.3為全“1”,則無(wú)鍵閉合,否則有鍵閉合。
2、去除鍵抖動(dòng)。當(dāng)檢測(cè)到有鍵按下后,延時(shí)一段時(shí)間再做下一步的檢測(cè)判斷。
3、若有鍵被按下,應(yīng)識(shí)別出是哪一個(gè)鍵閉合。方法是對(duì)鍵盤(pán)的行線進(jìn)行掃描。P1.4-P1.7按下述4種組合依次輸出:
P1.71110
P1.61101
P1.51011
P1.40111
在每組行輸出時(shí)讀取P1.0-P1.3,若全為“1”,則表示為“0”這一行沒(méi)有鍵閉合,否則有鍵閉合。由此得到閉合鍵的行值和列值,然后可采用計(jì)算法或查表法將閉合鍵的行值和列值轉(zhuǎn)換成所定義的鍵值
4、為了保證鍵每閉合一次CPU僅作一次處理,必須卻除鍵釋放時(shí)的抖動(dòng)。
鍵盤(pán)掃描程序:
從以上分析得到鍵盤(pán)掃描程序的流程圖如圖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
鍵盤(pán)處理程序就作這么一個(gè)簡(jiǎn)單的介紹,實(shí)際上,鍵盤(pán)、顯示處理是很復(fù)雜的,它往往占到一個(gè)應(yīng)用程序的大部份代碼,可見(jiàn)其重要性,但說(shuō)到,這種復(fù)雜并不來(lái)自于單片機(jī)的本身,而是來(lái)自于操作者的習(xí)慣等等問(wèn)題,因此,在編寫(xiě)鍵盤(pán)處理程序之前,最好先把它從邏輯上理清,然后用適當(dāng)?shù)乃惴ū硎境鰜?lái),最后再去寫(xiě)代碼,這樣,才能快速有效地寫(xiě)好代碼。
到本課為止,本站教程暫告一個(gè)段落!感謝大家的關(guān)心和支持!矩陣按鍵部分由16個(gè)輕觸按鍵按照4行4列排列,連接到JP50端口。將行線所接的單片機(jī)的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當(dāng)按鍵沒(méi)有按下時(shí),所有的輸出端都是高電平,代表無(wú)鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會(huì)被拉低,這樣,通過(guò)讀入輸入線的狀態(tài)就可得知是否有鍵按下了。確定矩陣式鍵盤(pán)上何鍵被按下,介紹一種“行掃描法”。行掃描法行掃描法又稱(chēng)為逐行(或列)掃描查詢法,是一種最常用的按鍵識(shí)別方法.判斷鍵盤(pán)中有無(wú)鍵按下:將全部行線置低電平,然后檢測(cè)列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤(pán)中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個(gè)按鍵之中。若所有列線均為高電平,則鍵盤(pán)中無(wú)鍵按下。判斷閉合鍵所在的位置:在確認(rèn)有鍵按下后,即可進(jìn)入確定具體閉合鍵的過(guò)程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時(shí),其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測(cè)各列線的電平狀態(tài)。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。下面給出一個(gè)具體的例子:電路圖路徑:G:\圖片\電路圖片\xl100097.jpg8031單片機(jī)的P1口用作鍵盤(pán)I/O口,鍵盤(pán)的列線接到P1口的低4位,鍵盤(pán)的行線接到P1口的高4位。列線P1.0-P1.3設(shè)置為輸入線,行線P1.4-P.17設(shè)置為輸出線。4根行線和4根列線形成16個(gè)相交點(diǎn)。1.檢測(cè)當(dāng)前是否有鍵被按下。檢測(cè)的方法是P1.4-P1.7輸出全“0”,讀取P1.0-P1.3的狀態(tài),若P1.0-P1.3為全“1”,則無(wú)鍵閉合,否則有鍵閉合。2.去除鍵抖動(dòng)。當(dāng)檢測(cè)到有鍵按下后,延時(shí)一段時(shí)間再做下一步的檢測(cè)判斷。3.若有鍵被按下,應(yīng)識(shí)別出是哪一個(gè)鍵閉合。方法是對(duì)鍵盤(pán)的行線進(jìn)行掃描。P1.4-P1.7按下述4種組合依次輸出:P1.71110P1.61101P1.51011P1.40111在每組行輸出時(shí)讀取P1.0-P1.3,若全為“1”,則表示為“0”這一行沒(méi)有鍵閉合,否則有鍵閉合。由此得到閉合鍵的行值和列值,然后可采用計(jì)算法或查表法將閉合鍵的行值和列值轉(zhuǎn)換成所定義的鍵值。4.為了保證鍵每閉合一次CPU僅作一次處理,必須去除鍵釋放時(shí)的抖動(dòng)。實(shí)驗(yàn)?zāi)康模和ㄟ^(guò)XL1000的16位矩陣按鍵,在數(shù)碼管上分別顯示0---9,A,B,C,D,E,F。接線方法:1用一條8PIN數(shù)據(jù)排線,把矩陣按鍵部份的JP50,接到CPU部份的P1口JP44.2接8位數(shù)碼管的數(shù)據(jù)線。將數(shù)碼管部份的數(shù)據(jù)口JP5接到CPU部份的P0口JP51.3接8位數(shù)碼管的顯示位線。將數(shù)碼管部份的顯示位口JP8接到CPU部份的P2口JP52.參考程序:;本程序?qū)崿F(xiàn)掃描按鍵顯示功能.;分別按16個(gè)鍵盤(pán)顯示分別顯示數(shù)字123A456B789C*0#D;鍵盤(pán)口P1,數(shù)碼管顯示第二位p21,數(shù)碼管段位p0口org0000hajmpmainorg0030hmain:movdptr,#tab;將表頭放入DPTRlcallkey;調(diào)用鍵盤(pán)掃描程序movca,@a dptr;查表后將鍵值送入ACCmovp0,a;將Acc值送入P0口CLRP2.1;開(kāi)顯示ljmpmain;返回反復(fù)循環(huán)顯示KEY:LCALLKS;調(diào)用檢測(cè)按鍵子程序JNZK1;有鍵按下繼續(xù)LCALLDELAY2;無(wú)鍵按調(diào)用延時(shí)去抖AJMPKEY;返回繼續(xù)檢測(cè)按鍵K1:LCALLDELAY2LCALLDELAY2;有鍵按下延時(shí)去抖動(dòng)LCALLKS;再調(diào)用檢測(cè)按鍵程序JNZK2;確認(rèn)有按下進(jìn)行下一步AJMPKEY;無(wú)鍵按下返回繼續(xù)檢測(cè)K2:MOVR2,#0EFH;將掃描值送入R2暫存MOVR4,#00H;將第一列值送入R4暫存K3:MOVP1,R2;將R2的值送入P1口L6:JBP1.0,L1;P1.0等于1跳轉(zhuǎn)到L1MOVA,#00H;將第一行值送入ACCAJMPLK;跳轉(zhuǎn)到鍵值處理程序L1:JBP1.1,L2;P1.1等于1跳轉(zhuǎn)到L2MOVA,#04H;將第二行的行值送入ACCAJMPLK;跳轉(zhuǎn)到鍵值理程序進(jìn)行鍵值處理L2:JBP1.2,L3;P1.2等于1跳轉(zhuǎn)到L3MOVA,#08H;將第三行的行值送入ACCAJMPLK;跳轉(zhuǎn)到鍵值處理程序L3:JBP1.3,NEXT;P1.3等于1跳轉(zhuǎn)到NEXT處MOVA,#0cH;將第四行的行值送入ACCLK:ADDA,R4;行值與列值相加后的鍵值送入APUSHACC;將A中的值送入堆棧暫存K4:LCALLDELAY2;調(diào)用延時(shí)去抖動(dòng)程序LCALL KS;調(diào)用按鍵檢測(cè)程序JNZK4;按鍵沒(méi)有松開(kāi)繼續(xù)返回檢測(cè)POPACC;將堆棧的值送入ACCRETNEXT:INCR4;將列值加一MOVA,R2;將R2的值送入AJNBACC.7,KEY;掃描完至KEY處進(jìn)行下一掃描RLA;掃描未完將A中的值右移一位進(jìn)行下一列的掃描MOVR2,A;將ACC的值送入R2暫存AJMPK3;跳轉(zhuǎn)到K3繼續(xù)KS:MOVP1,#0FH;將P1口高四位置0低四位值1MOVA,P1;讀P1口XRLA,#0FH;將A中的值與A中的值相異或RET;子程序返回DELAY2:;40ms延時(shí)去抖動(dòng)子程序MOVR5,#08HL7:MOVR6,#0FAHL8:DJNZR6,L8DJNZR5,L7RETtab:db28h,34h,28h,34h,0a9h,60h,20h,7ah,20h,21h,61h,74h,30h,62h,0a2h,7eh;0h0hc9878654a321輪流顯示鍵盤(pán)因?yàn)闊o(wú)法表達(dá)*#就用H表示,B用8表示end這是我做成功的4X4鍵盤(pán)掃描源程序,P1.0-P1.3做四根列線,P1.4-P1.7做四根行線。
數(shù)碼管的字型表是按照標(biāo)準(zhǔn)接法做的,按對(duì)應(yīng)的按鍵數(shù)碼管顯示對(duì)應(yīng)的數(shù)字。
以下是源程序:
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數(shù)據(jù)采集控制
;P2.6P2.7個(gè)位十位顯示轉(zhuǎn)換控制
;P1口接8個(gè)開(kāi)關(guān)模擬數(shù)據(jù)
;P1.0-P1.3為個(gè)位開(kāi)關(guān)量輸入
;P1.4-P1.7為十位開(kāi)關(guān)量輸入
;此程序僅供參考
;功能P1口接8個(gè)開(kāi)關(guān)輸入量4個(gè)一組,分別為個(gè)位,十位輸入
;P0口接一個(gè)數(shù)碼管,依次顯示輸入量。P3.1控制是否讀入
;開(kāi)關(guān)量。P2.6P2.7控制是否顯示個(gè)位或十位
ORG100h
LJMPSTAR
STAR:MOVP1,#0FFH
SETBP3.1數(shù)據(jù)讀入標(biāo)志
MOVR0,#100,循環(huán)工作次數(shù)
LOOP:JBP3.1,$P3.1低電平時(shí),采集P1口數(shù)據(jù)開(kāi)關(guān)量處理顯示階段不再應(yīng)答P3.1
MOVA,P1
PUSHACC
ANLA,#0FH取個(gè)位數(shù)值
MOVR1,A個(gè)位數(shù)值保存到R1
POPACC
ANLA,#0F0H
SWAPA高4位轉(zhuǎn)成字節(jié)信息
MOVR2,A十位數(shù)值保存到R2
MOVDPTR,#TABLED
MOVA,R1
MOVCA,@A DPTR
MOVP0,A
CLRP2.6個(gè)位顯示
ACALLDELAY500MS
SETBP2.6
MOVA,R2
MOVCA,@A DPTR
MOVP0,A
CLRP2.7十位顯示
ACALLDELAY500MS
SETBP2.7
DJNZR0,LOOP
DELAY500MS:延時(shí)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.實(shí)驗(yàn)任務(wù)在8X8 LED點(diǎn)陣上顯示柱形,讓其先從左到右平滑移動(dòng)三次,其次從右到左平滑移動(dòng)三次,再次從上到下平滑移動(dòng)三次,最后從下到上平滑移動(dòng)三次,如此循環(huán)下去。2.電路原理圖圖4.24.13.硬件電路連線(1).把“單片機(jī)系統(tǒng)”區(qū)域中的P1端口用8芯排芯連接到“點(diǎn)陣模塊”區(qū)域中的“DR1-DR8”端口上;(2).把“單片機(jī)系統(tǒng)”區(qū)域中的P3端口用8芯排芯連接到“點(diǎn)陣模塊”區(qū)域中的“DC1-DC8”端口上;4.程序設(shè)計(jì)內(nèi)容(1).8X8 點(diǎn)陣LED工作原理說(shuō)明8X8點(diǎn)陣LED結(jié)構(gòu)如下圖所示圖4.24.2從圖4.24.2中可以看出,8X8點(diǎn)陣共需要64個(gè)發(fā)光二極管組成,且每個(gè)發(fā)光二極管是放置在行線和列線的交叉點(diǎn)上,當(dāng)對(duì)應(yīng)的某一列置1電平,某一行置0電平,則相應(yīng)的二極管就亮;因此要實(shí)現(xiàn)一根柱形的亮法,如圖49所示,對(duì)應(yīng)的一列為一根豎柱,或者對(duì)應(yīng)的一行為一根橫柱,因此實(shí)現(xiàn)柱的亮的方法如下所述:一根豎柱:對(duì)應(yīng)的列置1,而行則采用掃描的方法來(lái)實(shí)現(xiàn)。一根橫柱:對(duì)應(yīng)的行置0,而列則采用掃描的方法來(lái)實(shí)現(xiàn)。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語(yǔ)言源程序
#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點(diǎn)陣顯示實(shí)驗(yàn)一.實(shí)驗(yàn)要求
編程實(shí)現(xiàn)中英文字符的顯示。
二.實(shí)驗(yàn)?zāi)康?/p>
1.了解LED點(diǎn)陣顯示的基本原理和實(shí)現(xiàn)方法。
2.掌握點(diǎn)陣漢字庫(kù)的編碼和從標(biāo)準(zhǔn)字庫(kù)中提取漢字編碼的方法。
三.實(shí)驗(yàn)電路及連線
點(diǎn)陣顯示模塊WTD3088的(紅色)列輸入線接至內(nèi)部LED的陰極端,行輸入線接至內(nèi)部LED的陽(yáng)極端(若陽(yáng)極端輸入為高電平,陰極端輸入低電平,則該LED點(diǎn)亮)。發(fā)光點(diǎn)的分布如圖22-0所示。
Fig22-0WTD3088LED分布
如圖22-1示,本實(shí)驗(yàn)?zāi)K使用74LS374來(lái)控制列輸入線的電平值。將74LS374的某輸出置0,則對(duì)應(yīng)的LED陰極端被置低。如圖22-2示,本實(shí)驗(yàn)?zāi)K使用74LS273來(lái)控制行輸入線,并通過(guò)9013提供電流驅(qū)動(dòng)。將74LS273的某輸出置1,則對(duì)應(yīng)的LED陽(yáng)極端被置高。每次系統(tǒng)重新開(kāi)啟或總清后,74LS273輸出為全0,LED顯示被關(guān)閉。
通過(guò)編程控制各顯示點(diǎn)對(duì)應(yīng)LED陽(yáng)極和陰極端的電平,就可以有效的控制各顯示點(diǎn)的亮滅。
Fig22-1LED模塊及列掃描電路Fig22-2行掃描電路
Fig22-3地址譯碼電路
本實(shí)驗(yàn)?zāi)K使用4塊WTD3088組成16×16點(diǎn)陣,以滿足漢字顯示的要求。為了方便的控制四個(gè)單元,使用了一片74LS139譯碼,產(chǎn)生四個(gè)地址片選信號(hào):CLKR1=CSLED,CLKR2=CSLED 1,用于行控制的兩片74LS273;CLKC1=CSLED 2,CLKC2=CSLED 3,用于列控制的兩片74LS374。
實(shí)驗(yàn)接線:按示例程序,模塊的CSLED接51/96地址的8000H。
四.實(shí)驗(yàn)說(shuō)明
使用高亮度LED發(fā)光管構(gòu)成點(diǎn)陣,通過(guò)編程控制可以顯示中英文字符、圖形及視頻動(dòng)態(tài)圖形。LED顯示以其組構(gòu)方式靈活、亮度高、技術(shù)成熟、成本低廉等特點(diǎn)在證券、運(yùn)動(dòng)場(chǎng)館及各種室內(nèi)/外顯示場(chǎng)合得到廣泛的應(yīng)用。
所顯示字符的點(diǎn)陣數(shù)據(jù)可以自行編寫(xiě)(即直接點(diǎn)陣畫(huà)圖),也可從標(biāo)準(zhǔn)字庫(kù)(如ASC16、HZ16)中提取。后者需要正確掌握字庫(kù)的編碼方法和字符定位的計(jì)算。
實(shí)驗(yàn)盤(pán)片中“字符轉(zhuǎn)換”子目錄下提供的Basc16.exe,BHz16.exe可方便的將單個(gè)字符的碼表從標(biāo)準(zhǔn)字庫(kù)Asc16,Hzk16中提取出來(lái)。具體使用方法是運(yùn)行上述可執(zhí)行程序,根據(jù)提示輸入所需字符(如是漢字還需要先啟動(dòng)dos下的漢字環(huán)境,如ucdos,pdos95等)。程序?qū)⒃撟址拇a表提取出來(lái),存放在該字符ASC或區(qū)位碼為文件名稱(chēng)的.dat文件中。用戶只需將該文件中內(nèi)容拷貝、粘貼到自己的程序中即可。但需要注意字節(jié)排列順序、字節(jié)中每一位與具體顯示點(diǎn)的一一對(duì)應(yīng)關(guān)系,必要時(shí)還要對(duì)碼表稍作修改。同一目錄下還提供了上述可執(zhí)行程序的源文件,使用BC3.1編寫(xiě),供用戶參考。
五.實(shí)驗(yàn)程序框圖
用戶應(yīng)留心其中行掃描的實(shí)現(xiàn)及碼表的處理。
六.實(shí)驗(yàn)程序:(一)提供LEDA51演示Asc16字符的簡(jiǎn)單點(diǎn)陣顯示。
;________*LED點(diǎn)陣顯示示例程序______________________*
;__該程序顯示Asc16字符__
;__為了簡(jiǎn)單起見(jiàn),程序只顯示一個(gè)字符__
;__該程序針對(duì)T598實(shí)驗(yàn)機(jī)的模塊14__
;____________________________________________________
CSLEDEQU8000H
CSR1EQUCSLED;行1273
CSR2EQUCSLED 1H;行2273
CSC1EQUCSLED 2H;列1374
CSC2EQUCSLED 3H;列2374
ORG0000H
MOVSP,#60H
INIT:MOVA,#0H;關(guān)閉行
MOVDPTR,#CSR1
MOVX@DPTR,A
MOVDPTR,#CSR2
MOVX@DPTR,A
MOVA,#0FFH;關(guān)閉列
MOVDPTR,#CSC1
MOVX@DPTR,A
MOVDPTR,#CSC2
MOVX@DPTR,A
D:MOVR5,#00H
MOVR4,#01H;每次為單行掃描
DISP:
MOVA,R5
MOVDPTR,#ASCE;此處設(shè)定所要顯示的字符
MOVCA,@A DPTR
CPLACC;代碼取反,決定顯示的陰陽(yáng)
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
;________延時(shí)子程序,協(xié)調(diào)字符顯示速度____________*
DELAY:MOVR7,#1H
DL1:MOVR6,#00H
DL2:DJNZR6,DL2
DJNZR7,DL1
RET
;________字符點(diǎn)陣字庫(kù)______________*
;ASC16字符編碼排列
;0
;1
;|
;|
;14
;15
;高位D7--D0
;請(qǐng)注意編碼的排列次序和實(shí)際顯示點(diǎn)陣分布的關(guān)系
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兩個(gè)示例程序。和Hz16字符的簡(jiǎn)單點(diǎn)陣顯示。
;________*LED點(diǎn)陣顯示示例程序______________________*
;__該程序顯示hz16字符__
;__為了簡(jiǎn)單起見(jiàn),程序只顯示一個(gè)字符__
;__該程序針對(duì)T598實(shí)驗(yàn)機(jī)的模塊14__
;____________________________________________________
CSLEDEQU8000H
CSR1EQUCSLED;行1273
CSR2EQUCSLED 1H;行2273
CSC1EQU CSLED 2H;列1374
CSC2EQUCSLED 3H;列2374
ORG0000H
MOVSP,#60H
INIT:MOVA,#0H;關(guān)閉LED顯示
MOVDPTR,#CSR1
MOVX@DPTR,A
MOVDPTR,#CSR2
MOVX@DPTR,A
MOVA,#0FFH;關(guān)閉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
;________延時(shí)子程序,協(xié)調(diào)字符顯示速度____________*
DELAY:MOVR7,#1H
DL1:MOVR6,#00H
DL2:DJNZR6,DL2
DJNZR7,DL1
RET
;________字符點(diǎn)陣字庫(kù)______________*
;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的計(jì)算機(jī)可鎖定加密鍵盤(pán)設(shè)計(jì)摘要:介紹PC鍵盤(pán)和鍵盤(pán)接口的PS/2通信協(xié)議,以及用89C51實(shí)現(xiàn)可鎖定鍵盤(pán)的軟件和硬件設(shè)計(jì)方法。具有安全可靠、容錯(cuò)能力強(qiáng)、可以直接采用標(biāo)準(zhǔn)鍵盤(pán)進(jìn)行改裝、便于實(shí)現(xiàn)等優(yōu)點(diǎn),并保留標(biāo)準(zhǔn)鍵盤(pán)的全部功能。關(guān)鍵詞:PS/289C51C51鍵盤(pán)引言
在智能儀器、自動(dòng)控制等領(lǐng)域,已大量使用嵌入式PC,如Advantech公司的PC/104、AMD公司的DIMM-PC等。為適應(yīng)開(kāi)放式、模塊化的要求,嵌入式PC具有標(biāo)準(zhǔn)的PC接口,如VGA顯示器控制接口、以太網(wǎng)接口、RS232接口、PC/AT鍵盤(pán)接口等。所以,可以用標(biāo)準(zhǔn)的PC鍵盤(pán)對(duì)嵌入式PC進(jìn)行操作與控制。鍵盤(pán)在輸入指令之后,可能很長(zhǎng)一段時(shí)間不用。為計(jì)算機(jī)安全和防止誤觸發(fā),需要將鍵盤(pán)鎖定,還要對(duì)某些鍵采取屏蔽措施,但是PC標(biāo)準(zhǔn)鍵盤(pán)不能滿足這些要求。本文介紹一種用89C51設(shè)計(jì)實(shí)現(xiàn)的可鎖定加密PC/AT鍵盤(pán)。
1鍵盤(pán)功能及工作原理
PC鍵盤(pán)功能主要有按鍵識(shí)別、去抖、重鍵處理、發(fā)送掃描碼、自動(dòng)重發(fā)、接收鍵盤(pán)命令、處理命令等。鍵盤(pán)有編碼鍵盤(pán)和非編碼鍵盤(pán)。編碼鍵盤(pán)程序設(shè)計(jì)簡(jiǎn)單,但硬件電路復(fù)雜,價(jià)格較高;非編碼鍵盤(pán)用軟件來(lái)實(shí)現(xiàn)識(shí)別鍵、編碼轉(zhuǎn)換、去抖等功能,硬件電路簡(jiǎn)單,價(jià)格便宜。現(xiàn)代微機(jī)系統(tǒng)中廣泛采用非編碼鍵盤(pán)。PC鍵盤(pán)多采用18行×8列的二維矩陣行列結(jié)構(gòu)。采用行掃描法識(shí)別按下的按鍵。2PS/2協(xié)議
PS/2協(xié)議是外設(shè)與主機(jī)之間通信的一種同步雙向串行協(xié)議。在該協(xié)議中主機(jī)擁有較高的優(yōu)先級(jí),在一定條件下可以終止外設(shè)正在進(jìn)行的發(fā)送過(guò)程。PS/2協(xié)議采用的傳送數(shù)據(jù)幀的格式為:1位起始位(0)、8位數(shù)據(jù)位、1位奇偶校驗(yàn)位、1位停止位(1)。數(shù)據(jù)發(fā)送時(shí)低位在前,高位在后。外設(shè)每收到主機(jī)發(fā)來(lái)的1幀數(shù)據(jù),都要緊隨該幀的停止位發(fā)送一個(gè)握手位ACK(0)應(yīng)答主機(jī)。然后,外設(shè)還要發(fā)1幀應(yīng)答數(shù)據(jù)(0xF0),表示外設(shè)已經(jīng)完整地接收到了主機(jī)的命令;而主機(jī)則不需發(fā)送握手位,也不需要發(fā)送應(yīng)答幀。
2.1鍵盤(pán)到PC鍵盤(pán)接口的通信
當(dāng)時(shí)鐘線和數(shù)據(jù)線均為高電平時(shí),允許鍵盤(pán)發(fā)送數(shù)據(jù),系統(tǒng)將接收數(shù)據(jù);當(dāng)時(shí)鐘線被拉為低電平時(shí),表明系統(tǒng)禁止數(shù)據(jù)傳輸。圖1給出了發(fā)送時(shí)序,包含1個(gè)低電平觸發(fā)的起始位、8位數(shù)據(jù)位、1個(gè)奇校驗(yàn)位和1個(gè)高電平的結(jié)束位。2.2PC系統(tǒng)到鍵盤(pán)的通信協(xié)議
若時(shí)鐘線出現(xiàn)高電平,數(shù)據(jù)線出現(xiàn)低電平,表明系統(tǒng)請(qǐng)求發(fā)送,鍵盤(pán)準(zhǔn)備產(chǎn)生同步時(shí)鐘脈沖串,并接收數(shù)據(jù)。包含了1個(gè)低電平觸發(fā)的起始位、8位數(shù)據(jù)位、1個(gè)奇校驗(yàn)位、1個(gè)應(yīng)答位、1個(gè)高電平的結(jié)束位。圖2為時(shí)序圖。(1)鍵盤(pán)命令及執(zhí)行過(guò)程①FFH:復(fù)位鍵盤(pán)。系統(tǒng)通過(guò)此軟件復(fù)位命令使鍵盤(pán)進(jìn)入程序復(fù)位和內(nèi)部自測(cè)試,稱(chēng)為基本保證測(cè)試(BAT)。復(fù)位鍵盤(pán)的過(guò)程如下:a.鍵盤(pán)收到FFH后立即回送ACK(FAH)作答;b.鍵盤(pán)接口收到ACK后,將鍵盤(pán)時(shí)鐘和數(shù)據(jù)線置為高電平;c.鍵盤(pán)檢測(cè)到此狀態(tài)后開(kāi)始BAT操作;d.如果BAT正確完成,鍵盤(pán)發(fā)送AAH以表示結(jié)束,
否則以FDH(或其它任何值)表示診斷有誤。②FEH:重新發(fā)送。當(dāng)系統(tǒng)檢測(cè)到從鍵盤(pán)送來(lái)的任何傳輸錯(cuò)誤時(shí),它便向鍵盤(pán)發(fā)送FEH命令。鍵盤(pán)接收到此命令后,將重新送出原來(lái)的內(nèi)容。③FDH~F7H:空操作(保留未用)。④F6H:設(shè)置缺省值。此命令使鍵盤(pán)所有條件復(fù)位到電源接通時(shí)的缺省狀態(tài),鍵盤(pán)繼續(xù)掃描。⑤F5H:設(shè)置缺省值和停止鍵盤(pán)。此命令使鍵盤(pán)所有條件復(fù)位到電源接通時(shí)的缺省狀態(tài),并停止鍵盤(pán)掃描,等待下一個(gè)鍵盤(pán)命令。⑥F4H:?jiǎn)?dòng)鍵盤(pán)。鍵盤(pán)接收到此命令后,用ACK(FAH)作答,清除輸出緩沖器,并啟動(dòng)鍵盤(pán)開(kāi)始掃描。⑦F3H:設(shè)置拍發(fā)速率和延時(shí)參數(shù)。每當(dāng)按下任 一鍵時(shí),鍵盤(pán)以拍發(fā)速率連續(xù)送出鍵的接通碼,直到鍵被釋放為止。延時(shí)參數(shù)是指按下一鍵后,鍵盤(pán)輸出的響應(yīng)時(shí)間。
系統(tǒng)缺省設(shè)置:拍發(fā)速率=10個(gè)/s±20,延時(shí)=500ms±20。
當(dāng)要改變?cè)O(shè)置時(shí)可以使用F3H命令,并后跟一個(gè)字節(jié)的參數(shù)。參數(shù)定義如表1所列。
表1D7D6D5D4D3D2D1D00CBA
計(jì)算拍發(fā)速率和響應(yīng)延時(shí)的公式如下:
拍發(fā)速率=1/[(8 A)×2B×0.00417](1/s)
響應(yīng)延時(shí)=(1 C)×250(ms)注:缺省的延時(shí)參數(shù)值為2CH。此命令的執(zhí)行過(guò)程如下:a.鍵盤(pán)收到F3H命令后,用FAH予以響應(yīng),并停止掃描和等待隨后的參數(shù);b.鍵盤(pán)若收到隨后的設(shè)置參數(shù),用另一個(gè)ACK響應(yīng),并按其參數(shù)設(shè)置新的拍發(fā)速率和響應(yīng)延時(shí),之后重新開(kāi)始掃描(若鍵盤(pán)原來(lái)是開(kāi)放的);c.鍵盤(pán)若收到FAH命令,但無(wú)隨后的設(shè)置參數(shù),則鍵盤(pán)結(jié)束命令設(shè)置,并保持原來(lái)的拍發(fā)速率和響應(yīng)延時(shí),停止掃描。⑧F2H,F(xiàn)1,EFH:保留未用。⑨F0H:設(shè)置鍵盤(pán)掃描碼命令。此命令用于設(shè)置鍵盤(pán)的掃描碼,后跟參數(shù)指定三種掃描碼的哪一種。鍵盤(pán)復(fù)位時(shí),默認(rèn)掃描碼是第二種。⑩EEH:回送命令。此命令用于輔助診斷,要求鍵盤(pán)接收到EEH時(shí)也要回送EEH予以響應(yīng)。若鍵盤(pán)原來(lái)是開(kāi)放的,則繼續(xù)掃描。EDH:置位/復(fù)位LED指示器。鍵盤(pán)右上角有三個(gè)LED指示器,分別反映Caps、Num和Scroll三個(gè)鍵的鎖定情況。參數(shù)字節(jié)如表2所列。
表2D7D3D2D1D0保留1=激勵(lì)CapsLED1=激勵(lì)NumLED1=激勵(lì)ScrollLED
此命令執(zhí)行過(guò)程與F3H相似。若命令后跟參數(shù),則按參數(shù)設(shè)定LED狀態(tài)并繼續(xù)掃描。若僅有命令無(wú)參數(shù),則不改變LED原狀態(tài),并停止掃描。(2)鍵盤(pán)響應(yīng)鍵盤(pán)在下列四種情況下都會(huì)向鍵盤(pán)接口發(fā)送數(shù)據(jù)。①按下任一鍵,鍵盤(pán)以拍發(fā)速率向接口發(fā)送鍵盤(pán)接通掃描碼。②釋放所按下的鍵,鍵盤(pán)發(fā)送斷開(kāi)掃描碼。③系統(tǒng)向鍵盤(pán)發(fā)送鍵盤(pán)命令后,鍵盤(pán)回送應(yīng)答。④當(dāng)用戶按鍵速度超出鍵盤(pán)所能容納的最大鍵個(gè)數(shù)時(shí),鍵盤(pán)做出響應(yīng)。后三種情況稱(chēng)為鍵盤(pán)響應(yīng)。響應(yīng)字節(jié)有7個(gè),定義如下。
①FEH:重新發(fā)送響應(yīng)。當(dāng)鍵盤(pán)收到一個(gè)無(wú)效的鍵盤(pán)命令,或者檢測(cè)到奇偶錯(cuò)的鍵盤(pán)命令時(shí),鍵盤(pán)回送響應(yīng)字節(jié)為FEH,要求系統(tǒng)重發(fā)鍵盤(pán)命令。②FAH:正常應(yīng)答。對(duì)任何一個(gè)有效的鍵盤(pán)命令,鍵盤(pán)回送FAH予以響應(yīng)。③00H:超限應(yīng)答。當(dāng)用戶按鍵速度超出鍵盤(pán)所能容納的最大鍵符個(gè)數(shù)時(shí)(16個(gè)字節(jié)的緩沖器),鍵盤(pán)發(fā)送00H。④FDH:診斷故障應(yīng)答。鍵盤(pán)接受軟件復(fù)位命令,執(zhí)行自測(cè)試過(guò)程中。若檢測(cè)到故障,則以FDH應(yīng)答。此時(shí),鍵盤(pán)停止掃描并等待下一個(gè)鍵盤(pán)命令。⑤AAH:診斷正常應(yīng)答。鍵盤(pán)在軟件復(fù)位過(guò)程中,正常完成BAT測(cè)試,以AAH應(yīng)答。⑥FEH:回響命令的應(yīng)答,對(duì)鍵盤(pán)FEH命令的應(yīng)答。⑦F0H:斷開(kāi)掃描碼前綴,鍵盤(pán)對(duì)鍵符按下后釋放的應(yīng)答,第一個(gè)字節(jié)為F0H,第二個(gè)字節(jié)為接通掃描碼(有幾個(gè)鍵例外)。3硬件設(shè)計(jì)
PC系列鍵盤(pán)采用18行×8列的矩陣行列結(jié)構(gòu)。89C51單片機(jī)有4個(gè)8位I/O端口,因此可以采用P0、P2口再加上P3口的2個(gè)(P3.6和P3.7)作為行掃描線。P1口作為列輸入線(如果用P0口作列輸入線,必須加上拉電阻)。采用P3.0、P3.1作為數(shù)據(jù)線和時(shí)鐘線與PC系統(tǒng)進(jìn)行通信,用P3.2、P3.4、P3.5控制鍵盤(pán)上的3個(gè)指示燈。硬件原理如圖3所示。
鍵盤(pán)與計(jì)算機(jī)通過(guò)一個(gè)五芯(PS/2接口為六芯)插座相接,4個(gè)有效引腳的定義分別是電源(VCC)、地(GND)、串行時(shí)鐘線(SCK)、串行數(shù)據(jù)線(SIO)。
4軟件設(shè)計(jì)①消抖及重鍵處理:通過(guò)軟件上延時(shí)程序來(lái)消除抖動(dòng);采用后按鍵優(yōu)先處理,即多鍵同時(shí)按下時(shí),只重復(fù)發(fā)送最后按下鍵的掃描碼。②程序包括鍵盤(pán)掃描子程序、發(fā)送鍵碼子程序、發(fā)送數(shù)據(jù)子程序、接收命令子程序、定時(shí)器1中斷服務(wù)程序、主程序等。鍵盤(pán)掃描子程序用于掃描鍵狀態(tài),將被按鍵的位置號(hào)存入緩沖器中;發(fā)送鍵碼子程序用于將緩沖區(qū)鍵的接通碼或斷開(kāi)碼發(fā)送給計(jì)算機(jī)鍵盤(pán)接口或者存在鍵盤(pán)密碼緩沖區(qū)中;發(fā)送數(shù)據(jù)子程序用于將數(shù)據(jù)發(fā)給計(jì)算機(jī)鍵盤(pán)接口;接收命令子程序用于接收計(jì)算機(jī)鍵盤(pán)接口發(fā)來(lái)的鍵盤(pán)命令;定時(shí)器1中斷服務(wù)子程序用于給程序中的延時(shí)提供標(biāo)準(zhǔn)時(shí)鐘,并具有軟件看門(mén)狗功能,防止軟件出現(xiàn)死機(jī)現(xiàn)象;主程序用于系統(tǒng)初始化,子程序調(diào)度,鎖定狀態(tài)的顯示等。
圖6發(fā)送緩沖區(qū)鍵碼子程序流程圖
圖4~6是主要軟件模塊的流程圖。單片機(jī)源程序見(jiàn)本刊網(wǎng)絡(luò)補(bǔ)充版(.com)。
5結(jié)論
本文介紹的PC/AT鍵盤(pán)具有結(jié)構(gòu)簡(jiǎn)單、設(shè)計(jì)靈活、安全可靠的特點(diǎn),可用于標(biāo)準(zhǔn)PC和嵌入式PC。本鍵盤(pán)可以在標(biāo)準(zhǔn)的鍵盤(pán)基礎(chǔ)上進(jìn)行改造,只需換掉原來(lái)的控制芯片即可,可節(jié)省設(shè)計(jì)成本。單片機(jī)C51編程幾個(gè)有用的模塊(1)KeilC51常用功能模塊使用說(shuō)明
說(shuō)明
本文檔包括單片機(jī)系統(tǒng)中常用到的時(shí)鐘中斷、通訊及鍵盤(pán)掃描等模塊(見(jiàn)所附源程序)的說(shuō)明。這些模塊使用前后臺(tái)系統(tǒng)模型。為達(dá)到最大的靈活性,需要在用戶工程中定義config.h文件,在其中定義各模塊可選參數(shù)的設(shè)置,而不是直接更改源代碼。
這些可選內(nèi)容大部分為宏定義,如果不定義宏相應(yīng)的功能在編譯時(shí)被屏蔽,不會(huì)增加代碼長(zhǎng)度。具體可選內(nèi)容見(jiàn)各模塊中的說(shuō)明。
在Config.h文件中還要包含一個(gè)單片機(jī)硬件的資源頭文件。
各模塊使用了定義在Common.h中的一些數(shù)據(jù)類(lèi)型。如:BIT(bit)BYTE(unsignedchar)等,具體請(qǐng)參見(jiàn)源程序。
時(shí)鐘模塊
在單片機(jī)軟件設(shè)計(jì)中,時(shí)鐘是重要資源,為了充分利用時(shí)鐘資源,故設(shè)計(jì)本時(shí)鐘模塊。本模塊使用定時(shí)器0,在完成用戶指定功能的同時(shí),還能夠自動(dòng)處理一些其它模塊中與時(shí)鐘相關(guān)的信息。
時(shí)鐘模塊由聲明文件Timer.h以及實(shí)現(xiàn)文件Timer.c組成。
用戶應(yīng)該在Config.h中定義宏TIMER_RELOAD來(lái)設(shè)定定時(shí)器0的重裝載初值。推薦的定時(shí)器0的中斷時(shí)間大于1毫秒。
在程序的初始化階段調(diào)用時(shí)鐘模塊的初始化函數(shù)InitTimerModule()之后,就可以使用時(shí)鐘模塊所以支持的各種功能。具體描述如下:
延時(shí):當(dāng)用戶需要進(jìn)行一定時(shí)間的延時(shí)時(shí),可以通過(guò)調(diào)用Delay()來(lái)進(jìn)行,參數(shù)為時(shí)鐘中斷的次數(shù)。如時(shí)鐘中斷周期為1ms,想進(jìn)行100ms的延時(shí),則可以調(diào)用Delay(100)。
注意:
如果延時(shí)的絕對(duì)時(shí)間小于時(shí)鐘中斷的周期,則不能夠用本方法做到延時(shí)。
定時(shí):當(dāng)程序中需要使用定時(shí)功能時(shí),如等待某外部事件,如果在一定時(shí)間內(nèi)發(fā)生則繼續(xù)執(zhí)行,如果在這段時(shí)間內(nèi)發(fā)生,則認(rèn)為出現(xiàn)錯(cuò)誤,轉(zhuǎn)向錯(cuò)誤處理機(jī)制。
在此推薦一種編程模式,但用戶可以用自己認(rèn)為更合理的方式處理此類(lèi)問(wèn)題。
這里簡(jiǎn)單說(shuō)明一下關(guān)于阻塞式函數(shù)及非阻塞式函數(shù)。簡(jiǎn)單說(shuō),阻塞式函數(shù)就是當(dāng)檢測(cè)完成條件,如果不能夠完成則等待,如:
voidCheckSomething()
{
//gbitSuccessFlagisaglobalvariable
while(gbitSuccessFlag==FALSE)
{
//donothingbutwaiting
}
}
可以看到,當(dāng)bitSuccessFlag沒(méi)有被設(shè)置為T(mén)RUE時(shí),函數(shù)保持等待狀態(tài)不返回,這樣就是阻塞式的函數(shù)。
另外一種情況:
BITCheckSomething()
{
if(gbitSuccessFlag==TRUE)
{
//…
returnTRUE;
}
returnFALSE;
}
在這里,如果所檢測(cè)的事件有沒(méi)有完成,函數(shù)進(jìn)行檢測(cè)之后,立刻返回, 通過(guò)返回值報(bào)告完成情況,如果沒(méi)有完成,則等待調(diào)用者分配再次執(zhí)行的機(jī)會(huì)。這樣的函數(shù)就是非阻塞函數(shù)。
在應(yīng)用定時(shí)功能時(shí),首先要將檢測(cè)函數(shù)定義成非阻塞函數(shù)。如上面的第二個(gè)版本的CheckSomething。
然后下面模式:
BITbitDone=FALSE;
ResetClock();//cleartimerinterrupttimescounter
while(GetClock()
{
if(CheckSomething()==TRUE)
{
bitDone=TRUE;
break;
}
}
if(bitDone==FALSE)
{
//processtimeout
}
或者簡(jiǎn)單寫(xiě)成:
BITbitDone=FALSE;
ResetClock();
while(GetClock()=(z))
當(dāng)然,用戶也可以將IsPackageHeader和IsPackageTailer定義成為函數(shù),通過(guò)BIT類(lèi)型的返回值來(lái)向調(diào)用者提供與相應(yīng)宏相同的信息。
另一種辦法需要在Config.h文件中定義宏SCOMM_ComplexPackageFormat。(需要注意的是,不能夠同時(shí)定義SCOMM_SimplePackageFormat和SCOMM_ComplexPackageFormat宏,否則會(huì)造成嚴(yán)重的不可預(yù)見(jiàn)性錯(cuò)誤。
這時(shí)需要提供回調(diào)函數(shù)QueryPackageFormat,原形如下:
BYTEQueryPackageFormat(BYTEbyData,BYTEbyCount,BYTEbyParam);
函數(shù)中三個(gè)參數(shù)的含義與使用簡(jiǎn)單數(shù)據(jù)包格式時(shí)判斷數(shù)據(jù)包尾的宏的參數(shù)相同。
函數(shù)通過(guò)返回值來(lái)通知作為調(diào)用者的接收函數(shù)對(duì)接收到的數(shù)據(jù)如何處理,但目前這種方法僅為需要處理復(fù)雜數(shù)據(jù)包格式時(shí)的一種可選方法,但不推薦。用戶如果想使用這種方法可以自己更改接收函數(shù)中相應(yīng)的
#ifdefSCOM_ComplexPackageFormat
#endif//SCOMM_ComplexPackageFormat
預(yù)編譯指令之間的內(nèi)容。
例如指定QueryPackageFormat的返回值的含義:
0:繼續(xù)找數(shù)據(jù)包頭或繼續(xù)找數(shù)據(jù)包尾。
1:找到數(shù)據(jù)包頭。
2:找到數(shù)據(jù)包尾。
3:數(shù)據(jù)包出錯(cuò),需要拋棄。
然后更改源代碼來(lái)實(shí)現(xiàn)上面的協(xié)議。
注意:當(dāng)用戶需要使用字符串的時(shí)候,可以利用簡(jiǎn)單的包裝函數(shù)將字符串轉(zhuǎn)換為字節(jié)數(shù)組。所以沒(méi)有必要提供專(zhuān)用的字符串處理函數(shù)。
鍵盤(pán)掃描模塊
鍵盤(pán)掃描模塊有兩種工作方式,一種為自動(dòng)的由時(shí)鐘模塊調(diào)用,另一種是由程序員自行調(diào)用。
1)由時(shí)鐘模塊自動(dòng)調(diào)用的方式
將時(shí)鐘模塊實(shí)現(xiàn)文件(Timer.h)及鍵盤(pán)掃描模塊的實(shí)現(xiàn)文件(KBScan。c)包含進(jìn)工程,在Config.h文件中添加TIMER_KBSCANDELAY宏。時(shí)鐘模塊自動(dòng)對(duì)時(shí)鐘中斷進(jìn)行計(jì)數(shù),當(dāng)達(dá)到TIMER_KBSCANDELAY宏所定義的值后,自動(dòng)調(diào)用鍵盤(pán)掃描模塊中的函數(shù)KBScanProcess()進(jìn)行鍵盤(pán)掃描,也就是說(shuō),這個(gè)宏的值可以決定按鍵消抖動(dòng)的時(shí)間。
用戶應(yīng)該提供兩個(gè)回調(diào)函數(shù)OnKBScan()及OnKeysPressed()。在函數(shù)OnKBScan中進(jìn)行鍵盤(pán)掃描,并返回掃描碼。掃描碼的類(lèi)型缺省為BYTE,當(dāng)鍵盤(pán)規(guī)模較大時(shí),BYTE不能夠完全包含鍵盤(pán)信息時(shí),可在Config.h文件中重定義宏KBvalue,如下:
#defineKBvalueWORD
這樣,就可以使用16位的鍵盤(pán)掃描碼,如果此時(shí)還達(dá)不到要求,可以將鍵盤(pán)掃描碼定義成一個(gè)結(jié)構(gòu),但這樣做將會(huì)增加代碼量及消耗更多的RAM資源,故不推薦。
掃描模塊調(diào)用OnKBScan取得掃描碼,并調(diào)用用戶可以重定義的宏IsNoKeyPressed來(lái)判斷是否有鍵按下,缺省的IsNoKeyPressed實(shí)現(xiàn)如下:
#defineIsNoKeyPressed(x)((x)==0x00)
即認(rèn)為OnKBScan返回0掃描碼時(shí)為沒(méi)有鍵按下,如果掃描函數(shù)返回其它非零掃描碼做為無(wú)鍵按下的掃描碼時(shí),可以在Config.h文件中重定義IsNoKeyPressed宏的實(shí)現(xiàn)。
8位鍵盤(pán)掃描碼(缺省值)時(shí),相應(yīng)的掃描函數(shù)為:
BYTEOnKBScan()
當(dāng)掃描模塊經(jīng)過(guò)軟件消抖動(dòng)之后,發(fā)現(xiàn)有鍵按下,就會(huì)調(diào)用另一個(gè)回調(diào)函數(shù)OnKeysPressed。函數(shù)的聲明應(yīng)該如下:
voidOnKeyPressed(BYTEbyKBvalue,BYTEbyState)
其中中的參數(shù)byKBvalue的類(lèi)型為BYTE,此為缺省值,如果使用其它類(lèi)型的掃描碼,就將此參數(shù)變?yōu)橄鄳?yīng)類(lèi)型。這個(gè)值由OnKBScan返回。另一個(gè)參數(shù)byState在通常情況下為零。但當(dāng)用戶在Config.h中定義宏KBSCAN_BRUSTCOUNT,同時(shí)鍵盤(pán)上的某鍵被按住不放時(shí),掃描模塊對(duì)它自己的調(diào)用(注意這里和TIMER_KBSCANDELAY宏不同,TIMER_KBSCANDELAY是時(shí)鐘中斷足夠的次數(shù)后調(diào)用掃描模塊,而KBSCAN_BRUSHCOUNT為掃描模塊自身的被調(diào)用次數(shù))進(jìn)行計(jì)數(shù),當(dāng)達(dá)到KBSCAN_BRUSTCOUNT時(shí),掃描模塊調(diào)用OnKeysPressed,此時(shí)第一個(gè)參數(shù)的含義不變,而byState變成1,同時(shí)計(jì)數(shù)器復(fù)位,又經(jīng)過(guò)一段時(shí)間后,用值為3的byState調(diào)用OnKeysPressed。這樣就可以很方便的實(shí)現(xiàn)多功能鍵或者檢測(cè)某鍵的長(zhǎng)時(shí)間被按下。
2)由用戶自行調(diào)用
由用戶自行在程序中調(diào)用掃描模塊,而不是由時(shí)鐘中斷自行調(diào)用。其它與方式1相同。
注意:
1)函數(shù)KBScanProcess為非阻塞函數(shù),它將在很快的時(shí)間內(nèi)返回,等待再次分配給它執(zhí)行的機(jī)會(huì)。
2)函數(shù)KBScanProcess是在時(shí)鐘中斷外部運(yùn)行的,它的過(guò)程可以被任何中斷打斷,但不影響系統(tǒng)運(yùn)行。
3)byState的最大值為250,之后被復(fù)位為零。應(yīng)用舉例
現(xiàn)在來(lái)舉例說(shuō)明上述幾個(gè)模塊的使用方法。
硬件環(huán)境描述:
為了控制一盞燈,需要單片機(jī)提供一個(gè)做控制功能的開(kāi)關(guān)量,這里不描述外部接口電路,只說(shuō)明當(dāng)單片機(jī)的P10腳為高電平時(shí),燈滅,當(dāng)P10腳為低電平時(shí),燈亮。
可以通過(guò)計(jì)算機(jī)由串口發(fā)送命令來(lái)控制,或通過(guò)一個(gè)按鍵(pushbutton不是自鎖式的按鍵)來(lái)手動(dòng)控制(按鍵接在P11腳上,當(dāng)鍵沒(méi)有按下時(shí),P11電平為高,鍵按下時(shí),引腳電平被接低),當(dāng)使用按鍵手動(dòng)控制的時(shí)候,需要給計(jì)算機(jī)發(fā)送通知。
設(shè)定串口通訊指令如下:
數(shù)據(jù)包由0xff做包頭,4個(gè)字節(jié)長(zhǎng),第二個(gè)字節(jié)為命令代碼,第三個(gè)字節(jié)為數(shù)據(jù),最后一個(gè)字節(jié)為校驗(yàn)位。
命令和數(shù)據(jù)代碼有如下組合:
(計(jì)算機(jī)發(fā)給單片機(jī))
0x100x01:計(jì)算機(jī)控制燈亮。(數(shù)據(jù)位是非零值即可)
0x100x00:計(jì)算機(jī)控制燈滅。
(單片機(jī)發(fā)給計(jì)算機(jī))
0x110x01:?jiǎn)纹瑱C(jī)正常執(zhí)行控制指令,返回。(數(shù)據(jù)位是非零值即可)
0x110x00:單片機(jī)不能夠正常執(zhí)行控制指令,或控制指令錯(cuò)(不明含義的數(shù)據(jù)包或校驗(yàn)錯(cuò)等)。
0x120x01:手動(dòng)控制燈亮。(數(shù)據(jù)位是非零值即可)
0x120x00:手動(dòng)控制燈滅。
建立工程:
在硬盤(pán)上建立文件夾Projects,在Projects下建立Common文件夾及Example文件夾。將各模塊的頭文件及實(shí)現(xiàn)文件拷貝到Common文件夾下(推薦使用這樣的文件組織結(jié)構(gòu),其它工程也可以建立在Projects下,各工程共享Common文件夾中的代碼)。
啟動(dòng)KeilC的IDE,在Example下建立新工程,將各模塊的實(shí)現(xiàn)文件包含進(jìn)工程。
在Example文件夾下建立Output文件夾,更改工程設(shè)置,將Output作為輸出文件和List文件的輸出文件夾(推薦使用這樣的結(jié)構(gòu), 當(dāng)保存工程文件時(shí),可以簡(jiǎn)單的刪除Output文件夾中的內(nèi)容而不會(huì)誤刪有用的工程文件)。
建立工程配置頭文件Config.h及工程主文件Example.c,并將Exmaple.c文件加入工程。
輸入代碼:
代碼的具體編寫(xiě)過(guò)程略。下面是最后的Config.h文件及Example.c文件。
//
//file:onfig.h
//
#ifndef_CONFIG_H_
#define_CONFIG_H_
#include//使用AT89C52做控制
#include“../Common/Common.h”//使用自定義的數(shù)據(jù)類(lèi)型
#defineTIMER_RELOAD922//11.0592MHz晶振,1ms中斷周期
#defineTIMER_KBSCANDELAY40//40ms重檢測(cè)按鍵狀態(tài),即40ms消抖
#defineSCOMM_AsyncInterface//使用異步通訊服務(wù)
#defineIsPackageHeader(x)((x)==0xff)//判斷包頭是不是0xff
#defineIsPackageTailer(x,y,z)((y)<=(z))//判斷包的長(zhǎng)度是不是足夠
#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;//燈的狀態(tài),缺省為off
staticvoidInitialize()
{
InitTimerModule();//初始化時(shí)鐘模塊
InitSCommModule(0xfd,TRUE);//初始化通訊模塊,11.0592MHz晶振,
//波特率為19200
EA=1;//開(kāi)中斷
}
voidmain()
{
Initialize();//初始化
while(TRUE)//主循環(huán)
{
ImpTimerService();//實(shí)現(xiàn)時(shí)鐘中斷服務(wù),如鍵盤(pán)掃描
AsyncRecePackage(4);//接收4個(gè)字節(jié)長(zhǎng)的數(shù)據(jù)包
}
}
//在中斷外部響應(yīng)時(shí)鐘中斷事件
voidOnTimerEvent()
{
//donothing
}
//控制外部燈
staticvoidTriggerLamp(BITbEnable)
{
P10=~bEnable;//需要反相控制
}
//鍵掃描回調(diào)函數(shù)
BYTEKBScan()
{
BITb;
P11=1;//讀之前拉高引腳電平
b=P11;//讀入引腳狀態(tài)
return~b;//數(shù)據(jù)反相做掃描碼
}
//計(jì)算校驗(yàn)和
staticBYTECalcCheckSum(BYTE*pbyBuf,BYTEbyLen)
{
BYTEby,bySum=0;
for(by=0;by
return0–bySum;
}
//接收到鍵盤(pán)消息回調(diào)函數(shù)
voidOnKeyPressed(BYTEbyvalue,BYTEbyState)
{
BYTEby[4];
if(byState==0)
{
switch(byvalue)
{
case0x01:
gbitLampState=~gbitLampState;//燈狀態(tài)取反
TriggerLamp(gbitLampState);//執(zhí)行控制
by[0]=0xff;//構(gòu)造數(shù)據(jù)包
by[1]=0x12;
by[2]=(BYTE)gbitLampState;
by[3]=CalcCheckSum(by,3);//求校驗(yàn)和
SendPackage(by,4);//發(fā)送數(shù)據(jù)包
break;
//處理其它掃描碼
default:
break;
}
}
//接收到數(shù)據(jù)包回調(diào)函數(shù)
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);//處理長(zhǎng)度或校驗(yàn)和不正確
}
switch(pbyBuf[1])
{
case0x10:
gbitLampState=(BIT)pbyBuf[2];
TriggerLamp(gbitLampState);
by[2]=1;
by[3]=CalcCheckSum(by,3);
SendPackage(by,4);//發(fā)送成功執(zhí)行通知
break;
default://不知道的命令
by[2]=0;
by[3]=CalcCheckSum(by,3);
SendPackage(by,4);//發(fā)送沒(méi)有成功執(zhí)行通知
一、緊緊圍繞教學(xué)目標(biāo)修訂教學(xué)大綱
根據(jù)單片機(jī)課程的教學(xué)目標(biāo),本著以學(xué)生為本、淡化理論、突出實(shí)用、加強(qiáng)實(shí)踐、力求知識(shí)的系統(tǒng)和完整為原則,重新修訂了教學(xué)大綱。
第一,對(duì)教學(xué)內(nèi)容進(jìn)行了合理的取舍。
第二,重新確定了教學(xué)重點(diǎn)內(nèi)容。既然確定“能夠開(kāi)發(fā)簡(jiǎn)單的開(kāi)關(guān)量”產(chǎn)品并確保理論知識(shí)的系統(tǒng)性為本門(mén)課程的教學(xué)目標(biāo),那么理論教學(xué)重點(diǎn)就放在開(kāi)發(fā)“開(kāi)關(guān)量控制”所必需具備的基礎(chǔ)知識(shí)上面,即:?jiǎn)纹瑱C(jī)的內(nèi)部結(jié)構(gòu)、指令功能、應(yīng)用程序的編寫(xiě)、中斷系統(tǒng)、定時(shí)、計(jì)數(shù)器等。這些內(nèi)容融會(huì)貫通就必須“精講多練”,所以我們把刪除的知識(shí)所占用得課時(shí)按照一定比例分配給這些內(nèi)容的理論課和實(shí)驗(yàn)課,突出其重要地位。
二、改革教學(xué)方法,提高教學(xué)效果
單片機(jī)系統(tǒng)有著強(qiáng)烈的現(xiàn)實(shí)性,對(duì)教學(xué)方式不應(yīng)是單一的固定模式??梢圆捎茫?/p>
(一)在課堂上可以將多種教學(xué)方式熔融一體,靈活應(yīng)用
可以采用多媒體、實(shí)物教學(xué),從智能控制系統(tǒng)的一個(gè)樣板實(shí)物外型到該電路的原理圖,采取部部展開(kāi),層層推進(jìn),讓學(xué)生看見(jiàn)實(shí)物產(chǎn)生感性認(rèn)識(shí),聯(lián)系到原理產(chǎn)生理性認(rèn)識(shí),由實(shí)踐上升為理論,又由理論去指導(dǎo)實(shí)踐,全面向?qū)W生傳遞智能系統(tǒng)中單片機(jī)的使用。在課堂的教學(xué)中采用講授式、啟發(fā)式、討論式、測(cè)驗(yàn)等多種教學(xué)方法,根據(jù)學(xué)生的能力及教學(xué)內(nèi)容的需要靈活使用。在教學(xué)中多與學(xué)生溝通,了解學(xué)生對(duì)教材、講課、實(shí)驗(yàn)等的要求,根據(jù)教學(xué)大綱及時(shí)加以調(diào)整教學(xué)內(nèi)容及模式,達(dá)到教學(xué)的目的。
(二)加大學(xué)生編程的訓(xùn)練
一是編制有規(guī)模的、科學(xué)的、實(shí)用的學(xué)生練習(xí)題集與試卷庫(kù),定期讓學(xué)生做書(shū)面編程,使得他們對(duì)指令的記憶加深,二是加大學(xué)生實(shí)驗(yàn)室的訓(xùn)練,培養(yǎng)他們的調(diào)試程序能力,為學(xué)生自主學(xué)習(xí)創(chuàng)造條件。
(三)推進(jìn)“學(xué)研產(chǎn)”結(jié)合
讓一部分學(xué)生利用各種時(shí)間投入到實(shí)際的項(xiàng)目工程開(kāi)發(fā)中去,培養(yǎng)學(xué)生的工程意識(shí),強(qiáng)化學(xué)生的工程訓(xùn)練,使他們了解自動(dòng)控制系統(tǒng)工程中單片機(jī)系統(tǒng)的整個(gè)開(kāi)發(fā)過(guò)程,保證學(xué)生所學(xué)的知識(shí)與實(shí)際社會(huì)接軌,讓這些學(xué)生以點(diǎn)帶面促進(jìn)、帶動(dòng)其他學(xué)生的學(xué)習(xí)興趣。
三、加強(qiáng)單片機(jī)實(shí)踐教學(xué),培養(yǎng)學(xué)生分析問(wèn)題和解決問(wèn)題的能力
單片機(jī)的實(shí)踐性較強(qiáng),對(duì)實(shí)踐教學(xué)的改革顯得尤為重要。通過(guò)改革達(dá)到使學(xué)生具備科學(xué)的思維方式和較強(qiáng)的動(dòng)手能力,并能運(yùn)用MCS-51系列芯片進(jìn)行工程開(kāi)發(fā)和應(yīng)用的能力。在教學(xué)過(guò)程中可以用單片機(jī)仿真試驗(yàn)系統(tǒng)良好的人機(jī)界面,通過(guò)單步執(zhí)行功能讓學(xué)生在顯示窗口上可以看見(jiàn)相關(guān)寄存器的變化,并能看到轉(zhuǎn)移位置;碰到中斷時(shí)程序如何轉(zhuǎn)入中斷入口去執(zhí)行以及中斷程序結(jié)束后程序如何返回。通過(guò)程序分析和觀察執(zhí)行過(guò)程,一目了然。
為了使學(xué)生具有獨(dú)立分析、解決工程中遇到的實(shí)際問(wèn)題的能力和獨(dú)立開(kāi)發(fā)單片機(jī)應(yīng)用系統(tǒng)得能力,我們?cè)诶碚摻虒W(xué)結(jié)束后另外可以增加兩周集中實(shí)訓(xùn)教學(xué)環(huán)節(jié),以體現(xiàn)出實(shí)踐教學(xué)的重要性。比如:我們?cè)诜治鰡纹瑱C(jī)應(yīng)用技能基礎(chǔ)上,設(shè)計(jì)了一個(gè)典型系統(tǒng)――單片機(jī)溫度(壓力)檢測(cè)與監(jiān)控系統(tǒng)。它由檢測(cè)系統(tǒng)、信號(hào)放大系統(tǒng)、A/D轉(zhuǎn)換器、控制系統(tǒng)及單片機(jī)系統(tǒng)等六個(gè)部分組成。
具體要求如下:檢測(cè)系統(tǒng)能把0―100℃的溫度轉(zhuǎn)換為0-1V的信號(hào)。放大及波形變換電路把信號(hào)放大到0―5V的直流信號(hào),經(jīng)A/D后送入單片機(jī)系統(tǒng),單片機(jī)系統(tǒng)對(duì)測(cè)量信號(hào)進(jìn)行濾波,非線性校準(zhǔn),標(biāo)度變換,通過(guò)人機(jī)界面顯示出來(lái)。報(bào)警值可通過(guò)人機(jī)界面(鍵盤(pán))設(shè)定。單片機(jī)系統(tǒng)還能完成對(duì)控制量的自動(dòng)設(shè)置。本方案是集電工、模擬電子、數(shù)字電子、自動(dòng)檢測(cè)、單片機(jī)的嵌入式應(yīng)用于一體的系統(tǒng),為了提高單片機(jī)的應(yīng)用能力,我們把這個(gè)綜合項(xiàng)目進(jìn)行分解,把總的要求分解到各相應(yīng)課程的實(shí)踐中完成。如溫度檢測(cè)與監(jiān)控系統(tǒng)分解為以下幾個(gè)子項(xiàng)目:1.電源變壓器的設(shè)計(jì)與制作;2.穩(wěn)壓電源的設(shè)計(jì)與制作;3.放大器與波形變換電路設(shè)計(jì)與制作;4.非電量(溫度)檢測(cè)設(shè)計(jì)與制作;5.單片機(jī)系統(tǒng)設(shè)計(jì)與制作。根據(jù)各部分之間的接口要求提出相應(yīng)的指標(biāo),把這些項(xiàng)目分配到相應(yīng)的實(shí)訓(xùn)中。例如把電源變壓器設(shè)計(jì)與制作在電工實(shí)習(xí)中完成;穩(wěn)壓電源、放大器及波形變換電路的設(shè)計(jì)與制作在電子技術(shù)實(shí)訓(xùn)時(shí)完成;檢測(cè)系統(tǒng)設(shè)計(jì)與制作在自動(dòng)檢測(cè)實(shí)訓(xùn)階段完成;單片機(jī)系統(tǒng)的軟、硬件設(shè)計(jì)在單片機(jī)課程設(shè)計(jì)階段完成;整個(gè)系統(tǒng)的組裝及調(diào)試在單片機(jī)實(shí)訓(xùn)階段完成。通過(guò)變壓器的制作,學(xué)生了解了選用漆包線的方法,學(xué)會(huì)小型變壓器的設(shè)計(jì),掌握變壓器的繞制工藝。放大器的制作,使學(xué)生學(xué)會(huì)了放大器的設(shè)計(jì)、制作、調(diào)試工藝和電子測(cè)量?jī)x器的選擇與使用。檢測(cè)電路的設(shè)計(jì),使學(xué)生學(xué)會(huì)了傳感器的選擇和使用,進(jìn)一步理解傳感器的主要技術(shù)對(duì)檢測(cè)結(jié)果的影響,學(xué)會(huì)測(cè)量誤差的分析方法。單片機(jī)系統(tǒng)的設(shè)計(jì)與制作,使學(xué)生能根據(jù)工程要求,配置單片機(jī)應(yīng)用系統(tǒng)的硬件電路,完成顯示、A/D、鍵盤(pán)、程控等子程序的編寫(xiě)調(diào)試,熟練軟件編程環(huán)境和仿真器、編程器的使用方法。
四、結(jié)束語(yǔ)
單片機(jī)系統(tǒng)教學(xué)應(yīng)突出教學(xué)的自主性、開(kāi)放性和創(chuàng)新性,有利于新世紀(jì)創(chuàng)新人才的培養(yǎng),符合高校的教育教學(xué)規(guī)律。在教學(xué)過(guò)程中,以加強(qiáng)基礎(chǔ)、培養(yǎng)能力、開(kāi)拓思維、注重創(chuàng)新、提高素質(zhì)為指導(dǎo)思想、以培養(yǎng)與提高學(xué)生的科學(xué)實(shí)驗(yàn)素質(zhì)、動(dòng)手能力和創(chuàng)新能力為目標(biāo),建立以學(xué)生為主體、教師為主導(dǎo),以層次化、模塊化、全面開(kāi)放的新的教學(xué)模式運(yùn)作。力爭(zhēng)通過(guò)單片機(jī)系統(tǒng)教學(xué)的改革,使學(xué)生能理解、掌握實(shí)際的單片機(jī)應(yīng)用系統(tǒng)的開(kāi)發(fā)過(guò)程,學(xué)會(huì)掌握及使用新技術(shù)的方法,使學(xué)生掌握一個(gè)實(shí)際單片機(jī)應(yīng)用系統(tǒng)的開(kāi)發(fā)模擬過(guò)程。
2選擇合適的多媒體課件以滿足教學(xué)需求
把多媒體課件應(yīng)用到單片機(jī)課程的教學(xué)過(guò)程中,使得單片機(jī)教學(xué)不再枯燥,不僅可以使學(xué)生提高對(duì)理論知識(shí)的認(rèn)識(shí),而且通過(guò)仿真實(shí)例可以使學(xué)生熟悉單片機(jī)系統(tǒng)的開(kāi)發(fā)方法,進(jìn)而培養(yǎng)學(xué)生的動(dòng)手和實(shí)踐的能力。但是多媒體課件良莠不齊,必須選擇合適的多媒體課件否則事得其反。首先,電子課件的開(kāi)發(fā)工具有很多種,每種工具軟件有各自的特點(diǎn),要合理選擇。在單片機(jī)多媒體課件的開(kāi)發(fā)過(guò)程中,筆者所在教學(xué)團(tuán)隊(duì),結(jié)合了電子課件開(kāi)發(fā)工具PowerPoint和單片機(jī)仿真軟件PROTUES,使用PROTUES針對(duì)具體實(shí)例開(kāi)發(fā)出仿真程序,同時(shí)把仿真結(jié)果動(dòng)態(tài)的插入到PowerPoint制作的電子課件中,使得多媒體課件能夠演示單片機(jī)工作的動(dòng)態(tài)及結(jié)果,感性且直觀,同時(shí)又增加了課件的趣味性。其次,要及時(shí)更新多媒體課件以適應(yīng)單片機(jī)技術(shù)的發(fā)展速度?!秵纹瑱C(jī)原理與應(yīng)用》是一門(mén)內(nèi)容多且雜、實(shí)踐能力要求高、發(fā)展迅速的課程,為了適應(yīng)數(shù)字系統(tǒng)的不斷發(fā)展,多媒體課件中動(dòng)態(tài)仿真實(shí)例要盡可能的選擇新事例,一方面能增加知識(shí)量,使課程和發(fā)展形勢(shì)緊密結(jié)合,另一方面也能調(diào)動(dòng)學(xué)生的學(xué)習(xí)興趣,從而提高教學(xué)效果。
摘要:從單片機(jī)行業(yè)就業(yè)需求特點(diǎn)出發(fā),通過(guò)對(duì)教學(xué)內(nèi)容和方法的優(yōu)化組合,對(duì)實(shí)驗(yàn)教學(xué)、考核方式的改革,以達(dá)到改善教學(xué)效果,增強(qiáng)學(xué)生動(dòng)手能力,培養(yǎng)學(xué)生創(chuàng)新精神的目標(biāo),從而使學(xué)生適應(yīng)當(dāng)今就業(yè)要求,最終實(shí)現(xiàn)教、學(xué)、做、就業(yè)的高度統(tǒng)一。關(guān)鍵詞:?jiǎn)纹瑱C(jī);教學(xué)改革;就業(yè)需求;創(chuàng)新能力中圖分類(lèi)號(hào):G424.1
文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):16723198(2009)19021601高校教學(xué)改革已成為一種必然趨勢(shì),只有不斷改進(jìn)教學(xué)內(nèi)容和方法,豐富教學(xué)手段,激發(fā)學(xué)生的學(xué)習(xí)興趣,加強(qiáng)實(shí)踐能力的培養(yǎng),才能實(shí)現(xiàn)教、學(xué)、做、就業(yè)的高度統(tǒng)一,從某種程度上可緩解大學(xué)生的就業(yè)問(wèn)題。1 教學(xué)內(nèi)容和方法的改革根據(jù)單片機(jī)行業(yè)對(duì)應(yīng)聘者的相關(guān)要求以及本門(mén)課程入門(mén)難的特點(diǎn),教學(xué)中打破傳統(tǒng)推車(chē)式的教學(xué)方式,注重對(duì)教學(xué)內(nèi)容和方法進(jìn)行優(yōu)化和組合,將本門(mén)課程的學(xué)習(xí)分如下四個(gè)階段:第一階段:?jiǎn)纹瑱C(jī)相關(guān)知識(shí)及內(nèi)部結(jié)構(gòu)。首先在講授各部分前,教師應(yīng)對(duì)單片機(jī)就業(yè)前景、應(yīng)用現(xiàn)狀等問(wèn)題給學(xué)生做一細(xì)致分析。然后以類(lèi)比的方式(如:人體各部分)講解單片機(jī)最小系統(tǒng),并讓學(xué)生明確最小系統(tǒng)是單片機(jī)能夠正常工作的基本條件,對(duì)單片機(jī)有一個(gè)整體認(rèn)識(shí)。接下來(lái)以最小系統(tǒng)為中心分別對(duì)單片機(jī)引腳功能、內(nèi)部結(jié)構(gòu)、晶振、電源、ISP、復(fù)位等知識(shí)進(jìn)行簡(jiǎn)單講解。此部分應(yīng)在后面整個(gè)學(xué)習(xí)過(guò)程中不斷進(jìn)行回顧和學(xué)習(xí)。第二階段:跳過(guò)復(fù)雜的匯編指令,結(jié)合嵌入式C語(yǔ)言講解單片機(jī)并行I/O口工作方式。據(jù)調(diào)研,目前單片機(jī)行業(yè)主要以嵌入式C語(yǔ)言為主要編程工具,故授課時(shí)主要以嵌入式C語(yǔ)言為工具講解,在后面出現(xiàn)編寫(xiě)程序需要時(shí)(如DS18B20等需精確延時(shí)的程序時(shí))再穿插講解C、匯編混合編程方法,這樣既和實(shí)際工作更加貼近又使學(xué)生避過(guò)一開(kāi)始就面對(duì)復(fù)雜的匯編指令,增強(qiáng)學(xué)好的信心。在對(duì)單片機(jī)并行I/O口講解時(shí),要側(cè)重于讓學(xué)生明白單片機(jī)作為雙向I/O應(yīng)用時(shí)每次讀入前為何需先置1等這類(lèi)應(yīng)用型問(wèn)題。在講解單片機(jī)對(duì)I/O口的控制方式時(shí),可以采用類(lèi)比的方式(如:將單片機(jī)的各個(gè)功能寄存器比喻成我們平時(shí)使用的操作系統(tǒng)),以增強(qiáng)學(xué)生的理解。經(jīng)過(guò)基礎(chǔ)知識(shí)的講解后,教師應(yīng)拿出大量學(xué)時(shí)帶領(lǐng)學(xué)生從編寫(xiě)簡(jiǎn)單的流水燈程序開(kāi)始,結(jié)合電腦在編譯軟件(如KEIL軟件)下調(diào)試,一邊編寫(xiě)程序一邊講解各部分理論知識(shí)(如:程序中頭文件的作用,LED發(fā)光二極管的工作原理等),并且逐步由教師帶領(lǐng)學(xué)生編寫(xiě)向教師給任務(wù)學(xué)生自主設(shè)計(jì)過(guò)渡。在此過(guò)程中,需不斷回故前面知識(shí),學(xué)習(xí)新接口芯片,并同步電腦調(diào)試,驗(yàn)證結(jié)果。此部分題目至少涉及如下方面:(1)LED流水燈;(2)獨(dú)立式按鍵;(3)LED數(shù)碼管;(4)矩陣式按鍵;(5)蜂鳴器。第三階段:中斷、定時(shí)器、串行口部分。由于定時(shí)器、串行口多使用中斷方式,與外部中斷具有一定的共性,故放在一起進(jìn)行講解,以達(dá)到觸類(lèi)旁通的目的。首先以學(xué)生看得到、摸得著,運(yùn)用發(fā)生在身邊的實(shí)際例子(如接電話)進(jìn)行中斷的相關(guān)概念和中斷處理過(guò)程的理論講解,然后以外部中斷為代表,結(jié)合大量的程序(如每按一次按鍵LED小燈亮滅變化一次等)講解實(shí)際中斷的處理過(guò)程及編程方法,使學(xué)生通過(guò)具體的程序充份理解中斷的用途及處理方式。在外部中斷被充分掌握的情況下,利用我們身邊的實(shí)例(如:以出租車(chē)行駛里程計(jì)數(shù)等)進(jìn)行定時(shí)器和串行口工作方式的講解,由于前面對(duì)中斷的相關(guān)概念、外部中斷的工作原理有了很好的理解,故在學(xué)習(xí)定時(shí)器和串行口工作方式時(shí)學(xué)生就不會(huì)感覺(jué)太困難。第四階段:綜合設(shè)計(jì)及系統(tǒng)擴(kuò)展。結(jié)合前面學(xué)過(guò)的知識(shí),此部分教師拿出部分課時(shí),以任務(wù)的方式提出一系列設(shè)計(jì)任務(wù),學(xué)生綜合前面學(xué)過(guò)的知識(shí)進(jìn)行設(shè)計(jì),以達(dá)對(duì)知識(shí)鞏固、整合的目的,對(duì)學(xué)生創(chuàng)新能力也是一個(gè)很好的鍛煉。以上四階段需逐級(jí)遞進(jìn),每一階段在講授基礎(chǔ)知識(shí)后,需通過(guò)大量的練習(xí)進(jìn)行消化理解,各部分一定要突出單片機(jī)的應(yīng)用性,使學(xué)生體會(huì)到單片機(jī)的應(yīng)用就在身邊,以此激發(fā)學(xué)生的學(xué)習(xí)興趣。2 改革實(shí)驗(yàn)教學(xué),提高動(dòng)手能力打破常規(guī)按照指導(dǎo)書(shū)學(xué)生下載程序單純進(jìn)行驗(yàn)證的傳統(tǒng)實(shí)驗(yàn)?zāi)J?,?duì)課內(nèi)實(shí)驗(yàn)教學(xué)進(jìn)行改革,每次均將實(shí)驗(yàn)分為基礎(chǔ)實(shí)驗(yàn)和設(shè)計(jì)性實(shí)驗(yàn)兩部分,并逐漸加大設(shè)計(jì)性實(shí)驗(yàn)的比例?;A(chǔ)實(shí)驗(yàn)主要讓學(xué)生按照實(shí)驗(yàn)指導(dǎo)書(shū)指導(dǎo),對(duì)相關(guān)理論知識(shí)進(jìn)行驗(yàn)證、對(duì)此部分實(shí)驗(yàn)系統(tǒng)結(jié)構(gòu)、使用方法和軟件調(diào)試方法進(jìn)行掌握,為后面設(shè)計(jì)性實(shí)驗(yàn)打下基礎(chǔ)。設(shè)計(jì)性實(shí)驗(yàn)由老師提出相應(yīng)的設(shè)計(jì)任務(wù)(如:利用現(xiàn)有資源設(shè)計(jì)一款節(jié)日彩燈、設(shè)計(jì)一個(gè)秒表等),學(xué)生自主進(jìn)行設(shè)計(jì)、實(shí)驗(yàn)。設(shè)計(jì)性實(shí)驗(yàn)以前面基礎(chǔ)實(shí)驗(yàn)為基礎(chǔ),但設(shè)計(jì)任務(wù)又脫離指導(dǎo)書(shū),沒(méi)有參考的內(nèi)容,故學(xué)生只能自已設(shè)計(jì)硬件電路的連線,編寫(xiě)程序并調(diào)試,從而達(dá)到對(duì)學(xué)生基礎(chǔ)理論知識(shí)和獨(dú)立自主創(chuàng)新能力雙方面的鍛煉,而這兩項(xiàng)也是用人單位十分看重的。3 開(kāi)展課程設(shè)計(jì),培養(yǎng)創(chuàng)新能力在單片機(jī)教學(xué)改革中,增設(shè)了課程設(shè)計(jì)部分。課程一開(kāi)始教師提供多個(gè)具有創(chuàng)新要求的課程設(shè)計(jì)供學(xué)生選擇。一般五、六人為一組,此課題伴隨整個(gè)單片機(jī)教學(xué),讓學(xué)生在學(xué)習(xí)過(guò)程中不斷想到自已的課題,遇到問(wèn)題時(shí)先自已解決,不成功時(shí)教師再加以適當(dāng)指導(dǎo)。在教學(xué)過(guò)程中可以感受到學(xué)生學(xué)習(xí)的主動(dòng)性明顯增強(qiáng),所提問(wèn)題具有更強(qiáng)的針對(duì)性,學(xué)習(xí)效果也更好。課程設(shè)計(jì)主要對(duì)學(xué)生以下幾個(gè)方面進(jìn)行了實(shí)戰(zhàn)訓(xùn)練:(1)根據(jù)設(shè)計(jì)任務(wù)的具體要求,查閱資料、制定設(shè)計(jì)方案及預(yù)其目標(biāo);(2)使用Protel軟件設(shè)計(jì)電路原理圖和PCB版圖(也可利用萬(wàn)能板完成但要保證信號(hào)的穩(wěn)定性);(3)購(gòu)買(mǎi)元器件并進(jìn)行電路版的焊接;(4)進(jìn)行軟件編程;(5)進(jìn)行軟、硬件聯(lián)機(jī)調(diào)試,完善系統(tǒng)功能;(6)撰寫(xiě)技術(shù)文檔資料。通過(guò)課程設(shè)計(jì),使學(xué)生掌握了單片機(jī)系統(tǒng)開(kāi)發(fā)設(shè)計(jì)的全過(guò)程,培養(yǎng)了學(xué)生團(tuán)隊(duì)精神和創(chuàng)新能力。4 改革考核方式,注重實(shí)際能力改變以往一張?jiān)嚲矶ǔ煽?jī)的方式,更加注重了實(shí)際能力的考核。改革后,本課程的考核分為四方面:第一方面是平時(shí)考核,側(cè)重于課堂上學(xué)生出勤、學(xué)習(xí)態(tài)度及參與問(wèn)題討論的積極性,占總成績(jī)的20%;第二方面是實(shí)踐能力的考核,側(cè)重于學(xué)生的實(shí)際操作能力的考核,此部分主要針對(duì)平時(shí)實(shí)驗(yàn)成績(jī),占總成績(jī)的30%;第三方面課題設(shè)計(jì)考核,根據(jù)每個(gè)人的工作量及最終效果評(píng)定此部分成績(jī),側(cè)重于綜合動(dòng)手能力及自主學(xué)習(xí)能力的考核,占總成績(jī)的20%;第四方面理論考核,側(cè)重于基本理論的考核,占總成績(jī)的30%。由于考核方式的改革,使學(xué)生重視實(shí)驗(yàn)教學(xué),提高了學(xué)生的實(shí)踐能力、互動(dòng)性增強(qiáng),改善了教學(xué)效果和質(zhì)量。5 教改實(shí)施效果通過(guò)對(duì)教改方案的實(shí)施,教學(xué)取得了明顯的成效。學(xué)生學(xué)習(xí)的主動(dòng)性大為增強(qiáng)。實(shí)際動(dòng)手能力明顯提高,這點(diǎn)從大四學(xué)生畢業(yè)設(shè)計(jì)中得到了很好的體現(xiàn),學(xué)生能較容易地獨(dú)立完成DS18B20溫度監(jiān)測(cè)系統(tǒng)、數(shù)字電子時(shí)鐘、十字路通指揮系統(tǒng)等畢業(yè)設(shè)計(jì)題目,且選擇嵌入式相關(guān)工作的學(xué)生大部分均成功地找到工作。較快地完成角色的轉(zhuǎn)變,基本達(dá)到了社會(huì)對(duì)單片機(jī)應(yīng)用技術(shù)培養(yǎng)人才的需要。參考文獻(xiàn)[1]李廣弟.單片機(jī)基礎(chǔ)(修訂版)[M].北京:北京航空航天大學(xué)出版社,2001.[2]劉守義.單片機(jī)應(yīng)用技術(shù)[M].西安:西安電子科技大學(xué)出版社,2002.[3]于復(fù)生.任務(wù)驅(qū)動(dòng)教學(xué)法在機(jī)電一體化系統(tǒng)設(shè)計(jì)教學(xué)中的實(shí)踐與探索[J].電氣電子教學(xué)學(xué)報(bào),2004,(1).[4]陳裕成.單片機(jī)原理及應(yīng)用教學(xué)改革探索[J].漳州師范學(xué)院學(xué)報(bào)(自然科學(xué)版),2007,(2).
中圖分類(lèi)號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1674-098X(2014)11(a)-0127-01
隨著人民生活水平的提高和相關(guān)技術(shù)的發(fā)展,單片機(jī)技術(shù)在工業(yè)控制領(lǐng)域和消費(fèi)電子領(lǐng)域等方面得到了廣泛的應(yīng)用。作為高校相關(guān)學(xué)科的專(zhuān)業(yè)基礎(chǔ)課,“單片機(jī)原理應(yīng)用”課程也得到了越來(lái)越多的重視,本課程的理論性和實(shí)踐性都很強(qiáng)[1-2]。要使學(xué)生真正學(xué)好本課程,不僅要讓學(xué)生深刻理解單片機(jī)的相關(guān)理論知識(shí),重點(diǎn)在于要讓學(xué)生學(xué)會(huì)怎么用好單片機(jī),因此在高校的教學(xué)中,必須做到理論教學(xué)與實(shí)踐教學(xué)并重,通過(guò)實(shí)踐教學(xué)帶動(dòng)和促進(jìn)理論教學(xué),不斷提高學(xué)生的動(dòng)手能力和創(chuàng)新能力[3]。
1 當(dāng)前實(shí)踐教學(xué)現(xiàn)狀
當(dāng)前的實(shí)踐教學(xué)中存在的問(wèn)題可以從以下三方面分析。
1.1 試驗(yàn)課時(shí)和試驗(yàn)設(shè)備不足
以我校電氣工程及其自動(dòng)化專(zhuān)業(yè)本科生的培養(yǎng)方案為例,單片機(jī)原理與應(yīng)用理論教學(xué)共76課時(shí),其中含有60個(gè)理論學(xué)時(shí)和16個(gè)實(shí)驗(yàn)學(xué)時(shí),另外設(shè)有一周單片機(jī)原理與應(yīng)用課程設(shè)計(jì)。從學(xué)時(shí)分配上,實(shí)驗(yàn)課時(shí)占總課時(shí)的21.05%,比例偏低。為了在有限的實(shí)驗(yàn)學(xué)時(shí)內(nèi)完成教學(xué)任務(wù),試驗(yàn)指導(dǎo)教師只能安排一些基礎(chǔ)性或驗(yàn)證性實(shí)驗(yàn),學(xué)生缺乏足夠的鍛煉,達(dá)不到實(shí)驗(yàn)教學(xué)的最終目的。另外,受實(shí)驗(yàn)室中設(shè)備數(shù)量限制,實(shí)踐教學(xué)中出現(xiàn)“抱大腿”現(xiàn)象,即一部分同學(xué)認(rèn)真做,一部分同學(xué)玩的現(xiàn)象。
1.2 實(shí)踐教學(xué)內(nèi)容缺乏創(chuàng)新性
傳統(tǒng)的單片機(jī)實(shí)驗(yàn)教學(xué)內(nèi)容中基礎(chǔ)性、驗(yàn)證性內(nèi)容多,綜合性、設(shè)計(jì)性實(shí)驗(yàn)少。課程設(shè)計(jì)中選題限于試驗(yàn)箱和試驗(yàn)臺(tái)資源,題目?jī)?nèi)容很難跟蹤當(dāng)前技術(shù)發(fā)展的熱點(diǎn)。為了達(dá)到實(shí)物設(shè)計(jì)的目的,課程設(shè)計(jì)中題目偏重于實(shí)驗(yàn)臺(tái)(箱)上能進(jìn)行的實(shí)驗(yàn)項(xiàng)目,限于資源,題目難度總體來(lái)說(shuō)偏低,實(shí)踐教學(xué)過(guò)程演變成了對(duì)實(shí)驗(yàn)課內(nèi)容的簡(jiǎn)單綜合。且選題陳舊,一題多屆,多人一題現(xiàn)象普遍,缺乏綜合性、新穎性,難以激發(fā)學(xué)生學(xué)習(xí)的興趣,更無(wú)法培養(yǎng)學(xué)生的創(chuàng)新能力。
1.3 實(shí)踐教學(xué)考核體系
傳統(tǒng)的實(shí)踐教學(xué)的成績(jī)考核包含:課程設(shè)計(jì)報(bào)告,設(shè)計(jì)過(guò)程考核和作品設(shè)計(jì)考核。由于實(shí)踐教學(xué)內(nèi)容缺乏創(chuàng)新,容易出現(xiàn)投機(jī)取巧的現(xiàn)象,使得考核過(guò)程流于形式,難以區(qū)分學(xué)生在實(shí)踐教學(xué)過(guò)程中取得的成果,也就調(diào)動(dòng)學(xué)生在實(shí)踐教學(xué)過(guò)程中的積極性。
2 實(shí)踐教學(xué)改革內(nèi)容
傳統(tǒng)的單片機(jī)原理與應(yīng)用的實(shí)踐教學(xué)無(wú)法達(dá)到培養(yǎng)學(xué)生創(chuàng)新能力和綜合應(yīng)用能力的要求,需要進(jìn)行改革。針對(duì)這些問(wèn)題,實(shí)踐教學(xué)改革在以下幾個(gè)方面展開(kāi)。
2.1 實(shí)驗(yàn)室建設(shè)
良好的實(shí)驗(yàn)室條件是能夠開(kāi)展實(shí)踐教學(xué)的基礎(chǔ)條件。在實(shí)驗(yàn)室建設(shè)中不再選用試驗(yàn)臺(tái)或試驗(yàn)箱這些昂貴的試驗(yàn)設(shè)備,而是以單片機(jī)開(kāi)發(fā)板作為實(shí)踐教學(xué)的平臺(tái)。單片機(jī)開(kāi)發(fā)板價(jià)格較低,但資源卻非常豐富,可以最大程度上滿足實(shí)踐教學(xué)的需要。而且可以隨著技術(shù)的發(fā)展不斷更新教學(xué)資源,甚至部分學(xué)生會(huì)自行購(gòu)買(mǎi)。
2.2 項(xiàng)目驅(qū)動(dòng)式實(shí)踐教學(xué)
實(shí)踐教學(xué)中不再由指導(dǎo)教師給定題目,而是由同學(xué)們自選題目,指導(dǎo)教師審查題目。項(xiàng)目的設(shè)計(jì)既要完全包含本課程的知識(shí)點(diǎn)和技能要求,還要與實(shí)際相聯(lián)系。所選項(xiàng)目可以源自日常生活中遇到的問(wèn)題,也可以是自己感興趣的課題。所選題目由指導(dǎo)教師審查題目難度及可行性,并給出建議后形成一個(gè)小項(xiàng)目。這種選題方法可以最大程度上避免選題陳舊等問(wèn)題。變抽象為具體,激發(fā)學(xué)生的學(xué)習(xí)興趣。
2.3 實(shí)踐教學(xué)組織
試驗(yàn)資源增加后,在組織實(shí)施實(shí)踐教學(xué)中,鼓勵(lì)單人單組,最多兩人一組。利用興趣引導(dǎo)學(xué)習(xí),激發(fā)學(xué)習(xí)的主動(dòng)性,從而可以最大程度上避免“抱大腿”現(xiàn)象。而且因?yàn)樵囼?yàn)資源不再局限于實(shí)驗(yàn)室,可以更充分的利用利用課余時(shí)間。在開(kāi)設(shè)課程設(shè)計(jì)的學(xué)期內(nèi)完成,參加學(xué)期末的課程設(shè)計(jì)答辯。從思想上不再把單片機(jī)課程設(shè)計(jì)當(dāng)做某一段時(shí)間內(nèi)需要完成的任務(wù)。通過(guò)長(zhǎng)時(shí)間的鍛煉可以取得更好的實(shí)踐鍛煉效果。
2.4 開(kāi)發(fā)工具多樣化
實(shí)踐教學(xué)中堅(jiān)持開(kāi)放工具的多樣化,不限定使用仿真器調(diào)試。實(shí)踐教學(xué)前期可以使用仿真器調(diào)試,鍛煉學(xué)生的編程與調(diào)試能力。到實(shí)踐教學(xué)后期,因?yàn)榇蟛糠殖绦蛞呀?jīng)調(diào)試完成,此時(shí)引導(dǎo)學(xué)生脫離仿真器調(diào)試程序,鍛煉學(xué)生的分析問(wèn)題和解決此類(lèi)問(wèn)題的邏輯思維。
2.5 以知識(shí)競(jìng)賽引領(lǐng)創(chuàng)新
鼓勵(lì)以實(shí)踐教學(xué)的作品參加國(guó)家級(jí)或者省級(jí)電子設(shè)計(jì)類(lèi)比賽。參加這類(lèi)比賽以增強(qiáng)動(dòng)手能力為主要目的,同時(shí)也會(huì)保證作品的實(shí)用性、新穎性和知識(shí)的綜合性。激發(fā)學(xué)生之間的競(jìng)爭(zhēng)意識(shí),促進(jìn)實(shí)踐鍛煉的教學(xué)效果。
2.6 實(shí)踐教學(xué)的考核體系建設(shè)
學(xué)期末組織課程設(shè)計(jì)答辯,根據(jù)所選題目難度、任務(wù)工作量、完成情況、答辯表現(xiàn)、課程設(shè)計(jì)報(bào)告給出最終實(shí)踐教學(xué)的基本成績(jī)。根據(jù)參加各類(lèi)大賽的獲獎(jiǎng)情況給出創(chuàng)新成績(jī),這兩個(gè)成績(jī)按一定比例確定最終成績(jī),在我校目前實(shí)施的考核體系中,競(jìng)賽成績(jī)所占比例為30%。增加的答辯環(huán)節(jié),既可以鑒別該同學(xué)是否真正完成了相應(yīng)的實(shí)踐教學(xué)鍛煉,避免抄襲現(xiàn)象和“抱大腿”現(xiàn)象,還可以鍛煉學(xué)生相應(yīng)的邏輯思維能力。
3 實(shí)踐教學(xué)改革的成效
從2012年開(kāi)始在電氣工程及其自動(dòng)化、自動(dòng)化、電子信息工程三個(gè)專(zhuān)業(yè)進(jìn)行實(shí)踐教學(xué)內(nèi)容及方法的試點(diǎn)改革,約有1000名學(xué)生接受了新的實(shí)踐教學(xué)內(nèi)容和方法。通過(guò)實(shí)踐教學(xué)改革,激發(fā)了學(xué)生學(xué)習(xí)的主動(dòng)性與積極性,培養(yǎng)了學(xué)生的創(chuàng)新意識(shí)和綜合運(yùn)用知識(shí)的能力,提高了學(xué)生的動(dòng)手能力。學(xué)生參加電子類(lèi)大賽的人數(shù)和獲獎(jiǎng)人數(shù)以及獲獎(jiǎng)等級(jí)逐年提高,2012年,在山東省大學(xué)生電子設(shè)計(jì)大賽中參賽的8只代表隊(duì)全部獲得山東省一等獎(jiǎng),2013年,在全國(guó)大學(xué)生電子設(shè)計(jì)大賽中有兩個(gè)不同的題目獲得全國(guó)一等獎(jiǎng),還有2個(gè)隊(duì)伍獲得全國(guó)二等獎(jiǎng),剩下的9只代表隊(duì)獲得了山東省一等獎(jiǎng)。這些數(shù)據(jù)充分說(shuō)明學(xué)生學(xué)習(xí)的積極性得到了激發(fā),實(shí)踐動(dòng)手能力得到了明顯的進(jìn)步。
參考文獻(xiàn)
中圖分類(lèi)號(hào):TP434 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):16727800(2013)002018202
0 引言
隨著微電子及計(jì)算機(jī)技術(shù)的迅速發(fā)展,單片機(jī)以體積小、功能強(qiáng)和性價(jià)比高等特點(diǎn),在工業(yè)控制、通信技術(shù)和數(shù)據(jù)采集等領(lǐng)域獲得了廣泛應(yīng)用。目前,許多學(xué)校都開(kāi)設(shè)了《單片機(jī)原理與應(yīng)用》,這門(mén)課程將程序語(yǔ)言、串口通信、模擬電路和數(shù)字電路等知識(shí)綜合起來(lái),是一門(mén)理論性、技術(shù)性、工程性和實(shí)踐性都很強(qiáng)的課程,是計(jì)算機(jī)、電子類(lèi)、機(jī)電一體化、自動(dòng)化等專(zhuān)業(yè)的專(zhuān)業(yè)必修課。掌握好單片機(jī)技術(shù)對(duì)高職生工程素質(zhì)的培養(yǎng)以及職業(yè)技能的提高都大有益處。
1 目前《單片機(jī)原理及應(yīng)用》課程教學(xué)的不足
自20世紀(jì)80年代后期,我國(guó)的高等院校工科專(zhuān)業(yè)開(kāi)始開(kāi)設(shè)單片機(jī)課程,至今有20多年了。這期間,在教室講授理論,到實(shí)驗(yàn)室利用實(shí)驗(yàn)箱做實(shí)驗(yàn)的教學(xué)模式一直沿用至今。由于單片機(jī)技術(shù)涉及到硬件電路設(shè)計(jì)和軟件設(shè)計(jì)兩方面的知識(shí)和技能,學(xué)習(xí)難度較大,致使初學(xué)者上課猶如聽(tīng)天書(shū),時(shí)間不長(zhǎng)多數(shù)學(xué)生就懵懵然而放棄了,入門(mén)者寥寥。出現(xiàn)這些問(wèn)題的原因主要是教學(xué)方法上存在一些不足。
(1)理論與實(shí)踐教學(xué)比例分配不當(dāng),重理論輕實(shí)踐。目前的單片機(jī)課程教學(xué)多以理論課為主,實(shí)踐課為輔。教材理論體系嚴(yán)謹(jǐn),教師教學(xué)思路清晰,但學(xué)生往往感覺(jué)內(nèi)容枯燥、概念抽象、指令難記。課堂教學(xué)按照教材內(nèi)容的編排順序、相關(guān)知識(shí)的邏輯關(guān)系進(jìn)行,學(xué)生剛剛接觸數(shù)字電路,缺乏編程語(yǔ)言及計(jì)算機(jī)結(jié)構(gòu)的相關(guān)知識(shí),難以順利入門(mén)并對(duì)課程產(chǎn)生濃厚興趣。同時(shí),大部分教師的教學(xué)方法通常以講授為主,缺乏直觀形象的實(shí)際操作。這些原因?qū)е聦W(xué)生普遍認(rèn)為單片機(jī)的課程非常難學(xué)。
在教學(xué)過(guò)程中,往往理論教學(xué)的學(xué)時(shí)遠(yuǎn)遠(yuǎn)多于實(shí)驗(yàn)教學(xué)的學(xué)時(shí),并且實(shí)驗(yàn)教學(xué)一般在“匯編語(yǔ)言設(shè)計(jì)”講完之后開(kāi)始進(jìn)行。這種教學(xué)體系的不足之處在于:①以大量的原理介紹引導(dǎo)學(xué)生入門(mén),學(xué)生理解苦難,學(xué)習(xí)過(guò)程也感覺(jué)枯燥乏味;②教學(xué)過(guò)程中“重理論輕實(shí)踐”,實(shí)驗(yàn)只是點(diǎn)綴,造成學(xué)生的應(yīng)用能力培養(yǎng)缺乏,對(duì)培養(yǎng)應(yīng)用型人才的培養(yǎng)目標(biāo)十分不利;③軟件和硬件介紹時(shí)分開(kāi),對(duì)單片機(jī)系統(tǒng)軟硬件結(jié)合的設(shè)計(jì)方法介紹不足,學(xué)生在實(shí)際工作中缺少系統(tǒng)化的思路。
(2)教學(xué)方法老套,無(wú)法激起學(xué)生的學(xué)習(xí)興趣。目前,大多數(shù)高校的理論教學(xué)過(guò)程都是采用先基礎(chǔ)后應(yīng)用的模式,即單片機(jī)硬件結(jié)構(gòu)、指令系統(tǒng)、匯編語(yǔ)言設(shè)計(jì)、外部系統(tǒng)擴(kuò)展、接口技術(shù)和應(yīng)用系統(tǒng)設(shè)計(jì),這種方法雖然思路清晰,但是存在著過(guò)于機(jī)械性的弊端,缺乏生動(dòng)、直觀的實(shí)物等輔助教學(xué)手段,這樣便使學(xué)生覺(jué)得學(xué)習(xí)單片機(jī)枯燥乏味,沒(méi)有現(xiàn)實(shí)意義、缺乏興趣,嚴(yán)重影響了教學(xué)效果。實(shí)踐教學(xué)形式單一且受重視不夠。當(dāng)前的實(shí)踐課教學(xué)大多以單片機(jī)實(shí)驗(yàn)箱為實(shí)驗(yàn)平臺(tái),而開(kāi)設(shè)的也多為驗(yàn)證性實(shí)驗(yàn)。觀察中不難發(fā)現(xiàn),學(xué)生在做實(shí)驗(yàn)時(shí)大都是用實(shí)驗(yàn)指導(dǎo)書(shū)上已經(jīng)寫(xiě)好的程序資料,幾乎沒(méi)有多少同學(xué)去分析程序的流程,更不用說(shuō)去研究讀懂那些代碼了。另外,對(duì)于用到電路硬件的實(shí)驗(yàn),也只是按實(shí)驗(yàn)指導(dǎo)書(shū)要求在實(shí)驗(yàn)箱上做簡(jiǎn)單的連線,沒(méi)有一個(gè)整體的電氣原理圖概念,再加上實(shí)驗(yàn)條件的有限,不可能每個(gè)同學(xué)都能得到老師的輔導(dǎo),導(dǎo)致學(xué)生過(guò)度追求實(shí)驗(yàn)結(jié)果,而忽略了硬件設(shè)計(jì)、軟件調(diào)試等過(guò)程。
2 《單片機(jī)原理與應(yīng)用》課程教學(xué)改革的思路與措施2.1 以“任務(wù)驅(qū)動(dòng)”為主要方法的教學(xué)內(nèi)容
任務(wù)驅(qū)動(dòng)教學(xué)法是一種建立在建構(gòu)主義學(xué)習(xí)理論基礎(chǔ)上的教學(xué)法,它將以往以傳授知識(shí)為主的傳統(tǒng)教學(xué)理念,轉(zhuǎn)變?yōu)橐越鉀Q問(wèn)題、完成任務(wù)為主的多維互動(dòng)式的教學(xué)理念;將再現(xiàn)式教學(xué)轉(zhuǎn)變?yōu)樘骄渴綄W(xué)習(xí),使學(xué)生處于積極的學(xué)習(xí)狀態(tài),每一位學(xué)生都能根據(jù)自己對(duì)當(dāng)前問(wèn)題的理解,運(yùn)用共有的知識(shí)和自己特有的經(jīng)驗(yàn)提出方案、解決問(wèn)題。
在實(shí)際教學(xué)中,以學(xué)生為主體,項(xiàng)目、工作任務(wù)為載體,學(xué)生在教師的引領(lǐng)下,由淺入深、由易到難,學(xué)習(xí)單片機(jī)控制系統(tǒng)的設(shè)計(jì)和制作。為取得良好的學(xué)習(xí)效果,在課堂上由老師先對(duì)學(xué)生提出一個(gè)課內(nèi)任務(wù),老師不會(huì)完整的告訴學(xué)生怎么完成任務(wù),而是只提供知識(shí)點(diǎn),由學(xué)生課外完成此任務(wù),并根據(jù)任務(wù)完成的質(zhì)量進(jìn)行考核和評(píng)分。
從學(xué)生的角度說(shuō),任務(wù)驅(qū)動(dòng)是一種有效的學(xué)習(xí)方法。它從淺顯的實(shí)例入手,帶動(dòng)理論的學(xué)習(xí)和應(yīng)用軟件的操作,大大提高了學(xué)習(xí)的效率和興趣,培養(yǎng)他們獨(dú)立探索、勇于開(kāi)拓進(jìn)取的自學(xué)能力。一個(gè)“任務(wù)” 完成了,學(xué)生就會(huì)獲得滿足感、成就感,從而激發(fā)了他們的求知欲望,逐步形成一個(gè)感知心智活動(dòng)的良性循環(huán)。伴隨著一個(gè)跟著一個(gè)的成就感,減少學(xué)生們以往由于片面追求信息技術(shù)課程的“系統(tǒng)性”而導(dǎo)致的“只見(jiàn)樹(shù)木,不見(jiàn)森林”的教學(xué)法帶來(lái)的茫然。從教師的角度說(shuō),任務(wù)驅(qū)動(dòng)是建構(gòu)主義教學(xué)理論基礎(chǔ)上的教學(xué)方法,將以往以傳授知識(shí)為主的傳統(tǒng)教學(xué)理念轉(zhuǎn)變?yōu)橐越鉀Q問(wèn)題、完成任務(wù)為主的多維互動(dòng)式的教學(xué)理念;將再現(xiàn)式教學(xué)轉(zhuǎn)變?yōu)樘骄渴綄W(xué)習(xí),使學(xué)生處于積極的學(xué)習(xí)狀態(tài),每一位學(xué)生都能根據(jù)自己對(duì)當(dāng)前任務(wù)的理解,運(yùn)用共有的知識(shí)和自己特有的經(jīng)驗(yàn)提出方案、解決問(wèn)題。這為每一位學(xué)生的思考、探索、發(fā)現(xiàn)和創(chuàng)新提供了開(kāi)放的空間,使課堂教學(xué)過(guò)程充滿了民主、充滿了個(gè)性、充滿了人性,課堂氛圍真正活躍起來(lái)。
2.2 變革傳統(tǒng)的實(shí)驗(yàn)?zāi)J?/p>
(1)設(shè)立虛擬仿真實(shí)驗(yàn)室。單片機(jī)課程內(nèi)容抽象,教師操作實(shí)驗(yàn)開(kāi)發(fā)板時(shí)演示效果不太好,學(xué)生較難理解,因此,計(jì)算機(jī)虛擬仿真軟件演示起著非常重要的作用。虛擬仿真系統(tǒng)具有以下優(yōu)勢(shì):①組織單片機(jī)實(shí)驗(yàn)的環(huán)境簡(jiǎn)單,只要有電腦即可進(jìn)行;②由于只涉及到軟件,不會(huì)有硬件損壞的問(wèn)題,可以避免由于設(shè)計(jì)錯(cuò)誤導(dǎo)致的硬件投入浪費(fèi),降低使用成本;③繪制原理圖、編制程序均在軟件上實(shí)現(xiàn),程序執(zhí)行中各元件的運(yùn)行狀態(tài)直觀明了,調(diào)試方便。因此,在單片機(jī)教學(xué)中引入Proteus和Keil C編程調(diào)試軟件,采用多媒體教學(xué)方法,能在課堂中完成軟件、硬件的調(diào)試和系統(tǒng)集成等內(nèi)容的教學(xué)。
(2)利用單片機(jī)實(shí)驗(yàn)開(kāi)發(fā)板進(jìn)行教學(xué)。實(shí)驗(yàn)開(kāi)發(fā)板應(yīng)用十分方便,目前已經(jīng)集成了鍵盤(pán)、流水燈和LED顯示器等通用設(shè)備,線路連接簡(jiǎn)單,可以進(jìn)行多個(gè)基本項(xiàng)目的實(shí)訓(xùn)。通過(guò)開(kāi)發(fā)板的學(xué)習(xí)實(shí)踐,運(yùn)用項(xiàng)目教學(xué)法進(jìn)行多個(gè)項(xiàng)目的操作,能讓學(xué)生熟悉單片機(jī)及其設(shè)備的硬件知識(shí),系統(tǒng)地掌握單片機(jī)P0-P3口、串口通信和中斷控制的工作原理。
(3)結(jié)合多學(xué)科進(jìn)行綜合實(shí)踐。很多學(xué)生在學(xué)習(xí)了單片機(jī)課程后,即使掌握了單片機(jī)知識(shí),但還是不能融合其他課程的知識(shí)進(jìn)行綜合應(yīng)用,因此,教師應(yīng)將其他課程的知識(shí)與單片機(jī)的相關(guān)內(nèi)容聯(lián)系起來(lái)。比如,與Protel課程相結(jié)合,要求學(xué)生利用Protel設(shè)計(jì)開(kāi)發(fā)板的PCB圖,并制作出PCB開(kāi)發(fā)板,同時(shí)自己動(dòng)手焊接所有的元器件,然后進(jìn)行系統(tǒng)調(diào)試。在此過(guò)程中,學(xué)生可以享受到自己的勞動(dòng)成果,更加熟練地掌握Protel知識(shí),更加熟悉元器件之間的硬件連接,對(duì)數(shù)字電路、模擬電路的工作特點(diǎn)更加了解,對(duì)單片機(jī)C語(yǔ)言有了更深入的認(rèn)識(shí),鍛煉了各學(xué)科的綜合實(shí)踐能力。
2.3 考核方式的改革
與以往傳統(tǒng)單片機(jī)原理及應(yīng)用課程的教學(xué)采用純理論的考核方式不同,考試成績(jī)由平時(shí)考核、實(shí)踐技能考核、綜合能力考核3個(gè)部分組成。其中,平時(shí)考核占30%,包括平時(shí)作業(yè)、課堂表現(xiàn)和平時(shí)測(cè)驗(yàn),作業(yè)和課堂表現(xiàn)側(cè)重于知識(shí)的掌握,平時(shí)測(cè)驗(yàn)側(cè)重于知識(shí)的運(yùn)用。實(shí)踐技能考核占30%,包括實(shí)驗(yàn)、企業(yè)實(shí)訓(xùn)和技能競(jìng)賽,在每個(gè)模塊的項(xiàng)目實(shí)踐過(guò)程中考核學(xué)生解決實(shí)際問(wèn)題的能力;綜合能力考核占40%,包括理論知識(shí)和實(shí)際應(yīng)用兩部分,理論知識(shí)考核采用“試題庫(kù)”,實(shí)行開(kāi)卷考試,主要考察學(xué)生對(duì)基本概念、基本原理和基本器件的掌握和理解情況,實(shí)際應(yīng)用部分教師根據(jù)學(xué)生完成的準(zhǔn)確性和熟練程度現(xiàn)場(chǎng)評(píng)分。這種考核形式注重考察學(xué)生的知識(shí)遷移能力和融會(huì)貫通能力,優(yōu)于一次期末考試決定結(jié)果的傳統(tǒng)考核辦法,在貫徹執(zhí)行過(guò)程中效果較好,反映出了學(xué)生的真實(shí)水平。
3 改革效果
這種單片機(jī)教學(xué)方法為學(xué)生提供了很好的實(shí)踐空間,能充分吸引學(xué)生興趣,大大提高了學(xué)生學(xué)習(xí)的積極性和主動(dòng)性。很多學(xué)生主動(dòng)要求延長(zhǎng)學(xué)習(xí)時(shí)間,利用周末到實(shí)驗(yàn)室動(dòng)手練習(xí)。在每次上實(shí)訓(xùn)課時(shí),學(xué)生都特別積極,不完成任務(wù)不下課,這在以往單片機(jī)教學(xué)過(guò)程中很少見(jiàn)到。通過(guò)調(diào)查發(fā)現(xiàn),學(xué)生對(duì)這種教學(xué)方法的改革都很認(rèn)可和喜歡,教學(xué)效果得到了很好的改善。
這種教學(xué)方法既鍛煉了學(xué)生的動(dòng)手能力,又提高了學(xué)生發(fā)現(xiàn)問(wèn)題、分析問(wèn)題和解決問(wèn)題的能力,同時(shí)還培養(yǎng)了學(xué)生的信息檢索能力。實(shí)踐證明,該教學(xué)方法切實(shí)有效,對(duì)高職院校單片機(jī)教學(xué)改革有一定借鑒作用。
參考文獻(xiàn):
\[1\] 屈莉莉,等.單片機(jī)課程實(shí)踐性教學(xué)環(huán)節(jié)的建設(shè)與改革[J].中山大學(xué)學(xué)報(bào)論叢,2004(3).
《單片機(jī)原理與應(yīng)用》課程是一門(mén)理論和實(shí)驗(yàn)結(jié)合非常緊密、突出動(dòng)手能力的課程。實(shí)驗(yàn)教學(xué)是其中一個(gè)重要環(huán)節(jié),既是聯(lián)系理論教學(xué)的橋梁,又是培養(yǎng)學(xué)生實(shí)踐、創(chuàng)新能力的重要手段[1-3]。但是在實(shí)驗(yàn)教學(xué)中會(huì)出現(xiàn)學(xué)生理論與實(shí)驗(yàn)脫節(jié)、實(shí)驗(yàn)課效果不理想、學(xué)生實(shí)驗(yàn)課積極性不高等問(wèn)題,因此《單片機(jī)原理與應(yīng)用》課程實(shí)驗(yàn)教學(xué)改革就成為許多學(xué)校非常重視的一項(xiàng)教改課題。
1.《單片機(jī)原理與應(yīng)用》課程實(shí)驗(yàn)教學(xué)現(xiàn)狀分析
1.1課程自身特點(diǎn)
1.1.1跨越性?!秵纹瑱C(jī)原理與應(yīng)用》課程是一門(mén)軟硬件相結(jié)合、強(qiáng)調(diào)實(shí)踐性和應(yīng)用性的課程。學(xué)習(xí)這門(mén)課程的學(xué)生需要經(jīng)歷從電子技術(shù)基礎(chǔ)、電路原理、C語(yǔ)言編程等基礎(chǔ)知識(shí)向以微處理器為核心、通過(guò)軟件編程來(lái)實(shí)現(xiàn)系統(tǒng)功能的思想轉(zhuǎn)變過(guò)程,這種思想跨越轉(zhuǎn)變過(guò)程對(duì)初次接觸該課程的學(xué)生來(lái)講具有一定難度。
1.1.2橋梁性?!秵纹瑱C(jī)原理與應(yīng)用》課程是后續(xù)嵌入式系統(tǒng)課程、DSP課程、EDA課程及畢業(yè)設(shè)計(jì)等的基礎(chǔ),具有課程橋梁的重要作用。
1.1.3綜合性及抽象性?!秵纹瑱C(jī)原理與應(yīng)用》課程涉及的內(nèi)容較廣泛,包括單片機(jī)的硬件組成和功能、軟件編程思想、匯編語(yǔ)言的語(yǔ)句及結(jié)構(gòu)等。并且軟件編程涉及的匯編語(yǔ)言需要和硬件的配置情況有關(guān),內(nèi)容抽象,不易理解。
由于該課程具有自身特性,因此需要教師在實(shí)驗(yàn)教學(xué)中進(jìn)行改革嘗試,幫助學(xué)生更好地適應(yīng)學(xué)習(xí)這一類(lèi)課程的方法,增強(qiáng)學(xué)生對(duì)該課程的理解性,從而提高他們的實(shí)際操作及應(yīng)用能力。
1.2學(xué)生對(duì)課程的切身感受及認(rèn)識(shí)
通過(guò)調(diào)研得知,相當(dāng)一部分學(xué)生渴望將這門(mén)課程更好地融于自己的專(zhuān)業(yè)發(fā)展中,牢固掌握課程基本理論和實(shí)踐知識(shí)。調(diào)研結(jié)果表明,問(wèn)題主要集中在兩個(gè)方面:(1)在學(xué)習(xí)該課程之初,學(xué)生在沒(méi)有大量實(shí)驗(yàn)操作機(jī)會(huì)的情況下,表現(xiàn)出的是對(duì)程序的編寫(xiě)問(wèn)題及對(duì)整個(gè)課程的困惑,大部分學(xué)生對(duì)該課程主要應(yīng)用在哪里沒(méi)有概念。(2)對(duì)于給予大量實(shí)驗(yàn)操作機(jī)會(huì)的學(xué)生,他們表現(xiàn)出對(duì)單片機(jī)的極大興趣,他們的問(wèn)題主要集中為:如何設(shè)計(jì)具有較好功能的源程序,源程序結(jié)構(gòu)的優(yōu)化,硬件搭建的合理性等。
因此,良好的實(shí)驗(yàn)教學(xué)可以幫助學(xué)生理解課程內(nèi)容,掌握核心知識(shí),從而提高學(xué)生的學(xué)習(xí)積極性和學(xué)習(xí)效率。
1.3實(shí)驗(yàn)教學(xué)中出現(xiàn)的待解決問(wèn)題
1.3.1實(shí)驗(yàn)項(xiàng)目?jī)?nèi)容設(shè)置不夠完善,不利于調(diào)動(dòng)學(xué)生的實(shí)驗(yàn)積極性。各個(gè)實(shí)驗(yàn)項(xiàng)目獨(dú)立性強(qiáng),幾乎沒(méi)有考慮知識(shí)的前后貫穿和最后應(yīng)用系統(tǒng)的設(shè)計(jì),這容易使學(xué)生學(xué)了后面的忘了前面的,自己設(shè)計(jì)簡(jiǎn)單的應(yīng)用系統(tǒng)更是無(wú)從下手,非常不利于培養(yǎng)學(xué)生的實(shí)驗(yàn)積極性。
1.3.2教學(xué)模式單一,傳統(tǒng)的實(shí)驗(yàn)教學(xué)偏重于驗(yàn)證性與演示性實(shí)驗(yàn)[4-6]。學(xué)生在實(shí)驗(yàn)過(guò)程中按實(shí)驗(yàn)講義逐步進(jìn)行,分析思考問(wèn)題的機(jī)會(huì)比較少,只是機(jī)械化地驗(yàn)證實(shí)驗(yàn)內(nèi)容。學(xué)生的注意力主要集中在編程及調(diào)試上,忽略了實(shí)驗(yàn)電路原理的重要性。不清楚系統(tǒng)設(shè)計(jì)流程,當(dāng)需要自行設(shè)計(jì)系統(tǒng)時(shí),學(xué)生就會(huì)感覺(jué)困難無(wú)從下手。實(shí)驗(yàn)教學(xué)沒(méi)能起到真正推動(dòng)學(xué)生對(duì)單片機(jī)原理、模擬電路、數(shù)字電路等理論知識(shí)理解的作用。單一的實(shí)驗(yàn)教學(xué)模式制約對(duì)學(xué)生創(chuàng)新能力及分析解決實(shí)際問(wèn)題能力的培養(yǎng),降低學(xué)生的學(xué)習(xí)興趣,影響教學(xué)效果。
1.3.3學(xué)生實(shí)驗(yàn)中實(shí)際發(fā)揮空間有限。在實(shí)踐教學(xué)中,教師經(jīng)常把主要的實(shí)驗(yàn)步驟、程序代碼都提供給學(xué)生,造成實(shí)驗(yàn)教學(xué)中學(xué)生動(dòng)手機(jī)會(huì)少、思考不全面、發(fā)揮空間有限的缺點(diǎn)。
2.《單片機(jī)原理與應(yīng)用》課程實(shí)驗(yàn)教學(xué)改革研究
針對(duì)《單片機(jī)原理與應(yīng)用》課程實(shí)驗(yàn)教學(xué)現(xiàn)狀,對(duì)該課程實(shí)驗(yàn)教學(xué)方法進(jìn)行探討,在實(shí)驗(yàn)項(xiàng)目、實(shí)驗(yàn)教學(xué)模式、實(shí)驗(yàn)教學(xué)環(huán)境及實(shí)驗(yàn)考核方式上進(jìn)行改革研究,以提高該課程的實(shí)驗(yàn)教學(xué)質(zhì)量,為學(xué)生的課程實(shí)驗(yàn)、課程實(shí)訓(xùn)、畢業(yè)設(shè)計(jì)及相關(guān)實(shí)踐提供優(yōu)質(zhì)的基礎(chǔ)。該課程實(shí)驗(yàn)教學(xué)改革方法的研究對(duì)提高實(shí)驗(yàn)課堂教學(xué)質(zhì)量、促進(jìn)人才培養(yǎng)和就業(yè)都有著深遠(yuǎn)的影響。
2.1實(shí)驗(yàn)項(xiàng)目改革研究
《單片機(jī)原理與應(yīng)用》課程比較側(cè)重于學(xué)生動(dòng)手能力的培養(yǎng),所以針對(duì)該課程的實(shí)驗(yàn)項(xiàng)目很多,那么如何根據(jù)本學(xué)校的學(xué)生層次及特點(diǎn)進(jìn)行實(shí)驗(yàn)項(xiàng)目的分類(lèi)是改革中需要研究和分析的問(wèn)題。筆者以溫州醫(yī)科大學(xué)實(shí)際授課實(shí)例為例進(jìn)行闡述。溫州醫(yī)科大學(xué)針對(duì)生物醫(yī)學(xué)工程專(zhuān)業(yè)和電子信息工程專(zhuān)業(yè)學(xué)生開(kāi)設(shè)該課程。針對(duì)學(xué)生的專(zhuān)業(yè)特點(diǎn)及實(shí)驗(yàn)學(xué)時(shí)的安排,將實(shí)驗(yàn)項(xiàng)目教學(xué)內(nèi)容分成四部分,可以根據(jù)各專(zhuān)業(yè)學(xué)生層次特點(diǎn)選擇合適的實(shí)驗(yàn)項(xiàng)目。具體實(shí)施方法為:
第一部分為軟件模擬實(shí)驗(yàn),主要目的是熟悉Keil軟件、Proteus軟件等的操作及匯編語(yǔ)言指令的熟練應(yīng)用,讓學(xué)生對(duì)整個(gè)操作軟件的使用及匯編語(yǔ)言的使用有一個(gè)全面了解,為以后的實(shí)驗(yàn)打下堅(jiān)實(shí)的基礎(chǔ)。針對(duì)軟件模擬實(shí)驗(yàn),主要開(kāi)設(shè)的實(shí)驗(yàn)項(xiàng)目包括兩類(lèi):基礎(chǔ)類(lèi)實(shí)驗(yàn)及綜合應(yīng)用類(lèi)實(shí)驗(yàn)。基礎(chǔ)類(lèi)實(shí)驗(yàn)主要包括數(shù)據(jù)傳送實(shí)驗(yàn)、拆字和拼字實(shí)驗(yàn)、數(shù)據(jù)加法實(shí)驗(yàn)、查表實(shí)驗(yàn)等;綜合應(yīng)用類(lèi)實(shí)驗(yàn)主要包括模擬交通燈、投籃計(jì)分及病房呼叫模擬實(shí)驗(yàn)等。
第二部分為基本端口實(shí)驗(yàn),主要目的是讓學(xué)生認(rèn)識(shí)紋機(jī)系統(tǒng)的基本硬件。實(shí)驗(yàn)項(xiàng)目主要有端口輸出實(shí)驗(yàn)、定時(shí)計(jì)數(shù)器實(shí)驗(yàn)、按鍵中斷實(shí)驗(yàn)、A/D轉(zhuǎn)換實(shí)驗(yàn)、多位數(shù)碼管顯示實(shí)驗(yàn)、串口通信實(shí)驗(yàn)等。
第三部分為綜合設(shè)計(jì)性實(shí)驗(yàn),目的是幫助學(xué)生全面掌握所學(xué)內(nèi)容,提高學(xué)生綜合運(yùn)用知識(shí)的能力。主要有用定時(shí)器設(shè)計(jì)時(shí)鐘實(shí)驗(yàn)、鍵盤(pán)結(jié)合LCD液晶顯示實(shí)驗(yàn)、利用外部中斷設(shè)計(jì)流水燈實(shí)驗(yàn)、溫度檢測(cè)實(shí)驗(yàn)等。
第四部分為創(chuàng)新性實(shí)驗(yàn),主要針對(duì)那些對(duì)單片機(jī)有興趣的學(xué)生,鍛煉學(xué)生的創(chuàng)新能力、動(dòng)手能力和解決實(shí)際問(wèn)題的能力等,該部分實(shí)驗(yàn)在課下進(jìn)行,可結(jié)合教師的科研項(xiàng)目和各類(lèi)大學(xué)生電子設(shè)計(jì)大賽,如教師科研課題中的控制系統(tǒng)及大學(xué)生電子設(shè)計(jì)競(jìng)賽、智能車(chē)設(shè)計(jì)大賽、機(jī)電產(chǎn)品創(chuàng)新設(shè)計(jì)大賽等。
2.2實(shí)驗(yàn)教學(xué)模式改革研究
《單片機(jī)原理與應(yīng)用》課程實(shí)驗(yàn)教學(xué)模式改革中將PBL教學(xué)法與TBL教學(xué)法相結(jié)合,針對(duì)該門(mén)課程授課學(xué)生專(zhuān)業(yè)不同,將實(shí)驗(yàn)分成三個(gè)層次:基本實(shí)驗(yàn)、綜合實(shí)驗(yàn)和自選實(shí)驗(yàn)。針對(duì)不同層次實(shí)驗(yàn)各自特點(diǎn)和難易程度進(jìn)行教學(xué)方法的選擇和綜合應(yīng)用。
2.2.1基本實(shí)驗(yàn)主要考核學(xué)生基礎(chǔ)知識(shí)的掌握,內(nèi)容較為簡(jiǎn)單,可以只采用PBL教學(xué)法。教師只需要給出實(shí)驗(yàn)設(shè)計(jì)的問(wèn)題,由學(xué)生獨(dú)立完成,不需要進(jìn)行分組,培養(yǎng)學(xué)生的自主動(dòng)手能力。
2.2.2綜合實(shí)驗(yàn)不再是單一的知識(shí)點(diǎn)、單一的學(xué)科,考核的知識(shí)可能是跨學(xué)科多個(gè)知識(shí)點(diǎn),教師只需給出實(shí)驗(yàn)的要求和技術(shù)指標(biāo),學(xué)生自主選擇決定學(xué)習(xí)哪些知識(shí)解決問(wèn)題,體現(xiàn)典型的PBL教學(xué)法的應(yīng)用優(yōu)勢(shì)。具體實(shí)驗(yàn)過(guò)程中主要采用分組討論,單人完成或按組匯報(bào)兩種方式。
2.2.3自選實(shí)驗(yàn)在三個(gè)實(shí)驗(yàn)層次是難度最高的,學(xué)生幾乎不可能單獨(dú)完成,同時(shí)教師要給予一定的指導(dǎo),給出明確的學(xué)習(xí)目標(biāo)及知識(shí)點(diǎn),適合采用TBL教學(xué)法分組討論,按組匯報(bào)。設(shè)計(jì)性實(shí)驗(yàn)往往都是給出一個(gè)需要解決的實(shí)際問(wèn)題,實(shí)施方法不是唯一的,這是PBL教學(xué)法應(yīng)用最適合的情況。因此,對(duì)于設(shè)計(jì)性實(shí)驗(yàn)最好采用兩種方法綜合應(yīng)用。
2.3實(shí)驗(yàn)教學(xué)環(huán)境的改革研究
根據(jù)學(xué)生的實(shí)際情況和要求,為學(xué)生創(chuàng)造寬松的實(shí)驗(yàn)環(huán)境。
2.3.1對(duì)學(xué)生實(shí)驗(yàn)中用到的硬件實(shí)驗(yàn)仿真平臺(tái)可以根據(jù)學(xué)生的特點(diǎn)及基礎(chǔ)進(jìn)行針對(duì)性選擇及操作。對(duì)于大多數(shù)學(xué)生,可以選用基礎(chǔ)開(kāi)發(fā)板與仿真器的硬件仿真平臺(tái)在實(shí)驗(yàn)課堂中完成相應(yīng)的實(shí)驗(yàn)項(xiàng)目設(shè)計(jì),對(duì)于能力較強(qiáng)的學(xué)生,可以鼓勵(lì)學(xué)生自己做單片機(jī)最小系統(tǒng)板或者選用高級(jí)開(kāi)發(fā)板與仿真器結(jié)合的硬件仿真平臺(tái),對(duì)于積極性較高的學(xué)生,可以建議大家在實(shí)驗(yàn)課業(yè)余時(shí)間選用開(kāi)發(fā)板自己燒寫(xiě)程序在實(shí)驗(yàn)課堂之外對(duì)實(shí)驗(yàn)感興趣的內(nèi)容進(jìn)行仿真學(xué)習(xí),為學(xué)生創(chuàng)造寬松的實(shí)驗(yàn)環(huán)境,使學(xué)生可以不拘束于課上時(shí)間進(jìn)行實(shí)驗(yàn)。
2.3.2對(duì)于軟件仿真平臺(tái),學(xué)生可以用匯編語(yǔ)言完成簡(jiǎn)單程序的設(shè)計(jì),能夠用C51語(yǔ)言完成簡(jiǎn)單和復(fù)雜程序的設(shè)計(jì),學(xué)生的前序課程中學(xué)過(guò)C語(yǔ)言,這樣大大降低學(xué)生學(xué)習(xí)的難度,同時(shí)學(xué)生從對(duì)比中加深對(duì)匯編語(yǔ)言和C51語(yǔ)言的理解。
2.4實(shí)驗(yàn)考核方式改革研究
傳統(tǒng)的單片機(jī)實(shí)驗(yàn)課程不單獨(dú)考核,評(píng)價(jià)方式主要以實(shí)驗(yàn)報(bào)告為依據(jù)。這種評(píng)價(jià)方式使學(xué)生對(duì)實(shí)驗(yàn)教學(xué)環(huán)節(jié)不重視,很難調(diào)動(dòng)起學(xué)生在實(shí)驗(yàn)教學(xué)環(huán)節(jié)中的積極性。本次改革項(xiàng)目將實(shí)驗(yàn)考核方式分為四個(gè)部分:把學(xué)生每次實(shí)驗(yàn)課堂的態(tài)度及積極操作的自我關(guān)注程度作為實(shí)驗(yàn)平時(shí)成績(jī)的考核依據(jù),占實(shí)驗(yàn)成績(jī)的20%;平時(shí)實(shí)驗(yàn)報(bào)告占實(shí)驗(yàn)成績(jī)的20%;綜合實(shí)驗(yàn)項(xiàng)目考核占實(shí)驗(yàn)成績(jī)的50%;自選實(shí)驗(yàn)項(xiàng)目占實(shí)驗(yàn)成績(jī)的10%。
3.結(jié)語(yǔ)
為了提高《單片機(jī)原理與應(yīng)用》課程的實(shí)驗(yàn)教學(xué)質(zhì)量,給學(xué)生的課程實(shí)驗(yàn)、課程實(shí)訓(xùn)、畢業(yè)設(shè)計(jì)及相關(guān)實(shí)踐提供優(yōu)質(zhì)的基礎(chǔ),提高學(xué)生的實(shí)際應(yīng)用和創(chuàng)新能力,本課題結(jié)合學(xué)校各專(zhuān)業(yè)學(xué)生實(shí)驗(yàn)教學(xué)的實(shí)際情況,對(duì)該課程實(shí)驗(yàn)教學(xué)方面的教學(xué)方法進(jìn)行探討與改革。經(jīng)在實(shí)際實(shí)驗(yàn)教學(xué)中的改革實(shí)踐表明,通過(guò)對(duì)實(shí)驗(yàn)項(xiàng)目的合理設(shè)計(jì),可以培養(yǎng)學(xué)生的實(shí)驗(yàn)積極性和主觀能動(dòng)性。通過(guò)對(duì)實(shí)驗(yàn)教學(xué)模式的改革,激發(fā)學(xué)生的實(shí)驗(yàn)興趣。通過(guò)對(duì)實(shí)驗(yàn)教學(xué)環(huán)境的改造及考核方式的改變,可以引導(dǎo)學(xué)生重視自身實(shí)驗(yàn)技能的培養(yǎng)。從本校學(xué)生畢業(yè)設(shè)計(jì)過(guò)程及實(shí)習(xí)過(guò)程中可以看出,學(xué)生在實(shí)際工程應(yīng)用項(xiàng)目的開(kāi)發(fā)數(shù)量和質(zhì)量都有較大程度的提高。隨著實(shí)驗(yàn)教學(xué)改革的不斷深入和完善,該課程會(huì)取得更良好的實(shí)驗(yàn)教學(xué)效果,使學(xué)生的綜合設(shè)計(jì)能力及創(chuàng)新能力有明顯的提高。
參考文獻(xiàn):
[1]李有光,聞新,南英.本科生AVR單片機(jī)實(shí)驗(yàn)教學(xué)探索與研究[J].實(shí)驗(yàn)室研究與探索,2015,34(9):216-218.
[2]祖一康,徐妙婧.單片機(jī)教學(xué)改革實(shí)踐研究[J].湖北理工學(xué)院學(xué)報(bào),2015,31(5):67-70.
[3]金國(guó)華,滕君華,馬寶山,張大力.單片機(jī)課程設(shè)計(jì)中應(yīng)用能力的分層培養(yǎng)[J].中國(guó)現(xiàn)代教育裝備,2015,11:81-83.
中圖分類(lèi)號(hào):G642.0 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1674-9324(2015)20-0101-02
單片機(jī)由于其結(jié)構(gòu)簡(jiǎn)單、易于控制及價(jià)格低廉等優(yōu)點(diǎn),使得其廣泛應(yīng)用在儀器儀表、工業(yè)控制和自動(dòng)化控制等領(lǐng)域中。隨著電子技術(shù)的飛速發(fā)展,企業(yè)對(duì)單片機(jī)應(yīng)用型人才的需求越來(lái)越多,而且越來(lái)越看重具有動(dòng)手能力、團(tuán)隊(duì)意識(shí)和創(chuàng)新能力的學(xué)生。因此,理工科學(xué)校的教育工作者和學(xué)生越來(lái)越重視單片機(jī)原理及應(yīng)用課程的教學(xué)成果。然而該課程作為高等工科院校電子、機(jī)械和測(cè)控等專(zhuān)業(yè)重要的專(zhuān)業(yè)必修課,是一門(mén)綜合性、實(shí)踐性很強(qiáng)的課程。對(duì)于工科學(xué)生來(lái)說(shuō),很好地掌握單片機(jī)技術(shù),不僅有助于深入地學(xué)習(xí)專(zhuān)業(yè)知識(shí)技能,提高自身的整體專(zhuān)業(yè)素養(yǎng),培養(yǎng)動(dòng)手能力與團(tuán)隊(duì)意識(shí),更重要的是能夠獲得實(shí)用的專(zhuān)業(yè)技能和創(chuàng)新能力,增強(qiáng)就業(yè)競(jìng)爭(zhēng)力。
面對(duì)市場(chǎng)對(duì)人才日益嚴(yán)峻的要求,如何培養(yǎng)出適應(yīng)社會(huì)需求的創(chuàng)新型和專(zhuān)業(yè)型人才,是教師面臨的一項(xiàng)緊迫而艱巨的任務(wù)。這不僅僅要求教師提高自身水平和積累工程項(xiàng)目經(jīng)驗(yàn),還要求不斷反思教學(xué)過(guò)程,在教學(xué)方法上進(jìn)行改革和探索。
一、單片機(jī)教學(xué)特點(diǎn)及存在的問(wèn)題
單片機(jī)原理及應(yīng)用課程教學(xué)與其他理論科目教學(xué)方式不完全相同,這門(mén)課程強(qiáng)調(diào)的是專(zhuān)業(yè)知識(shí)的應(yīng)用,要求學(xué)生能夠?qū)⒒纠碚撆c實(shí)際工程相結(jié)合,達(dá)到解決工程問(wèn)題的基本能力。因此,在重視理論教學(xué)的同時(shí),必須重視實(shí)驗(yàn)教學(xué)。但是,在具體的教學(xué)過(guò)程中,不但學(xué)生普遍感到難學(xué),授課教師也存在許多困惑,這些都是由于課程特點(diǎn)引起的。
它的主要特點(diǎn)[1]有:(1)概念多,專(zhuān)有名詞多,內(nèi)容抽象,對(duì)于初學(xué)者來(lái)說(shuō)難以適應(yīng),由此會(huì)感覺(jué)入門(mén)較難。(2)編程語(yǔ)言指令多,且需要掌握每條指令的功能及操作數(shù)來(lái)源。(3)邏輯性和完整性強(qiáng),各部分知識(shí)銜接緊密。(4)課程的圖示說(shuō)明多。(5)綜合性強(qiáng),涉及內(nèi)容較多,涵蓋了模擬電路、數(shù)字電路、自動(dòng)控制系統(tǒng)等諸多基礎(chǔ)課程的內(nèi)容。(6)解決實(shí)際問(wèn)題的能力強(qiáng)。單片機(jī)教學(xué)的這些特點(diǎn),使得學(xué)生在開(kāi)始學(xué)的時(shí)候難以入門(mén),難以了解單片機(jī)的整體結(jié)構(gòu),從而對(duì)單片機(jī)的學(xué)習(xí)失去信心,以至于出現(xiàn)學(xué)生普遍認(rèn)為課程難學(xué)、教師普遍認(rèn)為課程難教的局面。
多年的單片機(jī)教學(xué)經(jīng)驗(yàn)表明很多學(xué)生學(xué)完課程之后并沒(méi)有達(dá)到預(yù)期的效果,不能將學(xué)到的知識(shí)應(yīng)用于實(shí)踐,或無(wú)法將知識(shí)點(diǎn)連成知識(shí)面進(jìn)而形成知識(shí)體系。另外傳統(tǒng)的實(shí)驗(yàn)教學(xué)以驗(yàn)證性的實(shí)驗(yàn)為主,學(xué)生在規(guī)定的時(shí)間內(nèi),用統(tǒng)一的模式,按照指導(dǎo)書(shū)上規(guī)定的步驟做相同的實(shí)驗(yàn)。對(duì)于包含工程開(kāi)發(fā)的軟硬件協(xié)同設(shè)計(jì)難以開(kāi)展,學(xué)生對(duì)基礎(chǔ)知識(shí)的綜合應(yīng)用能力較差,自主設(shè)計(jì)和創(chuàng)造能力也普遍存在問(wèn)題。
二、CDIO模式下課程教學(xué)改革探索
1.CDIO工程教育模式。CDIO是一種國(guó)際化高等工程教育的創(chuàng)新模式,是由麻省理工學(xué)院(MIT)、瑞典皇家工學(xué)院(Royal Institute of Technology)等四所跨國(guó)大學(xué)合作開(kāi)發(fā)的一整套工程教育理念和實(shí)施體系[2,3]。它以產(chǎn)品研發(fā)到產(chǎn)品運(yùn)行的生命周期為載體,讓學(xué)生以主動(dòng)的、實(shí)踐的、課程之間有機(jī)聯(lián)系的方式學(xué)習(xí)工程[4-6]。主要包括技術(shù)知識(shí)與推理、個(gè)人和職業(yè)能力與態(tài)度、人際交往能力,團(tuán)隊(duì)合作和交流、企業(yè)和社會(huì)環(huán)境下的構(gòu)思設(shè)計(jì)實(shí)施運(yùn)行系統(tǒng)等四個(gè)層面,這種模式不僅注重培養(yǎng)學(xué)生扎實(shí)的專(zhuān)業(yè)技術(shù)知識(shí),更關(guān)注團(tuán)隊(duì)協(xié)作精神和創(chuàng)新精神的培養(yǎng),并通過(guò)“做中學(xué)”和“基于項(xiàng)目的教育和學(xué)習(xí)”的教學(xué)模式培養(yǎng)既有扎實(shí)的專(zhuān)業(yè)技能,又有良好的團(tuán)隊(duì)協(xié)作能力和創(chuàng)新能力的國(guó)際化工程師。國(guó)內(nèi)外的經(jīng)驗(yàn)都表明CDIO“做中學(xué)”的理念和方法是先進(jìn)可行的,適合工科教育教學(xué)過(guò)程各個(gè)環(huán)節(jié)的改革。
2.以項(xiàng)目為導(dǎo)向,改進(jìn)教學(xué)方式和教學(xué)內(nèi)容。教學(xué)方式上,將本專(zhuān)業(yè)有著豐富科學(xué)研究和教學(xué)經(jīng)驗(yàn)的教師組織成一個(gè)項(xiàng)目實(shí)施團(tuán)隊(duì),建立相對(duì)穩(wěn)定的承擔(dān)單片機(jī)原理及應(yīng)用課程教學(xué)和實(shí)踐環(huán)節(jié)的教師隊(duì)伍。研究CDIO高等工程教育模式的理念和本質(zhì),轉(zhuǎn)變觀念,改革教學(xué)內(nèi)容、教學(xué)方式和教學(xué)手段,緊密結(jié)合有關(guān)科研項(xiàng)目,將CDIO理念和教師在科研中的實(shí)踐經(jīng)驗(yàn)和體會(huì)融入教學(xué)內(nèi)容、課堂教學(xué)和實(shí)驗(yàn)教學(xué)環(huán)節(jié)中。項(xiàng)目中每位成員根據(jù)自己承擔(dān)的科研項(xiàng)目,每學(xué)年提出一個(gè)適合單片機(jī)項(xiàng)目化教學(xué)的項(xiàng)目,并將學(xué)生進(jìn)行分組,每組4人,每組都包含1~2名興趣比較濃厚、學(xué)習(xí)動(dòng)手能力較強(qiáng)的同學(xué),每個(gè)小組選擇一個(gè)項(xiàng)目,該項(xiàng)目貫穿于單片機(jī)教學(xué)內(nèi)容和過(guò)程的始終。最后再完成一個(gè)綜合性強(qiáng)的實(shí)踐環(huán)節(jié)。通過(guò)這種方法提高學(xué)生學(xué)習(xí)的積極性和主動(dòng)性、動(dòng)手實(shí)踐能力、團(tuán)隊(duì)協(xié)作能力和創(chuàng)新能力。
3.改革教學(xué)模式。在實(shí)際的教學(xué)中,將提出的適合單片機(jī)項(xiàng)目化教學(xué)的項(xiàng)目分配給學(xué)生小組,讓學(xué)生以團(tuán)隊(duì)的形式完成整個(gè)項(xiàng)目的設(shè)計(jì),包括方案設(shè)計(jì)、軟件實(shí)現(xiàn)、硬件設(shè)計(jì)以及測(cè)試和調(diào)試等整個(gè)過(guò)程。使項(xiàng)目貫穿于單片機(jī)原理及應(yīng)用課程教學(xué)內(nèi)容和過(guò)程的始終,學(xué)生分組完成,教師提供輔導(dǎo)。選用的項(xiàng)目可分步實(shí)現(xiàn),彼此關(guān)聯(lián),從小到大,從簡(jiǎn)到繁,從局部到整體,層層推進(jìn),形成一個(gè)完整、全面的單片機(jī)應(yīng)用系統(tǒng)的教學(xué)項(xiàng)目。在實(shí)際的教學(xué)改革中,我們依托于“RS232串口通信”、“數(shù)控式直流電流源設(shè)計(jì)”、“智能負(fù)載”、“溫濕度測(cè)量系統(tǒng)”、“數(shù)控直流穩(wěn)壓電源”等項(xiàng)目,將以包含能力訓(xùn)練的項(xiàng)目教學(xué)方式讓學(xué)生深入理解專(zhuān)業(yè)知識(shí)和提升其專(zhuān)業(yè)技能。將教學(xué)內(nèi)容相關(guān)的知識(shí)分解到各個(gè)教學(xué)項(xiàng)目當(dāng)中,這樣可以增強(qiáng)學(xué)生學(xué)習(xí)單片機(jī)課程的興趣,培養(yǎng)他們的團(tuán)隊(duì)意識(shí)和創(chuàng)新能力以及提高在嚴(yán)峻就業(yè)環(huán)境下的競(jìng)爭(zhēng)力。
4.考核方式的改革。傳統(tǒng)的單片機(jī)的期末成績(jī)主要由學(xué)生的平時(shí)成績(jī)和卷面成績(jī)按照一定的比例構(gòu)成(一般為3∶7),卷面成績(jī)則全部由試卷考試的形式?jīng)Q定。這種傳統(tǒng)的考核方式評(píng)價(jià)不了學(xué)生的實(shí)踐能力和創(chuàng)新能力,也不能完全作為掌握單片機(jī)基礎(chǔ)知識(shí)的判斷依據(jù)。而CDIO工程教育則要求學(xué)生在掌握專(zhuān)業(yè)知識(shí)的基礎(chǔ)上,具備一定的工程實(shí)踐能力,也符合廣大學(xué)生的學(xué)習(xí)目的。
因此,在本次改革中,為了確保考核方式的合理性、公平性和有效性,單片機(jī)的成績(jī)將以CDIO工程教育基本理念為指導(dǎo),與項(xiàng)目結(jié)合的形式完成對(duì)學(xué)生能力的綜合評(píng)價(jià),并采取教師點(diǎn)評(píng)和學(xué)生互評(píng)等各種方式(如表1)進(jìn)行。這種以“過(guò)程”為基礎(chǔ)開(kāi)展,關(guān)注學(xué)生知識(shí)、技能的學(xué)習(xí)過(guò)程,關(guān)注實(shí)踐環(huán)節(jié)及工程應(yīng)用能力,力求知識(shí)與能力的協(xié)調(diào)統(tǒng)一的教學(xué)考核,不僅增強(qiáng)了衡量學(xué)生掌握知識(shí)的依據(jù),而且有利于引導(dǎo)學(xué)生注重動(dòng)手實(shí)踐能力和自身綜合素質(zhì)的提高。
三、教學(xué)改革的實(shí)際效果
1.激發(fā)了學(xué)生的學(xué)習(xí)興趣。以項(xiàng)目化方式指導(dǎo)學(xué)生學(xué)習(xí)的教學(xué)方式,增強(qiáng)了學(xué)生學(xué)習(xí)單片機(jī)的興趣和熱情。工程教學(xué)中始終貫穿著項(xiàng)目,學(xué)生需要按照項(xiàng)目的任務(wù)和要求系統(tǒng)地學(xué)習(xí)基礎(chǔ)知識(shí)和應(yīng)用能力,有助于學(xué)生明確學(xué)習(xí)目標(biāo)。這種由傳統(tǒng)單調(diào)的課程教學(xué)到靈活的項(xiàng)目教學(xué)方式,也極大地提高了學(xué)生的學(xué)習(xí)氛圍和興趣。
2.培養(yǎng)了學(xué)生綜合運(yùn)用知識(shí)的能力。要完成CDIO項(xiàng)目中的工程任務(wù),必須運(yùn)用諸如數(shù)字電路、模擬電路、自動(dòng)化控制和單片機(jī)技術(shù)等多學(xué)科的基礎(chǔ)知識(shí)。學(xué)生需要綜合運(yùn)用所學(xué)知識(shí)來(lái)解決項(xiàng)目中遇到的問(wèn)題,使學(xué)生綜合運(yùn)用知識(shí)的能力得到培養(yǎng)。通過(guò)完成遇到問(wèn)題到解決問(wèn)題的過(guò)程,學(xué)生也加深了對(duì)知識(shí)的掌握。
3.鍛煉了學(xué)生的團(tuán)隊(duì)協(xié)作精神。由于在整個(gè)工程項(xiàng)目的學(xué)習(xí)過(guò)程中,學(xué)生被分為3~4人一組,在分散學(xué)習(xí)、查閱資料、討論及實(shí)踐活動(dòng)的過(guò)程中,都是以小組的形式進(jìn)行,每個(gè)小組都是一個(gè)小團(tuán)體,全體組員共同參與學(xué)習(xí)環(huán)節(jié)中的各項(xiàng)活動(dòng)。彼此互相配合,廣泛交流的過(guò)程,鍛煉了學(xué)生的團(tuán)隊(duì)協(xié)作精神和團(tuán)隊(duì)意識(shí)。
4.提高了學(xué)生的思維、實(shí)踐動(dòng)手能力。CDIO教學(xué)模式“做中學(xué)”的理念,強(qiáng)調(diào)教學(xué)與實(shí)踐的統(tǒng)一。在教學(xué)過(guò)程中安排的大量項(xiàng)目實(shí)踐活動(dòng),需要學(xué)生親自動(dòng)手完成項(xiàng)目要求的各個(gè)實(shí)踐任務(wù),并參與到項(xiàng)目開(kāi)發(fā)的始終。參與工程的開(kāi)發(fā)能夠發(fā)散學(xué)生的思維,提高實(shí)踐動(dòng)手能力。從項(xiàng)目完成的情況來(lái)看,此次改革有效地提高了學(xué)生的創(chuàng)新能力和解決問(wèn)題的能力。
四、結(jié)語(yǔ)
經(jīng)過(guò)全體課題組教師的不斷努力,“單片機(jī)原理及應(yīng)用”課程教學(xué)改革已經(jīng)取得了初步成效,教學(xué)效果得到了顯著提高。通過(guò)單片機(jī)教學(xué)改革的實(shí)踐,結(jié)果證明,在CDIO工程教學(xué)模式下,采用以項(xiàng)目為驅(qū)動(dòng)的教學(xué)方式不僅生動(dòng)有趣,還能提高學(xué)生的創(chuàng)新能力和實(shí)踐能力。而且理論與實(shí)踐緊密結(jié)合的教學(xué)改革,激發(fā)了學(xué)生學(xué)習(xí)的興趣,培養(yǎng)了學(xué)生的團(tuán)隊(duì)協(xié)作能力和團(tuán)隊(duì)意識(shí)。
參考文獻(xiàn):
[1]李曉林,牛昱光,閻高偉.單片機(jī)原理與接口技術(shù)[M].第2版.北京:電子工業(yè)出版社,2011.
[2]馬衛(wèi)國(guó).基于CDIO的單片機(jī)原理及應(yīng)用課程教學(xué)改革探討[J].中國(guó)現(xiàn)代教育裝備,2011,(19):70-72.
[3]張翼成,劉美,王濤.CDIO模式下“單片機(jī)原理及應(yīng)用”課程教學(xué)改革[J].計(jì)算機(jī)教育,2012,(32):22.
中圖分類(lèi)號(hào):G642.0 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-0079(2014)33-0065-02
“單片機(jī)原理與應(yīng)用”課程是一門(mén)很重要的專(zhuān)業(yè)基礎(chǔ)課,把編程語(yǔ)言知識(shí)、模擬電子技術(shù)、數(shù)字電子技術(shù)、電路知識(shí)等綜合在一起,屬于技術(shù)性、工程性、實(shí)踐性很強(qiáng)的一門(mén)課程。該課程作為電氣工程自動(dòng)化、自動(dòng)化、機(jī)電一體化等專(zhuān)業(yè)最重要的核心課程之一,它是“自動(dòng)化”高素質(zhì)復(fù)合技能型人才所需自動(dòng)控制類(lèi)知識(shí)結(jié)構(gòu)的載體之一,占據(jù)著相當(dāng)重要的地位。
然而,傳統(tǒng)的“單片機(jī)原理與應(yīng)用”教學(xué)一般以學(xué)科體系為出發(fā)點(diǎn),注重課程本身的體系結(jié)構(gòu)和前后的邏輯聯(lián)系,理論性很強(qiáng),但卻忽略了“可學(xué)性”,學(xué)生缺乏明確的目標(biāo),致使學(xué)生學(xué)得吃力,老師教得辛苦,教學(xué)效果不佳。傳統(tǒng)的“單片機(jī)原理與應(yīng)用”教學(xué),一般以單片機(jī)的結(jié)構(gòu)為主線,按部就班,先講單片機(jī)的硬件結(jié)構(gòu),再講指令和軟件編程,然后是單片機(jī)系統(tǒng)的擴(kuò)展和各種器件的應(yīng)用,最后再講一些實(shí)例。按照此種教學(xué)結(jié)構(gòu),學(xué)生普遍感到難學(xué)。很多書(shū)一開(kāi)始就提出的總線、地址、寄存器等概念,學(xué)生往往難以理解;到了后面,如果還是延續(xù)以往教材中單片機(jī)的七種尋址方式則更抽象,有很多學(xué)生直到學(xué)完單片機(jī)還不能理解尋址方式究竟是什么意思,為什么需要這么多尋址方式。然后是單片機(jī)指令、111條指令,如果再不分重點(diǎn),等到指令全部學(xué)完,大部分學(xué)生已對(duì)單片機(jī)望而生畏,開(kāi)始打退堂鼓了,到了考試時(shí)候,老師也愁,題目出的簡(jiǎn)單還怕學(xué)生不會(huì),至于應(yīng)用能力就更不知道從何談起了。
因此,對(duì)單片機(jī)課程進(jìn)行教學(xué)改革是十分必要的。通過(guò)對(duì)教學(xué)理論的深入學(xué)習(xí)和教學(xué)實(shí)踐的摸索,筆者越來(lái)越認(rèn)同“興趣是最好的老師”這一看法,而階段性成果是引導(dǎo)教學(xué)、激發(fā)學(xué)生興趣的有效辦法之一?;诖?,論文提出“任務(wù)驅(qū)動(dòng)”這一教學(xué)模式,主要包括以下內(nèi)容:
一、改革課程內(nèi)容體系結(jié)構(gòu),突出課程特點(diǎn)
單片機(jī)是一門(mén)實(shí)踐性很強(qiáng)的課程,然而在以往的教學(xué)模式中卻表現(xiàn)為抽象性強(qiáng)、理論要求高、記憶內(nèi)容多的特點(diǎn),這樣就要求對(duì)選修課程學(xué)生的記憶力、思辯能力和思維靈活性的要求較高,大部分學(xué)生難以掌握,顯然不符合教學(xué)的期望,同單片機(jī)應(yīng)用為王的本質(zhì)相背離,也不符合教學(xué)的特點(diǎn)。單片機(jī)又是一門(mén)發(fā)展很快的學(xué)科,大部分教材的教學(xué)語(yǔ)言還是采用“匯編語(yǔ)言”,而實(shí)際情況是在現(xiàn)實(shí)的應(yīng)用過(guò)程中,除了特殊的一些行業(yè)外,絕大部分都采用C語(yǔ)言進(jìn)行開(kāi)發(fā),匯編的可移植性、復(fù)雜性都限制了應(yīng)用,因此在實(shí)際教學(xué)中也必須開(kāi)展改革。另外新技術(shù)、新器件不斷涌現(xiàn),而我國(guó)現(xiàn)行的相關(guān)教材中知識(shí)相對(duì)陳舊,很多里面的芯片都已經(jīng)停產(chǎn)。教學(xué)內(nèi)容很少體現(xiàn)單片機(jī)知識(shí)在相關(guān)專(zhuān)業(yè)中的實(shí)際應(yīng)用,使得學(xué)用脫節(jié)――既未能體現(xiàn)“素質(zhì)教育”的現(xiàn)代教育理念,也沒(méi)有體現(xiàn)單片機(jī)針對(duì)各專(zhuān)業(yè)所應(yīng)有的“專(zhuān)業(yè)基礎(chǔ)性”。因此,內(nèi)容上必須改革,補(bǔ)充新的知識(shí),調(diào)整體系結(jié)構(gòu)。
為了增加學(xué)生的積極性,改革后的單片機(jī)課程內(nèi)容采用模塊、課題、任務(wù)體系結(jié)構(gòu),將課程劃分為多個(gè)模塊,每一模塊由多個(gè)課題組成,每一課題由一個(gè)或多個(gè)任務(wù)組成,每一任務(wù)由任務(wù)目標(biāo)、任務(wù)分析、相關(guān)知識(shí)和任務(wù)實(shí)施四個(gè)相互連貫的部分組成。
二、改革教學(xué)內(nèi)容組織方式,提升學(xué)生主動(dòng)性和積極性
開(kāi)展“單片機(jī)原理與應(yīng)用”課程學(xué)習(xí)方法的研究,為學(xué)生提供有針對(duì)性的學(xué)習(xí)指導(dǎo),激發(fā)學(xué)生的學(xué)習(xí)興趣,培養(yǎng)學(xué)生的自學(xué)能力,應(yīng)是教學(xué)改革中亟待加強(qiáng)的重點(diǎn)內(nèi)容之一。
進(jìn)行教學(xué)內(nèi)容組織方式改革,這好比是從原先的“C語(yǔ)言”到“C++”的轉(zhuǎn)換,從原先的“順序結(jié)構(gòu)”、流水賬的教學(xué)方式轉(zhuǎn)換為面向任務(wù)的教學(xué)模式,實(shí)際上是一種隨著需求變化自然而然的蛻變。
每次教學(xué)均圍繞一個(gè)任務(wù)目標(biāo)進(jìn)行各教學(xué)環(huán)節(jié)的組織,以任務(wù)目標(biāo)為主線進(jìn)行各相關(guān)知識(shí)點(diǎn)和技能點(diǎn)的講解。以教師為主導(dǎo),以學(xué)生為中心,邊講邊學(xué),邊學(xué)邊練。在實(shí)施過(guò)程中,教師和學(xué)生都思路明確,知道本輪教學(xué)的目的是什么,是為什么在服務(wù),學(xué)生不再是被動(dòng)接受教師的填鴨式灌輸。在教學(xué)過(guò)程中,雙方一起對(duì)任務(wù)進(jìn)行分析,教師教授相關(guān)知識(shí),在任務(wù)實(shí)施階段開(kāi)展師生互動(dòng),在課內(nèi)外利用計(jì)算機(jī)仿真軟件和開(kāi)發(fā)的實(shí)驗(yàn)平臺(tái)進(jìn)行驗(yàn)證,鼓勵(lì)學(xué)生上講臺(tái)進(jìn)行分析和操作。要求學(xué)生對(duì)課堂教學(xué)任務(wù)電路和程序進(jìn)行設(shè)計(jì)或修改,培養(yǎng)學(xué)生單片機(jī)應(yīng)用電路和程序的設(shè)計(jì)方法,并用提問(wèn)、作業(yè)等形式來(lái)檢查學(xué)習(xí)情況。教師對(duì)學(xué)生存在的疑問(wèn)進(jìn)行實(shí)時(shí)解答,早發(fā)現(xiàn)早解決,減少將問(wèn)題帶到學(xué)期結(jié)束的情況,為后續(xù)其他課程的開(kāi)展提供較好的基礎(chǔ)。
這部分的關(guān)鍵在于教師對(duì)整體內(nèi)容的把握、任務(wù)的設(shè)計(jì)和節(jié)奏的控制。因?yàn)檎憬〉靥帠|南沿海地區(qū),民營(yíng)企業(yè)發(fā)展良好,筆者所在的專(zhuān)業(yè)同周邊企業(yè)有著長(zhǎng)期良好的校企合作,因此很多教學(xué)任務(wù)設(shè)計(jì)的實(shí)際上是來(lái)源于企業(yè)的實(shí)際需求,因此在任務(wù)的設(shè)計(jì)上很接地氣,能體現(xiàn)一般企業(yè)甚至行業(yè)現(xiàn)階段與本課程相關(guān)的大致水平,應(yīng)用性非常強(qiáng),通過(guò)對(duì)橫向項(xiàng)目的提煉和重組,對(duì)照教學(xué)大綱的要求往往能夠設(shè)計(jì)出若干教學(xué)任務(wù),經(jīng)由系教學(xué)會(huì)議討論后可以確定下來(lái)。隨著新的項(xiàng)目開(kāi)展,逐步替換一些較老的任務(wù)案例,保持有序的更新,這樣學(xué)生也能了解到目前相關(guān)行業(yè)的情況,而不會(huì)出去兩眼一抹黑,特別是某些企業(yè)可能就是他們身邊較好的企業(yè),能夠在心里得到認(rèn)同,產(chǎn)生共鳴。首先就覺(jué)得這門(mén)課程對(duì)他有用,接下來(lái)就能更好地去了解該任務(wù)設(shè)計(jì)中的前因后果,學(xué)習(xí)如何組織實(shí)施。這一過(guò)程,自然而然就提升了學(xué)生學(xué)習(xí)的積極性,進(jìn)而改進(jìn)學(xué)習(xí)效果。
三、改革實(shí)踐性教學(xué)設(shè)計(jì)方式
我們一直強(qiáng)調(diào)“單片機(jī)原理與應(yīng)用”課程的實(shí)踐性強(qiáng),單片機(jī)的實(shí)踐部分實(shí)質(zhì)上可以表現(xiàn)為兩方面:一方面是對(duì)單片機(jī)編程的實(shí)踐,另一方面是對(duì)單片機(jī)相關(guān)的硬件設(shè)計(jì)方面的實(shí)踐,兩者相輔相成,缺一不可。往往很多單片機(jī)教學(xué)中受限于課時(shí)和實(shí)驗(yàn)設(shè)備,大多只開(kāi)展前者,而后者的實(shí)訓(xùn)十分欠缺。
為此主要采用兩種方式。首先,考慮到學(xué)生人數(shù)眾多,為了更多學(xué)生受益,引入“Proteus”仿真軟件。該軟件支持51系列和其他主流單片機(jī),以及相關(guān)的單片機(jī)接口電路,教師提供主要案例,指導(dǎo)學(xué)生開(kāi)展虛擬實(shí)驗(yàn),構(gòu)建出虛擬實(shí)驗(yàn)平臺(tái),有助于學(xué)生開(kāi)展課外的學(xué)習(xí),輔助開(kāi)展實(shí)踐教學(xué),作為輔助手段可以讓學(xué)生加強(qiáng)對(duì)單片機(jī)編程的訓(xùn)練;其次,設(shè)計(jì)開(kāi)發(fā)“自制單片機(jī)綜合實(shí)驗(yàn)平臺(tái)”,以往大學(xué)采購(gòu)的單片機(jī)教學(xué)實(shí)驗(yàn)平臺(tái)基本上模塊固化,真正實(shí)驗(yàn)的時(shí)候基本不需要對(duì)硬件原理進(jìn)行思考,依據(jù)實(shí)驗(yàn)手冊(cè)簡(jiǎn)單地連接幾根導(dǎo)線就可以了,實(shí)際上對(duì)硬件設(shè)計(jì)的學(xué)習(xí)幫助作用微乎其微。正是認(rèn)識(shí)到了這一不足,自主開(kāi)發(fā)的實(shí)驗(yàn)平臺(tái)加強(qiáng)了學(xué)生對(duì)硬件設(shè)計(jì)能力培養(yǎng)的環(huán)節(jié)。在具備普通實(shí)驗(yàn)平臺(tái)的實(shí)際編程能力培養(yǎng)的基礎(chǔ)上,該實(shí)驗(yàn)平臺(tái)的組織上采用了靈活的接口形式,所有模塊都是可以拆卸的,為配合單片機(jī)課程教學(xué)中的“任務(wù)驅(qū)動(dòng)”模式,會(huì)有不同的模塊,這一措施使得實(shí)驗(yàn)內(nèi)容的選擇更為合理和豐富,方便開(kāi)展綜合型、創(chuàng)新型實(shí)驗(yàn)。這些模塊通過(guò)統(tǒng)一的接口形式,類(lèi)似于DCS、PLC等裝置的卡件形式,插入到本實(shí)驗(yàn)平臺(tái)中。模塊并非都是直接可用,有些模塊需要學(xué)生依照原理進(jìn)行組裝,有些需要進(jìn)行焊接,甚至還有一些空白的模塊需要學(xué)生按照任務(wù)的要求,設(shè)計(jì)硬件方案,選擇器件,自行完成功能模塊。因此實(shí)際在一次實(shí)驗(yàn)的開(kāi)展過(guò)程中,不但對(duì)單片機(jī)編程進(jìn)行了實(shí)訓(xùn),另外對(duì)器件的認(rèn)知、電路的設(shè)計(jì)組裝等都進(jìn)行了培訓(xùn)。由于硬件的差異,軟件程序也是各有區(qū)別,有效避免了從實(shí)驗(yàn)手冊(cè)代碼一抄,實(shí)驗(yàn)完成這一現(xiàn)象,在這幾年的教學(xué)實(shí)踐中通常都能較好地完成。同時(shí)鼓勵(lì)學(xué)生在課后自己設(shè)計(jì)實(shí)驗(yàn),自己做實(shí)驗(yàn),開(kāi)放式實(shí)驗(yàn)教學(xué)也取得了較好的效果。
四、改革考核形式,保障教學(xué)任務(wù)的有效實(shí)施
成績(jī)是課程的永恒話題,不論是想自己的能力得到肯定,還是想取得良好的成績(jī)問(wèn)鼎獎(jiǎng)學(xué)金還是其他因素,學(xué)生對(duì)成績(jī)還是比較看重的,因此有些教學(xué)如果平時(shí)學(xué)生不主動(dòng),只要拿住考試的指揮棒,學(xué)生還是會(huì)投入相應(yīng)的精力,但這種方式往往會(huì)使學(xué)生的學(xué)習(xí)目的是去應(yīng)付考試,甚至作弊。這就需要改革考試方式,避免一考定音。
考核的方式方法和考核的內(nèi)容將直接影響教學(xué)過(guò)程的實(shí)施,關(guān)系到教師如何教和學(xué)生如何學(xué)。因此,應(yīng)通過(guò)對(duì)考核方式方法的改革來(lái)促進(jìn)教學(xué)過(guò)程的改革。
本課程以往的考核形式相對(duì)單一,考題側(cè)重于記憶,例如背幾條指令、說(shuō)幾個(gè)部件的作用、編幾條程序等,導(dǎo)致有的學(xué)生單片機(jī)考試成績(jī)很好,但卻不會(huì)實(shí)際運(yùn)用。因此在改革中,注重應(yīng)用能力的培養(yǎng),提高平時(shí)成績(jī)所占的比例。由于課程是“任務(wù)驅(qū)動(dòng)”,整個(gè)課程下來(lái)已經(jīng)有好幾次任務(wù),一次任務(wù)結(jié)束后對(duì)每位同學(xué)完成的結(jié)果予以記錄和評(píng)分,評(píng)判依據(jù)可以按完成任務(wù)的先后順序、完成的質(zhì)量及學(xué)生表達(dá)能力等方面。記錄結(jié)果由同學(xué)簽字確認(rèn)??紤]到時(shí)間,可以以組為單位進(jìn)行實(shí)訓(xùn)時(shí),教師還應(yīng)對(duì)每位同學(xué)提出相關(guān)的問(wèn)題或進(jìn)行單獨(dú)操作,這對(duì)主動(dòng)性差的同學(xué)來(lái)說(shuō)能起到很好的促進(jìn)作用。(平時(shí)作業(yè)就分散在任務(wù)之中)因此平時(shí)的成績(jī)也自然而然地給出了,大家對(duì)自己平時(shí)的成績(jī)也明了。實(shí)際上到期末考試前,學(xué)生大致能對(duì)自己的成績(jī)有一個(gè)初步的定位。教學(xué)實(shí)踐表明,最終的成績(jī)同平時(shí)的成績(jī)并無(wú)太大的變化。通過(guò)這一方式的改變,一方面提高了學(xué)生對(duì)平時(shí)學(xué)習(xí)的重視程度,基本杜絕了平時(shí)不努力、考試前臨時(shí)突擊這一現(xiàn)象。最終成績(jī)能較好地體現(xiàn)學(xué)生在本課程的學(xué)習(xí)情況,學(xué)習(xí)風(fēng)氣得到了有效的提升。
五、結(jié)語(yǔ)
針對(duì)“單片機(jī)原理與應(yīng)用”課程特點(diǎn),提出了“任務(wù)驅(qū)動(dòng)”這一教學(xué)模式,基于此改革課程內(nèi)容體系結(jié)構(gòu)、教學(xué)內(nèi)容的組織形式,并對(duì)課堂教學(xué)、實(shí)踐教學(xué)的形式和內(nèi)容進(jìn)行了變革,有效調(diào)動(dòng)了學(xué)生的學(xué)習(xí)興趣,提高了學(xué)習(xí)的主動(dòng)性,并在這一過(guò)程中學(xué)生掌握了實(shí)際的知識(shí)和技能。通過(guò)改革考試形式,在一定程度杜絕了大學(xué)課程平時(shí)不努力、考前臨時(shí)突擊這一現(xiàn)象,促使學(xué)生腳踏實(shí)地,對(duì)學(xué)習(xí)成績(jī)的提升起到了一定的作用。
參考文獻(xiàn):