99久久99久久精品免费看蜜桃,亚洲国产成人精品青青草原,少妇被粗大的猛烈进出va视频,精品国产不卡一区二区三区,人人人妻人人澡人人爽欧美一区

首頁 > 文章中心 > 單片機(jī)原理

單片機(jī)原理

前言:想要寫出一篇令人眼前一亮的文章嗎?我們特意為您整理了5篇單片機(jī)原理范文,相信會為您的寫作帶來幫助,發(fā)現(xiàn)更多的寫作思路和靈感。

單片機(jī)原理

單片機(jī)原理范文第1篇

一、背景

單片機(jī)原理與應(yīng)用”是一門電子類專業(yè)的核心課程,對于基礎(chǔ)薄弱的中職學(xué)生來說,這門課程的學(xué)習(xí)難度比較大。究其原因,一方面由于中職學(xué)生起點(diǎn)低、基礎(chǔ)知識較差;另一方面,當(dāng)前單片機(jī)課程現(xiàn)有的教材教學(xué)內(nèi)容獨(dú)立化、模塊化,各塊之間缺乏有機(jī)聯(lián)系,造成了學(xué)生難學(xué)、教師難教的局面,以至于全部內(nèi)容學(xué)完時,學(xué)生對一個完整的單片機(jī)開發(fā)過程還缺乏了解,這樣培養(yǎng)出的學(xué)生無法適應(yīng)企業(yè)的需求。所以我們提出:以一個較為具體的涵蓋知識點(diǎn)全面的典型項(xiàng)目為引領(lǐng),在完成這個項(xiàng)目的過程中,學(xué)生學(xué)會并能運(yùn)用相關(guān)單片機(jī)知識,練就了技能。該典型項(xiàng)目就是wifi小車的開發(fā)。

二、課程項(xiàng)目設(shè)計和實(shí)施

1、走訪企業(yè),明確課程定位。為了更好的培養(yǎng)適合企業(yè)需求的學(xué)生,我們特地走訪了當(dāng)?shù)囟鄠€單片機(jī)產(chǎn)品生產(chǎn)與研發(fā)的相關(guān)企業(yè),對企業(yè)崗位職業(yè)能力與工作過程進(jìn)行調(diào)研,了解企業(yè)對人才的需求;與企業(yè)一線技術(shù)人員共同商討如何選取合適的工程項(xiàng)目作為教學(xué)載體,確定教學(xué)任務(wù)與內(nèi)容;回訪了大量的畢業(yè)學(xué)生,與在企業(yè)一線從事單片機(jī)相關(guān)電子產(chǎn)品生產(chǎn)和研發(fā)的畢業(yè)生進(jìn)行交流,聽取畢業(yè)生對本課程教學(xué)的反饋意見,以他們的親身經(jīng)歷和切身體會幫助我們發(fā)現(xiàn)教學(xué)體系中存在的問題,對我們的教學(xué)實(shí)施提出合理的修改意見。

2、確定課程項(xiàng)目設(shè)計的總體思路。在和行業(yè)企業(yè)的深入交流過程中,我們發(fā)現(xiàn)企業(yè)在單片機(jī)應(yīng)用產(chǎn)品的研發(fā)和生產(chǎn)上有其典型的工作過程。如下圖所示:

我們仔細(xì)分析了這個過程,結(jié)合畢業(yè)生的反饋和在校學(xué)生的實(shí)際情況,確立了以培養(yǎng)學(xué)生在相關(guān)企業(yè)的單片機(jī)產(chǎn)品研發(fā)與生產(chǎn)崗位上,完成各項(xiàng)工作任務(wù)過程中應(yīng)具備的職業(yè)能力為目標(biāo)進(jìn)行教學(xué)情境設(shè)計的思路,具體實(shí)現(xiàn)方法為,采用實(shí)踐教學(xué),設(shè)計一個完整的學(xué)生感興趣的單片機(jī)產(chǎn)品開發(fā)項(xiàng)目,將所有的學(xué)習(xí)內(nèi)容貫穿于項(xiàng)目中,分解在多個學(xué)習(xí)情境中,讓學(xué)生既完成了教學(xué)內(nèi)容的學(xué)習(xí),又體驗(yàn)了企業(yè)生產(chǎn)的工作過程。

3、教學(xué)項(xiàng)目內(nèi)容的選取。教學(xué)項(xiàng)目內(nèi)容選擇的合適與否是關(guān)系到教學(xué)效果好壞的關(guān)鍵,本著以提高學(xué)生的職業(yè)崗位能力與職業(yè)素養(yǎng)為目標(biāo),我們從多個環(huán)節(jié)進(jìn)行了精心思考,挑選教學(xué)項(xiàng)目內(nèi)容。

我們選取了具有典型工作任務(wù)的“wifi小車制作項(xiàng)目”作為教學(xué)內(nèi)容的載體。該wifi小車以單片機(jī)作為控制核心,包括運(yùn)動模塊(電機(jī))、顯示模塊、遙控模塊以及各種傳感與轉(zhuǎn)換模塊等。針對wifi 小車各功能部分的實(shí)現(xiàn),設(shè)計出不同的學(xué)習(xí)情境,訓(xùn)練學(xué)生分析和設(shè)計單片機(jī)應(yīng)用程序的基本技能。

Wifi小車的功能設(shè)計具有很強(qiáng)的擴(kuò)展性,這主要取決與它具有的功能、性能和控制方法,功能越多,所需的技術(shù)與器件種類就越多;性能越好,對應(yīng)的技術(shù)含量也越高;控制方法越多控制電路也就越復(fù)雜。例如顯示模塊可以選擇led或數(shù)碼管,也可以選擇字符液晶或者圖形液晶顯示;控制方式可以選擇遙控也可以加入聲控等,所以選擇wifi小車作為教學(xué)項(xiàng)目具有很好的可選性與擴(kuò)展性。

本項(xiàng)目分為4個學(xué)習(xí)情境,整個情境的實(shí)施是按照學(xué)習(xí)的認(rèn)知規(guī)律、職業(yè)成長規(guī)律,從簡單到復(fù)雜,從局部到整體進(jìn)行學(xué)習(xí)單片機(jī)知識、訓(xùn)練職業(yè)崗位能力。

總體上采取知識由淺入深、技術(shù)逐漸綜合的原則。由一個綜合單片機(jī)產(chǎn)品制作項(xiàng)目――制作單片機(jī)wifi小車,按照不同的功能模塊分解成4個學(xué)習(xí)情境(見下圖),①小車零部件的選擇和裝配②小車的顯示系統(tǒng)③小車的運(yùn)動控制系統(tǒng)④小車智能感應(yīng)系統(tǒng), 如下圖所示,每個學(xué)習(xí)情境包含可選的子情境。

每個學(xué)習(xí)情境均訓(xùn)練對應(yīng)的職業(yè)能力

①、學(xué)習(xí)情境一訓(xùn)練學(xué)生電子產(chǎn)品裝配基本功,完成要求如下:

電子元器件的選取與檢測

小車電路焊接與裝配

②、學(xué)習(xí)情境二訓(xùn)練學(xué)生單片機(jī)基礎(chǔ)技術(shù)與基礎(chǔ)器件的集成能力,完成如下功能:

小車的前進(jìn)、后退、左右轉(zhuǎn)向及停止運(yùn)行狀態(tài)顯示;

完成各種動作的計時時間顯示。

③、學(xué)習(xí)情境三訓(xùn)練學(xué)生接口技術(shù)與接口器件的集成能力,完成如下功能:

小車的前進(jìn)、后退、左右轉(zhuǎn)向及停止驅(qū)動控制;無線遙控。

④、學(xué)習(xí)情境四訓(xùn)練學(xué)生將單片機(jī)基礎(chǔ)技術(shù)運(yùn)用、接口技術(shù)運(yùn)用和傳感器等各種技術(shù)與器件集成的能力,完成如下功能:

監(jiān)測距離,自動避障;

4、教學(xué)方法的使用。通過實(shí)踐,我們認(rèn)識到要提高教學(xué)效果必須采用多樣化的教學(xué)方法,以學(xué)生為主體,以教師為引導(dǎo)。為此我們引入了工作過程與教學(xué)方法的對照圖(參考下圖:工作過程學(xué)習(xí)方法對照圖)。以子情境2中的實(shí)訓(xùn)項(xiàng)目“汽車轉(zhuǎn)向燈”為例,來具體說明課堂教學(xué)實(shí)施過程中各種教學(xué)方法的使用:首先提出項(xiàng)目要求,明確這個項(xiàng)目做什么,激發(fā)學(xué)生學(xué)習(xí)興趣(采用了項(xiàng)目案例激勵教學(xué)法),接著引導(dǎo)學(xué)生思考,跟老師想(采用項(xiàng)目分析引探法),然后跟老師做,最后學(xué)生自己做,自己練,互助學(xué)習(xí)項(xiàng)目制作(采用協(xié)作互助討論法),老師跟蹤檢查,指導(dǎo),評價(采用項(xiàng)目檢查評價法),課后布置學(xué)生對產(chǎn)品功能進(jìn)行擴(kuò)展(采用項(xiàng)目制作進(jìn)階法)。通過這樣的教學(xué)過程,讓學(xué)生達(dá)到了積極思考,樂于實(shí)踐、快樂學(xué)習(xí)、享受成功的學(xué)習(xí)狀態(tài),培養(yǎng)了學(xué)生的職業(yè)崗位能力,為以后順利走上工作崗位打下堅實(shí)的基礎(chǔ)。

5、考核方案設(shè)計

考核分為三部分,過程性考核(占分50%)、綜合性考核(占分15%)、結(jié)業(yè)性考核(占分35%),其中過程性考核考察學(xué)生每一個項(xiàng)目情境的完成情況。綜合性考核考察學(xué)生對單片機(jī)技術(shù)的綜合運(yùn)用能力,強(qiáng)調(diào)學(xué)生的創(chuàng)新意識,鼓勵學(xué)生多使用新技術(shù)、新器件。結(jié)業(yè)性考核安排在期末,采用現(xiàn)場抽題,考察一個項(xiàng)目的完整制作,學(xué)生也可提前申請參加開放性考核,考試合格可免除期末結(jié)業(yè)性考核,也可以參加各類單片機(jī)競賽,取得好成績者也可免除結(jié)業(yè)性考核。

單片機(jī)原理范文第2篇

關(guān)鍵詞:單片機(jī);C8051F;匯編語言;C51

中圖分類號:G642 文獻(xiàn)標(biāo)識碼:B

1引言

“單片機(jī)原理及應(yīng)用”是計算機(jī)科學(xué)與技術(shù)、通信工程等專業(yè)的一門主要專業(yè)課程,因單片機(jī)在生產(chǎn)實(shí)踐中應(yīng)用廣泛,各高校都將該課程定位在以培養(yǎng)學(xué)生動手能力和創(chuàng)新能力的目的上。但長期以來國內(nèi)高校都以MCS-51為該課程的主講內(nèi)容,雖然該系列單片機(jī)在國內(nèi)的應(yīng)用經(jīng)久不衰,但隨著技術(shù)的發(fā)展,芯片的生產(chǎn)工藝、功能、運(yùn)行速度、開發(fā)環(huán)竟、編程語言等都有了很大的變化,在實(shí)際的科研開發(fā)中更多選用與MCS-51兼容的高檔單片機(jī),而很少直接選用標(biāo)準(zhǔn)8051單片機(jī),因此傳統(tǒng)的教學(xué)內(nèi)容和知識已經(jīng)與實(shí)際應(yīng)用脫節(jié),不能滿足需要。根據(jù)多年的教學(xué)經(jīng)驗(yàn)和科研積累,我們對“單片機(jī)原理及應(yīng)用”課程的教學(xué)內(nèi)容、實(shí)驗(yàn)手段、實(shí)驗(yàn)內(nèi)容、教學(xué)方法等進(jìn)行了更新。兩年多的教學(xué)實(shí)踐表明,改革后的“單片機(jī)原理及應(yīng)用”很受學(xué)生的歡迎,大大提高了學(xué)生學(xué)習(xí)單片機(jī)課程的興趣,達(dá)到了該課程培養(yǎng)和鍛煉學(xué)生動手能力、開發(fā)應(yīng)用系統(tǒng)能力的目的。

2課程改革

2.1更新教學(xué)內(nèi)容

MCS-51單片機(jī)及其衍生產(chǎn)品在我國乃至世界范圍都獲得了非常廣泛的應(yīng)用,尤其是在我國大部分大專院校都采用MCS-51單片機(jī)作為教學(xué)機(jī)型,單片機(jī)系統(tǒng)工程師大都熟悉 MCS-51單片機(jī)。但隨著一些高集成度、高性能的8位和16位RISC單片機(jī)的推出,基于標(biāo)準(zhǔn)8051內(nèi)核的單片機(jī)正面臨著退出市場的境地。因此一些半導(dǎo)體公司開始對傳統(tǒng)8051內(nèi)核進(jìn)行大的改造,主要是提高速度和增加片內(nèi)模擬和數(shù)字外設(shè),以期大幅提高單片機(jī)的整體性能。

近年來我們承擔(dān)了較多企業(yè)委托的單片機(jī)應(yīng)用開發(fā)項(xiàng)目,在實(shí)際的科研開發(fā)中我們也感覺到用標(biāo)準(zhǔn)8051單片機(jī)作微控制器不僅需要擴(kuò)充大量資源,而且編程調(diào)試都比較困難,而隨著技術(shù)的發(fā)展,新一代的單片機(jī)芯片已不僅包含微處理器,而且包含應(yīng)用系統(tǒng)所需的各類外部接口設(shè)備,存儲器也從光擦除變?yōu)殡姴脸?、可在系統(tǒng)編程的FLASH存儲器,編程語言從匯編語言為主變?yōu)橐訡51語言為主,以JTAG接口構(gòu)成的JTAG調(diào)試器可以進(jìn)行非侵入式全速在系統(tǒng)調(diào)試,比以前的專用在線仿真器(ICE)要方便得多。因此我們在幾個單片機(jī)開發(fā)項(xiàng)目中都選擇了原美國Cygnal集成產(chǎn)品公司(1999年3月成立的一家新興的半導(dǎo)體公司,專門從事混合信號片上系統(tǒng)單片機(jī)的設(shè)計與制造,2003年并入Silicon Laboratories公司)推出的C8051F系列產(chǎn)品。C8051F系列單片機(jī)是集成混合信號的片上系統(tǒng)(SOC,System Of Chip),與MCS-51兼容的內(nèi)核CIP-51采用流水線結(jié)構(gòu),峰值速度可達(dá)25MIPS。C8051F具備控制系統(tǒng)所需的模擬和數(shù)字外設(shè),包括看門狗(Watchdog)、ADC、DAC、電壓比較器、電壓基準(zhǔn)輸出、定時器、PWM、定時器捕捉和方波輸出等,并具備多種總線接口,包括UART、SPI、SMBUS(與I2C兼容)總線以及CAN總線等。C8051F系列單片機(jī)采用Flash ROM技術(shù),集成JTAG接口,支持在線編程和調(diào)試。C8051F系列單片機(jī)的諸多特點(diǎn)和優(yōu)越性,使其廣受單片機(jī)系統(tǒng)設(shè)計工程師的青睞,成為很多測控系統(tǒng)設(shè)計的首選機(jī)型。

既然實(shí)際科研開發(fā)中多使用新一代高性能單片機(jī),那么我們的教學(xué)內(nèi)容就應(yīng)該及時更新,以減少學(xué)生工作后的二次學(xué)習(xí)。為此,2004年課程組在參與編寫機(jī)械工業(yè)出版社的教材《單片機(jī)原理及應(yīng)用》時專門用一章的篇幅把C8051F寫了進(jìn)去。后來我們發(fā)現(xiàn)僅僅用一章內(nèi)容講C8051F,教學(xué)內(nèi)容的改革還不徹底,因此2006年我們又對教學(xué)內(nèi)容進(jìn)行了徹底改革,編寫了以C8051F為教學(xué)機(jī)型的教材《C8051F單片機(jī)原理及應(yīng)用》,由中國電力出版社出版,教材除了更新了教學(xué)機(jī)型外,編程語言也從匯編語言改成以C51語言為主,兼顧匯編語言的形式。我們編寫該教材的時候國內(nèi)還基本上沒有同類教材,目前已經(jīng)有了一些,這說明國內(nèi)高校已經(jīng)在注重單片機(jī)課程教學(xué)內(nèi)容的改革。在多屆學(xué)生中的使用實(shí)踐表明,內(nèi)容更新后的教材很受學(xué)生的歡迎。

2.2更新實(shí)驗(yàn)手段

以MCS-51為主講機(jī)型的單片機(jī)課程的實(shí)驗(yàn)?zāi)J蕉嗖捎肞C機(jī)+仿真器+目標(biāo)實(shí)驗(yàn)臺的方法,我校選用了臺灣MICETEK公司Easyscope8052F單片機(jī)仿真器,這種仿真器專門仿真51系列單片機(jī),采用Windows環(huán)境的仿真軟件,價格低,性能好。綜合實(shí)驗(yàn)板選用改造后的復(fù)旦大學(xué)教學(xué)儀器廠的產(chǎn)品,與PC機(jī)連接構(gòu)成的單片機(jī)開發(fā)系統(tǒng)結(jié)構(gòu)如圖1所示。

傳統(tǒng)采用仿真器的實(shí)驗(yàn)?zāi)J诫m然能滿足學(xué)生實(shí)驗(yàn)、課程設(shè)計之用,但SOC型單片機(jī)出現(xiàn)后,實(shí)驗(yàn)?zāi)J娇梢愿颖平鼘?shí)際開發(fā)應(yīng)用的形式,根據(jù)原有單片機(jī)實(shí)驗(yàn)系統(tǒng)的使用經(jīng)驗(yàn),2003年我們提出了一個新的單片機(jī)實(shí)驗(yàn)系統(tǒng)方案,與新華龍電子有限公司合作,設(shè)計出NCD-CIP51F020系統(tǒng)實(shí)驗(yàn)設(shè)備,該系統(tǒng)由SOC單片機(jī)集成開發(fā)環(huán)境(IDE)、可用于以太網(wǎng)測控的NMC-20XX核心模塊、系統(tǒng)實(shí)驗(yàn)板三部分組成,應(yīng)用該設(shè)備可完成單片機(jī)系統(tǒng)的許多典型應(yīng)用實(shí)驗(yàn),并可做較復(fù)雜的應(yīng)用系統(tǒng)實(shí)驗(yàn),如高速數(shù)據(jù)采集、嵌入式Web實(shí)驗(yàn)等。片內(nèi)JTAG調(diào)試電路允許對安裝在最終應(yīng)用系統(tǒng)上的產(chǎn)品進(jìn)行全速、非侵入式(不占用系統(tǒng)資源)、在系統(tǒng)調(diào)試。該調(diào)試系統(tǒng)支持觀察和修改存儲器和寄存器,支持?jǐn)帱c(diǎn)、觀察點(diǎn)、單步及運(yùn)行和停機(jī)命令。使用JTAG調(diào)試時,所有模擬和數(shù)字外設(shè)都可以全功能運(yùn)行。Silicon Laboratories提供的集成開發(fā)環(huán)境包括編輯器、宏匯編器、調(diào)試器與編程器,同時也支持第三方提供的匯編器和C51編譯器(如Keil等)。采用SOC單片機(jī)JTAG接口的先進(jìn)調(diào)試環(huán)境如圖2所示。

2.3更新教學(xué)方法

我們除了注重教學(xué)內(nèi)容的更新,使學(xué)生學(xué)到最新最實(shí)用的知識外,還注重教學(xué)手段和方法的改革與研究。

首先,課程組注重現(xiàn)代先進(jìn)教育手段的應(yīng)用。C8051F單片機(jī)的內(nèi)部資源豐富、原理復(fù)雜,因此新課程的內(nèi)容要遠(yuǎn)比傳統(tǒng)的MCS-51多且增加了大量復(fù)雜的圖、表,傳統(tǒng)的板書式教學(xué)難以勝任,所以在課時量不可能增加的情況下,先進(jìn)的多媒體教學(xué)方法成為必然。其實(shí)課程組早在2003年就開始用多媒體方式講授該課程,教學(xué)內(nèi)容更新后課程組重新制作了該課程的多媒體課件,課件結(jié)構(gòu)清晰、層次分明、圖文并茂,結(jié)合計算機(jī)動畫把復(fù)雜的內(nèi)容簡單化、抽象的內(nèi)容具體化,明顯提高了課堂教學(xué)效率。課程組還開發(fā)了該課程的教學(xué)網(wǎng)站,與課程相關(guān)的課件、實(shí)驗(yàn)軟件、參考資料等都放在網(wǎng)上供同學(xué)隨時下載或?yàn)g覽,網(wǎng)站也提供了師生交流的平臺。

其次,課程組注重教學(xué)方法的研究與改革。在多年的計算機(jī)硬件課程教學(xué)中我們發(fā)現(xiàn),由于內(nèi)容枯燥、知識面廣等原因,學(xué)生對計算機(jī)硬件課程的學(xué)習(xí)興趣大大降低,甚至有些硬件選修課程因?yàn)檫x修的人數(shù)太少而開不出來。這種學(xué)習(xí)中喜軟怕硬的現(xiàn)象必須引起重視,否則培養(yǎng)出來的學(xué)生很難滿足用人單位的需要,這也是近年來嵌入式系統(tǒng)方向畢業(yè)生比較容易找工作原因的一個方面。教學(xué)中我們發(fā)現(xiàn)學(xué)生并非對所有硬件內(nèi)容都不感興趣,對有些內(nèi)容興趣還是比較高的,比如“數(shù)字邏輯電路設(shè)計”課程中“自動售貨機(jī)設(shè)計”、“單片機(jī)”課程中“日歷時鐘的液晶顯示模塊的設(shè)計”等。因此我們設(shè)想可以在講解具體內(nèi)容前先把學(xué)生感興趣的問題提出來,然后在解決問題的過程中把相關(guān)內(nèi)容講解清楚,這就是所謂的“案例”法教學(xué)。我們設(shè)計了部分“案例”在計算機(jī)硬件課程中試點(diǎn),取得了滿意的效果。我們提出的計算機(jī)硬件課程“案例”教學(xué)法得到江蘇大學(xué)2007年校教改重點(diǎn)項(xiàng)目的立項(xiàng)資助,將對計算機(jī)硬件課程“案例”教學(xué)法進(jìn)行更深入的研究。

3結(jié)束語

我校采用SOC型單片機(jī)C8051F作為“單片機(jī)原理及應(yīng)用”課程的主講機(jī)型,對該課程的教學(xué)內(nèi)容進(jìn)行了全面更新,已在多屆學(xué)生中進(jìn)行講授,學(xué)生對該課程的學(xué)習(xí)興趣大幅提高,實(shí)驗(yàn)和課程設(shè)計質(zhì)量也比以前有較大改觀。“單片機(jī)原理及應(yīng)用”已經(jīng)建設(shè)成江蘇大學(xué)校級精品課程。對計算機(jī)硬件課程采用“案例”教學(xué)法進(jìn)行了一些研究,單片機(jī)課程的部分內(nèi)容采用“案例”教學(xué)法進(jìn)行了試點(diǎn),取得了較好的效果?!鞍咐苯虒W(xué)法是我們近年來在計算機(jī)硬件課程上的試點(diǎn),目前還不成熟,我們將在“案例”開發(fā)、課件制作等環(huán)節(jié)對“案例”教學(xué)法進(jìn)行更深入的研究。

參考文獻(xiàn)

單片機(jī)原理范文第3篇

【關(guān)鍵詞】單片機(jī);教學(xué);改革

當(dāng)今世界,單片機(jī)在工業(yè)過程控制、智能儀表、計算機(jī)集成控制、人工智能、通信設(shè)備的智能化方面應(yīng)用非常廣泛,而且隨著電子和計算機(jī)技術(shù)的發(fā)展,以單片機(jī)和各種微處理器為核心必然是實(shí)現(xiàn)智能化技術(shù)的主流方向。同時,《單片機(jī)原理與應(yīng)用》是高職院校電子、電氣等相關(guān)專業(yè)最重要的核心課程之一,是一門實(shí)踐性、應(yīng)用性很強(qiáng)的學(xué)科,該方向?qū)W(xué)生進(jìn)行畢業(yè)設(shè)計和就業(yè)都起著重要的作用。

《單片機(jī)原理與應(yīng)用》傳統(tǒng)教學(xué)一般包括理論課和實(shí)踐課。理論課學(xué)生普通反應(yīng)知識抽象、難學(xué)、難懂,學(xué)了后面又忘了前面,學(xué)生學(xué)得吃力,老師教得辛苦。實(shí)踐課主要采用驗(yàn)證性實(shí)驗(yàn),學(xué)生只要連線正確、程序輸入無誤就能看到結(jié)果,這樣往往造成學(xué)生只關(guān)注實(shí)驗(yàn)結(jié)果,而忽略了思考過程。學(xué)生無法從中提高分析問題、思考問題、解決問題能力,甚至到最后還是無法獨(dú)立設(shè)計一個簡單的單片機(jī)系統(tǒng),實(shí)踐動手能力非常差。這樣的教學(xué)方法不能體現(xiàn)單片機(jī)實(shí)踐性和應(yīng)用性強(qiáng)的特點(diǎn),也與社會發(fā)展脫軌,因此,《單片機(jī)原理與運(yùn)用》教學(xué)改革迫在眉睫。我們總結(jié)了以往教學(xué)過程中的一些經(jīng)驗(yàn)和教訓(xùn),提出以下幾點(diǎn)《單片機(jī)原理與運(yùn)用》教學(xué)改革的思路和方法。

1.教學(xué)內(nèi)容選取

以培養(yǎng)學(xué)生具備從事單片機(jī)系統(tǒng)設(shè)計崗位能力和相關(guān)職業(yè)群為目標(biāo),增強(qiáng)學(xué)生實(shí)踐動手能力和工程實(shí)際運(yùn)用能力為導(dǎo)向,來選取教學(xué)內(nèi)容。在本課程的開始的時候,介紹單片機(jī)的發(fā)展現(xiàn)狀,例舉日常生活中單片機(jī)控制的設(shè)備,把科研項(xiàng)目或往屆畢業(yè)設(shè)計中的一些應(yīng)用板帶進(jìn)課堂,通過圖片、實(shí)物展示使學(xué)生對單片機(jī)有一定的感性認(rèn)識,激發(fā)他們的學(xué)習(xí)興趣和熱情。

選取以單片機(jī)C語言貫穿各章節(jié),并且是項(xiàng)目化教學(xué)形式的教材。C語言可讀性、可維護(hù)性和可移植性都比匯編語言好,在實(shí)際單片機(jī)設(shè)計中,基本上都采用C語言。項(xiàng)目教學(xué)改變了傳統(tǒng)教材內(nèi)容安排強(qiáng)調(diào)只是系統(tǒng)性為主的思路;把課程教學(xué)內(nèi)容劃分為若干個項(xiàng)目形式來完成,項(xiàng)目又以任務(wù)的方式出現(xiàn),突出體現(xiàn)高職生理論知識“必需、夠用”的原則。

多增加日常生活常見案例為項(xiàng)目,每個項(xiàng)目又包括幾個任務(wù),通過每個任務(wù)的完成過程,使學(xué)生學(xué)習(xí)相應(yīng)的理論知識。通過常見案例的剖析,引起學(xué)生的注意,激發(fā)他們的興趣,每個任務(wù)完成后,教師進(jìn)行知識點(diǎn)得總結(jié),這樣學(xué)生在實(shí)踐動手中不知不覺就掌握的理論知識。比如交通燈控制系統(tǒng),這一項(xiàng)目可以分成單片機(jī)控制單燈亮滅、流水燈控制、定時器控制流水燈、帶時間顯示系統(tǒng)等,其中通過單片機(jī)控制單燈亮滅這一任務(wù)的設(shè)計,學(xué)生可以學(xué)習(xí)單片機(jī)結(jié)構(gòu)、I/O口、單片機(jī)最小系統(tǒng)等基本知識。通過流水燈控制這一任務(wù),學(xué)生可以學(xué)習(xí)單片機(jī)C語言的各種語句等。

2.教學(xué)方法使用

我們以項(xiàng)目為教學(xué)單元,以任務(wù)驅(qū)動進(jìn)行教學(xué)。我們的教學(xué)是在一體化教室實(shí)施,只要在一體化教室中通過仿企業(yè)的工作環(huán)境進(jìn)行項(xiàng)目化教學(xué),教學(xué)過程才能實(shí)現(xiàn)真正的教、學(xué)、做融為一體,并充分調(diào)用學(xué)生學(xué)習(xí)的主動性和創(chuàng)造性。

每個任務(wù)包括任務(wù)目標(biāo)要求、學(xué)生知識與能力準(zhǔn)備、計劃、實(shí)施過程、評估。教師先布置任務(wù),說明這個任務(wù)要到達(dá)的功能及要求。教師可根據(jù)教學(xué)內(nèi)容,制作多媒體課件,將理論知識通過多媒體手段以聲音、圖像、文字等方面表現(xiàn)出來,使枯燥抽象的理論知識變得生動直觀,學(xué)生更容易理解。也可以通過Flas演示或Proteus仿真軟件展示任務(wù)的運(yùn)行結(jié)果,使學(xué)生對任務(wù)要求更加清楚。學(xué)生分組后,每個小組進(jìn)行任務(wù)設(shè)計的討論,并確定設(shè)計方案。學(xué)生任務(wù)實(shí)施過程中,教師對學(xué)生操作過程中存在的問題進(jìn)行實(shí)時點(diǎn)評,實(shí)施后,教師對每組的實(shí)施結(jié)果進(jìn)行驗(yàn)收和評估,最后總結(jié)任務(wù)實(shí)現(xiàn)過程中碰到的普遍問題、知識運(yùn)用的難點(diǎn)關(guān)鍵點(diǎn)。這樣的教學(xué)方法能提高學(xué)生分析問題、思考問題、解決問題能力,而且通過每個任務(wù)的制作,學(xué)生積極性提高、自主學(xué)習(xí)能力和動手能力增強(qiáng)。

另外,教師可以把多媒體課件、儀器設(shè)備電路圖、設(shè)備的使用方法、任務(wù)要求、本課程相關(guān)的學(xué)習(xí)資料等掛在網(wǎng)上,進(jìn)行資源共享,供學(xué)生查閱學(xué)習(xí),通過網(wǎng)絡(luò)來提高學(xué)生的學(xué)習(xí)興趣。

3.加強(qiáng)實(shí)踐環(huán)節(jié)

實(shí)踐環(huán)節(jié)是《單片機(jī)原理與運(yùn)用》課程的重要環(huán)節(jié),通過實(shí)踐環(huán)節(jié),可以提高學(xué)生動手操作能力。我們把實(shí)踐環(huán)節(jié)分成基礎(chǔ)性實(shí)踐、開放性實(shí)踐、綜合設(shè)計實(shí)踐三個部分。

基礎(chǔ)性實(shí)踐主要是實(shí)現(xiàn)指令練習(xí)、基本程序結(jié)構(gòu)編寫,或是一些驗(yàn)證理論知識準(zhǔn)確性的實(shí)驗(yàn),通過這一環(huán)節(jié),學(xué)生所學(xué)的理論知識得以鞏固。開發(fā)性實(shí)踐要求學(xué)生具有扎實(shí)的理論基礎(chǔ),具有分析問題解決問題的能力,培養(yǎng)學(xué)生對常見接口的硬件設(shè)計、軟件編程及仿真器下載調(diào)試的能力。在綜合設(shè)計實(shí)踐過程中,教師只提出實(shí)驗(yàn)?zāi)康暮鸵?,學(xué)生要自主確定設(shè)計方案,并設(shè)計硬件電路圖、制作電路PCB圖,并在自己做的PCB板上焊接元器件。硬件調(diào)試成功后,再把編寫好的程序利用仿真器下載到電路板上,進(jìn)行調(diào)試。這樣,學(xué)生熟悉了單片機(jī)系統(tǒng)設(shè)計的整個過程,他們的實(shí)踐動手能力也得到很好的提高。

除了上面三個實(shí)踐環(huán)節(jié)外,我們還要鼓勵學(xué)生參加全國電子設(shè)計大賽和大學(xué)生創(chuàng)新科技項(xiàng)目,使學(xué)生在實(shí)踐過程中不斷的學(xué)習(xí)新知識,提高設(shè)計創(chuàng)新能力。

4.考核方式確定

傳統(tǒng)的教學(xué)模式中,課程考核是由期末閉卷考核占70%,平時表現(xiàn)占30%組成,這樣的考核方式只能一定程度上反應(yīng)學(xué)生理論知識的掌握情況,很難體現(xiàn)學(xué)生的分析能力和實(shí)踐動手能力,也與單片機(jī)課程實(shí)踐性強(qiáng)的特點(diǎn)不相符合。

一個好的考核方法對于學(xué)習(xí)一門課程至關(guān)重要??己瞬粌H是對教師教學(xué)效果的檢驗(yàn)和學(xué)生水平的測試,同時也是學(xué)生學(xué)習(xí)習(xí)慣和學(xué)習(xí)方法的導(dǎo)向。筆者提出的考核方式包括期末考核30%、項(xiàng)目考核50%、平時表現(xiàn)20%。其中平時表現(xiàn)包括出勤表現(xiàn)、作業(yè)完成情況。期末考核是對課程基礎(chǔ)知識進(jìn)行閉卷測試。項(xiàng)目考核是每個項(xiàng)目成績的平均分,每完成一個項(xiàng)目,教師根據(jù)學(xué)生的工作態(tài)度、完成情況、回答問題情況進(jìn)行評分。每個項(xiàng)目完成后,學(xué)生都能看到自己的成果,這樣也調(diào)動了學(xué)生的學(xué)習(xí)興趣和學(xué)習(xí)熱情。這樣的課程考核方式不僅包括基礎(chǔ)知識掌握程度考核,還包括學(xué)生的分析、學(xué)習(xí)、動手、應(yīng)用等方面能力的考核,能比較客觀的反應(yīng)學(xué)生的學(xué)習(xí)情況。

5.總結(jié)

教學(xué)改革實(shí)施后,課堂氣氛變的更加活躍,學(xué)生學(xué)習(xí)興趣更加濃厚。實(shí)踐表明,我們的教學(xué)改革方案不僅提高了學(xué)生學(xué)習(xí)積極性、應(yīng)用能力和動手能力,而且對學(xué)生的獨(dú)立思考和分析問題、解決問題的能力的提高也起到了很好效果。當(dāng)然,教學(xué)改革是一個無止境的過程,我們還要不斷更新教學(xué)觀念,不斷的探索和實(shí)踐,來提高教學(xué)質(zhì)量和效果。

參考文獻(xiàn)

[1]莫莉,趙悅等.“單片機(jī)原理”課程教改探析[J].教育與教學(xué)研究,2010(1).

[2]張培仁,孫占輝等.基于C語言編程MCS-51單片機(jī)及應(yīng)用[M].北京:清華大學(xué)出版社,2003.

[3]歐陽慧平,王茜等.系統(tǒng)化的“單片機(jī)應(yīng)用技術(shù)”課程建設(shè)與改革[J].教育與職業(yè),2011(2).

[4]牛分中,宋風(fēng)娟.高校單片機(jī)課程實(shí)踐教學(xué)的改革與探討[J].教育與職業(yè),2008(21).

單片機(jī)原理范文第4篇

一、考核知識點(diǎn):

1、計算機(jī)的數(shù)據(jù)表示和數(shù)據(jù)運(yùn)算

2、計算機(jī)的各種編碼

3、計算機(jī)的組成及工作過程

二、考核要求:

1、識記計算機(jī)的各種編碼

2、領(lǐng)會計算機(jī)的組成及工作過程

3、簡明應(yīng)用計算機(jī)的數(shù)據(jù)表示和數(shù)據(jù)運(yùn)算

第二章51單片機(jī)的硬件結(jié)構(gòu)和原理

一、考核知識點(diǎn):

1、單片機(jī)的發(fā)展史及各方面的應(yīng)用

2、51單片機(jī)的分類和內(nèi)部結(jié)構(gòu)

3、單片機(jī)的引腳和功能

4、單片機(jī)工作的時序

二、考核要求:

1、識記單片機(jī)的發(fā)展史及各方面的應(yīng)用

2、識記單片機(jī)的引腳和功能

3、領(lǐng)會單片機(jī)工作的時序

4、簡明應(yīng)用51單片機(jī)的分類和內(nèi)部結(jié)構(gòu)

第三章51單片機(jī)指令系統(tǒng)

一、考核知識點(diǎn):

1、單片機(jī)的尋址方式

2、單片機(jī)的指令系統(tǒng)

3、助記符指令和二進(jìn)制代碼指令的異同

二、考核要求:

1、領(lǐng)會助記符指令和二進(jìn)制代碼指令的異同

2、綜合應(yīng)用單片機(jī)的尋址方式

3、綜合應(yīng)用單片機(jī)的指令系統(tǒng)

第四章匯編語言程序設(shè)計

一、考核知識點(diǎn):

1、偽指令

2、匯編語言設(shè)計技巧

3、匯編語言到機(jī)器語言的編譯過程

二、考核要求:

1、領(lǐng)會偽指令

2、簡明應(yīng)用匯編語言設(shè)計技巧

3、綜合應(yīng)用匯編語言到機(jī)器語言的編譯過程

第五章51單片機(jī)的中斷系統(tǒng)

一、考核知識點(diǎn):

1、中斷基本概念

2、中斷系統(tǒng)的程序編制

3、中斷系統(tǒng)的初步應(yīng)用

二、考核要求:

1、領(lǐng)會中斷基本概念

2、簡明應(yīng)用中斷系統(tǒng)解決工程問題

3、綜合簡明應(yīng)用中斷系統(tǒng)的程序編制

第六章51單片機(jī)的內(nèi)部定時器/計數(shù)器及串行接口

一、考核知識點(diǎn):

1、單片機(jī)內(nèi)部定時器/計數(shù)器的結(jié)構(gòu)及工作原理

2、定時器/計數(shù)器的程序編制

3、定時器/計數(shù)器的初步應(yīng)用

4、串行口的基本概念

5、串行口的程序編制

6、串行口的初步應(yīng)用

二、考核要求:

1、識記串行口的基本概念

2、領(lǐng)會單片機(jī)內(nèi)部定時器/計數(shù)器的結(jié)構(gòu)及工作原理

3、簡明應(yīng)用定時器/計數(shù)器解決工程問題

4、簡明應(yīng)用串行口的程序編制

5、簡明應(yīng)用串行口解決工程問題

6、綜合應(yīng)用定時器/計數(shù)器的程序編制

第七章單片機(jī)的系統(tǒng)擴(kuò)展與接口技術(shù)

一、考核知識點(diǎn):

1、單片機(jī)外部總線的擴(kuò)展

2、外部存儲器的擴(kuò)展

3、I/O接口的擴(kuò)展

4、管理功能部件的擴(kuò)展

5、A/D和D/A接口功能的擴(kuò)展

二、考核要求:

1、識記單片機(jī)外部總線的擴(kuò)展

2、識記管理功能部件的擴(kuò)展

3、簡明應(yīng)用A/D和D/A接口功能的擴(kuò)展

4、綜合應(yīng)用外部存儲器的擴(kuò)展

5、綜合應(yīng)用I/O接口的擴(kuò)展

第八章單片機(jī)應(yīng)用系統(tǒng)設(shè)計

一、考核知識點(diǎn):

1、單片機(jī)應(yīng)用系統(tǒng)的開發(fā)過程

2、單片機(jī)開發(fā)工具的分類和使用

3、單片機(jī)應(yīng)用系統(tǒng)的軟件和硬件調(diào)試過程

二、考核要求:

1、識記單片機(jī)應(yīng)用系統(tǒng)的軟件和硬件調(diào)試過程

2、領(lǐng)會單片機(jī)應(yīng)用系統(tǒng)的開發(fā)過程

3、領(lǐng)會單片機(jī)開發(fā)工具的分類和使用

第九章單片機(jī)系統(tǒng)的抗干擾技術(shù)

一、考核知識點(diǎn):

1、單片機(jī)干擾源與分類

2、干擾對單片機(jī)系統(tǒng)的影響

3、硬件抗干擾技術(shù)

4、軟件抗干擾技術(shù)

5、數(shù)字濾波

二、考核要求:

1、識記單片機(jī)干擾源與分類

2、識記干擾對單片機(jī)系統(tǒng)的影響

3、識記數(shù)字濾波

4、簡明應(yīng)用硬件抗干擾技術(shù)

5、簡明應(yīng)用軟件抗干擾技術(shù)

第十章其它單片機(jī)簡介

一、考核知識點(diǎn):

1、AT89C系列單片機(jī)的特點(diǎn)與性能

2、其它8位單片機(jī)的特點(diǎn)與性能

3、16位、32位單片機(jī)的特點(diǎn)與性能

二、考核要求:

1、識記其它8位單片機(jī)的特點(diǎn)與性能

2、識記16位、32位單片機(jī)的特點(diǎn)與性能

3、領(lǐng)會AT89C系列單片機(jī)的特點(diǎn)與性能

《單片機(jī)原理及應(yīng)用技術(shù)》考試大綱

《單片機(jī)原理及應(yīng)用技術(shù)》課程是一門面向應(yīng)用的專業(yè)技術(shù)課。單片機(jī)原理與應(yīng)用介紹了單片機(jī)的基本知識和單片機(jī)技術(shù)的應(yīng)用,其內(nèi)容與工程實(shí)際緊密聯(lián)系,實(shí)用性很強(qiáng),是一門在理論指導(dǎo)下,偏重于實(shí)際應(yīng)用的課程。本課程具有實(shí)用性強(qiáng)、理論和實(shí)踐結(jié)合、軟硬件結(jié)合等特點(diǎn)。本課程圍繞使用較為廣泛的MCS-51系列單片機(jī)進(jìn)行學(xué)習(xí)。本課程已成為理、工科電子類專業(yè)的一門基礎(chǔ)課程,這是從電子系統(tǒng)設(shè)計角度考慮的,它體現(xiàn)了電子系統(tǒng)設(shè)計的方法和硬件結(jié)構(gòu)的變化。通過該課程的學(xué)習(xí),要求學(xué)生掌握80C51單片機(jī)的工作原理、編程技術(shù),掌握單片機(jī)應(yīng)用系統(tǒng)的擴(kuò)展方法和實(shí)際應(yīng)用。因此,以單片機(jī)為內(nèi)核,分析和設(shè)計一個簡單的計算機(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ī)的產(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ī)的存儲器組成。

3.掌握單片機(jī)并行輸入/輸出端口結(jié)構(gòu)及功能。

4.了解單片機(jī)的時序概念和復(fù)位工作方式。

5.掌握單片機(jī)引腳功能

3指令系統(tǒng)

1.掌握指令與偽指令的正確格式。

2.掌握七種尋址方式的使用及尋址方式的含義。

3.掌握

五類指令的功能和使用,特別是傳送指令。

4.理解書中所列例題與習(xí)題。

4匯編語言程序設(shè)計舉例

本章為MCS-51的一些常用偽指令,介紹順序結(jié)構(gòu)程序設(shè)計、分支結(jié)構(gòu)程序設(shè)計、循環(huán)結(jié)構(gòu)程序設(shè)計和子程序的設(shè)計。

1.程序設(shè)計的基本步驟、各種基本的結(jié)構(gòu)化程序設(shè)計方法;讀懂較復(fù)雜的常用程序。

2.掌握數(shù)據(jù)傳送指令的編寫。

3.理解算術(shù)運(yùn)算程序設(shè)計。

4.理解數(shù)碼轉(zhuǎn)換程序設(shè)計。

5.理解查表程序設(shè)計。

6.理解子程序設(shè)計和參數(shù)傳遞。

7.理解邏輯運(yùn)算程序設(shè)計

5中斷系統(tǒng)

1.掌握有關(guān)中斷、中斷源、中斷優(yōu)先級等概念。

2.掌握中斷響應(yīng)過程。

3.掌握中斷優(yōu)先級排列。

4.掌握中斷允許寄存器IE、中斷優(yōu)先級寄存器IP各位的含義及設(shè)置。

5.掌握外部中斷的兩種觸發(fā)方式:電平觸發(fā)、邊沿觸發(fā)。

6定時/計數(shù)器

1.掌握定時器/計數(shù)器的四種工作方式及有何不同。

2.掌握TMOD和TCON中各位的含義、作用。

4.掌握不同工作方式計數(shù)初值與定時時間的關(guān)系,即能根據(jù)定時時間算出計數(shù)初值,完成定時器的初始化編程和簡單應(yīng)用編程。

7串行通信

1.理解有關(guān)通信、協(xié)議的概念。

2.理解串行口的四種工作方式。

3.掌握SBUF的含義及作用。

4.了解串行口的工作原理。

5.了解SCON中每一位的含義及SMOD位的作用。

6.掌握串行通信總線RS-232C標(biāo)準(zhǔn)、RS-232C電平轉(zhuǎn)換。

7.了解RS-232C與MCS-51的接口。

8系統(tǒng)擴(kuò)展技術(shù)

1.掌握總線、驅(qū)動、鎖存和譯碼、地址重疊的概念。

2.掌握程序存儲器的擴(kuò)展:EPROM程序存儲器及其擴(kuò)展方法。

3.掌握數(shù)據(jù)存儲器的擴(kuò)展:靜態(tài)存儲器SRAM及其擴(kuò)展方法。

4.掌握簡單I/O口的擴(kuò)展。

5.掌握8255A可編程并行接口:結(jié)構(gòu)、控制字、工作方式、與8255A的接口方法。

9A/D和D/A轉(zhuǎn)換器接口技術(shù)

1.掌握DAC0832與單片機(jī)的接口方法與編程。

2.掌握ADC0809與單片機(jī)的接口方法與編程。

10鍵盤/顯示接口技術(shù)

1.掌握LED顯示器結(jié)構(gòu)、工作原理和顯示方式。

2.掌握鍵盤接口原理。

3.理解LED顯示器與80C51單片機(jī)接口。

4.理解鍵輸入程序設(shè)計方法。

5.了解行列式鍵盤與80C51單片機(jī)接口。

11、功率接口技術(shù)

1.掌握簡單開關(guān)量接口、光電耦合接口和繼電器接口。

2.晶閘管與故態(tài)繼電器的應(yīng)用接口。

12、單片機(jī)系統(tǒng)設(shè)計技術(shù)

掌握單片機(jī)系統(tǒng)的設(shè)計、開發(fā)、調(diào)試的原則、步驟及方法。

13、實(shí)用舉例

了解一兩個典型的單片機(jī)開發(fā)應(yīng)用系統(tǒng)的設(shè)計思想和實(shí)現(xiàn)方法。

14、新型單片機(jī)介紹

了解MCS-51常見8位單片機(jī)。

第二部分考試考核改革方案

一、考試考核要求

《單片機(jī)技術(shù)及應(yīng)用》選擇具有代表性的、使用較為廣泛的MCS-51系列單片機(jī)進(jìn)行學(xué)習(xí)(具體以80C51為例),介紹了80C51單片機(jī)的硬件組成、軟件編程及一般應(yīng)用系統(tǒng)組成。通過本課程的學(xué)習(xí),要求掌握80C51單片機(jī)的系統(tǒng)結(jié)構(gòu)、指令系統(tǒng)、程序設(shè)計方法、系統(tǒng)擴(kuò)展方法、單片機(jī)常用接口等應(yīng)用技術(shù)。本課程的教學(xué)過程由面授輔導(dǎo)、自學(xué)、實(shí)驗(yàn)及作業(yè)四個環(huán)節(jié)組成,因此本課程考試考核要求為:

1.作業(yè)、實(shí)驗(yàn)成績與期末考試成績共同評定為課程總成績。

2.作業(yè)、實(shí)驗(yàn)占課程總分的60,期末理論考試占總分的40。

為使學(xué)生不把注意力僅僅放在期末考試上,培養(yǎng)學(xué)生系統(tǒng)學(xué)習(xí)的能力,加強(qiáng)學(xué)生各方面能力的培養(yǎng),平時、實(shí)驗(yàn)課、作業(yè)、考試都納入本課程的成績評定。平時的成績包括出勤、課堂提問和隨堂測試。期末考試可以選擇筆試、口試和進(jìn)行實(shí)際實(shí)驗(yàn)、設(shè)計等多種形式。

二、平時成績考核要求及說明

1.每章作業(yè)按要求完成后交教師批改,完成作業(yè)80為12分(及格);所有作業(yè)均完成,且質(zhì)量較好者,20分(滿分)。中間情況酌情給分。

2.每次實(shí)驗(yàn)均能按照教師安排進(jìn)行,實(shí)驗(yàn)態(tài)度好,至少完成5個實(shí)驗(yàn)且實(shí)驗(yàn)報告完整,為18分(及格);能基本獨(dú)立完成6個或以上實(shí)驗(yàn),實(shí)驗(yàn)報告完整、無誤,實(shí)驗(yàn)質(zhì)量高,30分(滿分)。中間情況酌情給分。如果實(shí)驗(yàn)有創(chuàng)新的特點(diǎn),酌情加分。

3.作業(yè)與實(shí)驗(yàn)的平均分為平時成績,滿分50分。

4.課程設(shè)計單獨(dú)計算成績,考評方法見其大綱。

三、理論考試說明

1.單片機(jī)技術(shù)及應(yīng)用理論考試,采用閉卷筆試形式,考試時間120分鐘。

2.期末考試試題根據(jù)教學(xué)大綱,其范圍和難度按照本方案中制訂的考試考核內(nèi)容和要求確定??荚嚸}覆蓋考試大綱要求范圍。

3.期末考試試題類型有以下幾種:

①填空題;

②選擇題;

③判斷題;

④簡答題

⑤綜合應(yīng)用題。

四、考試考核要求層次

按照教學(xué)大綱的要求,理論考試要求分為掌握、理解和了解三個層次。

掌握:

對于本課程的重點(diǎn)內(nèi)容要求學(xué)生達(dá)到掌握的程度。即能夠全面、深入理解和熟練掌握所學(xué)內(nèi)容,并能夠用其分析、初步設(shè)計和解答與應(yīng)用相關(guān)的問題,能夠舉一反三。要求學(xué)生掌握的內(nèi)容也就是考試的主要內(nèi)容,在考試中所占比例約70。

理解:

對于本課程的一般內(nèi)容要求學(xué)生能夠理解。即要求學(xué)生能夠較好地理解所學(xué)內(nèi)容,并且對所涉及的內(nèi)容能夠進(jìn)行簡單分析和判斷。要求學(xué)生理解的內(nèi)容也是考試的內(nèi)容,在考試中所占比例約25。

了解:

對于本課程的次要內(nèi)容要求學(xué)生能夠了解。要求學(xué)生了解的內(nèi)容,一般是指在眼下不必進(jìn)一步深入和擴(kuò)展,有些也許需要學(xué)生自己今后在工作中進(jìn)行深入研究。對要求了解的內(nèi)容,在考試中占較小比例,不超過5。

實(shí)驗(yàn)五:按鍵電路、顯示電路實(shí)驗(yàn)

一、實(shí)驗(yàn)?zāi)康模?/p>

1.掌握獨(dú)立式按鍵電路與矩陣式按鍵電路的設(shè)計方法。

2.掌握數(shù)碼管顯示電路的工作原理

3.掌握源程序編輯軟件UltraEdit,編譯軟件KeilC51、仿真軟件Proteus的使用方法

4.掌握硬件仿真器ME-52A的使用方法

二、實(shí)驗(yàn)器材:

1.單片機(jī)實(shí)驗(yàn)板

2.單片機(jī)硬件仿真器ME-51A

3.計算機(jī)

4.電源

三、實(shí)驗(yàn)要求:

1.電路如圖5所示,用單片機(jī)的P3口所接的四個獨(dú)立式按鍵控制p1口流水燈花樣的方法;具體表現(xiàn)為:p3.0、P3.1、P3.2、P3.3四個小按鍵分別實(shí)現(xiàn)了四個控制:

(1)跑燈:即P1.0---1.7亮點(diǎn)流動:

(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矩陣式鍵盤作為輸入,在P1口所接的數(shù)碼管上顯示出每個按鍵的0~F序號,鍵盤的布局如下表所示:

F

E

D

C

B

A

9

8

7

6

5

4

3

2

1

四、實(shí)驗(yàn)原理:

1.獨(dú)立式按鍵電路顯示如圖5所示,從圖中可看出,判斷有無鍵按下,只要檢測P3.0~P3.3相應(yīng)端口的高低電平即可,若檢測有某一端口為低電平,表明該端口有按鍵按下,經(jīng)延時消抖后轉(zhuǎn)去執(zhí)行相應(yīng)的功能子程序。若為高電平,表明無鍵按1.獨(dú)立式按鍵電路如圖5所示,下,繼續(xù)檢測。

示例程序如下:

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;消岸抖動

JBP3.0,STAR1

WAITL0:JNBP3.0,WAITL0;等待鍵釋放

SETBF0

FUN01:LCALLFUN00

LCALLSTAR1

LJMPFUN01

FUN1:LCALLDL10MS;消岸抖動

JBP3.1,STAR1

WAITL1:JNBP3.1,WAITL1;等待鍵釋放

SETBF0

FUN10:LCALLFUN11

LCALLSTAR1

LJMPFUN10

FUN2:LCALLDL10MS;消岸抖動

JBP3.2,STAR1

WAITL2:JNBP3.2,WAITL2;等待鍵釋放

SETBF0

FUN20:LCALLFUN22

LCALLSTAR1

LJMPFUN20

FUN3:LCALLDL10MS;消岸抖動

JBP3.3,STAR1

WAITL3:JNBP3.3,WAITL3;等待鍵釋放

CLRF0

MOVP1,#0FFH;關(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

;____________;

;延時程序;

;____________;

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)行按鍵的識別檢測,并將對應(yīng)按鍵的鍵號用查表指令將對應(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;無鍵按下,繼續(xù)檢測

MOVA,R3;掃描下一行

SETBC

RRCA

MOVR3,A

JCSCAN1;4行是否掃描完,未完,繼續(xù)

LJMPSCAN

KEYIN:MOVR7,#10;削除抖動

D2:MOVR6,#248

DJNZR6,$

DJNZR7,D2

D3:MOVA,P2;按鍵放開否?

XRLA,R4

JZD3

MOVA,R1

MOVDPTR,#TABLE;到TABLE中取碼

MOVCA,@A DPTR

MOVP1,A

LJMPSCAN

TABLE:DB0C0H,0F9H,0A4H,0B0H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH

END

DB80H,90H,88H,83H

DB0C6H,0A1H,86H,8EH

END

五、實(shí)驗(yàn)步驟:

1.運(yùn)行UltraEdit-32源程序編輯軟件,輸入、編輯匯編語言源程序。

2.運(yùn)行KeiluVision2源程序編譯軟件,對源程序進(jìn)行編譯,得到目標(biāo)代碼文件。

3.運(yùn)行Proteus模擬仿真軟件,打開已繪制好的仿真電路原理圖,進(jìn)行模擬仿真。

4.把硬件仿真器ME-52A與單片實(shí)驗(yàn)板連接好,再用硬件仿真器進(jìn)行仿真驗(yàn)證。

六、實(shí)驗(yàn)分析與總結(jié)

1.用仿真系統(tǒng)調(diào)試簡單程序結(jié)構(gòu)、分支程序結(jié)構(gòu)、循環(huán)程序結(jié)構(gòu)、子程序結(jié)構(gòu)和中斷結(jié)構(gòu)的關(guān)鍵在于,如何將對程序的分析理解和開發(fā)系統(tǒng)提供的基本功能有機(jī)地結(jié)合起來,其前提條件是必須對源程序的作用、結(jié)構(gòu)特點(diǎn)、運(yùn)行過程與結(jié)果有較全面的認(rèn)識,并能根據(jù)程序運(yùn)行過程中出現(xiàn)的現(xiàn)象和結(jié)果分析并判斷產(chǎn)生各種故障現(xiàn)象的原因,再運(yùn)用排除法逐一檢驗(yàn)各種判斷是否準(zhǔn)確。

2.掌握程序結(jié)構(gòu)特點(diǎn)的基礎(chǔ)上,合理選擇觀測點(diǎn),通過觀察在觀測點(diǎn)處參數(shù)及路徑的變化檢驗(yàn)程序運(yùn)行的結(jié)果。

3.高調(diào)試程序的效率,應(yīng)對單片機(jī)開發(fā)系統(tǒng)所提供的幾種程序運(yùn)行調(diào)試方式有

足夠的了解并能熟練地運(yùn)用。例如,在調(diào)試過程中,若要觀察最終結(jié)果,則可選擇全速運(yùn)行調(diào)試;若要觀察相關(guān)指令的運(yùn)行結(jié)果或運(yùn)行路徑的變化過程,則可選擇單步運(yùn)行;若要檢查子程序的運(yùn)行過程,則可選擇跟蹤運(yùn)行調(diào)試;若要檢查循環(huán)程序或中斷服務(wù)程序,則可選擇斷點(diǎn)運(yùn)行調(diào)試;若要定點(diǎn)檢查程序運(yùn)行到某處的結(jié)果時,則可選擇快速運(yùn)行到光標(biāo)處調(diào)試。但實(shí)際中究竟選用哪種方法更適宜或哪幾種方法結(jié)合使用更快捷,將隨著分析能力與操作的熟練程度逐步提高。4.程序運(yùn)行結(jié)果是否正確時,應(yīng)運(yùn)用單片機(jī)開發(fā)系統(tǒng)所提供的交互界面,將程序運(yùn)行過程中程序計數(shù)器PC(地址)的變化、各單元(內(nèi)部RAM和外部RAM)內(nèi)容的變化、特殊功能寄存器內(nèi)容的變化、堆棧指針SP內(nèi)容的變化與程序的理論分析結(jié)果相對照。

5.程序和調(diào)試程序時,需要多次反復(fù)的過程,并非一次就能排除全部故障,特別是單片機(jī)應(yīng)用系統(tǒng)的硬件電路和匯編程序相結(jié)合的綜合調(diào)試就更加復(fù)雜,因此,必須通過反復(fù)調(diào)試,不斷修改硬件和軟件,直到最終符合設(shè)計要求為止。如果在調(diào)試中能夠根據(jù)實(shí)驗(yàn)現(xiàn)象預(yù)先對產(chǎn)生故障的原因加以判斷和分析,并制定出相應(yīng)的調(diào)試方法和步驟,可縮小排除故障的范圍,提高調(diào)試效率。

七、思考與練習(xí)

填空題

1、設(shè)X=5AH,Y=36H,則X與Y“或”運(yùn)算為__7EH_______,X與Y的“異或”運(yùn)算為___6CH_____。

2、若機(jī)器的字長為8位,X=17,Y=35,則X+Y=__110100_____,X-Y=_11101110______(要求結(jié)果寫出二進(jìn)制形式)。

3、單片機(jī)的復(fù)位操作是____高電平______(高電平/低電平),單片機(jī)復(fù)位后,堆棧指針SP的值是___07h_____。

4、單片機(jī)中,常用作地址鎖存器的芯片是__74HC373____________,常用作地址譯碼器芯片是_____74HC138____________。

5、若選擇內(nèi)部程序存儲器,應(yīng)該設(shè)置為_____高_(dá)______(高電平/低電平),那么,PSEN信號的處理方式為___不用__________________。

6、單片機(jī)程序的入口地址是____0000H__________,外部中斷1的入口地址是______0013H_________。

7、若采用6MHz的晶體振蕩器,則MCS-51單片機(jī)的振蕩周期為__0.5us_______,機(jī)器周期為_____2us__________。

8、擴(kuò)展芯片的選擇方法有兩種,它們分別是___線選法_______________和_____譯碼法__________。

9、單片機(jī)的內(nèi)部RAM區(qū)中,可以位尋址的地址范圍是____20H~2FH______________,特殊功能寄存器中,可位尋址的地址是___是能被8整除的地址_________________。

10、子程序返回指令是___ret______,中斷子程序返回指令是__reti。

11、8051單片機(jī)的存儲器的最大特點(diǎn)是內(nèi)部RAM與外部RAM分開編址。

12、8051最多可以有32個并行輸入輸出口,最少也可以有8個并行口。

13、函數(shù)是C語言的基本單位。

14、串行口方式2接收到的第9位數(shù)據(jù)送SCON寄存器的RB8位中保存。

15、MCS-51內(nèi)部提供3個可編程的16位定時/計數(shù)器,定時器有4種工作方式。

16、一個函數(shù)由兩部分組成,即說明部分和語句部分。

17、串行口方式3發(fā)送的第9位數(shù)據(jù)要事先寫入SCON寄存器的TB8位。

18、利用8155H可以擴(kuò)展3個并行口,256個RAM單元。

19、C語言中輸入和輸出操作是由庫函數(shù)scanf和printf等函數(shù)來完成。

二、選擇題

1、C語言中最簡單的數(shù)據(jù)類型包括(B)。

A、整型、實(shí)型、邏輯型B、整型、實(shí)型、字符型

C、整型、字符型、邏輯型D、整型、實(shí)型、邏輯型、字符型

2、當(dāng)MCS-51單片機(jī)接有外部存儲器,P2口可作為(C)。

A、數(shù)據(jù)輸入口B、數(shù)據(jù)的輸出口

C、準(zhǔn)雙向輸入/輸出口D、輸出高8位地址

3、下列描述中正確的是(D)。

A、程序就是軟件B、軟件開發(fā)不受計算機(jī)系統(tǒng)的限制

C、軟件既是邏輯實(shí)體,又是物理實(shí)體D、軟件是程序、數(shù)據(jù)與相關(guān)文檔的集合

4、下列計算機(jī)語言中,CPU能直接識別的是(D)。

A、自然語言B、高級語言C、匯編語言D、機(jī)器語言

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語言實(shí)現(xiàn)的算法必須要有輸入和輸出操作

B、用C語言實(shí)現(xiàn)的算法可以沒有輸出但必須要有輸入

C、用C程序?qū)崿F(xiàn)的算法可以沒有輸入但必須要有輸出

D、用C程序?qū)崿F(xiàn)的算法可以既沒有輸入也沒有輸出

7、定時器/計數(shù)器工作方式1是(D)。

A、8位計數(shù)器結(jié)構(gòu)B、2個8位計數(shù)器結(jié)構(gòu)

C、13位計數(shù)結(jié)構(gòu)D、16位計數(shù)結(jié)構(gòu)

8、C語言提供的合法的數(shù)據(jù)類型關(guān)鍵字是(B)。

A、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ù)的存儲結(jié)構(gòu)是指(D)。

A、存儲在外存中的數(shù)據(jù)B、數(shù)據(jù)所占的存儲空間量

C、數(shù)據(jù)在計算機(jī)中的順序存儲方式D、數(shù)據(jù)的邏輯結(jié)構(gòu)在計算機(jī)中的表示

12、下列關(guān)于棧的描述中錯誤的是(C)。

A、棧是先進(jìn)后出的先性表B、棧只能順序存儲

C、棧具有記憶作用D、對棧的插入和刪除操作中,不需要改變棧底指針

13、在寄存器間接尋址方式中,間址寄存器中存放的數(shù)據(jù)是(B)。

A、參與操作的數(shù)據(jù)B、操作數(shù)的地址值

C、程序的轉(zhuǎn)換地址D、指令的操作碼

14、MCS-51單片機(jī)的復(fù)位信號是(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時,其復(fù)位持續(xù)時間應(yīng)該超過(B)。

A、2μsB、4μsC、8μsD、1ms

17、以下選項(xiàng)中可作為C語言合法常量的是(A)

A、-80B、-080C、-8e1.0D、-80.0e

18、能夠用紫外光擦除ROM中程序的只讀存儲器稱為(C)。

A、掩膜ROMB、PROMC、EPROMD、EEPROM

19、以下不能定義為用戶標(biāo)識符是(D)。

A、MainB、_0C、_intD、sizeof

20、下選項(xiàng)中,不能作為合法常量的是(B)。//冪不能為小數(shù)

A、1.234e04B、1.234e0.4C、1.234e 4D、1.234e0

21、以下敘述中錯誤的是(C)

A、對于double類型數(shù)組,不可以直接用數(shù)組名對數(shù)組進(jìn)行整體輸入或輸出

B、數(shù)組名代表的是數(shù)組所占存儲區(qū)的首地址,其值不可改變

C、當(dāng)程序執(zhí)行中,數(shù)組元素的下標(biāo)超出所定義的下標(biāo)范圍時,系統(tǒng)將給出“下標(biāo)越界”的出錯信息

D、可以通過賦初值的方式確定數(shù)組元素的個數(shù)

22、以下與函數(shù)fseek(fp,0L,SEEK_SET)有相同作用的是(D)

A、feof(f

p)B、ftell(fp)C、fgetc(fp)D、rewind(fp)

23、存儲16×16點(diǎn)陣的一個漢字信息,需要的字節(jié)數(shù)為(A)

A、32B、64C、128D、256

24、已知1只共陰極LED顯示器,其中a筆段為字形代碼的最低位,若需顯示數(shù)字1,則它的字形代碼應(yīng)為(B)。

A、06HB、F9HC、30HD、CFH

25、在C語言中,合法的長整型常數(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程序存儲器芯片要(B)地址線。

A、8根B、13根C、16根D、20根

29、設(shè)MCS-51單片機(jī)晶振頻率為12MHz,定時器作計數(shù)器使用時,其最高的輸入計數(shù)頻率應(yīng)為(C)

A、2MHzB、1MHzC、500kHzD、250kHz

30、下列數(shù)據(jù)字定義的數(shù)表中,(A)是錯誤的。

A、DW“AA”B、DW“A”C、DW“OABC”D、DWOABCH

三、判斷題

(√)1、在對某一函數(shù)進(jìn)行多次調(diào)用時,系統(tǒng)會對相應(yīng)的自動變量重新分配存儲單元。

(×)2、在C語言的復(fù)合語句中,只能包含可執(zhí)行語句。

(√)3、自動變量屬于局部變量。

(×)4、Continue和break都可用來實(shí)現(xiàn)循環(huán)體的中止。

(√)5、字符常量的長度肯定為1。

(×)6、在MCS-51系統(tǒng)中,一個機(jī)器周期等于1.5μs。

(√)7、C語言允許在復(fù)合語句內(nèi)定義自動變量。

(√)8、若一個函數(shù)的返回類型為void,則表示其沒有返回值。

(×)9、所有定義在主函數(shù)之前的函數(shù)無需進(jìn)行聲明。

(×)10、定時器與計數(shù)器的工作原理均是對輸入脈沖進(jìn)行計數(shù)。

(×)11、END表示指令執(zhí)行到此結(jié)束。

(√)12、ADC0809是8位逐次逼近式模/數(shù)轉(zhuǎn)換接口。

(√)13、MCS-51的相對轉(zhuǎn)移指令最大負(fù)跳距是127B。

(×)14、MCS-51的程序存儲器只是用來存放程序的。

(√)15、TMOD中的GATE=1時,表示由兩個信號控制定時器的的啟停。

(×)16、MCS-51的特殊功能寄存器分布在60H~80H地址范圍內(nèi)。

(×)17、MCS-51系統(tǒng)可以沒有復(fù)位電路。

(×)18、片內(nèi)RAM與外部設(shè)備統(tǒng)一編址時,需要專門的輸入/輸出指令。

(√)19、鎖存器、三態(tài)緩沖寄存器等簡單芯片中沒有命令寄存和狀態(tài)寄存等功能。

(√)20、使用8751且=1時,仍可外擴(kuò)64KB的程序存儲器。

四、簡答題

1、在使用8051的定時器/計數(shù)器前,應(yīng)對它進(jìn)行初始化,其步驟是什么?

答:(1)確定T/C的工作方式——編程TMOD寄存器;

(2)計算T/C中的計數(shù)初值,并裝載到TH和TL;

(3)T/C在中斷方式工作時,須開CPU中斷和源中斷——編程IE寄存器;

(4)啟動定時器/計數(shù)器——編程TCON中TR1或TR0位。

2、什么是重入函數(shù)?重入函數(shù)一般什么情況下使用,使用時有哪些需要注意的地方?答:多個函數(shù)可以同時使用的函數(shù),稱為重入函數(shù)。

通常情況下,C51函數(shù)不能被遞歸調(diào)用,也不能應(yīng)用導(dǎo)致遞歸調(diào)用的結(jié)構(gòu)。有此限制是由于函數(shù)參數(shù)和局部變量是存儲在固定的地址單元中。重入函數(shù)特性允許你聲明一個重入函數(shù)。即可以被遞歸調(diào)用的函數(shù)。

重入函數(shù)可以被遞歸調(diào)用,也可以同時被兩個或更多的進(jìn)程調(diào)用。重入函數(shù)在實(shí)時應(yīng)用中及中斷服務(wù)程序代碼和非中斷程序代碼必須共用一個函數(shù)的場合中經(jīng)常用到。

3、8051引腳有多少I/O線?他們和單片機(jī)對外的地址總線和數(shù)據(jù)總線有什么關(guān)系?地址總線和數(shù)據(jù)總線各是幾位?

答:8051引腳共有40個引腳,8051的地址總線由P2和P0口提供,P2口是地址總線的高8位,P0口是地址總線的低8位;數(shù)據(jù)總線由P0口提供;P0口的地址總線和數(shù)據(jù)總線是分時進(jìn)行的,P0口的地址總線需要外接地址鎖存器完成地址鎖存。

地址總線共16位,數(shù)據(jù)總線是8位。

4、在有串行通信時,定時器/計數(shù)器1的作用是什么,怎樣確定串行口的波特率?

答:在有串行通信時,定時器/計數(shù)器1的作用是串行口發(fā)生器。

串行口的波特率根據(jù)串行口的工作方式具有不同的計算方式:

方式0的波特率固定為晶體振蕩器的十二分之一;

方式1的波特率=2SMOD.(定時器1的溢出率)/32;

方式2波特率=2SMOD.(fosc/64);

方式3波特率同方式1(定時器l作波特率發(fā)生器)。

5、如何消除鍵盤的抖動?怎樣設(shè)置鍵盤中的復(fù)合鍵?

答:由于按鍵是機(jī)械開關(guān)結(jié)構(gòu),所以當(dāng)用手按下其中一個鍵時,往往會出現(xiàn)所按鍵在閉合位置和斷開位置之間發(fā)生跳幾下后才會穩(wěn)定到閉合狀態(tài)的情況。在釋放一個鍵時,也會出現(xiàn)類似的情況,這就是鍵的抖動,抖動的持續(xù)時間不一,但通常不會大于10ms。

若抖動問題不解決,就會引起對閉合鍵的多次讀入。對于鍵抖動最方便的解決方法就是當(dāng)發(fā)現(xiàn)有鍵按下后,不是立即進(jìn)行掃描,而是延時大約10ms后再進(jìn)行。由于一個鍵按下的時間一般會持續(xù)上百毫秒,所以延遲10ms后再掃描處理并不遲。

復(fù)合鍵可以仿照計算機(jī)復(fù)合鍵的處理方法,通??梢约僭O(shè)一個鍵具有復(fù)合功能,再與其它減的鍵值組合成復(fù)合鍵。

1、矩陣式鍵盤的結(jié)構(gòu)與工作原理

在鍵盤中按鍵數(shù)量較多時,為了減少I/O口的占用,通常將按鍵排列成矩陣形式,如圖1所示。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接。這樣,一個端口(如P1口)就可以構(gòu)成4*4=16個按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構(gòu)成20鍵的鍵盤,而直接用端口線則只能多出一鍵(9鍵)。由此可見,在需要的鍵數(shù)比較多時,采用矩陣法來做鍵盤是合理的。

矩陣式結(jié)構(gòu)的鍵盤顯然比直接法要復(fù)雜一些,識別也要復(fù)雜一些,上圖中,列線通過電阻接正電源,并將行線所接的單片機(jī)的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當(dāng)按鍵沒有按下時,所有的輸出端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會被拉低,這樣,通過讀入輸入線的狀態(tài)就可得知是否有鍵按下了。具體的識別及編程方法如下所述。

2、矩陣式鍵盤的按鍵識別方法

確定矩陣式鍵盤上何鍵被按下介紹一種“行掃描法”。

行掃描法行掃描法又稱為逐行(或列)掃描查詢法,是一種最常用的按鍵識別方法,如上圖所示鍵盤,介紹過程如下。

1、判斷鍵盤中有無鍵按下將全部行線Y0-Y3置低電平,然后檢測列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個按鍵之中。若所有列線均為高電平,則鍵盤中無鍵按下。

2、判斷閉合鍵所在的位置在確認(rèn)有鍵按下后,即可進(jìn)入確定具體閉合鍵的過程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時,其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測各列線的電平狀態(tài)。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。

下面給出一個具體的例子:

圖仍如上所示。8031單片機(jī)的P1口用作鍵盤I/O口,鍵盤的列線接到P1口的低4位,鍵盤的行線接到P1口的高4位。列線P1.0-P1.3分別接有4個上拉電阻到正電源 5V,并把列線P1.0-P1.3設(shè)置為輸入線,行線P1.4-P.17設(shè)置為輸出線。4根行線和4根列線形成16個相交點(diǎn)。

1、檢測當(dāng)前是否有鍵被按下。檢測的方法是P1.4-P

1.7輸出全“0”,讀取P1.0-P1.3的狀態(tài),若P1.0-P1.3為全“1”,則無鍵閉合,否則有鍵閉合。

2、去除鍵抖動。當(dāng)檢測到有鍵按下后,延時一段時間再做下一步的檢測判斷。

3、若有鍵被按下,應(yīng)識別出是哪一個鍵閉合。方法是對鍵盤的行線進(jìn)行掃描。P1.4-P1.7按下述4種組合依次輸出:

P1.71110

P1.61101

P1.51011

P1.40111

在每組行輸出時讀取P1.0-P1.3,若全為“1”,則表示為“0”這一行沒有鍵閉合,否則有鍵閉合。由此得到閉合鍵的行值和列值,然后可采用計算法或查表法將閉合鍵的行值和列值轉(zhuǎn)換成所定義的鍵值

4、為了保證鍵每閉合一次CPU僅作一次處理,必須卻除鍵釋放時的抖動。

鍵盤掃描程序:

從以上分析得到鍵盤掃描程序的流程圖如圖2所示。程序如下

SCAN:MOVP1,#0FH

MOVA,P1

ANLA,#0FH

CJNEA,#0FH,NEXT1

SJMPNEXT3

NEXT1:ACALLD20MS

MOVA,#0EFH

NEXT2:MOVR1,A

MOVP1,A

MOVA,P1

ANLA,#0FH

CJNEA,#0FH,KCODE;

MOVA,R1

SETBC

RLCA

JCNEXT2

NEXT3:MOVR0,#00H

RET

KCODE:MOVB,#0FBH

NEXT4:RRCA

INCB

JCNEXT4

MOVA,R1

SWAPA

NEXT5:RRCA

INCB

INCB

INCB

INCB

JCNEXT5

NEXT6:MOVA,P1

ANLA,#0FH

CJNEA,#0FH,NEXT6

MOVR0,#0FFH

RET

鍵盤處理程序就作這么一個簡單的介紹,實(shí)際上,鍵盤、顯示處理是很復(fù)雜的,它往往占到一個應(yīng)用程序的大部份代碼,可見其重要性,但說到,這種復(fù)雜并不來自于單片機(jī)的本身,而是來自于操作者的習(xí)慣等等問題,因此,在編寫鍵盤處理程序之前,最好先把它從邏輯上理清,然后用適當(dāng)?shù)乃惴ū硎境鰜恚詈笤偃懘a,這樣,才能快速有效地寫好代碼。

到本課為止,本站教程暫告一個段落!感謝大家的關(guān)心和支持!

矩陣按鍵部分由16個輕觸按鍵按照4行4列排列,連接到JP50端口。將行線所接的單片機(jī)的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當(dāng)按鍵沒有按下時,所有的輸出端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會被拉低,這樣,通過讀入輸入線的狀態(tài)就可得知是否有鍵按下了。確定矩陣式鍵盤上何鍵被按下,介紹一種“行掃描法”。行掃描法行掃描法又稱為逐行(或列)掃描查詢法,是一種最常用的按鍵識別方法.判斷鍵盤中有無鍵按下:將全部行線置低電平,然后檢測列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個按鍵之中。若所有列線均為高電平,則鍵盤中無鍵按下。判斷閉合鍵所在的位置:在確認(rèn)有鍵按下后,即可進(jìn)入確定具體閉合鍵的過程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時,其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測各列線的電平狀態(tài)。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。

下面給出一個具體的例子:

電路圖路徑:G:\圖片\電路圖片\xl100097.jpg

8031單片機(jī)的P1口用作鍵盤I/O口,鍵盤的列線接到P1口的低4位,鍵盤的行線接到P1口的高4位。列線P1.0-P1.3設(shè)置為輸入線,行線P1.4-P.17設(shè)置為輸出線。4根行線和4根列線形成16個相交點(diǎn)。

1.檢測當(dāng)前是否有鍵被按下。檢測的方法是P1.4-P1.7輸出全“0”,讀取P1.0-P1.3的狀態(tài),若P1.0-P1.3為全“1”,則無鍵閉合,否則有鍵閉合。

2.去除鍵抖動。當(dāng)檢測到有鍵按下后,延時一段時間再做下一步的檢測判斷。

3.若有鍵被按下,應(yīng)識別出是哪一個鍵閉合。方法是對鍵盤的行線進(jìn)行掃描。P1.4-P1.7按下述4種組合依次輸出:

P1.71110

P1.61101

P1.51011

P1.40111

在每組行輸出時讀取P1.0-P1.3,若全為“1”,則表示為“0”這一行沒有鍵閉合,否則有鍵閉合。由此得到閉合鍵的行值和列值,然后可采用計算法或查表法將閉合鍵的行值和列值轉(zhuǎn)換成所定義的鍵值。

4.為了保證鍵每閉合一次CPU僅作一次處理,必須去除鍵釋放時的抖動。

實(shí)驗(yàn)?zāi)康模和ㄟ^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個鍵盤顯示分別顯示數(shù)字123A456B789C*0#D

;鍵盤口P1,數(shù)碼管顯示第二位p21,數(shù)碼管段位p0口

org0000h

ajmpmain

org0030h

main:

movdptr,#tab;將表頭放入DPTR

lcallkey;調(diào)用鍵盤掃描程序

movca,@a dptr;查表后將鍵值送入ACC

movp0,a;將Acc值送入P0口

CLRP2.1;開顯示

ljmpmain;返回反復(fù)循環(huán)顯示

KEY:

LCALLKS;調(diào)用檢測按鍵子程序

JNZK1;有鍵按下繼續(xù)

LCALLDELAY2;無鍵按調(diào)用延時去抖

AJMPKEY;返回繼續(xù)檢測按鍵

K1:LCALLDELAY2

LCALLDELAY2;有鍵按下延時去抖動

LCALLKS;再調(diào)用檢測按鍵程序

JNZK2;確認(rèn)有按下進(jìn)行下一步

AJMPKEY;無鍵按下返回繼續(xù)檢測

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)用延時去抖動程序

LCALLKS;調(diào)用按鍵檢測程序

JNZK4;按鍵沒有松

開繼續(xù)返回檢測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延時去抖動子程序

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輪流顯示鍵盤因?yàn)闊o法表達(dá)*#就用H表示,B用8表示

end

這是我做成功的4X4鍵盤掃描源程序,P1.0-P1.3做四根列線,P1.4-P1.7做四根行線。

數(shù)碼管的字型表是按照標(biāo)準(zhǔn)接法做的,按對應(yīng)的按鍵數(shù)碼管顯示對應(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個位十位顯示轉(zhuǎn)換控制

;P1口接8個開關(guān)模擬數(shù)據(jù)

;P1.0-P1.3為個位開關(guān)量輸入

;P1.4-P1.7為十位開關(guān)量輸入

;此程序僅供參考

;功能P1口接8個開關(guān)輸入量4個一組,分別為個位,十位輸入

;P0口接一個數(shù)碼管,依次顯示輸入量。P3.1控制是否讀入

;開關(guān)量。P2.6P2.7控制是否顯示個位

或十位

ORG100h

LJMPSTAR

STAR:MOVP1,#0FFH

SETBP3.1數(shù)據(jù)讀入標(biāo)志

MOVR0,#100,循環(huán)工作次數(shù)

LOOP:JBP3.1,$P3.1低電平時,采集P1口數(shù)據(jù)開關(guān)量處理顯示階段不再應(yīng)答P3.1

MOVA,P1

PUSHACC

ANLA,#0FH取個位數(shù)值

MOVR1,A個位數(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個位顯示

ACALLDELAY500MS

SETBP2.6

MOVA,R2

MOVCA,@A DPTR

MOVP0,A

CLRP2.7十位顯示

ACALLDELAY500MS

SETBP2.7

DJNZR0,LOOP

DELAY500MS:延時500毫秒子程略

RET

TABLED:DB0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8hDB80H,90H,88h,83h,0c6h,0a1h,86h,8eh

END

#include

typedefunsignedcharBYTE;

BYTEcodeTABLED[16]={0Xc0,0Xf9,0Xa4,0Xb0,0X99,0X92,0X82,0X0f8,0X80,0X90,0X88,0X83,0Xc6,0Xa1,0X86,0X8e};

BYTEDATled;

sbitP26=P2^6;

sbitP27=P2^7;

sbitP31=P3^1;

intTIME;

voidtimedelay(DTIME)

intDTIME;

{

intI;

for(I=0;I4;

P0=TABLED[TEMP];

P27=0;

timedelay(TIME);

P27=1;

}

}

}

1.實(shí)驗(yàn)任務(wù)

在8X8 LED點(diǎn)陣上顯示柱形,讓其先從左到右平滑移動三次,其次從右到左平滑移動三次,再次從上到下平滑移動三次,最后從下到上平滑移動三次,如此循環(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è)計內(nèi)容

(1).8X8 點(diǎn)陣LED工作原理說明

8X8點(diǎn)陣LED結(jié)構(gòu)如下圖所示

圖4.24.2

從圖4.24.2中可以看出,8X8點(diǎn)陣共需要64個發(fā)光二極管組成,且每個發(fā)光二極管是放置在行線和列線的交叉點(diǎn)上,當(dāng)對應(yīng)的某一列置1電平,某一行置0電平,則相應(yīng)的二極管就亮;因此要實(shí)現(xiàn)一根柱形的亮法,如圖49所示,對應(yīng)的一列為一根豎柱,或者對應(yīng)的一行為一根橫柱,因此實(shí)現(xiàn)柱的亮的方法如下所述:

一根豎柱:對應(yīng)的列置1,而行則采用掃描的方法來實(shí)現(xiàn)。

一根橫柱:對應(yīng)的行置0,而列則采用掃描的方法來實(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語言源程序

#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)陣漢字庫的編碼和從標(biāo)準(zhǔn)字庫中提取漢字編碼的方法。

三.實(shí)驗(yàn)電路及連線

點(diǎn)陣顯示模塊WTD3088的(紅色)列輸入線接至內(nèi)部LED的陰極端,行輸入線接至內(nèi)部LED的陽極端(若陽極端輸入為高電平,陰極端輸入低電平,則該LED點(diǎn)亮)。發(fā)光點(diǎn)的分布如圖22-0所示。

Fig22-0WTD3088LED分布

如圖22-1示,本實(shí)驗(yàn)?zāi)K使用74LS374來控制列輸入線的電平值。將74LS374的某輸出置0,則對應(yīng)的LED陰極端被置低。如圖22-2示,本實(shí)驗(yàn)?zāi)K使用74LS273來控制行輸入線,并通過9013提供電流驅(qū)動。將74LS273的某輸出置1,則對應(yīng)的LED陽極端被置高。每次系統(tǒng)重新開啟或總清后,74LS273輸出為全0,LED顯示被關(guān)閉。

通過編程控制各顯示點(diǎn)對應(yīng)LED陽極和陰極端的電平,就可以有效的控制各顯示點(diǎn)的亮滅。

Fig22-1LED模塊及列掃描電路

Fig22-2行掃描電路

Fig22-3地址譯碼電路

本實(shí)驗(yàn)?zāi)K使用4塊WTD3088組成16×16點(diǎn)陣,以滿足漢字顯示的要求。為了方便的控制四個單元,使用了一片74LS139譯碼,產(chǎn)生四個地址片選信號:CLKR1=CSLED,CLKR2=CSLED 1,用于行控制的兩片74LS273;CLKC1=CSLED 2,CLKC2=CSLED 3,用于列控制的兩片74LS374。

實(shí)驗(yàn)接線:按示例程序,模塊的CSLED接51/96地址的8000H。

四.實(shí)驗(yàn)說明

使用高亮度LED發(fā)光管構(gòu)成點(diǎn)陣,通過編程控制可以顯示中英文字符、圖形及視頻動態(tài)圖形。LED顯示以其組構(gòu)方式靈活、亮度高、技術(shù)成熟、成本低廉等特點(diǎn)在證券、運(yùn)動場館及各種室內(nèi)/外顯示場合得到廣泛的應(yīng)用。

所顯示字符的點(diǎn)陣數(shù)據(jù)可以自行編寫(即直接點(diǎn)陣畫圖),也可從標(biāo)準(zhǔn)字庫(如ASC16、HZ16)中提取。后者需要正確掌握字庫的編碼方法和字符定位的計算。

實(shí)驗(yàn)盤片中“字符轉(zhuǎn)換”子目錄下提供的Basc16.exe,BHz16.exe可方便的將單個字符的碼表從標(biāo)準(zhǔn)字庫Asc16,Hzk16中提取出來。具體使用方法是運(yùn)行上述可執(zhí)行程序,根據(jù)提示輸入所需字符(如是漢字還需要先啟動dos下的漢字環(huán)境,如ucdos,pdos95等)。程序?qū)⒃撟址拇a表提取出來,存放在該字符ASC或區(qū)位碼為文件名稱的.dat文件中。用戶只需將該文件中內(nèi)容拷貝、粘貼到自己的程序中即可。但需要注意字節(jié)排列順序、字節(jié)中每一位與具體顯示點(diǎn)的一一對應(yīng)關(guān)系,必要時還要對碼表稍作修改。同一目錄下還提供了上述可執(zhí)行程序的源文件,使用BC3.1編寫,供用戶參考。

五.實(shí)驗(yàn)程序框圖

用戶應(yīng)留心其中行掃描的實(shí)現(xiàn)及碼表的處理。

六.實(shí)驗(yàn)程序:

(一)提供LEDA51演示Asc16字符的簡單點(diǎn)陣顯示。

;________*LED點(diǎn)陣顯示示例程序______________________*

;__該程序顯示Asc16字符__

;__為了簡單起見,程序只顯示一個字符__

;__該程序針對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;代碼取反,決定顯示的陰陽

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

;________延時子程序,協(xié)調(diào)字符顯示速度____________*

DELAY:MOVR7,#1H

DL1:MOVR6,#00H

DL2:DJNZR6,DL2

DJNZR7,DL1

RET

;________字符點(diǎn)陣字庫______________*

;ASC16字符編碼排列

;0

;1

;|

;|

;14

;15

;高位D7--D0

;請注意編碼的排列次序和實(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兩個示例程序。和Hz16字符的簡單點(diǎn)陣顯示。

;________*LED點(diǎn)陣顯示示例程序______________________*

;__該程序顯示hz16字符__

;__為了簡單起見,程序只顯示一個字符__

;__該程序針對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

;________延時子程序,協(xié)調(diào)字符顯示速度____________*

DELAY:MOVR7,#1H

DL1:MOVR6,#00H

DL2:DJNZR6,DL2

DJNZR7,DL1

RET

;________字符點(diǎn)陣字庫______________*

;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ī)可鎖定加密鍵盤設(shè)計

摘要:介紹PC鍵盤和鍵盤接口的PS/2通信協(xié)議,以及用89C51實(shí)現(xiàn)可鎖定鍵盤的軟件和硬件設(shè)計方法。具有安全可靠、容錯能力強(qiáng)、可以直接采用標(biāo)準(zhǔn)鍵盤進(jìn)行改裝、便于實(shí)現(xiàn)等優(yōu)點(diǎn),并保留標(biāo)準(zhǔn)鍵盤的全部功能。

關(guān)鍵詞:PS/289C51C51鍵盤

引言

在智能儀器、自動控制等領(lǐng)域,已大量使用嵌入式PC,如Advantech公司的PC/104、AMD公司的DIMM-PC等。為適應(yīng)開放式、模塊化的要求,嵌入式PC具有標(biāo)準(zhǔn)的PC接口,如VGA顯示器控制接口、以太網(wǎng)接口、RS232接口、PC/AT鍵盤接口等。所以,可以用標(biāo)準(zhǔn)的PC鍵盤對嵌入式PC進(jìn)行操作與控制。鍵盤在輸入指令之后,可能很長一段時間不用。為計算機(jī)安全和防止誤觸發(fā),需要將鍵盤鎖定,還要對某些鍵采取屏蔽措施,但是PC標(biāo)準(zhǔn)鍵盤不能滿足這些要求。本文介紹一種用89C51設(shè)計實(shí)現(xiàn)的可鎖定加密PC/AT鍵盤。

1鍵盤功能及工作原理

PC鍵盤功能主要有按鍵識別、去抖、重鍵處理、發(fā)送掃描碼、自動重發(fā)、接收鍵盤命令、處理命令等。鍵盤有編碼鍵盤和非編碼鍵盤。編碼鍵盤程序設(shè)計簡單,但硬件電路復(fù)雜,價格較高;非編碼鍵盤用軟件來實(shí)現(xiàn)識別鍵、編碼轉(zhuǎn)換、去抖等功能,硬件電路簡單,價格便宜?,F(xiàn)代微機(jī)系統(tǒng)中廣泛采用非編碼鍵盤。PC鍵盤多采用18行×8列的二維矩陣行列結(jié)構(gòu)。采用行掃描法識別按下的按鍵。

2PS/2協(xié)議

PS/2協(xié)議是外設(shè)與主機(jī)之間通信的一種同步雙向串行協(xié)議。在該協(xié)議中主機(jī)擁有較高的優(yōu)先級,在一定條件下可以終止外設(shè)正在進(jìn)行的發(fā)送過程。PS/2協(xié)議采用的傳送數(shù)據(jù)幀的格式為:1位起始位(0)、8位數(shù)據(jù)位、1位奇偶校驗(yàn)位、1位停止位(1)。數(shù)據(jù)發(fā)送時低位在前,高位在后。外設(shè)每收到主機(jī)發(fā)來的1幀數(shù)據(jù),都要緊隨該幀的停止位發(fā)送一個握手位ACK(0)應(yīng)答主機(jī)。然后,外設(shè)還要發(fā)1幀應(yīng)答數(shù)據(jù)(0xF0),表示外設(shè)已經(jīng)完整地接收到了主機(jī)的命令;而主機(jī)則不需發(fā)送握手位,也不需要發(fā)送應(yīng)答幀。

2.1鍵盤到PC鍵盤接口的通信

當(dāng)時鐘線和數(shù)據(jù)線均為高電平時,允許鍵盤發(fā)送數(shù)據(jù),系統(tǒng)將接收數(shù)據(jù);當(dāng)時鐘線被拉為低電平時,表明系統(tǒng)禁止數(shù)據(jù)傳輸。圖1給出了發(fā)送時序,包含1個低電平觸發(fā)的起始位、8位數(shù)據(jù)位、1個奇校驗(yàn)位和1個高電平的結(jié)束位。

2.2PC系統(tǒng)到鍵盤的通信協(xié)議

若時鐘線出現(xiàn)高電平,數(shù)據(jù)線出現(xiàn)低電平,表明系統(tǒng)請求發(fā)送,鍵盤準(zhǔn)備產(chǎn)生同步時鐘脈沖串,并接收數(shù)據(jù)。包含了1個低電平觸發(fā)的起始位、8位數(shù)據(jù)位、1個奇校驗(yàn)位、1個應(yīng)答位、1個高電平的結(jié)束位。圖2為時序圖。

(1)鍵盤命令及執(zhí)行過程

①FFH:復(fù)位鍵盤。系統(tǒng)通過此軟件復(fù)位命令使鍵盤進(jìn)入程序復(fù)位和內(nèi)部自測試,稱為基本保證測試(BAT)。復(fù)位鍵盤的過程如下:

a.鍵盤收到FFH后立即回送ACK(FAH)作答;

b.鍵盤接口收到ACK后,將鍵盤時鐘和數(shù)據(jù)線置為高電平;

c.鍵盤檢測到此狀態(tài)后開始BAT操作;

d.如果BAT正確完成,鍵盤發(fā)送AAH以表示結(jié)束,

否則以FDH(或其它任何值)表示診斷有誤。

②FEH:重新發(fā)送。當(dāng)系統(tǒng)檢測

到從鍵盤送來的任何傳輸錯誤時,它便向鍵盤發(fā)送FEH命令。鍵盤接收到此命令后,將重新送出原來的內(nèi)容。③FDH~F7H:空操作(保留未用)。

④F6H:設(shè)置缺省值。此命令使鍵盤所有條件復(fù)位到電源接通時的缺省狀態(tài),鍵盤繼續(xù)掃描。

⑤F5H:設(shè)置缺省值和停止鍵盤。此命令使鍵盤所有條件復(fù)位到電源接通時的缺省狀態(tài),并停止鍵盤掃描,等待下一個鍵盤命令。

⑥F4H:啟動鍵盤。鍵盤接收到此命令后,用ACK(FAH)作答,清除輸出緩沖器,并啟動鍵盤開始掃描。

⑦F3H:設(shè)置拍發(fā)速率和延時參數(shù)。每當(dāng)按下任一鍵時,鍵盤以拍發(fā)速率連續(xù)送出鍵的接通碼,直到鍵被釋放為止。延時參數(shù)是指按下一鍵后,鍵盤輸出的響應(yīng)時間。

系統(tǒng)缺省設(shè)置:拍發(fā)速率=10個/s±20,延時=500ms±20。

當(dāng)要改變設(shè)置時可以使用F3H命令,并后跟一個字節(jié)的參數(shù)。參數(shù)定義如表1所列。

表1

D7

D6D5

D4D3

D2D1D0

C

B

A

計算拍發(fā)速率和響應(yīng)延時的公式如下:

拍發(fā)速率=1/[(8 A)×2B×0.00417](1/s)

響應(yīng)延時=(1 C)×250(ms)

注:缺省的延時參數(shù)值為2CH。

此命令的執(zhí)行過程如下:

a.鍵盤收到F3H命令后,用FAH予以響應(yīng),并停止

掃描和等待隨后的參數(shù);

b.鍵盤若收到隨后的設(shè)置參數(shù),用另一個ACK響

應(yīng),并按其參數(shù)設(shè)置新的拍發(fā)速率和響應(yīng)延時,

之后重新開始掃描(若鍵盤原來是開放的);

c.鍵盤若收到FAH命令,但無隨后的設(shè)置參數(shù),則

鍵盤結(jié)束命令設(shè)置,并保持原來的拍發(fā)速率和響

應(yīng)延時,停止掃描。

⑧F2H,F(xiàn)1,EFH:保留未用。

⑨F0H:設(shè)置鍵盤掃描碼命令。此命令用于設(shè)置鍵盤的掃描碼,后跟參數(shù)指定三種掃描碼的哪一種。鍵盤復(fù)位時,默認(rèn)掃描碼是第二種。

⑩EEH:回送命令。此命令用于輔助診斷,要求鍵盤接收到EEH時也要回送EEH予以響應(yīng)。若鍵盤原來是開放的,則繼續(xù)掃描。

EDH:置位/復(fù)位LED指示器。鍵盤右上角有三個LED指示器,分別反映Caps、Num和Scroll三個鍵的鎖定情況。參數(shù)字節(jié)如表2所列。

表2

D7D3

D2

D1

D0

保留

1=激勵CapsLED

1=激勵NumLED

1=激勵ScrollLED

此命令執(zhí)行過程與F3H相似。若命令后跟參數(shù),則按參數(shù)設(shè)定LED狀態(tài)并繼續(xù)掃描。若僅有命令無參數(shù),則不改變LED原狀態(tài),并停止掃描。

(2)鍵盤響應(yīng)

鍵盤在下列四種情況下都會向鍵盤接口發(fā)送數(shù)據(jù)。

①按下任一鍵,鍵盤以拍發(fā)速率向接口發(fā)送鍵盤接通掃描碼。

②釋放所按下的鍵,鍵盤發(fā)送斷開掃描碼。

③系統(tǒng)向鍵盤發(fā)送鍵盤命令后,鍵盤回送應(yīng)答。

④當(dāng)用戶按鍵速度超出鍵盤所能容納的最大鍵個數(shù)時,鍵盤做出響應(yīng)。

后三種情況稱為鍵盤響應(yīng)。響應(yīng)字節(jié)有7個,定義如下。

①FEH:重新發(fā)送響應(yīng)。當(dāng)鍵盤收到一個無效的鍵盤命令,或者檢測到奇偶錯的鍵盤命令時,鍵盤回送響應(yīng)字節(jié)為FEH,要求系統(tǒng)重發(fā)鍵盤命令。

②FAH:正常應(yīng)答。對任何一個有效的鍵盤命令,鍵盤回送FAH予以響應(yīng)。

③00H:超限應(yīng)答。當(dāng)用戶按鍵速度超出鍵盤所能容納的最大鍵符個數(shù)時(16個字節(jié)的緩沖器),鍵盤發(fā)送00H。

④FDH:診斷故障應(yīng)答。鍵盤接受軟件復(fù)位命令,執(zhí)行自測試過程中。若檢測到故障,則以FDH應(yīng)答。此時,鍵盤停止掃描并等待下一個鍵盤命令。

⑤AAH:診斷正常應(yīng)答。鍵盤在軟件復(fù)位過程中,正常完成BAT測試,以AAH應(yīng)答。

⑥FEH:回響命令的應(yīng)答,對鍵盤FEH命令的應(yīng)答。

⑦F0H:斷開掃描碼前綴,鍵盤對鍵符按下后釋放的應(yīng)答,第一個字節(jié)為F0H,第二個字節(jié)為接通掃描碼(有幾個鍵例外)。

3硬件設(shè)計

PC系列鍵盤采用18行×8列的矩陣行列結(jié)構(gòu)。89C51單片機(jī)有4個8位I/O端口,因此可以采用P0、P2口再加上P3口的2個(P3.6和P3.7)作為行掃描線。P1口作為列輸入線(如果用P0口作列輸入線,必須加上拉電阻)。采用P3.0、P3.1作為數(shù)據(jù)線和時鐘線與PC系統(tǒng)進(jìn)行通信,用P3.2、P3.4、P3.5控制鍵盤上的3個指示燈。硬件原理如圖3所示。

鍵盤與計算機(jī)通過一個五芯(PS/2接口為六芯)插座相接,4個有效引腳的定義分別是電源(VCC)、地(GND)、串行時鐘線(SCK)、串行數(shù)據(jù)線(SIO)。

4軟件設(shè)計

①消抖及重鍵處理:通過軟件上延時程序來消除抖動;采用后按鍵優(yōu)先處理,即多鍵同時按下時,只重復(fù)發(fā)送最后按下鍵的掃描碼。

②程序包括鍵盤掃描子程序、發(fā)送鍵碼子程序、發(fā)送數(shù)據(jù)子程序、接收命令子程序、定時器1中斷服務(wù)程序、主程序等。鍵盤掃描子程序用于掃描鍵狀態(tài),將被按鍵的位置號存入緩沖器中;發(fā)送鍵碼子程序用于將緩沖區(qū)鍵的接通碼或斷開碼發(fā)送給計算機(jī)鍵盤接口或者存在鍵盤密碼緩沖區(qū)中;發(fā)送數(shù)據(jù)子程序用于將數(shù)據(jù)發(fā)給計算機(jī)鍵盤接口;接收命令子程序用于接收計算機(jī)鍵盤接口發(fā)來的鍵盤命令;定時器1中斷服務(wù)子程序用于給程序中的延時提供標(biāo)準(zhǔn)時鐘,并具有軟件看門狗功能,防止軟件出現(xiàn)死機(jī)現(xiàn)象;主程序用于系統(tǒng)初始化,子程序調(diào)度,鎖定狀態(tài)的顯示等。

圖6發(fā)送緩沖區(qū)鍵碼子程序流程圖

圖4~6是主要軟件模塊的流程圖。單片機(jī)源程序見本刊網(wǎng)絡(luò)補(bǔ)充版(.com)。

5結(jié)論

本文介紹的PC/AT鍵盤具有結(jié)構(gòu)簡單、設(shè)計靈活、安全可靠的特點(diǎn),可用于標(biāo)準(zhǔn)PC和嵌入式PC。本鍵盤可以在標(biāo)準(zhǔn)的鍵盤基礎(chǔ)上進(jìn)行改造,只需換掉原來的控制芯片即可,可節(jié)省設(shè)計成本。

單片機(jī)C51編程幾個有用的模塊(1)

KeilC51常用功能模塊使用說明

說明

本文檔包括單片機(jī)系統(tǒng)中常用到的時鐘中斷、通訊及鍵盤掃描等模塊(見所附源程序)的說明。這些模塊使用前后臺系統(tǒng)模型。為達(dá)到最大的靈活性,需要在用戶工程中定義config.h文件,在其中定義各模塊可選參數(shù)的設(shè)置,而不是直接更改源代碼。

這些可選內(nèi)容大部分為宏定義,如果不定義宏相應(yīng)的功能在編譯時被屏蔽,不會增加代碼長度。具體可選內(nèi)容見各模塊中的說明。

在Config.h文件中還要包含一個單片機(jī)硬件的資源頭文件。

各模塊使用了定義在Common.h中的一些數(shù)據(jù)類型。如:BIT(bit)BYTE(unsignedchar)等,具體請參見源程序。

時鐘模塊

在單片機(jī)軟件設(shè)計中,時鐘是重要資源,為了充分利用時鐘資源,故設(shè)計本時鐘模塊。本模塊使用定時器0,在完成用戶指定功能的同時,還能夠自動處理一些其它模塊中與時鐘相關(guān)的信息。

時鐘模塊由聲明文件Timer.h以及實(shí)現(xiàn)文件Timer.c組成。

用戶應(yīng)該在Config.h中定義宏TIMER_RELOAD來設(shè)定定時器0的重裝載初值。推薦的定時器0的中斷時間大于1毫秒。

在程序的初始化階段調(diào)用時鐘模塊的初始化函數(shù)InitTimerModule()之后,就可以使用時鐘模塊所以支持的各種功能。具體描述如下:

延時:當(dāng)用戶需要進(jìn)行一定時間的延時時,可以通過調(diào)用Delay()來進(jìn)行,參數(shù)為時鐘中斷的次數(shù)。如時鐘中斷周期為1ms,想進(jìn)行100ms的延時,則可以調(diào)用Delay(100)。

注意:

如果延時的絕對時間小于時鐘中斷的周期,則不能夠用本方法做到延時。

定時:當(dāng)程序中需要使用定時功能時,如等待某外部事件,如果在一定時間內(nèi)發(fā)生則繼續(xù)執(zhí)行,如果在這段時間內(nèi)發(fā)生,則認(rèn)為出現(xiàn)錯誤,轉(zhuǎn)向錯誤處理機(jī)制。

在此推薦一種編程模式,但用戶可以用自己認(rèn)為更合理的方式處理此類問題。

這里簡單說明一下關(guān)于阻塞式函數(shù)及非阻塞式函數(shù)。簡單說,阻塞式函數(shù)就是當(dāng)檢測完成條件,如

果不能夠完成則等待,如:

voidCheckSomething()

{

//gbitSuccessFlagisaglobalvariable

while(gbitSuccessFlag==FALSE)

{

//donothingbutwaiting

}

}

可以看到,當(dāng)bitSuccessFlag沒有被設(shè)置為TRUE時,函數(shù)保持等待狀態(tài)不返回,這樣就是阻塞式的函數(shù)。

另外一種情況:

BITCheckSomething()

{

if(gbitSuccessFlag==TRUE)

{

//…

returnTRUE;

}

returnFALSE;

}

在這里,如果所檢測的事件有沒有完成,函數(shù)進(jìn)行檢測之后,立刻返回,通過返回值報告完成情況,如果沒有完成,則等待調(diào)用者分配再次執(zhí)行的機(jī)會。這樣的函數(shù)就是非阻塞函數(shù)。

在應(yīng)用定時功能時,首先要將檢測函數(shù)定義成非阻塞函數(shù)。如上面的第二個版本的CheckSomething。

然后下面模式:

BITbitDone=FALSE;

ResetClock();//cleartimerinterrupttimescounter

while(GetClock()

{

if(CheckSomething()==TRUE)

{

bitDone=TRUE;

break;

}

}

if(bitDone==FALSE)

{

//processtimeout

}或者簡單寫成:

BITbitDone=FALSE;

ResetClock();

while(GetClock()=(z))

當(dāng)然,用戶也可以將IsPackageHeader和IsPackageTailer定義成為函數(shù),通過BIT類型的返回值來向調(diào)用者提供與相應(yīng)宏相同的信息。

另一種辦法需要在Config.h文件中定義宏SCOMM_ComplexPackageFormat。(需要注意的是,不能夠同時定義SCOMM_SimplePackageFormat和SCOMM_ComplexPackageFormat宏,否則會造成嚴(yán)重的不可預(yù)見性錯誤。

這時需要提供回調(diào)函數(shù)QueryPackageFormat,原形如下:

BYTEQueryPackageFormat(BYTEbyData,BYTEbyCount,BYTEbyParam);

函數(shù)中三個參數(shù)的含義與使用簡單數(shù)據(jù)包格式時判斷數(shù)據(jù)包尾的宏的參數(shù)相同。

函數(shù)通過返回值來通知作為調(diào)用者的接收函數(shù)對接收到的數(shù)據(jù)如何處理,但目前這種方法僅為需要處理復(fù)雜數(shù)據(jù)包格式時的一種可選方法,但不推薦。用戶如果想使用這種方法可以自己更改接收函數(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ù)包出錯,需要拋棄。

然后更改源代碼來實(shí)現(xiàn)上面的協(xié)議。

注意:當(dāng)用戶需要使用字符串的時候,可以利用簡單的包裝函數(shù)將字符串轉(zhuǎn)換為字節(jié)數(shù)組。所以沒有必要提供專用的字符串處理函數(shù)。

鍵盤掃描模塊

鍵盤掃描模塊有兩種工作方式,一種為自動的由時鐘模塊調(diào)用,另一種是由程序員自行調(diào)用。

1)由時鐘模塊自動調(diào)用的方式

將時鐘模塊實(shí)現(xiàn)文件(Timer.h)及鍵盤掃描模塊的實(shí)現(xiàn)文件(KBScan。c)包含進(jìn)工程,在Config.h文件中添加TIMER_KBSCANDELAY宏。時鐘模塊自動對時鐘中斷進(jìn)行計數(shù),當(dāng)達(dá)到TIMER_KBSCANDELAY宏所定義的值后,自動調(diào)用鍵盤掃描模塊中的函數(shù)KBScanProcess()進(jìn)行鍵盤掃描,也就是說,這個宏的值可以決定按鍵消抖動的時間。

用戶應(yīng)該提供兩個回調(diào)函數(shù)OnKBScan()及OnKeysPressed()。在函數(shù)OnKBScan中進(jìn)行鍵盤掃描,并返回掃描碼。掃描碼的類型缺省為BYTE,當(dāng)鍵盤規(guī)模較大時,BYTE不能夠完全包含鍵盤信息時,可在Config.h文件中重定義宏KBvalue,如下:

#defineKBvalueWORD

這樣,就可以使用16位的鍵盤掃描碼,如果此時還達(dá)不到要求,可以將鍵盤掃描碼定義成一個結(jié)構(gòu),但這樣做將會增加代碼量及消耗更多的RAM資源,故不推薦。

掃描模塊調(diào)用OnKBScan取得掃描碼,并調(diào)用用戶可以重定義的宏IsNoKeyPressed來判斷是否有鍵按下,缺省的IsNoKeyPressed實(shí)現(xiàn)如下:

#defineIsNoKeyPressed(x)((x)==0x00)

即認(rèn)為OnKBScan返回0掃描碼時為沒有鍵按下,如果掃描函數(shù)返回其它非零掃描碼做為無鍵按下的掃描碼時,可以在Config.h文件中重定義IsNoKeyPressed宏的實(shí)現(xiàn)。

8位鍵盤掃描碼(缺省值)時,相應(yīng)的掃描函數(shù)為:

BYTEOnKBScan()

當(dāng)掃描模塊經(jīng)過軟件消抖動之后,發(fā)現(xiàn)有鍵按下,就會調(diào)用另一個回調(diào)函數(shù)OnKeysPressed。函數(shù)的聲明應(yīng)該如下:

voidOnKeyPressed(BYTEbyKBvalue,BYTEbyState)

其中中的參數(shù)byKBvalue的類型為BYTE,此為缺省值,如果使用其它類型的掃描碼,就將此參數(shù)變?yōu)橄鄳?yīng)類型。這個值由OnKBScan返回。另一個參數(shù)byState在通常情況下為零。但當(dāng)用戶在Config.h中定義宏KBSCAN_BRUSTCOUNT,同時鍵盤上的某鍵被按住不放時,掃描模塊對它自己的調(diào)用(注意這里和TIMER_KBSCANDELAY宏不同,TIMER_KBSCANDELAY是時鐘中斷足夠的次數(shù)后調(diào)用掃描模塊,而KBSCAN_BRUSHCOUNT為掃描模塊自身的被調(diào)用次數(shù))進(jìn)行計數(shù),當(dāng)達(dá)到KBSCAN_BRUSTCOUNT時,掃描模塊調(diào)用OnKeysPressed,此時第一個參數(shù)的含義不變,而byState變成1,同時計數(shù)器復(fù)位,又經(jīng)過一段時間后,用值為3的byState調(diào)用OnKeysPressed。這樣就可以很方便的實(shí)現(xiàn)多功能鍵或者檢測某鍵的長時間被按下。

2)由用戶自行調(diào)用

由用戶自行在程序中調(diào)用掃描模塊,而不是由時鐘中斷自行調(diào)用。其它與方式1相同。

注意:

1)函數(shù)KBScanProcess為非阻塞函數(shù),它將在很快的時間內(nèi)返回,等待再次分配給它執(zhí)行的機(jī)會。

2)函數(shù)KBScanProcess是在時鐘中斷外部運(yùn)行的,它的過程可以被任何中斷打斷,但不影響系統(tǒng)運(yùn)行。

3)byState的最大值為250,之后被復(fù)位為零。

應(yīng)用舉例

現(xiàn)在來舉例說明上述幾個模塊的使用方法。

硬件環(huán)境描述:

為了控制一盞燈,需要單片機(jī)提供一個做控制功能的開關(guān)量,這里不描述外部接口電路,只說明當(dāng)單片機(jī)的P10腳為高電平時,燈滅,當(dāng)P10腳為低電平時,燈亮。

可以通過計算機(jī)由串口發(fā)送命令來控制,或通過一個按鍵(pus

hbutton不是自鎖式的按鍵)來手動控制(按鍵接在P11腳上,當(dāng)鍵沒有按下時,P11電平為高,鍵按下時,引腳電平被接低),當(dāng)使用按鍵手動控制的時候,需要給計算機(jī)發(fā)送通知。

設(shè)定串口通訊指令如下:

數(shù)據(jù)包由0xff做包頭,4個字節(jié)長,第二個字節(jié)為命令代碼,第三個字節(jié)為數(shù)據(jù),最后一個字節(jié)為校驗(yàn)位。

命令和數(shù)據(jù)代碼有如下組合:

(計算機(jī)發(fā)給單片機(jī))

0x100x01:計算機(jī)控制燈亮。(數(shù)據(jù)位是非零值即可)

0x100x00:計算機(jī)控制燈滅。

(單片機(jī)發(fā)給計算機(jī))

0x110x01:單片機(jī)正常執(zhí)行控制指令,返回。(數(shù)據(jù)位是非零值即可)

0x110x00:單片機(jī)不能夠正常執(zhí)行控制指令,或控制指令錯(不明含義的數(shù)據(jù)包或校驗(yàn)錯等)。

0x120x01:手動控制燈亮。(數(shù)據(jù)位是非零值即可)

0x120x00:手動控制燈滅。建立工程:

在硬盤上建立文件夾Projects,在Projects下建立Common文件夾及Example文件夾。將各模塊的頭文件及實(shí)現(xiàn)文件拷貝到Common文件夾下(推薦使用這樣的文件組織結(jié)構(gòu),其它工程也可以建立在Projects下,各工程共享Common文件夾中的代碼)。

啟動KeilC的IDE,在Example下建立新工程,將各模塊的實(shí)現(xiàn)文件包含進(jìn)工程。

在Example文件夾下建立Output文件夾,更改工程設(shè)置,將Output作為輸出文件和List文件的輸出文件夾(推薦使用這樣的結(jié)構(gòu),當(dāng)保存工程文件時,可以簡單的刪除Output文件夾中的內(nèi)容而不會誤刪有用的工程文件)。

建立工程配置頭文件Config.h及工程主文件Example.c,并將Exmaple.c文件加入工程。

輸入代碼:

代碼的具體編寫過程略。下面是最后的Config.h文件及Example.c文件。

//

//file:onfig.h

//

#ifndef_CONFIG_H_

#define_CONFIG_H_

#include//使用AT89C52做控制

#include“../Common/Common.h”//使用自定義的數(shù)據(jù)類型

#defineTIMER_RELOAD922//11.0592MHz晶振,1ms中斷周期

#defineTIMER_KBSCANDELAY40//40ms重檢測按鍵狀態(tài),即40ms消抖

#defineSCOMM_AsyncInterface//使用異步通訊服務(wù)

#defineIsPackageHeader(x)((x)==0xff)//判斷包頭是不是0xff

#defineIsPackageTailer(x,y,z)((y)<=(z))//判斷包的長度是不是足夠

#endif//_CONFIG_H_

//

//file:xample.c

//

#include

#include“../Common/Common.h”

#include“../Common/Timer.h”

#include“../Common/Scomm.h”

#include“../Common/KBScan.h”

BITgbitLampState=1;//燈的狀態(tài),缺省為off

staticvoidInitialize()

{

InitTimerModule();//初始化時鐘模塊

InitSCommModule(0xfd,TRUE);//初始化通訊模塊,11.0592MHz晶振,

//波特率為19200

EA=1;//開中斷

}

voidmain()

{

Initialize();//初始化

while(TRUE)//主循環(huán)

{

ImpTimerService();//實(shí)現(xiàn)時鐘中斷服務(wù),如鍵盤掃描

AsyncRecePackage(4);//接收4個字節(jié)長的數(shù)據(jù)包

}

}

//在中斷外部響應(yīng)時鐘中斷事件

voidOnTimerEvent()

{

//donothing

}

//控制外部燈

staticvoidTriggerLamp(BITbEnable)

{

P10=~bEnable;//需要反相控制

}

//鍵掃描回調(diào)函數(shù)

BYTEKBScan()

{

BITb;

P11=1;//讀之前拉高引腳電平

b=P11;//讀入引腳狀態(tài)

return~b;//數(shù)據(jù)反相做掃描碼

}

//計算校驗(yàn)和

staticBYTECalcCheckSum(BYTE*pbyBuf,BYTEbyLen)

{

BYTEby,bySum=0;

for(by=0;by

return0–bySum;

}

//接收到鍵盤消息回調(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);//處理長度或校驗(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ā)送沒有成功執(zhí)行通知

break;

}

}

4.課程設(shè)計單獨(dú)計算成績,考評方法見其大綱。

三、理論考試說明

1.單片機(jī)技術(shù)及應(yīng)用理論考試,采用閉卷筆試形式,考試時間120分鐘。

2.期末考試試題根據(jù)教學(xué)大綱,其范圍和難度按照本方案中制訂的考試考核內(nèi)容和要求確定??荚嚸}覆蓋考試大綱要求范圍。

3.期末考試試題類型有以下幾種:

①填空題;

②選擇題;

③判斷題;

④簡答題⑤綜合應(yīng)用題。

四、考試考核要求層次

按照教學(xué)大綱的要求,理論考試要求分為掌握、理解和了解三個層次。

掌握:

對于本課程的重點(diǎn)內(nèi)容要求學(xué)生達(dá)到掌握的程度。即能夠全面、深入理解和熟練掌握所學(xué)內(nèi)容,并能夠用其分析、初步設(shè)計和解答與應(yīng)用相關(guān)的問題,能夠舉一反三。要求學(xué)生掌握的內(nèi)容也就是考試的主要內(nèi)容,在考試中所占比例約70。

理解:

對于本課程的一般內(nèi)容要求學(xué)生能夠理解。即要求學(xué)生能夠較好地理解所學(xué)內(nèi)容,并且對所涉及的內(nèi)容能夠進(jìn)行簡單分析和判斷。要求學(xué)生理解的內(nèi)容也是考試的內(nèi)容,在考試中所占比例約25。

了解:

對于本課程的次要內(nèi)容要求學(xué)生能夠了解。要求學(xué)生了解的內(nèi)容,一般是指在眼下不必進(jìn)一步深入和擴(kuò)展,有些也許需要學(xué)生自己今后在工作中進(jìn)行深入研究。對要求了解的內(nèi)容,在考試中占較小比例,不超過5。實(shí)驗(yàn)五:按鍵電路、顯示電路實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康模?.掌握獨(dú)立式按鍵電路與矩陣式按鍵電路的設(shè)計方法。2.掌握數(shù)碼管顯示電路的工作原理3.掌握源程序編輯軟件UltraEdit,編譯軟件KeilC51、仿真軟件Proteus的使用方法4.掌握硬件仿真器ME-52A的使用方法二、實(shí)驗(yàn)器材:1.單片機(jī)實(shí)驗(yàn)板2.單片機(jī)硬件仿真器ME-51A3.計算機(jī)4.電源三、實(shí)驗(yàn)要求:1.電路如圖5所示,用單片機(jī)的P3口所接的四個獨(dú)立式按鍵控制p1口流水燈花樣的方法;具體表現(xiàn)為:p3.0、P3.1、P3.2、P3.3四個小按鍵分別實(shí)現(xiàn)了四個控制:(1)跑燈:即P1.0---1.7亮點(diǎn)流動:(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矩陣式鍵盤作為輸入,在P1口所接的數(shù)碼管上顯示出每個按鍵的0~F序號,鍵盤的布局如下表所示:FEDCBA9876543210四、實(shí)驗(yàn)原理:1.獨(dú)立式按鍵電路顯示如圖5所示,從圖中可看出,判斷有無鍵按下,只要檢測P3.0~P3.3相應(yīng)端口的高低電平即可,若檢測有某一端口為低電平,表明該端口有按鍵按下,經(jīng)延時消抖后轉(zhuǎn)去執(zhí)行相應(yīng)的功能子程序。若為高電平,表明無鍵按1.獨(dú)立式按鍵電路如圖5所示,下,繼續(xù)檢測。示例程序如下: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;消岸抖動JBP3.0,STAR1WAITL0:JNBP3.0,WAITL0;等待鍵釋放SETBF0FUN01:LCALLFUN00LCALLSTAR1LJMPFUN01FUN1:LCALLDL10MS;消岸抖動JBP3.1,STAR1WAITL1:JNBP3.1,WAITL1;等待鍵釋放SETBF0FUN10:LCALLFUN11LCALLSTAR1LJMPFUN10FUN2:LCALLDL10MS;消岸抖動JBP3.2,STAR1WAITL2:JNBP3.2,WAITL2;等待鍵釋放SETBF0FUN20:LCALLFUN22LCALLSTAR1LJMPFUN20FUN3:LCALLDL10MS;消岸抖動JBP3.3,STAR1WAITL3:JNBP3.3,WAITL3;等待鍵釋放CLRF0MOVP1,#0FFH;關(guān)顯示LJMPSTAR1FUN00:MOVA,#0FEH;跑燈子程序FUN000:MOVP1,ALCALLDL05SJNBACC.7,OUTRLAAJMPFUN000OUT:RETFUN11:MOVA,#0FEH;流水燈子程序FUN111:MOVP1,ALCALLDL05SJZOUTRLAANLA,P1AJMPFUN111FUN22:MOVA,#0AAH;交叉點(diǎn)亮子程序MOVP1,ALCALLDL30SCPLAMOVP1,ALCALLDL30SRET;____________;;延時程序;;____________;DL512:MOVR2,#0FFHLOOP1:DJNZR2,LOOP1RETDL10MS:MOVR3,#14HLOOP2:LCALLDL512DJNZR3,LOOP2RETDL05S:MOVR4,#0AHLOOP3:LCALLDL10MSDJNZR4,LOOP3RETDL30S:MOVR5,#03HLOOP4:LCALLDL05SDJNZR5,LOOP4RETEND2.矩陣式按鍵電路顯示如圖6所示。采用掃描方式進(jìn)行按鍵的識別檢測,并將對應(yīng)按鍵的鍵號用查表指令將對應(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;無鍵按下,繼續(xù)檢測MOVA,R3;掃描下一行SETBCRRCAMOVR3,AJCSCAN1;4行是否掃描完,未完,繼續(xù)LJMPSCANKEYIN:MOVR7,#10;削除抖動D2:MOVR6,#248DJNZR6,$DJNZR7,D2D3:MOVA,P2;按鍵放開否?XRLA,R4JZD3MOVA,R1MOVDPTR,#TABLE;到TABLE中取碼MOVCA,@A DPTRMOVP1,ALJMPSCANTABLE:DB0C0H,0F9H,0A4H,0B0H,80H,90H,88H,83H,0C6H,0A1H,86H,8EHENDDB80H,90H,88H,83HDB0C6H,0A1H,86H,8EHEND五、實(shí)驗(yàn)步驟:1.運(yùn)行UltraEdit-32源程序編輯軟件,輸入、編輯匯編語言源程序。2.運(yùn)行KeiluVision2源程序編譯軟件,對源程序進(jìn)行編譯,得到目標(biāo)代碼文件。3.運(yùn)行Proteus模擬仿真軟件,打開已繪制好的仿真電路原理圖,進(jìn)行模擬 仿真。4.把硬件仿真器ME-52A與單片實(shí)驗(yàn)板連接好,再用硬件仿真器進(jìn)行仿真驗(yàn)證。六、實(shí)驗(yàn)分析與總結(jié)1.用仿真系統(tǒng)調(diào)試簡單程序結(jié)構(gòu)、分支程序結(jié)構(gòu)、循環(huán)程序結(jié)構(gòu)、子程序結(jié)構(gòu)和中斷結(jié)構(gòu)的關(guān)鍵在于,如何將對程序的分析理解和開發(fā)系統(tǒng)提供的基本功能有機(jī)地結(jié)合起來,其前提條件是必須對源程序的作用、結(jié)構(gòu)特點(diǎn)、運(yùn)行過程與結(jié)果有較全面的認(rèn)識,并能根據(jù)程序運(yùn)行過程中出現(xiàn)的現(xiàn)象和結(jié)果分析并判斷產(chǎn)生各種故障現(xiàn)象的原因,再運(yùn)用排除法逐一檢驗(yàn)各種判斷是否準(zhǔn)確。2.掌握程序結(jié)構(gòu)特點(diǎn)的基礎(chǔ)上,合理選擇觀測點(diǎn),通過觀察在觀測點(diǎn)處參數(shù)及路徑的變化檢驗(yàn)程序運(yùn)行的結(jié)果。3.高調(diào)試程序的效率,應(yīng)對單片機(jī)開發(fā)系統(tǒng)所提供的幾種程序運(yùn)行調(diào)試方式有足夠的了解并能熟練地運(yùn)用。例如,在調(diào)試過程中,若要觀察最終結(jié)果,則可選擇全速運(yùn)行調(diào)試;若要觀察相關(guān)指令的運(yùn)行結(jié)果或運(yùn)行路徑的變化過程,則可選擇單步運(yùn)行;若要檢查子程序的運(yùn)行過程,則可選擇跟蹤運(yùn)行調(diào)試;若要檢查循環(huán)程序或中斷服務(wù)程序,則可選擇斷點(diǎn)運(yùn)行調(diào)試;若要定點(diǎn)檢查程序運(yùn)行到某處的結(jié)果時,則可選擇快速運(yùn)行到光標(biāo)處調(diào)試。但實(shí)際中究竟選用哪種方法更適宜或哪幾種方法結(jié)合使用更快捷,將隨著分析能力與操作的熟練程度逐步提高。4.程序運(yùn)行結(jié)果是否正確時,應(yīng)運(yùn)用單片機(jī)開發(fā)系統(tǒng)所提供的交互界面,將程序運(yùn)行過程中程序計數(shù)器PC(地址)的變化、各單元(內(nèi)部RAM和外部RAM)內(nèi)容的變化、特殊功能寄存器內(nèi)容的變化、堆棧指針SP內(nèi)容的變化與程序的理論分析結(jié)果相對照。5.程序和調(diào)試程序時,需要多次反復(fù)的過程,并非一次就能排除全部故障,特別是單片機(jī)應(yīng)用系統(tǒng)的硬件電路和匯編程序相結(jié)合的綜合調(diào)試就更加復(fù)雜,因此,必須通過反復(fù)調(diào)試,不斷修改硬件和軟件,直到最終符合設(shè)計要求為止。如果在調(diào)試中能夠根據(jù)實(shí)驗(yàn)現(xiàn)象預(yù)先對產(chǎn)生故障的原因加以判斷和分析,并制定出相應(yīng)的調(diào)試方法和步驟,可縮小排除故障的范圍,提高調(diào)試效率。七、思考與練習(xí)填空題

1、設(shè)X=5AH,Y=36H,則X與Y“或”運(yùn)算為__7EH_______,X與Y的“異或”運(yùn)算為___6CH_____。

2、若機(jī)器的字長為8位,X=17,Y=35,則X+Y=__110100_____,X-Y=_11101110______(要求結(jié)果寫出二進(jìn)制形式)。

3、單片機(jī)的復(fù)位操作是____高電平______(高電平/低電平),單片機(jī)復(fù)位后,堆棧指針SP的值是___07h_____。

4、單片機(jī)中,常用作地址鎖存器的芯片是__74HC373____________,常用作地址譯碼器芯片是_____74HC138____________。

5、若選擇內(nèi)部程序存儲器,應(yīng)該設(shè)置為_____高_(dá)______(高電平/低電平),那么,PSEN信號的處理方式為___不用__________________。

6、單片機(jī)程序的入口地址是____0000H__________,外部中斷1的入口地址是______0013H_________。

7、若采用6MHz的晶體振蕩器,則MCS-51單片機(jī)的振蕩周期為__0.5us_______,機(jī)器周期為_____2us__________。

8、擴(kuò)展芯片的選擇方法有兩種,它們分別是___線選法_______________和_____譯碼法__________。

9、單片機(jī)的內(nèi)部RAM區(qū)中,可以位尋址的地址范圍是____20H~2FH______________,特殊功能寄存器中,可位尋址的地址是___是能被8整除的地址_________________。

10、子程序返回指令是___ret______,中斷子程序返回指令是__reti。

11、8051單片機(jī)的存儲器的最大特點(diǎn)是內(nèi)部RAM與外部RAM分開編址。

12、8051最多可以有32個并行輸入輸出口,最少也可以有8個并行口。

13、函數(shù)是C語言的基本單位。

14、串行口方式2接收到的第9位數(shù)據(jù)送SCON寄存器的RB8位中保存。

15、MCS-51內(nèi)部提供3個可編程的16位定時/計數(shù)器,定時器有4種工作方式。

16、一個函數(shù)由兩部分組成,即說明部分和語句部分。

17、串行口方式3發(fā)送的第9位數(shù)據(jù)要事先寫入SCON寄存器的TB8位。

18、利用8155H可以擴(kuò)展3個并行口,256個RAM單元。

19、C語言中輸入和輸出操作是由庫函數(shù)scanf和printf等函數(shù)來完成。

二、選擇題

1、C語言中最簡單的數(shù)據(jù)類型包括(B)。

A、整型、實(shí)型、邏輯型B、整型、實(shí)型、字符型

C、整型、字符型、邏輯型D、整型、實(shí)型、邏輯型、字符型

2、當(dāng)MCS-51單片機(jī)接有外部存儲器,P2口可作為(C)。

A、數(shù)據(jù)輸入口B、數(shù)據(jù)的輸出口

C、準(zhǔn)雙向輸入/輸出口D、輸出高8位地址

3、下列描述中正確的是(D)。

A、程序就是軟件B、軟件開發(fā)不受計算機(jī)系統(tǒng)的限制

C、軟件既是邏輯實(shí)體,又是物理實(shí)體D、軟件是程序、數(shù)據(jù)與相關(guān)文檔的集合

4、下列計算機(jī)語言中,CPU能直接識別的是(D)。

A、自然語言B、高級語言C、匯編語言D、機(jī)器語言

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語言實(shí)現(xiàn)的算法必須要有輸入和輸出操作

B、用C語言實(shí)現(xiàn)的算法可以沒有輸出但必須要有輸入

C、用C程序?qū)崿F(xiàn)的算法可以沒有輸入但必須要有輸出

D、用C程序?qū)崿F(xiàn)的算法可以既沒有輸入也沒有輸出

7、定時器/計數(shù)器工作方式1是(D)。

A、8位計數(shù)器結(jié)構(gòu)B、2個8位計數(shù)器結(jié)構(gòu)

C、13位計數(shù)結(jié)構(gòu)D、16位計數(shù)結(jié)構(gòu)

8、C語言提供的合法的數(shù)據(jù)類型關(guān)鍵字是(B)。

A、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ù)的存儲結(jié)構(gòu)是指(D)。

A、存儲在外存中的數(shù)據(jù)B、數(shù)據(jù)所占的存儲空間量

C、數(shù)據(jù)在計算機(jī)中的順序存儲方式D、數(shù)據(jù)的邏輯結(jié)構(gòu)在計算機(jī)中的表示

12、下列關(guān)于棧的描述中錯誤的是(C)。

A、棧是先進(jìn)后出的先性表B、棧只能順序存儲

C、棧具有記憶作用D、對棧的插入和刪除操作中,不需要改變棧底指針

13、在寄存器間接尋址方式中,間址寄存器中存放的數(shù)據(jù)是(B)。

A、參與操作的數(shù)據(jù)B、操作數(shù)的地址值

C、程序的轉(zhuǎn)換地址D、指令的操作碼

14、MCS-51單片機(jī)的復(fù)位信號是(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時,其復(fù)位持續(xù)時間應(yīng)該超過(B)。

A、2μsB、4μsC、8μsD、1ms

17、以下選項(xiàng)中可作為C語言合法常量的是(A)

A、-80B、-080C、-8e1.0D、-80.0e

18、能夠用紫外光擦除ROM中程序的只讀存儲器稱為(C)。

A、掩膜ROMB、PROMC、EPROMD、EEPROM

19、以下不能定義為用戶標(biāo)識符是(D)。

A、MainB、_0C、_intD、sizeof

20、下選項(xiàng)中,不能作為合法常量的是(B)。//冪不能為小數(shù)

A、1.234e04B、1.234e0.4C、1.234e 4D、1.234e0

21、以下敘述中錯誤的是(C)

A、對于double類型數(shù)組,不可以直接用數(shù)組名對數(shù)組進(jìn)行整體輸入或輸出

B、數(shù)組名代表的是數(shù)組所占存儲區(qū)的首地址,其值不可改變

C、當(dāng)程序執(zhí)行中,數(shù)組元素的下標(biāo)超出所定義的下標(biāo)范圍時,系統(tǒng)將給出“下標(biāo)越界”的出錯信息

D、可以通過賦初值的方式確定數(shù)組元素的個數(shù)

22、以下與函數(shù)fseek(fp,0L,SEEK_SET)有相同作用的是(D)

A、feof(fp)B、ftell(fp)C、fgetc(fp)D、rewind(fp)

23、存儲16×16點(diǎn)陣的一個漢字信息,需要的字節(jié)數(shù)為(A)

A、32B、64C、128D、256

24、已知1只共陰極LED顯示器,其中a筆段為字形代碼的最低位,若需顯示數(shù)字1,則它的字形代碼應(yīng)為(B)。

A、06HB、F9HC、30HD、CFH

25、在C語言中,合法的長整型常數(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程序存儲器芯片要(B)地址線。

A、8根B、13根C、16根D、20根

29、設(shè)MCS-51單片機(jī)晶振頻率為12MHz,定時器作計數(shù)器使用時,其最高的輸入計數(shù)頻率應(yīng)為(C)

A、2MHzB、1MHzC、500kHzD、250kHz

30、下列數(shù)據(jù)字定義的數(shù)表中,(A)是錯誤的。

A、DW“AA”B、DW“A”C、DW“OABC”D、DWOABCH

三、判斷題

(√)1、在對某一函數(shù)進(jìn)行多次調(diào)用時,系統(tǒng)會對相應(yīng)的自動變量重新分配存儲單元。

(×)2、在C語言的復(fù)合語句中,只能包含可執(zhí)行語句。

(√)3、自動變量屬于局部變量。

(×)4、Continue和break都可用來實(shí)現(xiàn)循環(huán)體的中止。

(√)5、字符常量的長度肯定為1。

(×)6、在MCS-51系統(tǒng)中,一個機(jī)器周期等于1.5μs。

(√)7、C語言允許在復(fù)合語句內(nèi)定義自動變量。

(√)8、若一個函數(shù)的返回類型為void,則表示其沒有返回值。

(×)9、所有定義在主函數(shù)之前的函數(shù)無需進(jìn)行聲明。

(×)10、定時器與計數(shù)器的工作原理均是對輸入脈沖進(jìn)行計數(shù)。

(×)11、END表示指令執(zhí)行到此結(jié)束。

(√)12、ADC0809是8位逐次逼近式模/數(shù)轉(zhuǎn)換接口。

(√)13、MCS-51的相對轉(zhuǎn)移指令最大負(fù)跳距是127B。

(×)14、MCS-51的程序存儲器只是用來存放程序的。

(√)15、TMOD中的GATE=1時,表示由兩個信號控制定時器的的啟停。

(×)16、MCS-51的特殊功能寄存器分布在60H~80H地址范圍內(nèi)。

(×)17、MCS-51系統(tǒng)可以沒有復(fù)位電路。

(×)18、片內(nèi)RAM與外部設(shè)備統(tǒng)一編址時,需要專門的輸入/輸出指令。

(√)19、鎖存器、三態(tài)緩沖寄存器等簡單芯片中沒有命令寄存和狀態(tài)寄存等功能。

(√)20、使用8751且=1時,仍可外擴(kuò)64KB的程序存儲器。

四、簡答題

1、在使用8051的定時器/計數(shù)器前,應(yīng)對它進(jìn)行初始化,其步驟是什么?

答:(1)確定T/C的工作方式——編程TMOD寄存器;

(2)計算T/C中的計數(shù)初值,并裝載到TH和TL;

(3)T/C在中斷方式工作時,須開CPU中斷和源中斷——編程IE寄存器;

(4)啟動定時器/計數(shù)器——編程TCON中TR1或TR0位。

2、什么是重入函數(shù)?重入函數(shù)一般什么情況下使用,使用時有哪些需要注意的地方?

答:多個函數(shù)可以同時使用的函數(shù),稱為重入函數(shù)。

通常情況下,C51函數(shù)不能被遞歸調(diào)用,也不能應(yīng)用導(dǎo)致遞歸調(diào)用的結(jié)構(gòu)。有此限制是由于函數(shù)參數(shù)和局部變量是存儲在固定的地址單元中。重入函數(shù)特性允許你聲明一個重入函數(shù)。即可以被遞歸調(diào)用的函數(shù)。

重入函數(shù)可以被遞歸調(diào)用,也可以同時被兩個或更多的進(jìn)程調(diào)用。重入函數(shù)在實(shí)時應(yīng)用中及中斷服務(wù)程序代碼和非中斷程序代碼必須共用一個函數(shù)的場合中經(jīng)常用到。

3、8051引腳有多少I/O線?他們和單片機(jī)對外的地址總線和數(shù)據(jù)總線有什么關(guān)系?地址總線和數(shù)據(jù)總線各是幾位?

答:8051引腳共有40個引腳,8051的地址總線由P2和P0口提供,P2口是地址總線的高8位,P0口是地址總線的低8位;數(shù)據(jù)總線由P0口提供;P0口的地址總線和數(shù)據(jù)總線是分時進(jìn)行的,P0口的地址總線需要外接地址鎖存器完成地址鎖存。

地址總線共16位,數(shù)據(jù)總線是8位。

4、在有串行通信時,定時器/計數(shù)器1的作用是什么,怎樣確定串行口的波特率?

答:在有串行通信時,定時器/計數(shù)器1的作用是串行口發(fā)生器。

串行口的波特率根據(jù)串行口的工作方式具有不同的計算方式:

方式0的波特率固定為晶體振蕩器的十二分之一;

方式1的波特率=2SMOD.(定時器1的溢出率)/32;

方式2波特率=2SMOD.(fosc/64);

方式3波特率同方式1(定時器l作波特率發(fā)生器)。

5、如何消除鍵盤的抖動?怎樣設(shè)置鍵盤中的復(fù)合鍵?

答:由于按鍵是機(jī)械開關(guān)結(jié)構(gòu),所以當(dāng)用手按下其中一個鍵時,往往會出現(xiàn)所按鍵在閉合位置和斷開位置之間發(fā)生跳幾下后才會穩(wěn)定到閉合狀態(tài)的情況。在釋放一個鍵時,也會出現(xiàn)類似的情況,這就是鍵的抖動,抖動的持續(xù)時間不一,但通常不會大于10ms。

若抖動問題不解決,就會引起對閉合鍵的多次讀入。對于鍵抖動最方便的解決方法就是當(dāng)發(fā)現(xiàn)有鍵按下后,不是立即進(jìn)行掃描,而是延時大約10ms后再進(jìn)行。由于一個鍵按下的時間一般會持續(xù)上百毫秒,所以延遲10ms后再掃描處理并不遲。

復(fù)合鍵可以仿照計算機(jī)復(fù)合鍵的處理方法,通??梢约僭O(shè)一個鍵具有復(fù)合功能,再與其它減的鍵值組合成復(fù)合鍵。1、矩陣式鍵盤的結(jié)構(gòu)與工作原理

在鍵盤中按鍵數(shù)量較多時,為了減少I/O口的占用,通常將按鍵排列成矩陣形式,如圖1所示。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接。這樣,一個端口(如P1口)就可以構(gòu)成4*4=16個按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構(gòu)成20鍵的鍵盤,而直接用端口線則只能多出一鍵(9鍵)。由此可見,在需要的鍵數(shù)比較多時,采用矩陣法來做鍵盤是合理的。

矩陣式結(jié)構(gòu)的鍵盤顯然比直接法要復(fù)雜一些,識別也要復(fù)雜一些,上圖中,列線通過電阻接正電源,并將行線所接的單片機(jī)的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當(dāng)按鍵沒有按下時,所有的輸出端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會被拉低,這樣,通過讀入輸入線的狀態(tài)就可得知是否有鍵按下了。具體的識別及編程方法如下所述。

2、矩陣式鍵盤的按鍵識別方法

確定矩陣式鍵盤上何鍵被按下介紹一種“行掃描法”。

行掃描法行掃描法又稱為逐行(或列)掃描查詢法,是一種最常用的按鍵識別方法,如上圖所示鍵盤,介紹過程如下。

1、判斷鍵盤中有無鍵按下將全部行線Y0-Y3置低電平,然后檢測列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個按鍵之中。若所有列線均為高電平,則鍵盤中無鍵按下。

2、判斷閉合鍵所在的位置在確認(rèn)有鍵按下后,即可進(jìn)入確定具體閉合鍵的過程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時,其它線為 高電平。在確定某根行線位置為低電平后,再逐行檢測各列線的電平狀態(tài)。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。

下面給出一個具體的例子:

圖仍如上所示。8031單片機(jī)的P1口用作鍵盤I/O口,鍵盤的列線接到P1口的低4位,鍵盤的行線接到P1口的高4位。列線P1.0-P1.3分別接有4個上拉電阻到正電源 5V,并把列線P1.0-P1.3設(shè)置為輸入線,行線P1.4-P.17設(shè)置為輸出線。4根行線和4根列線形成16個相交點(diǎn)。

1、檢測當(dāng)前是否有鍵被按下。檢測的方法是P1.4-P1.7輸出全“0”,讀取P1.0-P1.3的狀態(tài),若P1.0-P1.3為全“1”,則無鍵閉合,否則有鍵閉合。

2、去除鍵抖動。當(dāng)檢測到有鍵按下后,延時一段時間再做下一步的檢測判斷。

3、若有鍵被按下,應(yīng)識別出是哪一個鍵閉合。方法是對鍵盤的行線進(jìn)行掃描。P1.4-P1.7按下述4種組合依次輸出:

P1.71110

P1.61101

P1.51011

P1.40111

在每組行輸出時讀取P1.0-P1.3,若全為“1”,則表示為“0”這一行沒有鍵閉合,否則有鍵閉合。由此得到閉合鍵的行值和列值,然后可采用計算法或查表法將閉合鍵的行值和列值轉(zhuǎn)換成所定義的鍵值

4、為了保證鍵每閉合一次CPU僅作一次處理,必須卻除鍵釋放時的抖動。

鍵盤掃描程序:

從以上分析得到鍵盤掃描程序的流程圖如圖2所示。程序如下

SCAN:MOVP1,#0FH

MOVA,P1

ANLA,#0FH

CJNEA,#0FH,NEXT1

SJMPNEXT3

NEXT1:ACALLD20MS

MOVA,#0EFH

NEXT2:MOVR1,A

MOVP1,A

MOVA,P1

ANLA,#0FH

CJNEA,#0FH,KCODE;

MOVA,R1

SETBC

RLCA

JCNEXT2

NEXT3:MOVR0,#00H

RET

KCODE:MOVB,#0FBH

NEXT4:RRCA

INCB

JCNEXT4

MOVA,R1

SWAPA

NEXT5:RRCA

INCB

INCB

INCB

INCB

JCNEXT5

NEXT6:MOVA,P1

ANLA,#0FH

CJNEA,#0FH,NEXT6

MOVR0,#0FFH

RET

鍵盤處理程序就作這么一個簡單的介紹,實(shí)際上,鍵盤、顯示處理是很復(fù)雜的,它往往占到一個應(yīng)用程序的大部份代碼,可見其重要性,但說到,這種復(fù)雜并不來自于單片機(jī)的本身,而是來自于操作者的習(xí)慣等等問題,因此,在編寫鍵盤處理程序之前,最好先把它從邏輯上理清,然后用適當(dāng)?shù)乃惴ū硎境鰜?,最后再去寫代碼,這樣,才能快速有效地寫好代碼。

到本課為止,本站教程暫告一個段落!感謝大家的關(guān)心和支持!矩陣按鍵部分由16個輕觸按鍵按照4行4列排列,連接到JP50端口。將行線所接的單片機(jī)的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當(dāng)按鍵沒有按下時,所有的輸出端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會被拉低,這樣,通過讀入輸入線的狀態(tài)就可得知是否有鍵按下了。確定矩陣式鍵盤上何鍵被按下,介紹一種“行掃描法”。行掃描法行掃描法又稱為逐行(或列)掃描查詢法,是一種最常用的按鍵識別方法.判斷鍵盤中有無鍵按下:將全部行線置低電平,然后檢測列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個按鍵之中。若所有列線均為高電平,則鍵盤中無鍵按下。判斷閉合鍵所在的位置:在確認(rèn)有鍵按下后,即可進(jìn)入確定具體閉合鍵的過程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時,其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測各列線的電平狀態(tài)。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。下面給出一個具體的例子:電路圖路徑:G:\圖片\電路圖片\xl100097.jpg8031單片機(jī)的P1口用作鍵盤I/O口,鍵盤的列線接到P1口的低4位,鍵盤的行線接到P1口的高4位。列線P1.0-P1.3設(shè)置為輸入線,行線P1.4-P.17設(shè)置為輸出線。4根行線和4根列線形成16個相交點(diǎn)。1.檢測當(dāng)前是否有鍵被按下。檢測的方法是P1.4-P1.7輸出全“0”,讀取P1.0-P1.3的狀態(tài),若P1.0-P1.3為全“1”,則無鍵閉合,否則有鍵閉合。2.去除鍵抖動。當(dāng)檢測到有鍵按下后,延時一段時間再做下一步的檢測判斷。3.若有鍵被按下,應(yīng)識別出是哪一個鍵閉合。方法是對鍵盤的行線進(jìn)行掃描。P1.4-P1.7按下述4種組合依次輸出:P1.71110P1.61101P1.51011P1.40111在每組行輸出時讀取P1.0-P1.3,若全為“1”,則表示為“0”這一行沒有鍵閉合,否則有鍵閉合。由此得到閉合鍵的行值和列值,然后可采用計算法或查表法將閉合鍵的行值和列值轉(zhuǎn)換成所定義的鍵值。4.為了保證鍵每閉合一次CPU僅作一次處理,必須去除鍵釋放時的抖動。實(shí)驗(yàn)?zāi)康模和ㄟ^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個鍵盤顯示分別顯示數(shù)字123A456B789C*0#D;鍵盤口P1,數(shù)碼管顯示第二位p21,數(shù)碼管段位p0口org0000hajmpmainorg0030hmain:movdptr,#tab;將表頭放入DPTRlcallkey;調(diào)用鍵盤掃描程序movca,@a dptr;查表后將鍵值送入ACCmovp0,a;將Acc值送入P0口CLRP2.1;開顯示ljmpmain;返回反復(fù)循環(huán)顯示KEY:LCALLKS;調(diào)用檢測按鍵子程序JNZK1;有鍵按下繼續(xù)LCALLDELAY2;無鍵按調(diào)用延時去抖AJMPKEY;返回繼續(xù)檢測按鍵K1:LCALLDELAY2LCALLDELAY2;有鍵按下延時去抖動LCALLKS;再調(diào)用檢測按鍵程序JNZK2;確認(rèn)有按下進(jìn)行下一步AJMPKEY;無鍵按下返回繼續(xù)檢測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)用延時去抖動程序LCALL KS;調(diào)用按鍵檢測程序JNZK4;按鍵沒有松開繼續(xù)返回檢測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延時去抖動子程序MOVR5,#08HL7:MOVR6,#0FAHL8:DJNZR6,L8DJNZR5,L7RETtab:db28h,34h,28h,34h,0a9h,60h,20h,7ah,20h,21h,61h,74h,30h,62h,0a2h,7eh;0h0hc9878654a321輪流顯示鍵盤因?yàn)闊o法表達(dá)*#就用H表示,B用8表示end這是我做成功的4X4鍵盤掃描源程序,P1.0-P1.3做四根列線,P1.4-P1.7做四根行線。

數(shù)碼管的字型表是按照標(biāo)準(zhǔn)接法做的,按對應(yīng)的按鍵數(shù)碼管顯示對應(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個位十位顯示轉(zhuǎn)換控制

;P1口接8個開關(guān)模擬數(shù)據(jù)

;P1.0-P1.3為個位開關(guān)量輸入

;P1.4-P1.7為十位開關(guān)量輸入

;此程序僅供參考

;功能P1口接8個開關(guān)輸入量4個一組,分別為個位,十位輸入

;P0口接一個數(shù)碼管,依次顯示輸入量。P3.1控制是否讀入

;開關(guān)量。P2.6P2.7控制是否顯示個位或十位

ORG100h

LJMPSTAR

STAR:MOVP1,#0FFH

SETBP3.1數(shù)據(jù)讀入標(biāo)志

MOVR0,#100,循環(huán)工作次數(shù)

LOOP:JBP3.1,$P3.1低電平時,采集P1口數(shù)據(jù)開關(guān)量處理顯示階段不再應(yīng)答P3.1

MOVA,P1

PUSHACC

ANLA,#0FH取個位數(shù)值

MOVR1,A個位數(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個位顯示

ACALLDELAY500MS

SETBP2.6

MOVA,R2

MOVCA,@A DPTR

MOVP0,A

CLRP2.7十位顯示

ACALLDELAY500MS

SETBP2.7

DJNZR0,LOOP

DELAY500MS:延時500毫秒子程略

RET

TABLED:DB0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h

DB80H,90H,88h,83h,0c6h,0a1h,86h,8eh

END#include

typedefunsignedcharBYTE;

BYTEcodeTABLED[16]={0Xc0,0Xf9,0Xa4,0Xb0,0X99,0X92,0X82,0X0f8,0X80,0X90,0X88,0X83,0Xc6,0Xa1,0X86,0X8e};

BYTEDATled;

sbitP26=P2^6;

sbitP27=P2^7;

sbitP31=P3^1;

intTIME;

voidtimedelay(DTIME)

intDTIME;

{

intI;

for(I=0;I<=DTIME;I );

}

voidmain()

{

intTEMP;

P26=1;

P27=1;

P31=1;

P1=0xFF;

TIME=1000;

while(1){

while(P31==0){

DATled=P1;

TEMP=DATled&0x0f4;

P0=TABLED[TEMP];

P27=0;

timedelay(TIME);

P27=1;

}

}

}1.實(shí)驗(yàn)任務(wù)在8X8 LED點(diǎn)陣上顯示柱形,讓其先從左到右平滑移動三次,其次從右到左平滑移動三次,再次從上到下平滑移動三次,最后從下到上平滑移動三次,如此循環(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è)計內(nèi)容(1).8X8 點(diǎn)陣LED工作原理說明8X8點(diǎn)陣LED結(jié)構(gòu)如下圖所示圖4.24.2從圖4.24.2中可以看出,8X8點(diǎn)陣共需要64個發(fā)光二極管組成,且每個發(fā)光二極管是放置在行線和列線的交叉點(diǎn)上,當(dāng)對應(yīng)的某一列置1電平,某一行置0電平,則相應(yīng)的二極管就亮;因此要實(shí)現(xiàn)一根柱形的亮法,如圖49所示,對應(yīng)的一列為一根豎柱,或者對應(yīng)的一行為一根橫柱,因此實(shí)現(xiàn)柱的亮的方法如下所述:一根豎柱:對應(yīng)的列置1,而行則采用掃描的方法來實(shí)現(xiàn)。一根橫柱:對應(yīng)的行置0,而列則采用掃描的方法來實(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語言源程序

#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)陣漢字庫的編碼和從標(biāo)準(zhǔn)字庫中提取漢字編碼的方法。

三.實(shí)驗(yàn)電路及連線

點(diǎn)陣顯示模塊WTD3088的(紅色)列輸入線接至內(nèi)部LED的陰極端,行輸入線接至內(nèi)部LED的陽極端(若陽極端輸入為高電平,陰極端輸入低電平,則該LED點(diǎn)亮)。發(fā)光點(diǎn)的分布如圖22-0所示。

Fig22-0WTD3088LED分布

如圖22-1示,本實(shí)驗(yàn)?zāi)K使用74LS374來控制列輸入線的電平值。將74LS374的某輸出置0,則對應(yīng)的LED陰極端被置低。如圖22-2示,本實(shí)驗(yàn)?zāi)K使用74LS273來控制行輸入線,并通過9013提供電流驅(qū)動。將74LS273的某輸出置1,則對應(yīng)的LED陽極端被置高。每次系統(tǒng)重新開啟或總清后,74LS273輸出為全0,LED顯示被關(guān)閉。

通過編程控制各顯示點(diǎn)對應(yīng)LED陽極和陰極端的電平,就可以有效的控制各顯示點(diǎn)的亮滅。

Fig22-1LED模塊及列掃描電路Fig22-2行掃描電路

Fig22-3地址譯碼電路

本實(shí)驗(yàn)?zāi)K使用4塊WTD3088組成16×16點(diǎn)陣,以滿足漢字顯示的要求。為了方便的控制四個單元,使用了一片74LS139譯碼,產(chǎn)生四個地址片選信號:CLKR1=CSLED,CLKR2=CSLED 1,用于行控制的兩片74LS273;CLKC1=CSLED 2,CLKC2=CSLED 3,用于列控制的兩片74LS374。

實(shí)驗(yàn)接線:按示例程序,模塊的CSLED接51/96地址的8000H。

四.實(shí)驗(yàn)說明

使用高亮度LED發(fā)光管構(gòu)成點(diǎn)陣,通過編程控制可以顯示中英文字符、圖形及視頻動態(tài)圖形。LED顯示以其組構(gòu)方式靈活、亮度高、技術(shù)成熟、成本低廉等特點(diǎn)在證券、運(yùn)動場館及各種室內(nèi)/外顯示場合得到廣泛的應(yīng)用。

所顯示字符的點(diǎn)陣數(shù)據(jù)可以自行編寫(即直接點(diǎn)陣畫圖),也可從標(biāo)準(zhǔn)字庫(如ASC16、HZ16)中提取。后者需要正確掌握字庫的編碼方法和字符定位的計算。

實(shí)驗(yàn)盤片中“字符轉(zhuǎn)換”子目錄下提供的Basc16.exe,BHz16.exe可方便的將單個字符的碼表從標(biāo)準(zhǔn)字庫Asc16,Hzk16中提取出來。具體使用方法是運(yùn)行上述可執(zhí)行程序,根據(jù)提示輸入所需字符(如是漢字還需要先啟動dos下的漢字環(huán)境,如ucdos,pdos95等)。程序?qū)⒃撟址拇a表提取出來,存放在該字符ASC或區(qū)位碼為文件名稱的.dat文件中。用戶只需將該文件中內(nèi)容拷貝、粘貼到自己的程序中即可。但需要注意字節(jié)排列順序、字節(jié)中每一位與具體顯示點(diǎn)的一一對應(yīng)關(guān)系,必要時還要對碼表稍作修改。同一目錄下還提供了上述可執(zhí)行程序的源文件,使用BC3.1編寫,供用戶參考。

五.實(shí)驗(yàn)程序框圖

用戶應(yīng)留心其中行掃描的實(shí)現(xiàn)及碼表的處理。

六.實(shí)驗(yàn)程序:(一)提供LEDA51演示Asc16字符的簡單點(diǎn)陣顯示。

;________*LED點(diǎn)陣顯示示例程序______________________*

;__該程序顯示Asc16字符__

;__為了簡單起見,程序只顯示一個字符__

;__該程序針對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;代碼取反,決定顯示的陰陽

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

;________延時子程序,協(xié)調(diào)字符顯示速度____________*

DELAY:MOVR7,#1H

DL1:MOVR6,#00H

DL2:DJNZR6,DL2

DJNZR7,DL1

RET

;________字符點(diǎn)陣字庫______________*

;ASC16字符編碼排列

;0

;1

;|

;|

;14

;15

;高位D7--D0

;請注意編碼的排列次序和實(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兩個示例程序。和Hz16字符的簡單點(diǎn)陣顯示。

;________*LED點(diǎn)陣顯示示例程序______________________*

;__該程序顯示hz16字符__

;__為了簡單起見,程序只顯示一個字符__

;__該程序針對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

;________延時子程序,協(xié)調(diào)字符顯示速度____________*

DELAY:MOVR7,#1H

DL1:MOVR6,#00H

DL2:DJNZR6,DL2

DJNZR7,DL1

RET

;________字符點(diǎn)陣字庫______________*

;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ī)可鎖定加密鍵盤設(shè)計摘要:介紹PC鍵盤和鍵盤接口的PS/2通信協(xié)議,以及用89C51實(shí)現(xiàn)可鎖定鍵盤的軟件和硬件設(shè)計方法。具有安全可靠、容錯能力強(qiáng)、可以直接采用標(biāo)準(zhǔn)鍵盤進(jìn)行改裝、便于實(shí)現(xiàn)等優(yōu)點(diǎn),并保留標(biāo)準(zhǔn)鍵盤的全部功能。關(guān)鍵詞:PS/289C51C51鍵盤引言

在智能儀器、自動控制等領(lǐng)域,已大量使用嵌入式PC,如Advantech公司的PC/104、AMD公司的DIMM-PC等。為適應(yīng)開放式、模塊化的要求,嵌入式PC具有標(biāo)準(zhǔn)的PC接口,如VGA顯示器控制接口、以太網(wǎng)接口、RS232接口、PC/AT鍵盤接口等。所以,可以用標(biāo)準(zhǔn)的PC鍵盤對嵌入式PC進(jìn)行操作與控制。鍵盤在輸入指令之后,可能很長一段時間不用。為計算機(jī)安全和防止誤觸發(fā),需要將鍵盤鎖定,還要對某些鍵采取屏蔽措施,但是PC標(biāo)準(zhǔn)鍵盤不能滿足這些要求。本文介紹一種用89C51設(shè)計實(shí)現(xiàn)的可鎖定加密PC/AT鍵盤。

1鍵盤功能及工作原理

PC鍵盤功能主要有按鍵識別、去抖、重鍵處理、發(fā)送掃描碼、自動重發(fā)、接收鍵盤命令、處理命令等。鍵盤有編碼鍵盤和非編碼鍵盤。編碼鍵盤程序設(shè)計簡單,但硬件電路復(fù)雜,價格較高;非編碼鍵盤用軟件來實(shí)現(xiàn)識別鍵、編碼轉(zhuǎn)換、去抖等功能,硬件電路簡單,價格便宜。現(xiàn)代微機(jī)系統(tǒng)中廣泛采用非編碼鍵盤。PC鍵盤多采用18行×8列的二維矩陣行列結(jié)構(gòu)。采用行掃描法識別按下的按鍵。2PS/2協(xié)議

PS/2協(xié)議是外設(shè)與主機(jī)之間通信的一種同步雙向串行協(xié)議。在該協(xié)議中主機(jī)擁有較高的優(yōu)先級,在一定條件下可以終止外設(shè)正在進(jìn)行的發(fā)送過程。PS/2協(xié)議采用的傳送數(shù)據(jù)幀的格式為:1位起始位(0)、8位數(shù)據(jù)位、1位奇偶校驗(yàn)位、1位停止位(1)。數(shù)據(jù)發(fā)送時低位在前,高位在后。外設(shè)每收到主機(jī)發(fā)來的1幀數(shù)據(jù),都要緊隨該幀的停止位發(fā)送一個握手位ACK(0)應(yīng)答主機(jī)。然后,外設(shè)還要發(fā)1幀應(yīng)答數(shù)據(jù)(0xF0),表示外設(shè)已經(jīng)完整地接收到了主機(jī)的命令;而主機(jī)則不需發(fā)送握手位,也不需要發(fā)送應(yīng)答幀。

2.1鍵盤到PC鍵盤接口的通信

當(dāng)時鐘線和數(shù)據(jù)線均為高電平時,允許鍵盤發(fā)送數(shù)據(jù),系統(tǒng)將接收數(shù)據(jù);當(dāng)時鐘線被拉為低電平時,表明系統(tǒng)禁止數(shù)據(jù)傳輸。圖1給出了發(fā)送時序,包含1個低電平觸發(fā)的起始位、8位數(shù)據(jù)位、1個奇校驗(yàn)位和1個高電平的結(jié)束位。2.2PC系統(tǒng)到鍵盤的通信協(xié)議

若時鐘線出現(xiàn)高電平,數(shù)據(jù)線出現(xiàn)低電平,表明系統(tǒng)請求發(fā)送,鍵盤準(zhǔn)備產(chǎn)生同步時鐘脈沖串,并接收數(shù)據(jù)。包含了1個低電平觸發(fā)的起始位、8位數(shù)據(jù)位、1個奇校驗(yàn)位、1個應(yīng)答位、1個高電平的結(jié)束位。圖2為時序圖。(1)鍵盤命令及執(zhí)行過程①FFH:復(fù)位鍵盤。系統(tǒng)通過此軟件復(fù)位命令使鍵盤進(jìn)入程序復(fù)位和內(nèi)部自測試,稱為基本保證測試(BAT)。復(fù)位鍵盤的過程如下:a.鍵盤收到FFH后立即回送ACK(FAH)作答;b.鍵盤接口收到ACK后,將鍵盤時鐘和數(shù)據(jù)線置為高電平;c.鍵盤檢測到此狀態(tài)后開始BAT操作;d.如果BAT正確完成,鍵盤發(fā)送AAH以表示結(jié)束,

否則以FDH(或其它任何值)表示診斷有誤。②FEH:重新發(fā)送。當(dāng)系統(tǒng)檢測到從鍵盤送來的任何傳輸錯誤時,它便向鍵盤發(fā)送FEH命令。鍵盤接收到此命令后,將重新送出原來的內(nèi)容。③FDH~F7H:空操作(保留未用)。④F6H:設(shè)置缺省值。此命令使鍵盤所有條件復(fù)位到電源接通時的缺省狀態(tài),鍵盤繼續(xù)掃描。⑤F5H:設(shè)置缺省值和停止鍵盤。此命令使鍵盤所有條件復(fù)位到電源接通時的缺省狀態(tài),并停止鍵盤掃描,等待下一個鍵盤命令。⑥F4H:啟動鍵盤。鍵盤接收到此命令后,用ACK(FAH)作答,清除輸出緩沖器,并啟動鍵盤開始掃描。⑦F3H:設(shè)置拍發(fā)速率和延時參數(shù)。每當(dāng)按下任 一鍵時,鍵盤以拍發(fā)速率連續(xù)送出鍵的接通碼,直到鍵被釋放為止。延時參數(shù)是指按下一鍵后,鍵盤輸出的響應(yīng)時間。

系統(tǒng)缺省設(shè)置:拍發(fā)速率=10個/s±20,延時=500ms±20。

當(dāng)要改變設(shè)置時可以使用F3H命令,并后跟一個字節(jié)的參數(shù)。參數(shù)定義如表1所列。

表1D7D6D5D4D3D2D1D00CBA

計算拍發(fā)速率和響應(yīng)延時的公式如下:

拍發(fā)速率=1/[(8 A)×2B×0.00417](1/s)

響應(yīng)延時=(1 C)×250(ms)注:缺省的延時參數(shù)值為2CH。此命令的執(zhí)行過程如下:a.鍵盤收到F3H命令后,用FAH予以響應(yīng),并停止掃描和等待隨后的參數(shù);b.鍵盤若收到隨后的設(shè)置參數(shù),用另一個ACK響應(yīng),并按其參數(shù)設(shè)置新的拍發(fā)速率和響應(yīng)延時,之后重新開始掃描(若鍵盤原來是開放的);c.鍵盤若收到FAH命令,但無隨后的設(shè)置參數(shù),則鍵盤結(jié)束命令設(shè)置,并保持原來的拍發(fā)速率和響應(yīng)延時,停止掃描。⑧F2H,F(xiàn)1,EFH:保留未用。⑨F0H:設(shè)置鍵盤掃描碼命令。此命令用于設(shè)置鍵盤的掃描碼,后跟參數(shù)指定三種掃描碼的哪一種。鍵盤復(fù)位時,默認(rèn)掃描碼是第二種。⑩EEH:回送命令。此命令用于輔助診斷,要求鍵盤接收到EEH時也要回送EEH予以響應(yīng)。若鍵盤原來是開放的,則繼續(xù)掃描。EDH:置位/復(fù)位LED指示器。鍵盤右上角有三個LED指示器,分別反映Caps、Num和Scroll三個鍵的鎖定情況。參數(shù)字節(jié)如表2所列。

表2D7D3D2D1D0保留1=激勵CapsLED1=激勵NumLED1=激勵ScrollLED

此命令執(zhí)行過程與F3H相似。若命令后跟參數(shù),則按參數(shù)設(shè)定LED狀態(tài)并繼續(xù)掃描。若僅有命令無參數(shù),則不改變LED原狀態(tài),并停止掃描。(2)鍵盤響應(yīng)鍵盤在下列四種情況下都會向鍵盤接口發(fā)送數(shù)據(jù)。①按下任一鍵,鍵盤以拍發(fā)速率向接口發(fā)送鍵盤接通掃描碼。②釋放所按下的鍵,鍵盤發(fā)送斷開掃描碼。③系統(tǒng)向鍵盤發(fā)送鍵盤命令后,鍵盤回送應(yīng)答。④當(dāng)用戶按鍵速度超出鍵盤所能容納的最大鍵個數(shù)時,鍵盤做出響應(yīng)。后三種情況稱為鍵盤響應(yīng)。響應(yīng)字節(jié)有7個,定義如下。

①FEH:重新發(fā)送響應(yīng)。當(dāng)鍵盤收到一個無效的鍵盤命令,或者檢測到奇偶錯的鍵盤命令時,鍵盤回送響應(yīng)字節(jié)為FEH,要求系統(tǒng)重發(fā)鍵盤命令。②FAH:正常應(yīng)答。對任何一個有效的鍵盤命令,鍵盤回送FAH予以響應(yīng)。③00H:超限應(yīng)答。當(dāng)用戶按鍵速度超出鍵盤所能容納的最大鍵符個數(shù)時(16個字節(jié)的緩沖器),鍵盤發(fā)送00H。④FDH:診斷故障應(yīng)答。鍵盤接受軟件復(fù)位命令,執(zhí)行自測試過程中。若檢測到故障,則以FDH應(yīng)答。此時,鍵盤停止掃描并等待下一個鍵盤命令。⑤AAH:診斷正常應(yīng)答。鍵盤在軟件復(fù)位過程中,正常完成BAT測試,以AAH應(yīng)答。⑥FEH:回響命令的應(yīng)答,對鍵盤FEH命令的應(yīng)答。⑦F0H:斷開掃描碼前綴,鍵盤對鍵符按下后釋放的應(yīng)答,第一個字節(jié)為F0H,第二個字節(jié)為接通掃描碼(有幾個鍵例外)。3硬件設(shè)計

PC系列鍵盤采用18行×8列的矩陣行列結(jié)構(gòu)。89C51單片機(jī)有4個8位I/O端口,因此可以采用P0、P2口再加上P3口的2個(P3.6和P3.7)作為行掃描線。P1口作為列輸入線(如果用P0口作列輸入線,必須加上拉電阻)。采用P3.0、P3.1作為數(shù)據(jù)線和時鐘線與PC系統(tǒng)進(jìn)行通信,用P3.2、P3.4、P3.5控制鍵盤上的3個指示燈。硬件原理如圖3所示。

鍵盤與計算機(jī)通過一個五芯(PS/2接口為六芯)插座相接,4個有效引腳的定義分別是電源(VCC)、地(GND)、串行時鐘線(SCK)、串行數(shù)據(jù)線(SIO)。

4軟件設(shè)計①消抖及重鍵處理:通過軟件上延時程序來消除抖動;采用后按鍵優(yōu)先處理,即多鍵同時按下時,只重復(fù)發(fā)送最后按下鍵的掃描碼。②程序包括鍵盤掃描子程序、發(fā)送鍵碼子程序、發(fā)送數(shù)據(jù)子程序、接收命令子程序、定時器1中斷服務(wù)程序、主程序等。鍵盤掃描子程序用于掃描鍵狀態(tài),將被按鍵的位置號存入緩沖器中;發(fā)送鍵碼子程序用于將緩沖區(qū)鍵的接通碼或斷開碼發(fā)送給計算機(jī)鍵盤接口或者存在鍵盤密碼緩沖區(qū)中;發(fā)送數(shù)據(jù)子程序用于將數(shù)據(jù)發(fā)給計算機(jī)鍵盤接口;接收命令子程序用于接收計算機(jī)鍵盤接口發(fā)來的鍵盤命令;定時器1中斷服務(wù)子程序用于給程序中的延時提供標(biāo)準(zhǔn)時鐘,并具有軟件看門狗功能,防止軟件出現(xiàn)死機(jī)現(xiàn)象;主程序用于系統(tǒng)初始化,子程序調(diào)度,鎖定狀態(tài)的顯示等。

圖6發(fā)送緩沖區(qū)鍵碼子程序流程圖

圖4~6是主要軟件模塊的流程圖。單片機(jī)源程序見本刊網(wǎng)絡(luò)補(bǔ)充版(.com)。

5結(jié)論

本文介紹的PC/AT鍵盤具有結(jié)構(gòu)簡單、設(shè)計靈活、安全可靠的特點(diǎn),可用于標(biāo)準(zhǔn)PC和嵌入式PC。本鍵盤可以在標(biāo)準(zhǔn)的鍵盤基礎(chǔ)上進(jìn)行改造,只需換掉原來的控制芯片即可,可節(jié)省設(shè)計成本。單片機(jī)C51編程幾個有用的模塊(1)KeilC51常用功能模塊使用說明

說明

本文檔包括單片機(jī)系統(tǒng)中常用到的時鐘中斷、通訊及鍵盤掃描等模塊(見所附源程序)的說明。這些模塊使用前后臺系統(tǒng)模型。為達(dá)到最大的靈活性,需要在用戶工程中定義config.h文件,在其中定義各模塊可選參數(shù)的設(shè)置,而不是直接更改源代碼。

這些可選內(nèi)容大部分為宏定義,如果不定義宏相應(yīng)的功能在編譯時被屏蔽,不會增加代碼長度。具體可選內(nèi)容見各模塊中的說明。

在Config.h文件中還要包含一個單片機(jī)硬件的資源頭文件。

各模塊使用了定義在Common.h中的一些數(shù)據(jù)類型。如:BIT(bit)BYTE(unsignedchar)等,具體請參見源程序。

時鐘模塊

在單片機(jī)軟件設(shè)計中,時鐘是重要資源,為了充分利用時鐘資源,故設(shè)計本時鐘模塊。本模塊使用定時器0,在完成用戶指定功能的同時,還能夠自動處理一些其它模塊中與時鐘相關(guān)的信息。

時鐘模塊由聲明文件Timer.h以及實(shí)現(xiàn)文件Timer.c組成。

用戶應(yīng)該在Config.h中定義宏TIMER_RELOAD來設(shè)定定時器0的重裝載初值。推薦的定時器0的中斷時間大于1毫秒。

在程序的初始化階段調(diào)用時鐘模塊的初始化函數(shù)InitTimerModule()之后,就可以使用時鐘模塊所以支持的各種功能。具體描述如下:

延時:當(dāng)用戶需要進(jìn)行一定時間的延時時,可以通過調(diào)用Delay()來進(jìn)行,參數(shù)為時鐘中斷的次數(shù)。如時鐘中斷周期為1ms,想進(jìn)行100ms的延時,則可以調(diào)用Delay(100)。

注意:

如果延時的絕對時間小于時鐘中斷的周期,則不能夠用本方法做到延時。

定時:當(dāng)程序中需要使用定時功能時,如等待某外部事件,如果在一定時間內(nèi)發(fā)生則繼續(xù)執(zhí)行,如果在這段時間內(nèi)發(fā)生,則認(rèn)為出現(xiàn)錯誤,轉(zhuǎn)向錯誤處理機(jī)制。

在此推薦一種編程模式,但用戶可以用自己認(rèn)為更合理的方式處理此類問題。

這里簡單說明一下關(guān)于阻塞式函數(shù)及非阻塞式函數(shù)。簡單說,阻塞式函數(shù)就是當(dāng)檢測完成條件,如果不能夠完成則等待,如:

voidCheckSomething()

{

//gbitSuccessFlagisaglobalvariable

while(gbitSuccessFlag==FALSE)

{

//donothingbutwaiting

}

}

可以看到,當(dāng)bitSuccessFlag沒有被設(shè)置為TRUE時,函數(shù)保持等待狀態(tài)不返回,這樣就是阻塞式的函數(shù)。

另外一種情況:

BITCheckSomething()

{

if(gbitSuccessFlag==TRUE)

{

//…

returnTRUE;

}

returnFALSE;

}

在這里,如果所檢測的事件有沒有完成,函數(shù)進(jìn)行檢測之后,立刻返回, 通過返回值報告完成情況,如果沒有完成,則等待調(diào)用者分配再次執(zhí)行的機(jī)會。這樣的函數(shù)就是非阻塞函數(shù)。

在應(yīng)用定時功能時,首先要將檢測函數(shù)定義成非阻塞函數(shù)。如上面的第二個版本的CheckSomething。

然后下面模式:

BITbitDone=FALSE;

ResetClock();//cleartimerinterrupttimescounter

while(GetClock()

{

if(CheckSomething()==TRUE)

{

bitDone=TRUE;

break;

}

}

if(bitDone==FALSE)

{

//processtimeout

}

或者簡單寫成:

BITbitDone=FALSE;

ResetClock();

while(GetClock()=(z))

當(dāng)然,用戶也可以將IsPackageHeader和IsPackageTailer定義成為函數(shù),通過BIT類型的返回值來向調(diào)用者提供與相應(yīng)宏相同的信息。

另一種辦法需要在Config.h文件中定義宏SCOMM_ComplexPackageFormat。(需要注意的是,不能夠同時定義SCOMM_SimplePackageFormat和SCOMM_ComplexPackageFormat宏,否則會造成嚴(yán)重的不可預(yù)見性錯誤。

這時需要提供回調(diào)函數(shù)QueryPackageFormat,原形如下:

BYTEQueryPackageFormat(BYTEbyData,BYTEbyCount,BYTEbyParam);

函數(shù)中三個參數(shù)的含義與使用簡單數(shù)據(jù)包格式時判斷數(shù)據(jù)包尾的宏的參數(shù)相同。

函數(shù)通過返回值來通知作為調(diào)用者的接收函數(shù)對接收到的數(shù)據(jù)如何處理,但目前這種方法僅為需要處理復(fù)雜數(shù)據(jù)包格式時的一種可選方法,但不推薦。用戶如果想使用這種方法可以自己更改接收函數(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ù)包出錯,需要拋棄。

然后更改源代碼來實(shí)現(xiàn)上面的協(xié)議。

注意:當(dāng)用戶需要使用字符串的時候,可以利用簡單的包裝函數(shù)將字符串轉(zhuǎn)換為字節(jié)數(shù)組。所以沒有必要提供專用的字符串處理函數(shù)。

鍵盤掃描模塊

鍵盤掃描模塊有兩種工作方式,一種為自動的由時鐘模塊調(diào)用,另一種是由程序員自行調(diào)用。

1)由時鐘模塊自動調(diào)用的方式

將時鐘模塊實(shí)現(xiàn)文件(Timer.h)及鍵盤掃描模塊的實(shí)現(xiàn)文件(KBScan。c)包含進(jìn)工程,在Config.h文件中添加TIMER_KBSCANDELAY宏。時鐘模塊自動對時鐘中斷進(jìn)行計數(shù),當(dāng)達(dá)到TIMER_KBSCANDELAY宏所定義的值后,自動調(diào)用鍵盤掃描模塊中的函數(shù)KBScanProcess()進(jìn)行鍵盤掃描,也就是說,這個宏的值可以決定按鍵消抖動的時間。

用戶應(yīng)該提供兩個回調(diào)函數(shù)OnKBScan()及OnKeysPressed()。在函數(shù)OnKBScan中進(jìn)行鍵盤掃描,并返回掃描碼。掃描碼的類型缺省為BYTE,當(dāng)鍵盤規(guī)模較大時,BYTE不能夠完全包含鍵盤信息時,可在Config.h文件中重定義宏KBvalue,如下:

#defineKBvalueWORD

這樣,就可以使用16位的鍵盤掃描碼,如果此時還達(dá)不到要求,可以將鍵盤掃描碼定義成一個結(jié)構(gòu),但這樣做將會增加代碼量及消耗更多的RAM資源,故不推薦。

掃描模塊調(diào)用OnKBScan取得掃描碼,并調(diào)用用戶可以重定義的宏IsNoKeyPressed來判斷是否有鍵按下,缺省的IsNoKeyPressed實(shí)現(xiàn)如下:

#defineIsNoKeyPressed(x)((x)==0x00)

即認(rèn)為OnKBScan返回0掃描碼時為沒有鍵按下,如果掃描函數(shù)返回其它非零掃描碼做為無鍵按下的掃描碼時,可以在Config.h文件中重定義IsNoKeyPressed宏的實(shí)現(xiàn)。

8位鍵盤掃描碼(缺省值)時,相應(yīng)的掃描函數(shù)為:

BYTEOnKBScan()

當(dāng)掃描模塊經(jīng)過軟件消抖動之后,發(fā)現(xiàn)有鍵按下,就會調(diào)用另一個回調(diào)函數(shù)OnKeysPressed。函數(shù)的聲明應(yīng)該如下:

voidOnKeyPressed(BYTEbyKBvalue,BYTEbyState)

其中中的參數(shù)byKBvalue的類型為BYTE,此為缺省值,如果使用其它類型的掃描碼,就將此參數(shù)變?yōu)橄鄳?yīng)類型。這個值由OnKBScan返回。另一個參數(shù)byState在通常情況下為零。但當(dāng)用戶在Config.h中定義宏KBSCAN_BRUSTCOUNT,同時鍵盤上的某鍵被按住不放時,掃描模塊對它自己的調(diào)用(注意這里和TIMER_KBSCANDELAY宏不同,TIMER_KBSCANDELAY是時鐘中斷足夠的次數(shù)后調(diào)用掃描模塊,而KBSCAN_BRUSHCOUNT為掃描模塊自身的被調(diào)用次數(shù))進(jìn)行計數(shù),當(dāng)達(dá)到KBSCAN_BRUSTCOUNT時,掃描模塊調(diào)用OnKeysPressed,此時第一個參數(shù)的含義不變,而byState變成1,同時計數(shù)器復(fù)位,又經(jīng)過一段時間后,用值為3的byState調(diào)用OnKeysPressed。這樣就可以很方便的實(shí)現(xiàn)多功能鍵或者檢測某鍵的長時間被按下。

2)由用戶自行調(diào)用

由用戶自行在程序中調(diào)用掃描模塊,而不是由時鐘中斷自行調(diào)用。其它與方式1相同。

注意:

1)函數(shù)KBScanProcess為非阻塞函數(shù),它將在很快的時間內(nèi)返回,等待再次分配給它執(zhí)行的機(jī)會。

2)函數(shù)KBScanProcess是在時鐘中斷外部運(yùn)行的,它的過程可以被任何中斷打斷,但不影響系統(tǒng)運(yùn)行。

3)byState的最大值為250,之后被復(fù)位為零。應(yīng)用舉例

現(xiàn)在來舉例說明上述幾個模塊的使用方法。

硬件環(huán)境描述:

為了控制一盞燈,需要單片機(jī)提供一個做控制功能的開關(guān)量,這里不描述外部接口電路,只說明當(dāng)單片機(jī)的P10腳為高電平時,燈滅,當(dāng)P10腳為低電平時,燈亮。

可以通過計算機(jī)由串口發(fā)送命令來控制,或通過一個按鍵(pushbutton不是自鎖式的按鍵)來手動控制(按鍵接在P11腳上,當(dāng)鍵沒有按下時,P11電平為高,鍵按下時,引腳電平被接低),當(dāng)使用按鍵手動控制的時候,需要給計算機(jī)發(fā)送通知。

設(shè)定串口通訊指令如下:

數(shù)據(jù)包由0xff做包頭,4個字節(jié)長,第二個字節(jié)為命令代碼,第三個字節(jié)為數(shù)據(jù),最后一個字節(jié)為校驗(yàn)位。

命令和數(shù)據(jù)代碼有如下組合:

(計算機(jī)發(fā)給單片機(jī))

0x100x01:計算機(jī)控制燈亮。(數(shù)據(jù)位是非零值即可)

0x100x00:計算機(jī)控制燈滅。

(單片機(jī)發(fā)給計算機(jī))

0x110x01:單片機(jī)正常執(zhí)行控制指令,返回。(數(shù)據(jù)位是非零值即可)

0x110x00:單片機(jī)不能夠正常執(zhí)行控制指令,或控制指令錯(不明含義的數(shù)據(jù)包或校驗(yàn)錯等)。

0x120x01:手動控制燈亮。(數(shù)據(jù)位是非零值即可)

0x120x00:手動控制燈滅。

建立工程:

在硬盤上建立文件夾Projects,在Projects下建立Common文件夾及Example文件夾。將各模塊的頭文件及實(shí)現(xiàn)文件拷貝到Common文件夾下(推薦使用這樣的文件組織結(jié)構(gòu),其它工程也可以建立在Projects下,各工程共享Common文件夾中的代碼)。

啟動KeilC的IDE,在Example下建立新工程,將各模塊的實(shí)現(xiàn)文件包含進(jìn)工程。

在Example文件夾下建立Output文件夾,更改工程設(shè)置,將Output作為輸出文件和List文件的輸出文件夾(推薦使用這樣的結(jié)構(gòu), 當(dāng)保存工程文件時,可以簡單的刪除Output文件夾中的內(nèi)容而不會誤刪有用的工程文件)。

建立工程配置頭文件Config.h及工程主文件Example.c,并將Exmaple.c文件加入工程。

輸入代碼:

代碼的具體編寫過程略。下面是最后的Config.h文件及Example.c文件。

//

//file:onfig.h

//

#ifndef_CONFIG_H_

#define_CONFIG_H_

#include//使用AT89C52做控制

#include“../Common/Common.h”//使用自定義的數(shù)據(jù)類型

#defineTIMER_RELOAD922//11.0592MHz晶振,1ms中斷周期

#defineTIMER_KBSCANDELAY40//40ms重檢測按鍵狀態(tài),即40ms消抖

#defineSCOMM_AsyncInterface//使用異步通訊服務(wù)

#defineIsPackageHeader(x)((x)==0xff)//判斷包頭是不是0xff

#defineIsPackageTailer(x,y,z)((y)<=(z))//判斷包的長度是不是足夠

#endif//_CONFIG_H_

//

//file:xample.c

//

#include

#include“../Common/Common.h”

#include“../Common/Timer.h”

#include“../Common/Scomm.h”

#include“../Common/KBScan.h”

BITgbitLampState=1;//燈的狀態(tài),缺省為off

staticvoidInitialize()

{

InitTimerModule();//初始化時鐘模塊

InitSCommModule(0xfd,TRUE);//初始化通訊模塊,11.0592MHz晶振,

//波特率為19200

EA=1;//開中斷

}

voidmain()

{

Initialize();//初始化

while(TRUE)//主循環(huán)

{

ImpTimerService();//實(shí)現(xiàn)時鐘中斷服務(wù),如鍵盤掃描

AsyncRecePackage(4);//接收4個字節(jié)長的數(shù)據(jù)包

}

}

//在中斷外部響應(yīng)時鐘中斷事件

voidOnTimerEvent()

{

//donothing

}

//控制外部燈

staticvoidTriggerLamp(BITbEnable)

{

P10=~bEnable;//需要反相控制

}

//鍵掃描回調(diào)函數(shù)

BYTEKBScan()

{

BITb;

P11=1;//讀之前拉高引腳電平

b=P11;//讀入引腳狀態(tài)

return~b;//數(shù)據(jù)反相做掃描碼

}

//計算校驗(yàn)和

staticBYTECalcCheckSum(BYTE*pbyBuf,BYTEbyLen)

{

BYTEby,bySum=0;

for(by=0;by

return0–bySum;

}

//接收到鍵盤消息回調(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);//處理長度或校驗(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ā)送沒有成功執(zhí)行通知

break;

單片機(jī)原理范文第5篇

關(guān)鍵詞:單片機(jī) 教學(xué)改革 培養(yǎng)能力

一、引言

單片機(jī)在現(xiàn)代電子系統(tǒng)智能化中扮演著至關(guān)重要的角色。無論是現(xiàn)代工業(yè)、農(nóng)業(yè)及生活領(lǐng)域,還是尖端科技等諸多領(lǐng)域,都離不開單片機(jī),其應(yīng)用率和普及率是其他類型的計算機(jī)不能比擬的。單片機(jī)技術(shù)被廣泛地應(yīng)用在智能儀器儀表、機(jī)電一體化產(chǎn)品、實(shí)時工業(yè)控制、分布系統(tǒng)的前端模塊、家用電器、醫(yī)療和軍事等領(lǐng)域。所以單片機(jī)原理與應(yīng)用是電子、自動化等專業(yè)的一門必修課。單片機(jī)原理與應(yīng)用是電氣信息類、自動化類、機(jī)電設(shè)備類、計算機(jī)類及儀器儀表類等專業(yè)的專業(yè)基礎(chǔ)課或?qū)I(yè)課。單片機(jī)教學(xué)的改革就是使學(xué)生將學(xué)到的單片機(jī)理論知識轉(zhuǎn)化為適應(yīng)就業(yè)和工作需要的實(shí)際能力。

二、改革單片機(jī)原理及應(yīng)用教學(xué)的意義

(一)單片機(jī)原理及應(yīng)用教學(xué)存在的問題

傳統(tǒng)的理論教學(xué)是按教材編寫的順序,先講單片機(jī)的硬件基礎(chǔ)知識,然后講指令系統(tǒng)、匯編語言編程,接著是講接口技術(shù),教學(xué)形式和手段單一、方法簡單呆板。在教學(xué)中,學(xué)生普遍反映單片機(jī)概念多、太抽象、難入門、指令太難記。學(xué)生感到枯燥乏味,學(xué)習(xí)難度很大,課堂教學(xué)效果不夠理想。

傳統(tǒng)實(shí)訓(xùn)課則以教師為中心,基本都是教師先進(jìn)行講解、示范,然后學(xué)生開始實(shí)操訓(xùn)練,學(xué)生模仿教師按實(shí)訓(xùn)步驟操作實(shí)訓(xùn)項(xiàng)目。在這個過程中,教師巡回查看輔導(dǎo)學(xué)生。實(shí)訓(xùn)考核則是操作一個操作過的題目,教師要據(jù)學(xué)生實(shí)訓(xùn)項(xiàng)目完成的結(jié)果和所用的時間給出學(xué)生實(shí)訓(xùn)實(shí)操考核成績。用一個模式,完全按照指導(dǎo)書上規(guī)定的步驟做相同的實(shí)訓(xùn)。學(xué)生感到學(xué)習(xí)內(nèi)容枯燥無味,沒有興趣。學(xué)生的學(xué)習(xí)積極性和教師的授課積極性都受到極大的挫傷。

(二)改革單片機(jī)原理及應(yīng)用教學(xué)的意義

針對單片機(jī)原理應(yīng)用教學(xué)存在的問題,要對單片機(jī)原理及應(yīng)用教學(xué)進(jìn)行改革,培養(yǎng)學(xué)生學(xué)習(xí)單片機(jī)原理及應(yīng)用課程的興趣,著重培養(yǎng)學(xué)生的學(xué)習(xí)能力、綜合運(yùn)用知識的能力、動手能力和創(chuàng)新能力,培養(yǎng)高技能人才。

三、單片機(jī)原理及應(yīng)用理論教學(xué)改革

(一)單片機(jī)原理及應(yīng)用理論課中,引入案例教學(xué)

本著“理論夠用”就可以的原則,把夠用的理論優(yōu)化整合到一個個案例中,案例中包含的理論由簡到難,符合理論掌握的邏輯順序,使“死”的大量的理論內(nèi)容分散活化到每一個實(shí)際案例中。在應(yīng)用中學(xué)習(xí)理論,理論因運(yùn)用的具體而不再抽象,每個案例中學(xué)到的理論數(shù)量適中、遷移和內(nèi)化的程度高,解決了單片機(jī)概念多、太抽象、難入門、指令太難記憶等問題。

案例教學(xué)有利于培養(yǎng)學(xué)生學(xué)習(xí)單片機(jī)原理及應(yīng)用的興趣,一個個案例生動具體,給學(xué)生展示單片機(jī)應(yīng)用的廣闊前景,使學(xué)生對學(xué)習(xí)單片機(jī)原理及應(yīng)用產(chǎn)生濃厚興趣。學(xué)生在學(xué)習(xí)抽象內(nèi)容之前,教師可以通過案例給學(xué)生介紹單片機(jī)無比優(yōu)越的性價比,并且應(yīng)用大量的事例說明單片機(jī)的應(yīng)用無所不在。將抽象的教學(xué)內(nèi)容與這些生動的現(xiàn)實(shí)應(yīng)用實(shí)例相結(jié)合,給學(xué)生一個能看到、能聽到、能摸著的學(xué)習(xí)目標(biāo),提高了學(xué)生學(xué)習(xí)單片機(jī)原理及應(yīng)用的興趣。

案例教學(xué)有利于培養(yǎng)學(xué)生學(xué)習(xí)單片機(jī)原理應(yīng)用的積極性。案例教學(xué)過程中,可以滲透就業(yè)熱點(diǎn)介紹,使學(xué)生認(rèn)識到單片機(jī)從低端應(yīng)用到高端應(yīng)用都有廣闊前景。學(xué)好單片機(jī)原理及應(yīng)用既能為低端應(yīng)用打好基礎(chǔ),又能為高端處理器的學(xué)習(xí)做好準(zhǔn)備。如此,使學(xué)生把學(xué)習(xí)單片機(jī)原理及應(yīng)用與自己的就業(yè)前景結(jié)合起來,學(xué)生學(xué)習(xí)積極性得到調(diào)動。

單片機(jī)原理及應(yīng)用理論課教學(xué)中,使用案例教學(xué),能縮短理論與實(shí)踐的距離,培養(yǎng)學(xué)生綜合運(yùn)用知識、解決實(shí)際問題的能力。不少學(xué)生都反映,在理論課上學(xué)到的理論知識,到實(shí)踐中不知道怎么使用,怎么入手。其原因就是沒有把理論與實(shí)際相結(jié)合好,使用案例進(jìn)行理論教學(xué),使學(xué)生接觸到了與實(shí)際應(yīng)用相近的案例,可以縮短學(xué)生學(xué)習(xí)時間。比如,以一個完整的項(xiàng)目開發(fā)為案例,介紹交通信號燈控制系統(tǒng),這樣增強(qiáng)了趣味性,學(xué)生也很容易接受,而且可以促進(jìn)學(xué)生思維發(fā)展,實(shí)現(xiàn)分析、反思、體驗(yàn)和感悟。當(dāng)其領(lǐng)悟后,就能模仿,也會舉一反三。

(二)單片機(jī)原理及應(yīng)用理論課中,豐富教學(xué)手段

學(xué)生覺得單片機(jī)原理及應(yīng)用難學(xué)抽象,很大一部分原因,是傳統(tǒng)教學(xué)的講授加板書,無法為學(xué)生展示單片機(jī)內(nèi)部數(shù)據(jù)動態(tài)流動的過程和圖景。學(xué)生腦海中形不成單片機(jī)內(nèi)部數(shù)據(jù)動態(tài)流動的過程和圖景,產(chǎn)生了極大的困惑。制作生動形象的多媒體課件可以解決這個問題,利用多媒體課件把單片機(jī)中難懂的尋址方式指令舉例和有代表性的指令,做成動畫準(zhǔn)確生動呈現(xiàn)出其數(shù)據(jù)流動的完整過程,學(xué)生瞬間就理解了尋址方式和典型指令,并且迅速發(fā)展了學(xué)生的形象思維能力、抽象思維能力和舉一反三的能力。

單片機(jī)原理及應(yīng)用課程信息量大,要求授課容量大,制作生動形象的多媒體課件可以滿足這一要求,利用多媒體課件授課,節(jié)省了板書和大量的畫圖時間,可以在有限的課時內(nèi)講深、講透課程內(nèi)容;利用多媒體課件演示,可以隨機(jī)重復(fù),前后可以隨意翻看的特點(diǎn),便于突出重點(diǎn)、突破難點(diǎn)。實(shí)踐表明,將傳統(tǒng)教學(xué)的講授加板書與計算機(jī)輔助教學(xué)手段相結(jié)合,豐富了教學(xué)手段,提高了教學(xué)效率,激發(fā)了學(xué)生學(xué)習(xí)的積極性和主動性,收到了良好的教學(xué)效果。

四、單片機(jī)原理及應(yīng)用實(shí)踐教學(xué)改革

(一)單片機(jī)原理及應(yīng)用實(shí)訓(xùn)課中,多開發(fā)趣味實(shí)訓(xùn)項(xiàng)目

利用單片機(jī)編程可以實(shí)現(xiàn)許多電子電路,這是非常有趣的。例如,利用位操作指令可以實(shí)現(xiàn)各種門電路和組合邏輯電路;利用循環(huán)或定時器能實(shí)現(xiàn)軟延時;利用定時器可以實(shí)現(xiàn)各種矩形脈沖發(fā)生器,這些都可以從示波器上觀察到有趣的結(jié)果。這些實(shí)訓(xùn)項(xiàng)目可以激發(fā)學(xué)生的學(xué)習(xí)興趣,調(diào)動學(xué)生的學(xué)習(xí)積極性和主動性。

(二)單片機(jī)原理及應(yīng)用實(shí)訓(xùn)課中,引入模塊化教學(xué)

把實(shí)踐教學(xué)內(nèi)容優(yōu)化整合成若干個模塊,每個模塊中包含的知識點(diǎn)和技能又可分解到若干個實(shí)訓(xùn)題目中,例如燈光控制模塊,包含了閃燈控制、排燈控制、轉(zhuǎn)燈控制、流水燈控制、交通信號燈控制。每個模塊的教學(xué)又可分成三個層次,對學(xué)生來說就是三個層面的學(xué)習(xí),即模仿學(xué)習(xí)、舉一反三和創(chuàng)新。就拿燈光控制模塊來說,直接按照實(shí)訓(xùn)指導(dǎo)書上的程序進(jìn)行實(shí)訓(xùn)就是模仿學(xué)習(xí),在此基礎(chǔ)上對指導(dǎo)書上的程序進(jìn)行改編實(shí)現(xiàn)延時和燈光花樣的變化是舉一反三,最后編制一個全新的燈光控制程序?qū)崿F(xiàn)創(chuàng)新設(shè)計。這樣的學(xué)習(xí)符合學(xué)生的思維發(fā)展規(guī)律,使其發(fā)揮主觀能動性及創(chuàng)造性思維,有效培養(yǎng)了學(xué)生的學(xué)習(xí)能力,綜合運(yùn)用知識解決實(shí)際問題的能力和創(chuàng)新能力。

五、小結(jié)

單片機(jī)原理及應(yīng)用理論教學(xué)和實(shí)踐教學(xué)手段和方法很多,這里從個人教學(xué)改革心得出發(fā)探討了幾個做法。在今后的教學(xué)改革中只要不斷改進(jìn)教學(xué)方法, 使用各種教學(xué)手段,激發(fā)學(xué)生的學(xué)習(xí)興趣,注重學(xué)習(xí)能力的培養(yǎng)和綜合運(yùn)用知識解決實(shí)際問題的能力的培養(yǎng),就能獲得良好的教學(xué)效果。但要深入教學(xué)改革,還需要不斷努力和探索。

參考文獻(xiàn):

[1]周紹平.單片機(jī)教學(xué)改革的實(shí)踐與思考.揚(yáng)州職業(yè)大學(xué)學(xué)報,2004,8(2):60~62

[2]廖平.單片機(jī)實(shí)驗(yàn)教學(xué)的改革.實(shí)驗(yàn)室研究與探索,2004(7):36~38

[3]陳 亮.單片機(jī)課程的教學(xué)改革.實(shí)驗(yàn)室研究與探索,2008(9):121~123

[4]徐海黎,劉明.單片機(jī)課程教學(xué)的改革.南通大學(xué)學(xué)報(教育科學(xué)版),2005(4):96~97