天津工程師范學(xué)院2007屆本科生畢業(yè)設(shè)計
1 引言1.1 通信的發(fā)展人類社會的發(fā)展可視為一部信息傳播技術(shù)的發(fā)展史。從古代的烽火到近代的旗語,都是人們尋求快速遠(yuǎn)距離通信的手段。直到19世紀(jì)電磁學(xué)的理論與實踐已有堅實的基礎(chǔ)后,人們開始尋求用電磁能量傳送信息的方法。信息傳播促進(jìn)社會進(jìn)步和科學(xué)技術(shù)的發(fā)展;科學(xué)技術(shù)的進(jìn)步又不斷地改進(jìn)、更新人類信息傳播的媒體和工具,并促進(jìn)信息更迅速、更廣泛的傳播。
面向21世紀(jì)的無線通信,無線通信的系統(tǒng)組成、信道特性、調(diào)制與編碼、接入技術(shù)、網(wǎng)絡(luò)技術(shù)、抗衰落與抗干擾技術(shù)以及無線通信的新技術(shù)和新應(yīng)用的發(fā)展更是一日千里。
1.2 廣播的發(fā)展現(xiàn)狀在21世紀(jì)的今天,廣播的主要技術(shù)方式是調(diào)頻廣播,它是繼調(diào)幅廣播(20世紀(jì)20年代開始的)的第二代廣播,它開始于20世紀(jì)50年代,克服了中波廣播的很多致命不足,如串臺嚴(yán)重、頻帶不夠分配,信噪比差等,而實現(xiàn)了高保真度、動態(tài)范圍寬、信噪比較好、較少串臺現(xiàn)象。
調(diào)頻廣播因其優(yōu)秀的音質(zhì)和抗干擾性能而成為城市廣播覆蓋的主要手段。隨著城市規(guī)模的日益擴(kuò)展,調(diào)頻發(fā)射臺的功率也跟著成數(shù)量級地增大,由原來的100W、300W上升到1KW、3KW、甚至10KW,而發(fā)射天線的高度也由幾十米上升到百余米甚至三四百米。隨之逐步形成了高塔大功率覆蓋的格局。
從廣播業(yè)界的角度來看,高塔大功率覆蓋模式的主要優(yōu)點是建設(shè)方便,省事省力,見效快。但其固有缺點和帶來的負(fù)面影響也是不容忽視的,主要有以下幾點:因調(diào)頻廣播工作于米波段,極易因高大建筑物和其他物體反射形成多徑干擾;因高山和低谷等地形因素會產(chǎn)生收不到信號的陰影區(qū);大區(qū)制覆蓋因頻率不能復(fù)用造成規(guī)劃困難;頻譜利用率低;不能解決長距離交通線的連續(xù)覆蓋問題。從社會發(fā)展的角度來看,它還有更重要的三條缺點:浪費能源,覆蓋區(qū)場強(qiáng)不均勻度可達(dá)60dB,大量超出需要的無效輻射,形成能源的巨大浪費;污染環(huán)境,大功率FM發(fā)射臺在天線附近周邊地區(qū)輻射場強(qiáng)超過環(huán)境電磁波衛(wèi)生標(biāo)準(zhǔn)已是不爭的事實;對航空無線電業(yè)務(wù)造成干擾。
由于相關(guān)的國家標(biāo)準(zhǔn)和國家軍用標(biāo)準(zhǔn)及頻率規(guī)劃多是10年以前制定的,那時尋呼業(yè)和調(diào)頻廣播剛起步不久,對干擾的認(rèn)識還遠(yuǎn)不充分,已不適應(yīng)當(dāng)今電磁環(huán)境現(xiàn)狀。當(dāng)時規(guī)定的17dB的防護(hù)率早已被突破,10KM的防護(hù)間距也已形同虛設(shè)。
在世界各國,頻率資源是有限的。國家已嚴(yán)格限制頻率的使用范圍。廣播頻率是政府部門頒發(fā)的,現(xiàn)在很多公司、媒體都愿意斥巨資競標(biāo)頻譜使用權(quán)。無線廣播中,單一載頻用來傳輸單一的或者單套立體聲節(jié)目。由于傳統(tǒng)的大功率的調(diào)頻廣播頻率資源的限制,使廣播技術(shù)工作者開辟了另一種廣播技術(shù)形式:小調(diào)頻同步廣播,它的特點是多布點、小功率、同頻、同相、同步廣播,使用的是現(xiàn)有的調(diào)頻技術(shù),不過存在著多點同步問題,這在技術(shù)上是可以克服的。信號傳輸可使用微波、有線甚至衛(wèi)星方式。
由于采用小功率按需布點的方法,在滿足覆蓋需要的前提下,把單臺發(fā)射機(jī)的功率大幅度降了下來,降到10W、50W、最大不超過300W,這就使諸多問題迎刃而解。對于多徑干擾,由于功率小了,大部分反射波場強(qiáng)下降到不至于產(chǎn)生干涉的水平,并且由于布點多,部分多徑干擾區(qū)可能被互相掩蓋;可以用同步補(bǔ)點的辦法消除陰影區(qū);小功率輻射易于規(guī)劃,且提高頻譜利用率;可方便組成單頻網(wǎng),滿足交通線上的無縫覆蓋,保證駕乘人員的不間斷接收;場強(qiáng)不均勻度僅為30dB,加上使用低高度垂直極化天線,極大地減小對空輻射和根部近場輻射,既節(jié)約能源,又滿足電磁環(huán)境衛(wèi)生標(biāo)準(zhǔn),并可避免造成對航空頻段的干擾。
1.3 設(shè)計思路任何一個地區(qū)、一個城市都需要有很多專業(yè)的服務(wù)及新聞宣傳,如交通信息咨詢、健康咨詢、股市信息咨詢等,廣播又是大眾最靈活的信息接受媒體,這需要建立很多的廣播電臺,而作為一個國家的頻率資源是嚴(yán)格控制和有限的,因此,小調(diào)頻廣播就成了未來廣播的另一種主要形式,它是廣播發(fā)展的其中一個方向,是數(shù)字音頻廣播(DAB)、網(wǎng)絡(luò)廣播的有力補(bǔ)充,既節(jié)約了頻譜資源,又實現(xiàn)了廣播功能。
為了實現(xiàn)上述要求,本文作者采用單片機(jī)AT89S52和調(diào)頻專用發(fā)射芯片 BH1415F及數(shù)碼顯示設(shè)計了一套完整的無線調(diào)頻發(fā)射系統(tǒng),設(shè)計為可在88MHz--98MHz范圍內(nèi)任意設(shè)置發(fā)射頻率,并且可以預(yù)置頻道,發(fā)射頻率通過單片機(jī)控制最小調(diào)整值為0.1MHz,具有單聲道/立體聲控制,實現(xiàn)了語音信息的短距離無線傳輸,可廣泛應(yīng)用于學(xué)校無線廣播、電視現(xiàn)場導(dǎo)播、汽車航行、無線演說等場所。
2系統(tǒng)概述2.1 系統(tǒng)功能要求設(shè)計一個無線調(diào)頻發(fā)射系統(tǒng),實現(xiàn)語音信號的短距離傳輸。由于語音業(yè)務(wù)對誤碼不敏感,可以采用調(diào)頻方式發(fā)送信息,設(shè)計中采用了BH1415F構(gòu)成音頻無線發(fā)射電路。無線調(diào)頻發(fā)射器可以在88--98MHz范圍內(nèi)任意設(shè)置發(fā)射頻率,可以預(yù)置發(fā)射頻道,發(fā)射頻率的最小調(diào)整值為0.1MHz,具有單聲道/立體聲控制,發(fā)射距離在20--50米之間。
語音信號采用調(diào)頻方式與調(diào)幅相比,有利于改善輸出音頻信號的信噪比,以保證語音業(yè)務(wù)的可靠傳輸,下表是調(diào)幅和調(diào)頻的優(yōu)缺點比較:
表2-1 調(diào)幅和調(diào)頻優(yōu)缺點比較
| | |
| | 1.傳送音頻頻帶較寬(100Hz—5KHz)適宜于高保真音樂廣播 2.抗干擾性強(qiáng),內(nèi)設(shè)限幅器除去幅度干擾 3.應(yīng)用范圍廣,用于多種信息傳遞 4.可實現(xiàn)立體聲廣播 |
| 1.傳送音頻頻帶窄 (200Hz—2500Hz),高音缺乏 2.傳播中易受干擾,噪聲大 | |
2.2系統(tǒng)組成本設(shè)計由單片機(jī)、鍵盤、數(shù)碼顯示、調(diào)頻發(fā)射、調(diào)頻放大和電源模塊等六部分組成,系統(tǒng)框圖如圖2-1所示。通過操作鍵盤可以設(shè)置和更改發(fā)射的頻率;單片機(jī)用于控制數(shù)碼管顯示對應(yīng)的發(fā)射頻率和發(fā)送頻率信號到調(diào)頻調(diào)制電路中;調(diào)頻發(fā)射將輸入的音頻信號調(diào)制后通過載波發(fā)送出去;數(shù)碼管用于顯示發(fā)射的頻率;調(diào)頻放大將得到的調(diào)制信號進(jìn)行放大;電源模塊則為整個電路提供電源。

3 方案論證與比較3.1 無線調(diào)頻發(fā)射電路設(shè)計方案論證與選擇方案1:采用單片調(diào)頻發(fā)射集成電路組成芯片MC2833。它可構(gòu)成發(fā)射高頻率信號的功率放大器。電路由音頻放大器、可變電抗器、射頻振蕩器、輸出緩沖器以及放大電路構(gòu)成。由集成芯片MC2833組成的調(diào)頻發(fā)射機(jī),先將語音通過話筒變成音頻電壓信號送給音頻放大器進(jìn)行音頻電壓放大,此音頻電壓信號經(jīng)耦合電容送給可變電抗的輸入端腳3去控制可變電抗,而由可變電抗以及電感、晶體與高頻振蕩器組成調(diào)頻振蕩電路,產(chǎn)生調(diào)頻波經(jīng)緩沖送給兩級二倍頻放大器。電路實現(xiàn)基本框圖如圖3-1所示。但由于該芯片涉及到的諧振回路較多,不易統(tǒng)調(diào),因而頻率不易控制,導(dǎo)致信號不穩(wěn)定,容易跑臺,實現(xiàn)較為困難。
方案2:采用集成芯片BA1404及相關(guān)電路構(gòu)成。它主要由前置音頻放大器,立體聲調(diào)制器,F(xiàn)M調(diào)制器及射頻放大器組成。利用內(nèi)部參考電壓改變變?nèi)荻䴓O管的電容值,可實現(xiàn)發(fā)射頻率的調(diào)整。圖3-2所示為電路框圖。此電路可實現(xiàn)立體聲調(diào)頻發(fā)射,典型調(diào)頻頻段為75-108MHz,振蕩頻率不易調(diào)整,尤其是低端頻率實現(xiàn)困難,難以實現(xiàn)要求頻段的調(diào)整。
方案3:采用集成芯片BH1415F及相關(guān)電路構(gòu)成。BH1415F是將預(yù)加重電路、限幅電路、低通濾波電路(LPF)一體化,使音頻信號的質(zhì)量比分立元件的電路(如:BA1404、NJM2035等)有很大改進(jìn)。此電路可實現(xiàn)立體聲調(diào)頻發(fā)射,采用了MCU 數(shù)據(jù)直接頻率設(shè)定,可設(shè)定70-120MHz頻率,由于采用了鎖相環(huán)鎖頻并與調(diào)頻發(fā)射電路一體化,使發(fā)射的頻率非常穩(wěn)定,并且可靠性好,抗干擾能力強(qiáng),容易實現(xiàn)調(diào)頻的要求。
綜上所述,為了實現(xiàn)中心頻率的控制和系統(tǒng)設(shè)計的功能要求,本設(shè)計選擇方案3,即采用集成芯片BH1415F及相關(guān)電路構(gòu)成音頻無線發(fā)射電路。
3.2 壓控振蕩器方案論證與選擇
方案1:采用分立元件構(gòu)成。利用低噪聲場效應(yīng)管,用單個變?nèi)荻䴓O管直接接入振蕩回路作為壓控器件。
圖3-3 壓控振蕩電路
電路是電容三點式振蕩器,如圖3-3所示。該方法實現(xiàn)簡單,但是調(diào)試?yán)щy,而且輸出頻率不易靈活控制[5]。
方案2:采用壓控振蕩器和變?nèi)荻䴓O管,及一個LC諧振回路構(gòu)成變?nèi)荻䴓O管壓控振蕩器。只需要調(diào)節(jié)變?nèi)荻䴓O管兩端的電壓,便可改變壓控振蕩的輸出頻率。由于采用了集成芯片,電路設(shè)計簡單,系統(tǒng)可靠性高,并且利用鎖相環(huán)頻率合成技術(shù)可以使輸出頻率穩(wěn)定度進(jìn)一步提高。
綜上所述,方案2具有更優(yōu)良的特性和更簡單的電路構(gòu)成,所以使用方案2作為本次設(shè)計的方案。
4 系統(tǒng)硬件電路的設(shè)計4.1 單片機(jī)控制電路 系統(tǒng)采用的微控制器是ATMEL公司生產(chǎn)的低功耗、高性能單片機(jī)AT89S52,它有32個外部雙向輸入/輸出 (I/O) 端口,片內(nèi)含8k bytes的可重復(fù)編程的Flash存儲器和256 bytes的隨機(jī)存取數(shù)據(jù)存儲器 (RAM),3個16位可編程定時計數(shù)器,1個全雙工串行通信口,器件采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng)。AT89S52可以按照常規(guī)方法進(jìn)行編程,也可以在線編程。其將通用的微處理器和Flash存儲器結(jié)合在一起,特別是可反復(fù)擦寫的Flash存儲器可有效地降低開發(fā)成本。
4.1.1 內(nèi)部結(jié)構(gòu)AT89S52單片機(jī)包含中央處理器、程序存儲器(ROM)、數(shù)據(jù)存儲器(RAM)、定時器/計數(shù)器、并行I/O口、串行I/O口和中斷系統(tǒng)等幾大單元以及數(shù)據(jù)總線、地址總線和控制總線三大總線構(gòu)成。圖4-1為單片機(jī)內(nèi)部結(jié)構(gòu)框圖[13]。
(1) 中央處理器
中央處理器(CPU)是整個單片機(jī)的核心部件,能處理8位二進(jìn)制數(shù)據(jù)或代碼,CPU負(fù)責(zé)控制、指揮和調(diào)度整個單元系統(tǒng)協(xié)調(diào)的工作,完成運算和控制輸入輸出功能等操作。
(2) 程序存儲器
AT89S52共有8KB個E2PROM,用于存放用戶程序,原始數(shù)據(jù)或表格。
(3) 數(shù)據(jù)存儲器(RAM)
AT89S52內(nèi)部有128個8位用戶數(shù)據(jù)存儲單元和128個專用寄存器單元,它們是統(tǒng)一編址的,專用寄存器只能用于存放控制指令數(shù)據(jù),用戶只能訪問,而不能用于存放用戶數(shù)據(jù),所以,用戶能使用的RAM只有128個,可存放讀寫的數(shù)據(jù),運算的中間結(jié)果或用戶定義的字型表。

圖4-1內(nèi)部結(jié)構(gòu)框圖
(4) 并行輸入輸出口
AT89S52共有4組8位I/O口(P0、 P1、P2或P3),用于對外部數(shù)據(jù)的傳輸。
(5) 串行輸入輸出口
AT89S52內(nèi)置一個全雙工串行通信口,用于與其它設(shè)備間的串行數(shù)據(jù)傳送,該串行口既可以用作異步通信收發(fā)器,也可以當(dāng)同步移位器使用。
(6) 定時/計數(shù)器
AT89S52有三個16位的可編程定時/計數(shù)器,以實現(xiàn)定時或計數(shù)功能,并以其定時或計數(shù)結(jié)果對單片機(jī)進(jìn)行控制。
(7) 中斷系統(tǒng)
AT89S52具備較完善的中斷功能,有兩個外中斷、三個定時/計數(shù)器中斷和一個串行中斷,可滿足不同的控制要求,并具有兩級的優(yōu)先級別選擇。
4.1.2 引腳功能

圖4-2 AT89S52芯片引腳圖
(1) 電源和晶振
VCC:供電電壓。
GND:接地。
XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。
XTAL2:來自反向振蕩器的輸出。
(2) I/O口
① P0口
P0口的字節(jié)地址為80H,位地址為80H~87H。P0口既可以作為通用I/O口使用,也可以作為單片機(jī)系統(tǒng)的地址/數(shù)據(jù)線使用。當(dāng)作為輸出口使用時,由于輸出電路是漏極開路,必須外接上拉電阻才能有高電平輸出。
② P1口
P1口的字節(jié)地址為90H,位地址為90H~97H。P1口只能作為通用I/O口使用。當(dāng)作為輸出口使用時,已能對外提供推拉電流負(fù)載,外電路無需再接上拉電阻;當(dāng)作為輸入口使用時,應(yīng)先向其鎖存器寫入“1”,使輸出驅(qū)動電路的FET截止。
③ P2口
P2口的字節(jié)地址為0A0H,位地址為0A0H~0A7H。P2口用于為系統(tǒng)提供高位地址,但只作為地址線使用而不作為數(shù)據(jù)線使用。此外,P2口也可作為通用I/O口使用。
④ P3口
P3口的字節(jié)地址為0B0H,位地址為0B0H~0B7H。P3口可以作為通用I/O口使用,但在實際應(yīng)用中它的第二功能信號更為重要。
P3口引腳的第二功能,如下所示:
P3.0 RXD(串行輸入口)
P3.1 TXD(串行輸出口)
P3.2 /INT0(外部中斷0)
P3.3 /INT1(外部中斷1)
P3.4 T0(計時器0外部輸入)
P3.5 T1(計時器1外部輸入)
P3.6 /WR(外部數(shù)據(jù)存儲器寫選通)
P3.7 /RD(外部數(shù)據(jù)存儲器讀選通)
(3) 4根控制線
① RST:復(fù)位信號。保持RST腳兩個機(jī)器周期以上的高電平,就可以完成CPU系統(tǒng)復(fù)位操作,使系統(tǒng)的一些單元內(nèi)容回到規(guī)定值。
② /PSEN:外部程序存儲器讀選通信號。在讀外部ROM時,/PSEN有效(低電平),以實現(xiàn)外部ROM單元的讀操作。
③ /EA/VPP:訪問程序存儲器控制信號。當(dāng)/EA信號為低電平時,對ROM的讀操作限定在外部程序存儲器;而當(dāng)/EA為高電平時,則對ROM的讀操作是從內(nèi)部程序存儲器開始,并可延續(xù)至外部程序存儲器。
④ ALE/PROG:地址鎖存控制信號。在系統(tǒng)擴(kuò)展時,ALE用于控制P0口輸出的低8位地址送入鎖存器鎖存起來,以實現(xiàn)低位地址和數(shù)據(jù)的分時傳送。此外由于ALE是以六分之一晶振頻率的固定頻率輸出的正脈沖,因此也可作為外部時鐘或外部定時脈沖使用。
4.2 調(diào)頻調(diào)制發(fā)射電路 本系統(tǒng)調(diào)頻調(diào)制發(fā)射部分電路采用了ROHM公司的調(diào)頻發(fā)射專用集成電路BH1415F。BH1415F 是一種無線音頻傳輸集成電路,它可以將計算機(jī)聲卡、游戲機(jī)、CD、DVD、MP3、調(diào)音臺等立體聲音頻信號進(jìn)行立體聲調(diào)制發(fā)射傳輸,配合普通的調(diào)頻立體聲接收機(jī)就可實現(xiàn)無線調(diào)頻立體聲傳送。適合用于生產(chǎn)立體聲的無線音箱、無線耳機(jī)、CD、MP3、DVD、PAD、筆記本計算機(jī)等的無線音頻適配器開發(fā)生產(chǎn)。這個集成電路是由提高信噪比(S/N)的預(yù)加重電路、防止信號過調(diào)的限幅電路、控制輸入信號頻率的低通濾波電路(LPF)、產(chǎn)生立體聲復(fù)合信號的立體聲調(diào)制電路、調(diào)頻發(fā)射的鎖相環(huán)電路(PLL)組成。
4.2.1 調(diào)頻調(diào)制電路的特點(1)將預(yù)加重電路、限幅電路、低通濾波電路(LPF)一體化,使音頻信號的質(zhì)
量比分立元件的電路(如:BA1404、NJM2035等)有很大改進(jìn)。
(2)導(dǎo)頻方式的立體聲調(diào)制電路。
(3)采用了鎖相環(huán)鎖頻并與調(diào)頻發(fā)射電路一體化,合發(fā)射的頻率非常穩(wěn)定。
(4)采用了MCU 數(shù)據(jù)直接頻率設(shè)定,可設(shè)定70-120MHz頻率,使用上非常方便。
4.2.2 結(jié)構(gòu)圖
圖4-3 BH1415F 內(nèi)部結(jié)構(gòu)圖
4.2.3 允許的最大值
表4-1 BH1415F 工作時允許的最大值(Ta=25℃ 基本電路測量)
4.2.4 工作范圍
表4-2 BH1415F 工作范圍(Ta=25℃)
4.2.5 調(diào)頻調(diào)制發(fā)射電路的組成(1)預(yù)加重電路
預(yù)加重電路是一個非線性的音頻放大器,它的內(nèi)部工作點為1/2Vcc,因為它是非線性放大器,所以輸入阻抗取決為內(nèi)部電阻R3=43 KΩ,預(yù)加重時間取決于內(nèi)部電阻R2=22.7K和外部電容C1=2200p。
(2)限幅電路
限幅電路是由二極管限幅的反相放大器組成,它的內(nèi)部工作點為1/2 Vcc。
圖4-4 限幅電路
(3)低通濾波電路
低通濾波電路是由二階低通反饋放大電路組成,它的分頻點為15KHz。
圖4-5 低通濾波電路
具體的公式如下:
Q=0.577、ω0=1.274 、fc=15KHz
R1=R2=R3=Rf=100KΩ (4-1)
Cf=1/ω0 Rf=1/(2πX1.274X15KX100K)=83.28pF (4-2)
C1=3Q Cf =3X0.577X83.28pF=144pF≈150pF (4-3)
C2=Cf/3Q=83.28p/(3X0.577)=48≈50pF (4-4)
(4)立體聲調(diào)制電路
音頻信號從第1腳和第22腳輸入后通過預(yù)加重電路、限幅電路和低通濾波電路后送到混合器(MPX)中,另外由第13、14腳接入7.6MHz晶體的振蕩電路通過200分頻后產(chǎn)生的38KHz副載波信號,同時38KHz副載波通2分頻產(chǎn)生的19KHz導(dǎo)頻信號。音頻信號和38KHz的副載波信號被多路復(fù)合器進(jìn)行了平衡調(diào)制,產(chǎn)生了一個主信號(L+R)和一個通過DSB 調(diào)制的38KHz 副載波信號(L-R),并與19KHz導(dǎo)頻信號組成復(fù)合信號從第5腳輸出。
(5)FM發(fā)射電路
FM發(fā)射電路采用穩(wěn)定頻率的鎖相環(huán)系統(tǒng)。這一部分由高頻振蕩器、高頻放大器及鎖相環(huán)頻率合成器組成。調(diào)頻調(diào)制由變?nèi)荻䴓O管組成的高頻振蕩器實現(xiàn),高頻振蕩器是一個鎖相環(huán)的VCO,立體聲復(fù)合信號通過它直接進(jìn)行調(diào)頻調(diào)制。
高頻振蕩器是由第9腳外部的LC 回路與內(nèi)部電路組成,振蕩信號經(jīng)過高頻放大器從11腳輸出,同時輸送到鎖相環(huán)電路進(jìn)行比較后從第7腳輸出一個信號對高頻振蕩器的值進(jìn)行修正,確保頻率穩(wěn)定。如果頻率超過鎖相環(huán)設(shè)定的頻率,第7 腳將輸出的電平變高;如果是低于設(shè)定頻率,它將輸出的電平變低;相同的時候,它的電平將不變。
4.3 鍵盤部分4.3.1 單片機(jī)鍵盤和鍵盤接口概述
單片機(jī)使用的鍵盤可分為獨立式和矩陣式兩種。獨立式實際上就是一組相互獨立的按鍵,這些按鍵可直接與單片機(jī)的I/O接口連接,其方法是每個按鍵獨占一條口線,接口簡單[12]。矩陣式鍵盤也稱行列式鍵盤,因為鍵的數(shù)目較多,所以鍵按行列組成矩陣(如圖4-6所示)。
圖4-6 鍵盤接口電路圖
按一個鍵到鍵的功能被執(zhí)行主要應(yīng)包括兩項工作:一是鍵的識別,即在鍵盤中找出被按的是哪個鍵,通過接口電路來實現(xiàn);另一項是鍵功能的實現(xiàn),通過執(zhí)行中斷服務(wù)程序來完成。下面來介紹鍵盤接口問題[13]。
具體來說,鍵盤接口應(yīng)完成以下操作功能:
a 鍵盤掃描,以判定是否有鍵被按下(稱之為“閉合鍵”)。
b 鍵識別,以確定閉合鍵的行列位置。
c 產(chǎn)生閉合鍵的鍵碼。
d 排除多鍵、串鍵(復(fù)按)及去抖動。
這些內(nèi)容通常是以軟硬件結(jié)合的方式來完成的,即在軟件的配合下由接口電路來完成。但具體那些由硬件完成由軟件完成,要看接口電路的情況?偟脑瓌t是,硬件復(fù)雜軟件就簡單,硬件簡單軟件就得復(fù)雜一些。
4.3.2 單片機(jī)鍵盤接口和鍵功能的實現(xiàn)(1) 鍵盤接口處理內(nèi)容
① 鍵掃描
鍵盤上的鍵按行列組成矩陣,在行列的交點上都對應(yīng)有一個鍵。為判定有無鍵按下(閉合鍵)以及被按鍵的位置,可使用兩種方法:掃描法和翻轉(zhuǎn)法,其中
掃描法使用較為普遍。
② 去抖動
當(dāng)掃描表明有鍵被按下之后,緊接著應(yīng)進(jìn)行去抖動處理。因為常用鍵盤的鍵實際上就是一個機(jī)械開關(guān)結(jié)構(gòu),被按下時,由于機(jī)械接觸點的彈性及電壓突跳等原因,在觸點閉合或斷開的瞬間會出現(xiàn)電壓抖動,如圖4-7所示。抖動時間長短與鍵的機(jī)械特性有關(guān),一般為5~10ms。而鍵的穩(wěn)定閉合時間和操作者按鍵動作有關(guān),大約為十分之幾到幾秒不等。
圖4-7 鍵閉合和斷開時的電壓抖動
③ 鍵碼計算
被按鍵確定下來之后,接下來的工作是計算閉合鍵的鍵碼,因為有了鍵碼,才能通過散轉(zhuǎn)指令把程序執(zhí)行轉(zhuǎn)到閉合鍵所對應(yīng)的中斷服務(wù)程序上去。也可以直接使用該閉合鍵的行列值組合產(chǎn)生鍵碼,但這樣做會使各子程序的入口地址比較散亂,給JMP指令的使用帶來不便。所以通常都是以鍵的排列順序安排鍵號,這樣安排,使鍵碼既可以根據(jù)行號列號以查表求得,也可以通過計算得到。若各行的首號依次是00H,04H,08H,0CH。若列號按0~3順序,則鍵碼的計算公式為: 鍵碼=行首號+列號
④ 等待鍵釋放
計算鍵碼之后,再以延時后進(jìn)行掃描的方法等待鍵釋放。等待鍵釋放是為了保證鍵的一次閉合僅進(jìn)行一次處理。
綜上所述,鍵盤接口處理的核心內(nèi)容是測試有無閉合鍵,對閉合鍵進(jìn)行去抖動處理,求得閉合鍵的鍵碼。
為了使鍵盤操作更穩(wěn)定可靠,還可以加一些附加功能。例如屏蔽功能:在對一個閉合鍵已進(jìn)行處理時,再按下其它鍵不會產(chǎn)生影響;對于一個鍵,不管按下多長時間,僅執(zhí)行一次鍵處理子程序等。
(2) 鍵盤接口的控制方式
在單片機(jī)的運行過程中,何時執(zhí)行鍵盤掃描和處理,可有以下3種情況:
① 隨機(jī)方式,每當(dāng)CPU空閑時執(zhí)行鍵盤掃描程序。
② 中斷方式,每當(dāng)有鍵閉合時才向CPU發(fā)出中斷請求,中斷響應(yīng)后執(zhí)行鍵盤掃描程序。
③ 定時方式,每隔一定時間執(zhí)行一次鍵盤掃描程序,定時可由單片機(jī)定時器完成。
(3) 鍵處理子程序
在計算機(jī)中每一個鍵都對應(yīng)一個處理子程序,得到閉合鍵的鍵碼后,就可以根據(jù)鍵碼,轉(zhuǎn)相應(yīng)的鍵處理子程序(分支是使用JMP等散轉(zhuǎn)指令實現(xiàn)的),進(jìn)行字符、數(shù)據(jù)的輸入或命令的處理,這樣就可以實現(xiàn)相應(yīng)鍵所設(shè)定的功能[14]。
4.4 LC振蕩電路LC振蕩器起振條件
相位平衡條件:Xce和Xbe必需為同性質(zhì)的電抗,Xcb必需為異性質(zhì)的電抗,且它們之間滿足下列關(guān)系:

(4-5)
即

(4-6)
幅度起振條件:
(4-7)
式中:

——晶體管的跨導(dǎo),

——反饋系數(shù), AU——放大器的增益,

——晶體管的輸入電導(dǎo),

——晶體管的輸出電導(dǎo),

——晶體管的等效負(fù)載電導(dǎo),

一般在0.1~0.5之間取值。
4.5 調(diào)頻放大電路 調(diào)頻放大電路部分采用UPC1651 對調(diào)制信號進(jìn)行放大。
4.6 電源模塊設(shè)計4.6.1 單元電源電路設(shè)計為了能夠讓單片機(jī)和調(diào)頻發(fā)射部分更好,更穩(wěn)定地工作,采用了圖4-8所示單元電源電路,由電源變壓器、橋堆和濾波電容器所組成。電源變壓器的初級電壓輸入為220V,次級輸出電壓為12V[15] [16]。
由于單片機(jī)所需的是+5V電源,經(jīng)濾波電容和三端穩(wěn)壓集成電路MC7812后可得到+12V電壓,MC7812能將15V~25V的直流電壓變換成12V的穩(wěn)定電壓,在12V的電壓中含有少量的低頻成分和接收外界的高頻成分,再經(jīng)后一級濾波后送三端穩(wěn)壓集成電路7805,7805能將大于7V~15V的直流電壓變換成5V的穩(wěn)定電壓。同時由于電流較大導(dǎo)致三端穩(wěn)壓集成電路MC7812和7805過熱,為了確保電路工作正常,給兩個芯片分別加上散熱片。
圖4-8 電源電路圖
4.6.2 直流穩(wěn)壓電源的檢測本系統(tǒng)對電源要求高,因為穩(wěn)定性和可靠性在發(fā)射電路重要意義。為了提高穩(wěn)定性,所以采用如圖4-8的穩(wěn)壓電源,電源電路的主要部件采用集成的三端穩(wěn)壓器件如7812與7805,穩(wěn)壓電源輸入電壓范圍寬,輸出電壓穩(wěn)定,抗干擾能力強(qiáng),以滿足調(diào)頻發(fā)射機(jī)的要求[12]。
數(shù)字萬用表對穩(wěn)壓電源的測試結(jié)果:
表4-3 穩(wěn)壓電源的測試結(jié)果
5 系統(tǒng)程序的設(shè)計5.1 主程序首先,進(jìn)行整個程序的初始化及清屏,開機(jī)時先顯示一下“088.0”,預(yù)制發(fā)射頻率為88MHz,送入BH1415F,然后進(jìn)入查鍵和顯示函數(shù)的循環(huán)。當(dāng)有按鍵按下時,程序判斷是哪個鍵被按下,然后執(zhí)行相應(yīng)的按鍵功能,并調(diào)用數(shù)碼顯示,顯示所設(shè)置的發(fā)射頻率;當(dāng)沒有鍵按下時,返回鍵盤掃描,再判斷是否有鍵被按下。本次程序設(shè)計的整體流程圖,如圖5-1所示:
5.2 延時子程序延時函數(shù)在本系統(tǒng)中主要用于1ms的顯示延時和10ms的按鍵消抖。
5.3 LED動態(tài)掃描子程序掃描函數(shù)使用單片機(jī)的兩個端口,一個端口用于輸出段碼,一個端口用于行掃描,以實現(xiàn)LED 的動態(tài)顯示。掃描函數(shù)執(zhí)行一次約為4ms,在第二位LED顯示時點亮小數(shù)點。其程序流程圖如圖5-2所示:
5.4 頻率數(shù)據(jù)轉(zhuǎn)換子程序 將頻率數(shù)據(jù)由十進(jìn)制BCD碼轉(zhuǎn)為十六進(jìn)制數(shù)。
5.5 控制命令合成子程序BH1415F的頻率控制字為兩個字節(jié)(如圖5—3所示)。兩個字節(jié)中低11位(D0—D10)為頻率數(shù)據(jù),其值乘以0.1即為BH1415F 的輸出頻率(單位為MHz)。高5位(D0—D15)為控制位。其中D11(MONO)位單聲道/立體聲控制位,該位為0時表示單聲道發(fā)射模式,該位為1時表示立體聲發(fā)射模式。D12(PD0)、D13(PD1)位用于相位控制,通常為0,當(dāng)分別為01和10時可使發(fā)射頻率在最低和最高處。D14(T0)和D15(T1)用于測試模式控制,通常為00,當(dāng)為10時為測試模式。合成時將控制命令(5位)與數(shù)據(jù)的最高3位合成一個字節(jié)。
圖5-3 BH1415F的頻率控制字及傳送格式
5.6 BH1415F字節(jié)寫入子程序按照BH1415F字節(jié)傳送要求,按低位先送、低字節(jié)先送的原則。傳送的延時應(yīng)精確,程序流程圖如圖5-4、5-5所示。
5.7 查鍵子程序系統(tǒng)采用4×4行列式鍵盤。鍵盤部分應(yīng)實現(xiàn)如下功能:首先,對鍵盤進(jìn)行掃描,判斷是否有鍵被按下。如果沒有,則轉(zhuǎn)回鍵盤掃描,看下次是否有鍵被按下;如果有鍵被按下,則先對鍵進(jìn)行去抖動,然后算出是哪個鍵被按下,再延時等待鍵釋放。因為每一個鍵都對應(yīng)一個處理子程序,得到閉合鍵的鍵碼后,就可以根據(jù)鍵碼,轉(zhuǎn)相應(yīng)的鍵處理子程序(分支是使用JMP等散轉(zhuǎn)指令實現(xiàn)的),進(jìn)行字符、數(shù)據(jù)的輸入或命令的處理。這樣就可以實現(xiàn)該鍵所設(shè)定的功能。
根據(jù)上述說明,畫出本次程序設(shè)計的鍵處理流程圖,如圖5-6所示:
6 系統(tǒng)調(diào)試及性能分析6.1 硬件調(diào)試硬件調(diào)試時先檢查電路板的焊接情況,在檢查無誤后可以通電檢查。實際制作中可結(jié)合示波器對晶振及P0、P1、P2口的波形情況進(jìn)行綜合硬件測試分析。
6.2 軟件調(diào)試軟件調(diào)試使用偉福編譯軟件,源程序編譯及仿真調(diào)試應(yīng)分段或以子程序為單位一個一個進(jìn)行,最后可以結(jié)合硬件實時運行調(diào)試。
6.3 發(fā)射頻率的調(diào)試調(diào)通程序及硬件的情況下,在BH1415F的11腳接上一段電線作為發(fā)射天線,在室內(nèi)可以收到調(diào)頻廣播。
如果調(diào)不出頻率,或者出了頻率但不由單片機(jī)控制,該類問題主要是壓控調(diào)試不對,沒有鎖相。在LC振蕩電路中,把振蕩產(chǎn)生的信號接入示波器,觀察示波器,調(diào)節(jié)中周的磁芯改變L的值使示波器的頻率讀數(shù)達(dá)到93MHz左右。先測試變?nèi)荻䴓O管上的電壓,頻率越高,電壓越高,調(diào)節(jié)電感匝距,使得頻率設(shè)置在98MHz時,電壓接近Vcc,頻率設(shè)置在88MHz時,電壓接近0V。當(dāng)發(fā)現(xiàn)頻率的最高端達(dá)不到98MHz時應(yīng)減小振蕩電感(減小匝數(shù));而在低端的頻率達(dá)不到要求時,要增加線圈匝數(shù)。
在調(diào)試中選用MC1648做壓控振蕩,雖然頻率達(dá)到了設(shè)計要求,但是干擾特別明顯,導(dǎo)致接收到的音頻信號質(zhì)量下降?紤]發(fā)射信號的音質(zhì)很重要,不采用MC1648,直接使用LC 振蕩電路。LC 振蕩電路的調(diào)試過程中需要多次更換電容和電感線圈,調(diào)整振蕩電路使BH1415F 可以振蕩。
如果調(diào)試中頻率覆蓋范圍沒有達(dá)到預(yù)期的效果,一個原因是變?nèi)荻䴓O管變?nèi)莘秶粔虼;也有可能LC振蕩電路調(diào)整的不完善。振蕩電感調(diào)好后用膠封住,防止發(fā)射器工作時由于振動而產(chǎn)生頻率漂移。
6.4 性能分析用BH1415F設(shè)計的小功率調(diào)頻發(fā)射器不僅設(shè)計簡單,而且頻率設(shè)定靈活,可有效地避開當(dāng)?shù)氐恼{(diào)頻電臺,可應(yīng)用于室內(nèi)廣播、電視伴音轉(zhuǎn)發(fā)等小范圍的無線調(diào)頻轉(zhuǎn)播。
結(jié) 論此次設(shè)計將應(yīng)用于無線通信領(lǐng)域,并且針對當(dāng)前市場上短距離無線產(chǎn)品的不足進(jìn)行了改進(jìn)。測試結(jié)果表明,設(shè)計要求的各項指標(biāo)均可以基本實現(xiàn),盡管發(fā)射的帶寬沒有到達(dá)預(yù)計的結(jié)果,原因是變?nèi)荻䴓O管的變?nèi)莘秶粔虼蟆R玫椒(wěn)定度高的發(fā)射頻率應(yīng)采用鎖相環(huán)技術(shù),來降低中心頻率的漂移。此外,語音信號采用調(diào)頻方式與調(diào)幅相比,有利于改善輸出音頻信號的信噪比,以保證語音業(yè)務(wù)的可靠傳輸。
無線調(diào)頻發(fā)射系統(tǒng)應(yīng)用了大量的高頻電子線路技術(shù),尤其是其中的高頻信號處理設(shè)計電路要有電路調(diào)試的環(huán)境,受實際調(diào)試環(huán)境的影響教大,調(diào)試具有較大難度。在電路的設(shè)計制作中,一定要遵循高頻布線規(guī)則,并且可以在焊接電路的過程中適當(dāng)接入退耦電容,有效的濾除雜波信號的干擾。
通過方案論證、資料查詢及電路設(shè)計和反復(fù)調(diào)試,不斷的解決電路調(diào)試過程中的問題,最終在規(guī)定的時間內(nèi)完成了設(shè)計任務(wù)。本設(shè)計由于水平有限,電路及程序設(shè)計還有需要改進(jìn)的地方,在今后的學(xué)習(xí)和研究中,將繼續(xù)改進(jìn)完善。
另外在調(diào)試過程中,以保證作品實現(xiàn)功能準(zhǔn)確為前提,盡量做到電路簡單、美觀,效果好成本低,以增強(qiáng)其實用價值。
參考文獻(xiàn)[1] 李廣第,朱月秀等.單片機(jī)基礎(chǔ).北京:北京航空航天大學(xué)出版社,2001.
[2] 何立民.單片機(jī)高級教程-應(yīng)用與設(shè)計.北京:北京航空航天大學(xué)出版社, 2000.
[3] 沈德金等. MCS-51系列單片機(jī)接口電路與應(yīng)用程序?qū)嵗?北京:北京航空航天大學(xué)出版社,1990.
[4] 李光飛,李良兒等.單片機(jī)課程設(shè)計實例指導(dǎo).北京:北京航空航天大學(xué)出版社,2004.
[5] 鈴木憲次.高頻電路的設(shè)計與制作.科學(xué)出版社,2005.
[6] 張洪潤,藍(lán)清華等. 單片機(jī)應(yīng)用技術(shù)教程.北京:清華大學(xué)出版社,1997.
[7] 李華. MCS-51系列單片機(jī)實用接口技術(shù).北京:北京航空航天大學(xué)出版社 1993.
[8] 全國大學(xué)生電子設(shè)計競賽組委會.第五屆全國大學(xué)生電子設(shè)計競賽獲獎作品選編第1版,北京理工大學(xué)出版社,2005.
[9] 李鵬飛.AVR單片機(jī)與4×4小鍵盤的使用.無線電, 2006 (5):39-41.
[10] 李光飛,樓然苗等單片機(jī)C程序設(shè)計實例指導(dǎo).北京:北京航空航天大學(xué)出版社, 2005.
[11] 趙曉安. MCS-51單片機(jī)原理及應(yīng)用.天津:天津大學(xué)出版社,2001.
[12] 宋東生.整流濾波電路,無線電,2002(453):42-43.
[13] 吳景狄.單片機(jī)的鍵盤及LED數(shù)碼顯示接口.電子世界,2001(4):30-31.
[14] 陳粵初等. 單片機(jī)應(yīng)用系統(tǒng)設(shè)計與實踐.北京:北京航空航天大學(xué)出版社,1991.
[15] 譚博學(xué),苗匯靜等.集及成電路原理應(yīng)用.電子工業(yè)出版社,2003.
[16] 黃智偉,王彥等.全國大學(xué)生電子設(shè)計競賽訓(xùn)練教程.電子工業(yè)出版社,2004.
[17] 周興華.變?nèi)荻䴓O管和電調(diào)諧.電子世界,2000(6):54.
[18] 求是科技. 單片機(jī)典型模塊設(shè)計實例導(dǎo)航.北京:人民郵電出版社,2004.
[19] AT89C51,AT89C52說明書[S] ATMEL公司提供
[20] WU Xunwei,HANG Guoqiang,Massoud Pedram. Low power DC circuits employing AC power supply, SCIENCE IN CHINA (INFORMATION SCIENCES), 2002 Vol.45 No.3, 232.
附錄1:原理圖
單片機(jī)源程序如下:
- ;26H-29H放顯示小數(shù)位、個位、十位、百位BCD碼數(shù),24H-25H放頻率控制數(shù)據(jù)(十六進(jìn)制)
- ;
- CONBITL EQU 21H ;頻率控制字節(jié)低8位
- CONBITH EQU 22H ;頻率控制字節(jié)高8位
- KEYWORD EQU 23H ;存放鍵掃描時P1口值
- ORG 0000H ;程序開始地址
- LJMP START ;轉(zhuǎn)START執(zhí)行
- ORG 0003H ;
- RETI ;不用中斷程序
- ORG 000BH ;
- RETI ; 不用中斷程序
- ORG 0013H ;
- RETI ; 不用中斷程序
- ORG 001BH ;
- RETI ; 不用中斷程序
- ORG 0023H ;
- RETI ; 不用中斷程序
- ORG 002BH ;
- RETI ;
- ;初始化程序
- CLEARMEN: MOV R0,#20H ;20H-29H循環(huán)清0
- MOV R1,#0AH ;
- CLEARLOOP: MOV @R0,#00H ;
- INC R0 ;
- DJNZ R1,CLEARLOOP ;
- MOV P0,#0FFH ;四端口置1
- MOV P1,#0FFH ;
- MOV P2,#0FFH ;
- MOV P3,#0FFH ;
- CLR P3.0 ;BH1415禁止操作
- CLR P3.1 ;
- CLR P3.2 ;
- LCALL KEYFUN15 ;置立體聲發(fā)射方式,開立體聲發(fā)射指示燈
- CLEAR1: MOV PCON,#00H ;控制寄存器清0
- MOV 29H,#00H ; 置初始值為88MHZ(顯示為088.0)
- MOV 28H,#08H ;
- MOV 27H,#08H ;
- MOV 26H,#00H ;
- LCALL DISPUPDAT
- RET ;子程序返回
- ;
- ;主程序
- START: LCALL CLEARMEN ;上電初始化
- MAIN: LCALL KEYWORK ;調(diào)查鍵子程序
- LCALL DISPLAY ;LED顯示一次
- AJMP MAIN ;轉(zhuǎn)MAIN循環(huán)
- NOP ;PC出錯處理
- NOP ;
- AJMP START ;重新初始化
- ;
- ; 4*4行列掃描查鍵子程序
- KEYWORK: MOV P1,#0FFH ; 置P1口為輸入狀態(tài)
- CLR P1.0 ;掃描第一行(第一行為0)
- MOV A,P1 ;讀入P1口值
- ANL A,#0F0H ;低四位為0
- CJNE A,#0F0H,KEYCON ;高四位不為全1(有鍵按下)轉(zhuǎn)KEYCOON
- SETB P1.0 ; 掃描第二行(第二行為0)
- CLR P1.1 ;
- MOV A,P1 ; 讀入P1口值
- ANL A,#0F0H ; 低四位為0
- CJNE A,#0F0H,KEYCON ; 高四位不為全1(有鍵按下)轉(zhuǎn)KEYCOON
- SETB P1.1 ; 掃描第三行(第三行為0)
- CLR P1.2 ;
- MOV A,P1 ; 讀入P1口值
- ANL A,#0F0H ; 低四位為0
- CJNE A,#0F0H,KEYCON ; 高四位不為全1(有鍵按下)轉(zhuǎn)KEYCOON
- SETB P1.2 ; 掃描第四行(第四行為0)
- CLR P1.3 ;
- MOV A,P1 ; 讀入P1口值
- ANL A,#0F0H ; 低四位為0
- CJNE A,#0F0H,KEYCON ; 高四位不為全1(有鍵按下)轉(zhuǎn)KEYCOON
- SETB P1.3 ;結(jié)束行掃描
- RET ;子程序返回
- KEYCON: LCALL DL10MS ;消抖處理
- MOV A,P1 ;再讀入P1口值
- ANL A,#0F0H ; 低四位為0
- CJNE A,#0F0H,KEYCHE ; 高四位不為全1,確有鍵按下,轉(zhuǎn)KEYCHE
- KEYOUT: RET ;干擾,子程序返回
- KEYCHE: MOV A,P1 ;讀P1口值
- MOV KEYWORD,A ;放入23H暫存
- CJLOOP: LCALL DISPLAY ;調(diào)顯示子程序
- MOV A,P1 ;讀P1口值
- ANL A,#0F0H ;低四位為0
- CJNE A,#0F0H,CJLOOP ;高四位為全1(鍵還按著),轉(zhuǎn)CJLOOP等待釋放
- MOV R7,#00H ;鍵釋放,置R7初值為#00H(查表次數(shù))
- MOV DPTR,#KEYTAB ;取鍵值表首址
- CHEKEYLOOP: MOV A,R7 ;查表次數(shù)入A
- MOVC A,@A+DPTR ;查表
- XRL A,KEYWORD ;查表值與P1口讀入值比較
- JZ KEYOK ;為0(相等)轉(zhuǎn)KEYOK
- INC R7 ;不等,查表次數(shù)加1
- CJNE R7,#10H,CHEKEYLOOP ;查表次數(shù)不超過16次轉(zhuǎn)CHEKEYLOOP再查
- RET ;16次到,退出
- ;
- KEYOK: MOV A,R7 ;查表次數(shù)入A(即鍵號值)
- MOV B,A ;放入B
- RL A ;左移
- ADD A,B ;相加(鍵號乘3處理JMP 3字節(jié)指令)
- MOV DPTR,#KEYFUNTAB ;取鍵功能散轉(zhuǎn)表首址
- JMP @A+DPTR ;查表
- KEYFUNTAB: LJMP KEYFUN00 ; 鍵功能散轉(zhuǎn)表。跳至0號鍵功能程序
- LJMP KEYFUN01 ;
- LJMP KEYFUN02
- LJMP KEYFUN03
- LJMP KEYFUN04
- LJMP KEYFUN05
- LJMP KEYFUN06
- LJMP KEYFUN07
- LJMP KEYFUN08
- LJMP KEYFUN09
- LJMP KEYFUN10
- LJMP KEYFUN11
- LJMP KEYFUN12
- LJMP KEYFUN13
- LJMP KEYFUN14
- LJMP KEYFUN15 ; 跳至15號鍵功能程序
- RET ;散轉(zhuǎn)出錯返回
- ;
- ;鍵號對應(yīng)P1口數(shù)值表(同時按下兩鍵為無效操作)
- KEYTAB: DB 0EEH,0DEH,0BEH,7EH,0EDH,0DDH,0BDH,7DH
- DB 0EBH,0DBH,0BBH,7BH,0E7H,0D7H,0B7H,77H,0FFH,0FFH
- ;
- ;0號鍵功能程序
- KEYFUN00: INC 29H
- MOV A,29H
- CLR C
- CJNE A,#02H,FUN00
- FUN00: JC FUN00OUT
- MOV 29H,#00H
- FUN00OUT: MOV A,29H
- XRL A,#01H
- JNZ F00OUT1
- MOV 28H,#00H
- AJMP F00OUT
- F00OUT1: MOV 28H,#08H
- F00OUT: LCALL DISPUPDAT
- RET
- ;
- ;01號鍵功能程序
- KEYFUN01: INC 28H
- MOV A,28H
- CLR C
- CJNE A,#0AH,FUN01
- FUN01: JC FUN01OUT
- MOV 28H,#00H
- FUN01OUT: MOV A,29H
- XRL A,#01H
- JNZ F01OUT
- MOV 28H,#00H
- AJMP F001OUT
- F01OUT: MOV A,28H
- XRL A,#08H
- JZ F001OUT
- MOV A,28H
- XRL A,#09H
- JZ F001OUT
- MOV 28H,#08H
- F001OUT: LCALL DISPUPDAT
- RET
- ;
- ;02號鍵功能程序
- KEYFUN02: INC 27H
- MOV A,27H ;
- CLR C ;
- CJNE A,#0AH,FUN02
- FUN02: JC FUN02OUT
- MOV 27H,#00H
- FUN02OUT: LCALL DISPUPDAT
- RET ;
- ;
- ;03號鍵功能程序
- KEYFUN03: INC 26H ;
- MOV A,26H ;
- CLR C ;
- CJNE A,#0AH,FUN03
- FUN03: JC FUN03OUT
- MOV 26H,#00H
- FUN03OUT: LCALL DISPUPDAT
- RET
- ;
- ;04號鍵功能程序
- KEYFUN04: MOV 29H,#01H
- MOV 28H,#00H
- MOV 27H,#09H
- MOV 26H,#00H
- LCALL DISPUPDAT
- RET
- ;
- ;05號鍵功能程序
- KEYFUN05: MOV 29H,#01H ;
- MOV 28H,#00H
- MOV 27H,#08H
- MOV 26H,#00H
- LCALL DISPUPDAT ;
- RET
- ;
- ;06號鍵功能程序
- KEYFUN06: MOV 29H,#01H
- MOV 28H,#00H
- MOV 27H,#05H
- MOV 26H,#00H
- LCALL DISPUPDAT
- RET
- ;
- ;07號鍵功能程序
- KEYFUN07: MOV 29H,#01H
- MOV 28H,#00H
- MOV 27H,#00H
- MOV 26H,#00H
- LCALL DISPUPDAT
- RET
- ;
- ;08號鍵功能程序
- KEYFUN08: MOV 29H,#00H
- MOV 28H,#09H
- MOV 27H,#08H
- MOV 26H,#00H
- LCALL DISPUPDAT
- RET
- ;
- ;09號鍵功能程序
- KEYFUN09: MOV 29H,#00H
- MOV 28H,#09H
- MOV 27H,#06H
- MOV 26H,#00H
- LCALL DISPUPDAT
- RET
- ;
- ;10號鍵功能程序
- KEYFUN10: MOV 29H,#00H
- MOV 28H,#09H
- MOV 27H,#04H
- MOV 26H,#00H
- LCALL DISPUPDAT
- ; RET
- ;11號鍵功能程序
- KEYFUN11: MOV 29H,#00H
- MOV 28H,#09H
- MOV 27H,#02H
- MOV 26H,#00H
- LCALL DISPUPDAT
- RET
- ;
- ;12號鍵功能程序
- KEYFUN12: MOV 29H,#00H
- MOV 28H,#09H
- MOV 27H,#00H
- MOV 26H,#00H
- LCALL DISPUPDAT
- RET
- ;
- ;13號鍵功能程序
- KEYFUN13: MOV 29H,#00H
- MOV 28H,#08H
- MOV 27H,#08H
- MOV 26H,#00H
- LCALL DISPUPDAT
- RET
- ;
- ;14號鍵功能程序
- KEYFUN14: MOV 29H,#00H
- MOV 28H,#08H
- MOV 27H,#07H
- MOV 26H,#08H
- LCALL DISPUPDAT
- RET
- ;
- ;15號鍵功能程序
- KEYFUN15: CPL 03H
- JNB 03H,MONO
- CLR P3.3
- LCALL PUTBIT
- RET
- MONO: SETB P3.3
- LCALL PUTBIT
- RET
- ;
- ; 將BCD碼轉(zhuǎn)為十六進(jìn)制數(shù),與5位控制碼合成操作碼,寫入控制芯片
- DISPUPDAT: LCALL BCDB
- LCALL CONCOMMAND
- LCALL PUTBIT
- RET ;
- ; 將BCD碼轉(zhuǎn)為十六進(jìn)制數(shù)程序
- BCDB: MOV CONBITL,#00H ; 控制字清0
- MOV CONBITH,#00H ; 控制字清0
- MOV CONBITL,26H
- MOV A,27H ;個位數(shù)乘10操作
- MOV B,#10 ;
- LCALL MULLOOP ;調(diào)乘法子程序
- MOV A,28H ;十位數(shù)乘100操作
- MOV B,#100
- LCALL MULLOOP ; 調(diào)乘法子程序
- MOV A,29H ;
- JNZ ADD3E8
- RET ; 百位數(shù)為0退出
- ADD3E8: CLR C ;清進(jìn)位檔標(biāo)志
- MOV A,#0E8H ;低8位加法
- ADD A,CONBITL ;累加
- MOV CONBITL,A ;放回CONBITL
- MOV A,#03H ; 高8位加法
- ADDC A,CONBITH ;控制字高8位處理
- MOV CONBITH,A ;放回CONBITH
- RET ;返回
- ;
- ;乘法及累加處理程序(將四位顯示的十進(jìn)制BCD碼轉(zhuǎn)為1個二進(jìn)制數(shù))
- MULLOOP: MUL AB ;乘法
- CLR C ;清進(jìn)位標(biāo)志
- ADD A,CONBITL ;積低8位與CONBITL相加
- MOV CONBITL,A ;放回CONBITL
- MOV A,CONBITH ;
- ADDC A,B
- MOV CONBITH,A ;放回CONBITH
- RET ;返回
- ;
- ;頻率控制數(shù)據(jù)與5位控制碼合成BH1415控制字
- CONCOMMAND: ANL CONBITH,#07H ;高四位為0
- MOV A,20H ;控制字放入A
- ORL A,CONBITH ;合成控制字
- MOV CONBITH,A ;放回CONBITH
- RET ;返回
- ;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; 顯示程序 ;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;共陽LED顯示,P0口輸出段碼,P2口輸出掃描字
- DISPLAY: MOV R1,#26H ;顯示首址
- MOV R5,#0FEH ;設(shè)掃描字
- PLAY: MOV A,R5 ;放入A
- MOV P2,A ;P2口輸出
- MOV A,@R1 ;取顯示數(shù)據(jù)
- MOV DPTR,#TAB ;取段碼表首址
- MOVC A,@A+DPTR ;查段碼
- MOV P0,A ;從P0輸出
- MOV A,R5 ;讀入掃描字
- JB ACC.1,PLAY1 ; 不是十位(LED),不顯示小數(shù)點
- CLR P0.7 ;是十位,顯示小數(shù)點
- PLAY1: LCALL DL1MS ;點亮1毫秒
- INC R1 ;指向下一顯示數(shù)據(jù)
- JNB ACC.3,ENDOUT ;是第四位LED,退出
- RL A ;不是,左移一位
- MOV R5,A ;放回R5
- SETB P0.7 ;關(guān)小數(shù)點
- AJMP PLAY ;轉(zhuǎn)PLAY循環(huán)
- ENDOUT: MOV P2,#0FFH ;顯示結(jié)束,關(guān)顯示輸出口
- MOV P0,#0FFH ;
- RET ;返回
- ;
- ;0-9共陽段碼表
- TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0FFH
- ;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; 發(fā)送控制字節(jié)子程序 ;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;
- PUTBIT: MOV A,CONBITL ;低8位控制字入A
- SETB P3.2 ;BH1415使能(允許寫)
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載: