單片機課程設計音樂鬧鐘定時器品_第1頁
單片機課程設計音樂鬧鐘定時器品_第2頁
單片機課程設計音樂鬧鐘定時器品_第3頁
單片機課程設計音樂鬧鐘定時器品_第4頁
單片機課程設計音樂鬧鐘定時器品_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、單片機課程設計目錄:0、 任務書.21、 系統(tǒng)總體設計方案規(guī)劃與選定.22、 硬件設計.53、 軟件設計.64、 調(diào)試.85、 新增功能及實現(xiàn)方法.86、 小結與體會.97、 參考文獻.98、 附錄.100.任務書基于51單片機設計一個電子數(shù)字鐘,顯示時、分、秒,且具有鬧鐘功能。用8255接口實現(xiàn)4*8鍵盤及8位LED顯示。32個鍵:09共10個鍵,調(diào)時(設置當前時間)鍵;設定鬧鐘(定時)鍵;走時鍵;光標左右移動各一個鍵。要求鍵復位后,應該最后面的LED上顯示H(待命狀態(tài))。1. 系統(tǒng)總體設計方案規(guī)劃與選定 1.1主控制芯片選擇 方案一:采用ARM微處理,做主控芯片,計算速度快,缺點;成本高,

2、控制較復雜,不容易焊接。 方案二:采用80C51單片機做主控制器,由單片機來完成采集和信號處理等底層的核心計算,做主控芯片,成本低,易控制,易實現(xiàn)。經(jīng)過以上兩個方案比較,在此題方案二明顯優(yōu)于方案一,故采用80C51單片機做主控制器。1.2定時模塊選擇方案一:采用時鐘芯片DS1302。DS1302 可以用于數(shù)據(jù)記錄,特別是對某些具有特殊意義的數(shù)據(jù)點的記錄,能實現(xiàn)數(shù)據(jù)與出現(xiàn)該數(shù)據(jù)的時間同時記錄,且較單片機計時簡單節(jié)約硬件資源,但存在時鐘精度不高,易受環(huán)境影響,出現(xiàn)時鐘混亂等缺點。 方案二:采用單片機內(nèi)部的定時系統(tǒng),外接晶振進行分頻脈沖計數(shù)。此系統(tǒng)采用12MHz晶振。由于方案二使用簡單,比方案一更適

3、用該系統(tǒng)設計,所以選擇方案二。1.3 LED顯示及計時模塊選擇 方案一:74LS192計數(shù)器74LS47七點顯示譯碼器 74LS192芯片是一塊可預置數(shù)可逆計數(shù)芯片,功能強大。將74LS192芯片CPU引腳接高電平可實現(xiàn)減法計數(shù),以倒計時顯示。可通過74LS47與LED共陽極數(shù)字顯示器配合使用。 方案二:使用移位寄存器74HC595與譯碼器相連74HC595具有8位移位寄存器和一個存儲器,使用時可直接與數(shù)字顯示器相連。 方案三:使用8255擴展LED顯示計時模塊8255是一個可編程并行接口芯片,有一個控制口和三個8位數(shù)據(jù)口,外設通過數(shù)據(jù)口與單片機進行數(shù)據(jù)通信,各數(shù)據(jù)口的工作方式和數(shù)據(jù)傳送方向是

4、通過用戶對控制口寫控制字控制的。我們用到了A與B口分別進行對數(shù)碼顯示管的片選和段選,且B口同時作為鍵盤掃描模塊的輸入口,與數(shù)碼顯示模塊分時復用。故采用方案三1.4蜂鳴器的選擇方案一:電磁式蜂鳴器電磁式蜂鳴器主要是利用通電導體會產(chǎn)生磁場的特性,用一個固定的永久磁鐵與通電導體產(chǎn)生磁力推動固定在線圈上的鼓膜。電磁式由于音色好,所以多用于語音、音樂等設備。對于不同提示音且考慮實際,此種較好。方案二:壓電式蜂鳴器壓電式蜂鳴器用的是壓電材料,即當受到外力導致壓電材料發(fā)生形變時壓電材料會產(chǎn)生電荷。同樣,當通電時壓電材料會發(fā)生形變。壓電式結構簡單耐用但音調(diào)單一音色差,適用于警報器等設備。由于鬧鈴為音樂鬧鈴,所

5、以使用電磁式蜂鳴器更為合適。2. 硬件設計2.1 芯片的選擇2.1.1 單片機80C512.1.1.1單片機80C51的組成80c51單片機包含中央處理器、程序存儲器(ROM)、數(shù)據(jù)存儲器(RAM)、定時/計數(shù)器、并行接口、串行接口和中斷系統(tǒng)等幾大單元及數(shù)據(jù)總線、地址總線和控制總線等三大總線,現(xiàn)在我們分別加以說明:中央處理器:中央處理器(CPU)是整個單片機的核心部件,是8位數(shù)據(jù)寬度的處理器,能處理8位二進制數(shù)據(jù)或代碼,CPU負責控制、指揮和調(diào)度整個單元系統(tǒng)協(xié)調(diào)的工作,完成運算和控制輸入輸出功能等操作。數(shù)據(jù)存儲器(RAM)8051內(nèi)部有128個8位用戶數(shù)據(jù)存儲單元和128個專用寄存器單元,它們

6、是統(tǒng)一編址的,專用寄存器只能用于存放控制指令數(shù)據(jù),用戶只能訪問,而不能用于存放用戶數(shù)據(jù),所以,用戶能使用的RAM只有128個,可存放讀寫的數(shù)據(jù),運算的中間結果或用戶定義的字型表。程序存儲器(ROM):8051共有4096個8位掩膜ROM,用于存放用戶程序,原始數(shù)據(jù)或表格。定時/計數(shù)器(ROM):8051有兩個16位的可編程定時/計數(shù)器,以實現(xiàn)定時或計數(shù)產(chǎn)生中斷用于控制程序轉(zhuǎn)向。并行輸入輸出(I/O)口:8051共有4組8位I/O口(P0、 P1、P2或P3),用于對外部數(shù)據(jù)的傳輸。2.1.1.2 MCS-51的引腳說明:MCS-52系列單片機中的8031、8051及8751均采用40Pin封裝

7、的雙列直接DIP結構,右圖是它們的引腳配置,40個引腳中,正電源和地線兩根,外置石英振蕩器的時鐘線兩根,4組8位共32個I/O口,中斷口線與P3口線復用?,F(xiàn)在我們對這些引腳的功能加以說明:MCS-51的引腳說明:MCS-52系列單片機中的8031、8051及8751均采用40Pin封裝的雙列直接DIP結構,右圖是它們的引腳配置,40個引腳中,正電源和地線兩根,外置石英振蕩器的時鐘線兩根,4組8位共32個I/O口,中斷口線與P3口線復用。 圖1 80C51的引腳2.1.1.3 MCS-51單片機內(nèi)部定時器計數(shù)器、中斷系統(tǒng)簡介(1)定時器計數(shù)器 1、MCS-51系列中51子系列有兩個16位的可編程

8、定時計數(shù)器可:定時計數(shù)器T0和定時計數(shù)器T1。它由加法計數(shù)器、方式寄存器TMOD、控制寄存器TCON等組成。方式寄存器用于設定定時計數(shù)器T0和T1的工作方式,控制寄存器用于對定時計數(shù)器啟動、停止進行控制。 2、每個定時計數(shù)器既可以對系統(tǒng)時鐘計數(shù)實現(xiàn)定時,也可以外部信號計數(shù)實現(xiàn)計數(shù)功能通過編程設定來實現(xiàn)。 3、每個定時計數(shù)器都有多種工作方式,其中T0有四種工作方式,T1有三種工作方式,T2有三種工作方式。通過編程可設定工作于某種方式。四種工作方式為:13位定時計數(shù)器、16位定時計數(shù)器、8位自動重置定時計數(shù)器、兩個8位定時計數(shù)器(只有T0有) 4、每一個定時計數(shù)器定時計數(shù)時間到時產(chǎn)生溢出,使相應的

9、溢出位置位,溢出可通過查詢或中斷方式處理。(2)中斷系統(tǒng)1、MCS-51單片機提供5個硬件中斷源,2個外部中斷源,2個定時計數(shù)器T0和T1的溢出中斷TF0和TF1,1個串行口發(fā)送TI和接收RI中斷。2、MCS-51單片機中沒有專門的開中斷和關中斷指令,對各個中斷源的允許和屏蔽是由內(nèi)部的中斷允許寄存器IE的各位來控制的。中斷允許寄存器IE的字節(jié)地址為A8H,可以進行位尋址。系統(tǒng)復位時,中斷允許寄存器IE的內(nèi)容為00H,如果要開放某個中斷源,則必須使IE中的總控置位和對應的中斷允許位置“1”。3、MCS-51單片機有5個中斷源,為了處理方便,每個中斷源有兩級控制,高優(yōu)先級和低優(yōu)先級。通過由內(nèi)部的中

10、斷優(yōu)先級寄存器IP來設置,中斷優(yōu)先級寄存器IP的字節(jié)地址為B8H,可以進行位尋址。如果某位被置“1”,則對應的中斷源被設為高優(yōu)先級;如果某位被清零,則對應的中斷源被設為低優(yōu)先級。對于同級中斷源,系統(tǒng)有默認的優(yōu)先權順序,從高到低優(yōu)先權順序為外部中斷0、定時計數(shù)器T0中斷、外部中斷1、定時計數(shù)器T1中斷、串行口中斷。通過設置中斷優(yōu)先級寄存器IP能夠改變系統(tǒng)默認的優(yōu)先級順序。4、MCS-51單片機響應中斷的條件為:中斷源有請求且中斷允許。 2.1.2 八位一體七段數(shù)碼管數(shù)碼管使用條件:a、段及小數(shù)點上加限流電阻。b、使用電壓:段:根據(jù)發(fā)光顏色決定; 小數(shù)點:根據(jù)發(fā)光顏色決定。c、使用電流:靜態(tài):總電

11、流 80mA(每段 10mA);動態(tài):平均電流 4-5mA 峰值電流 100mA上圖為七段數(shù)碼管引腳圖,其中共陽極數(shù)碼管引腳圖和共陰極相同。  LED數(shù)碼管根據(jù)LED的接法不同分為共陰和共陽兩類,了解LED的這些特性,對編程是很重要的,因為不同類型的數(shù)碼管,除了它們的硬件電路有差異外,編程方法也是不同的。右圖是共陰和共陽極數(shù)碼管的內(nèi)部電路,它們的發(fā)光原理是一樣的,只是它們的電源極性不同而已。 將多只LED的陰極連在一起即為共陰式,而將多只LED的陽極連在一起即為共陽式。以共陰式為例,如把陰極接地,在相應段的陽極接上正電源,該段即會發(fā)光。當然,LED的電流通常較小,一般均需在

12、回路中接上限流電阻。假如我們將"b"和"c"段接上正電源,其它端接地或懸空,那么"b"和"c"段發(fā)光,此時,數(shù)碼管顯示將顯示數(shù)字“1”。而將"a"、"b"、"d"、"e"和"g"段都接上正電源,其它引腳懸空,此時數(shù)碼管將顯示“2”。其它字符的顯示原理類同。2.1.3 并行接口擴展芯片82558255內(nèi)部包括三個并行數(shù)據(jù)輸入/輸出端口,兩個工作方式控制電路,一個讀/寫控制邏輯電路和8位總線緩沖器。各部分功能概括如下:(

13、1)端口A、B、CA口:是一個8位數(shù)據(jù)輸出鎖存器/緩沖器和一個8位數(shù)據(jù)輸入鎖存器。B口:是一個8位數(shù)據(jù)輸入/輸出鎖存器/緩沖器和一個8位數(shù)據(jù)輸入鎖存器。C口:是一個8位數(shù)據(jù)輸出鎖存器/緩沖器和一個8位數(shù)據(jù)輸入緩沖器(輸入不鎖存)。通常A口、B口作為數(shù)據(jù)輸入/輸出端口。C口作為控制/狀態(tài)信息端口,它在“方式控制字”的控制下可分為兩個4位端口,每個端口有一個4位鎖存器,分別與A口、B口配合使用,作為控制信號輸出或狀態(tài)信息輸入端口。(2)工作方式控制電路工作方式控制電路有兩個,一個是A組控制電路,另一個是B組控制電路。這兩組控制電路具有一個控制命令寄存器,用來接受中央處理器發(fā)來的控制字,以決定兩組端

14、口的工作方式,也可根據(jù)控制字的要求對C口按位清“0”或者按位置“1”。A組控制電路用來控制A口和C口的上半部分(PC7-PC4)。B組控制電路用來控制B口和C口的下半部分(PC3-PC0)。(3)總線數(shù)據(jù)緩沖器總線數(shù)據(jù)緩沖器是一個三態(tài)雙向8位緩沖器,作為8255與系統(tǒng)總線之間的接口,用來傳送數(shù)據(jù)、指令、控制命令以及外部狀態(tài)信息。(4)讀/寫控制邏輯電路讀/寫控制邏輯電路接受CPU發(fā)來的控制信號RD、WR、RESET、地址信號A1-A0等,然后根據(jù)控制信號的要求,將端口數(shù)據(jù)讀出,發(fā)往CPU,或者將CPU送來的數(shù)據(jù)寫入端口。2.2 電路的組成2.2.1 數(shù)碼管顯示電路數(shù)碼管顯示器成本低,配置靈活,

15、與單片機接口簡單,在單片機應用系統(tǒng)中廣泛應用。數(shù)碼管的工作原理如下:數(shù)碼管是由8個發(fā)光二極管構成的顯示器件。在數(shù)碼管中,若將二極管的陽極連在一起,稱為共陽極數(shù)碼管;若將二極管的陰極連在一起,稱為共陰極數(shù)碼管。本次課程設計用到的8個數(shù)碼管均是共陽極的。當發(fā)光二極管導通時,它就會發(fā)光。每個二極管就是一個筆劃,若干個二極管發(fā)光時,就構成了一個顯示字符。將單片機的I/O口控制相應的芯片與數(shù)碼管的a-g相連,高電平的位對應的發(fā)光二極管亮,這樣,由I/O口輸出不同的代碼,就可以控制數(shù)碼管顯示不同的字符。8個數(shù)碼管均采用動態(tài)顯示方式,顯示當前的時間。2.2.2 鍵盤掃描電路鍵盤掃描電路圖鍵盤可分為兩類:非編

16、碼鍵盤和編碼鍵盤;常見的非編碼鍵盤有兩種結構:獨立式鍵盤和矩陣式鍵盤。本次課程設計使用矩陣式鍵盤。矩陣鍵盤的工作原理:按鍵設置在行、列線交點上,行、列線分別連接到按鍵開關的兩端。列線通過上拉電阻接到+5V 電源上。無按鍵按下時,列線處于高電平的狀態(tài),而當有按鍵按下時,列線電平與此列線相連的行線電平?jīng)Q定。行列掃描法原理:第一步,使列線為編程的輸入線,行線是輸出線,拉低所有的行線,判斷列線的變化,如果有按鍵按下,按鍵按下的對應列線被拉低,否則所有的列線都為高電平。 第二步,在第一步判斷有鍵按下后,延時10ms消除機械抖動,再次讀取列值,如果此列線還處于低電平狀態(tài)則進入下一步,否則返回第一步重新判斷

17、。第三步,開始掃描按鍵位置,采用逐行掃描,分別拉低第一行,第二行,第三行,第四行,無論拉低哪一行其他三行都為高電平,讀取列值找到按鍵的位置,分別把行值和列值儲存在寄存器里。第四步,從寄存器中找到行值和列值并把其合并,得到按鍵值,對此按鍵值進行編碼,與已經(jīng)設定好的鍵碼表進行一一對比,如果不等,則繼續(xù)比較,如果相等,則利用轉(zhuǎn)移指令實現(xiàn)鍵盤掃描到按鍵功能的轉(zhuǎn)移。2.2.3 音樂鬧鈴電路蜂鳴器電路2.2.3.1 蜂鳴器蜂鳴器是一種一體化結構的電子訊響器,主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類型,他廣泛應用于計算機、打印機、復印機、報警器、電話機等電子產(chǎn)品中作發(fā)聲器件。  

18、0;    2.2.3.2 單片機驅(qū)動    單片機上面使用的蜂鳴器一般都是無源電磁式的蜂鳴器(如下圖所示)。它由振蕩器、電磁線圈、磁鐵、振動膜片及外殼等組成。接通電源后,振蕩器產(chǎn)生的音頻信號電流通過電磁線圈,使電磁線圈產(chǎn)生磁場,振動膜片在電磁線圈和磁鐵的相互作用下,周期性地振動發(fā)聲。蜂鳴器發(fā)聲原理是電流通過電磁線圈,使電磁線圈產(chǎn)生磁場來驅(qū)動振動膜發(fā)聲的,因此需要一定的電流才能驅(qū)動它,單片機IO引腳輸出的電流較小,單片機輸出的TTL電平基本上驅(qū)動不了蜂鳴器,因此需要增加一個電流放大的電路。2.2.4 復位電路 RESET/V

19、pd為復位信號復用腳,當80C51通電,時鐘電路開始工作,在RESET引腳上出現(xiàn)24個時鐘周期以上的高電平,系統(tǒng)即初始復位。初始化后,程序計數(shù)器PC指向0000H,P0-P3輸出口全部為高電平,堆棧指針寫入07H,其它專用寄存器被清“0”。RESET由高電平下降為低電平后,系統(tǒng)即從0000H地址開始執(zhí)行程序。然而,初始復位不改變RAM(包括工作寄存器R0-R7)的狀態(tài),80C51的初始態(tài)。上電復位:上電復位電路是種簡單的復位電路,只要在RST復位引腳接一個電容到VCC,接一個電阻到地就可以了。上電復位是指在給系統(tǒng)上電時,復位電路通過電容加到RST復位引腳一個短暫的高電平信號,這個復位信號隨著V

20、CC對電容的充電過程而回落,所以RST引腳復位的高電平維持時間取決于電容的充電時間。為了保證系統(tǒng)安全可靠的復位,RST引腳的高電平信號必須維持足夠長的時間。電路圖如下: 上電自動復位是通過外部復位電路的電容充電來實現(xiàn)的。只要Vcc的上升時間不超過1ms,就可以實現(xiàn)自動上電復位。3軟件設計4.調(diào)試5.新增功能及實現(xiàn)方法5.1定時器產(chǎn)生音樂的原理音樂的產(chǎn)生主要是通過單片機的I/O口輸出高低不同的脈沖信號來控制蜂鳴器發(fā)音。要想產(chǎn)生音頻脈沖信號,需要算出某一音頻的周期(1/頻率),然后將此周期除以2,即為半周期的時間。利用單片機定時器計時這個半個周期時間,每當計時到后就將輸出脈沖的I/O口反相,然后重

21、復計時此半周期時間再對I/O口反相,這樣就能在此I/O口上得到此頻率的脈沖。通常,利用單片機的內(nèi)部定時器0,工作在方式1下,改變計數(shù)初值TH0和TL0來產(chǎn)生不同頻率。對于音樂的節(jié)拍,每個音符使用1個字節(jié),字節(jié)的高4位代表音符的高低,低4位代表音符的節(jié)拍。如果1拍為0.4S,1/4拍為0.1S,只要設定延遲時間就可求得節(jié)拍的時間。假設1/4拍為1DELAY,那么1拍應為4DELAY,以此類推。所以只要求得1/4拍的DELAY,其余的節(jié)拍就是它的倍數(shù)??偠灾皇讟非怯梢綦A和節(jié)拍兩大要素構成。一首樂曲演奏的原理是:不同音階分別對應不同的頻率,發(fā)出不同的音調(diào),而節(jié)拍則控制發(fā)出音調(diào)時間的長短;若將

22、樂曲的音調(diào)連續(xù)發(fā)出,并使其按相應的節(jié)拍變化,即可演奏一首樂曲。根據(jù)這一特點,我們采用單片機輔以相應的接口來設計音樂播放器。5.2實現(xiàn)方法利用定時器產(chǎn)生音樂,添加了音樂鬧鐘功能,能在鬧鐘時間到來時蜂鳴器發(fā)出祝你生日快樂歌,但缺點是在響鈴時間里,無法正常顯示時間。在此次課程設計中,產(chǎn)生的音樂是利用查表法來改變定時器T1的初值,即改變音高,而通過延時來確定每個音符的長短,即確定音長。236.小結與體會7.參考文獻【1】單片機原理、接口及應用單片機嵌入式系統(tǒng)技術基礎(第2版),肖看、李群芳,清華大學出版社【2】單片機原理及應用,霍孟友,機械工程出版社【3】51系列單片機設計實例(第二版),樓然苗、李光

23、飛,北京航空航天大學出版社8.附錄8.1 源程序代碼ORG 0000HLJMP STARTORG 000BHLJMP T0INT ;T0中斷服務程序ORG 001BHLJMP TIM0;主程序;START:LCALL CLEA START1:LCALL SCAN LCALL BELLSCAN LCALL KEYSCAN SJMP START1CLEA:MOV R0,#70H MOV R7,#0EHCLEAR:MOV R0,#00H INC R0 DJNZ R7,CLEAR ;70H7CH賦值0 MOV TMOD,#11H MOV TL0,#0B0H MOV TH0,#03CH SETB EA

24、SETB ET0 SETB EX0 SETB TR0 CLR IT0 MOV 72H,#10 MOV 75H,#10 MOV 68H,#55H MOV 69H,#01H MOV 6AH,#00H CLR P1.0 RET;延時子程序1MSDL1MS: MOV R6,#14HDL1: MOV R7,#19HDL2: DJNZ R7,DL2 DJNZ R6,DL1 RETDL10MS:ACALL SCAN ACALL SCAN ACALL SCAN RET;祝你生日快樂音樂鬧鈴程序BELLSCAN:MOV A,6AH CJNE A,7AH,BELLOUT MOV A,69H CJNE A,79H,

25、BELLOUT MOV A,68H CJNE A,78H,BELLOUT LCALL MUSICBELLOUT:RETMUSIC:MOV IE,#8AHMOV 30H,#00HNEXT1:MOV A,30HMOV DPTR,#TABLEMOVC A,A+DPTRMOV R2,AJZ END0ANL A,#0FHMOV R5,AMOV A,R2SWAP AANL A,#0FHJNZ SINGCLR TR1LJMP D1SING:DEC AMOV 22H,ARL AMOV DPTR,#TABLE1MOVC A,A+DPTRMOV TH1,AMOV 21H,AMOV A,22HRL AINC AMO

26、VC A,A+DPTRMOV TL1,AMOV 20H,ASETB TR1D1:LCALL DELAYINC 30HLJMP NEXT1END0:CLR TR1 LCALL BELLOUT TIM0:PUSH ACCPUSH PSWMOV TL1,20HMOV TH1,21HCPL P1.0POP PSWPOP ACCRETIDELAY:MOV R7,#02HD2:MOV R4,#187D3:MOV R3,#248 DJNZ R3,$ DJNZ R4,D3 DJNZ R7,D2 DJNZ R5,DELAY RETTABLE1:DW 64260,64400,64521,64580 DW 6468

27、4,64777,64820,64898 DW 64968,65030,65058,65110 DW 65157,65178,65217TABLE:;1 DB 82H,01H,81H,94H,84H DB 0B4H,0A4H,04H DB 82H,01H,81H,94H,84H DB 0C4H,0B4H,04H ;2 DB 82H,01H,81H,0F4H,0D4H DB 0B4H,0A4H,94H DB 0E2H,01H,0E1H,0D4H,0B4H DB 0C4H,0B4H,04H DB 00HSCAN: ;把記的數(shù)送給偏移量 MOV DPTR,#7FFFH MOV A,#80H MOVX

28、DPTR,A ;寫控制字,在顯示程序中A口輸出,B口輸出 MOV A,78H ;秒 MOV B,#0AH DIV AB MOV 71H,A MOV 70H,B MOV A,79H ;分 MOV B,#0AH DIV AB MOV 74H,A MOV 73H,B MOV A,7AH;時 MOV B,#0AH DIV AB MOV 77H,A MOV 76H,B ; ;循環(huán)掃描顯示,數(shù)碼管顯示程序,數(shù)碼管為共陽型 MOV R1,#70H MOV R5,#80H ;位選 MOV R3,#08HSCAN1:MOV A,R5 MOV DPTR,#7FFCH MOVX DPTR,A ;送A口位選 MOV

29、A,R1 MOV DPTR,#TAB MOVC A,A+DPTR MOV DPTR,#7FFDH MOVX DPTR,A ;送B口字形碼 LCALL DL1MS INC R1 ;字形碼偏移量 MOV A,R5 RR A ;位選碼 MOV R5,A DJNZ R3,SCAN1;8次 MOV DPTR,#7FFCH MOV A,#00H MOVX DPTR,A;A口清位選 RETTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0BFH;對應于"0""9"、"_"定時器T0中斷服務程

30、序T0INT:PUSH ACC CLR ET0 ;停T0中斷允許 CLR TR0;停T0工作 MOV TL0,#0B0H MOV TH0,#03CH SETB TR0 ;開T0工作 INC 7BH ;7BH存放20 MOV A,7BH CJNE A,#14H,OUTT0 ;20 MOV 7BH,#00H INC 78H ;78H秒 MOV A,78H CJNE A,#3CH,OUTT0 ;60 MOV 78H,#00H INC 79H;79H分 MOV A,79H CJNE A,#3CH,OUTT0 ;60 MOV 79H,#00H INC 7AH;7AH時 MOV A,7AH CJNE A,

31、#18H,OUTT0 ;24 MOV 7AH,#00OUTT0:SETB ET0 ;開T0中斷允許 POP ACC RETI ;鍵盤掃描子程序;KEYSCAN:MOV DPTR,#7FFFH MOV A,#82H MOVX DPTR,A ;寫控制字,此時A口輸出,B口輸入 MOV DPTR,#7FFEH MOV A,#00H MOVX DPTR,A ;C口寫0 MOV DPTR,#7FFDH MOVX A,DPTR MOV B,A ;B口輸入 CJNE A,#0FFH,HAVEKEYOUT:RETHAVE: LCALL DL10MS1 MOVX A,DPTR CJNE A,B,KEYOUT ;

32、延時一段時間再檢測有鍵按下才開始掃描處理 INC DPTR MOV A,#0FEH MOV B,A MOVX DPTR,A ;C口輸出行值 MOV DPTR,#7FFDH MOVX A,DPTR ;B口輸入列值 CJNE A,#0FFH,KEYLIE0 MOV A,B RL A MOV B,A MOV DPTR,#7FFEH MOVX DPTR,A ;C口輸出行值 MOV DPTR,#7FFDH MOVX A,DPTR ;B口輸入列值 CJNE A,#0FFH,KEYLIE1 MOV A,B RL A MOV B,A MOV DPTR,#7FFEH MOVX DPTR,A ; C口輸出行值 M

33、OV DPTR,#7FFDH MOVX A,DPTR ;B口輸入列值 CJNE A,#0FFH,KEYLIE2 MOV A,B RL A MOV DPTR,#7FFEH MOVX DPTR,A ;C口輸出行值 MOV DPTR,#7FFDH MOVX A,DPTR ;B口輸入列值 CJNE A,#0FFH,KEYLIE3 ACALL KEYOUT;KEYLIE0:MOV R2,#00H ;R2 鍵碼 行值,第1行八個數(shù) LJMP KEYGETKEYLIE1:MOV R2,#08H ;第2行,八個數(shù) LJMP KEYGET KEYLIE2:MOV R2,#10H ;第3行,八個數(shù) LJMP KE

34、YGETKEYLIE3:MOV R2,#18H ;第4行,八個數(shù) LJMP KEYGETKEYGET:MOV B,A;B中存放B口讀入的列值 MOV DPTR,#KEYTAB MOV A,#0NEXT: PUSH ACC MOVC A,A+DPTR CJNE A,B,AGAIN POP ACC ;A是偏移值,即列值 ADD A,R2 ;A中存放鍵碼 MOV B,A RL A ADD A,B ;PC偏移量 MOV DPTR,#KEYFUNTAB JMP A+DPTRAGAIN: POP ACC INC A CJNE A,#8,NEXT ACALL KEYOUTKEYFUNTAB: LJMP KE

35、YFUN00 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 LJMP KEYFUN16 LJMP KEYFUN17 LJMP KEYFUN18 LJMP KEYFUN19 LJMP KEYFUN20 LJMP KEYFUN21

36、 LJMP KEYFUN22 LJMP KEYFUN23 LJMP KEYFUN24 LJMP KEYFUN25 LJMP KEYFUN26 LJMP KEYFUN27 LJMP KEYFUN28 LJMP KEYFUN29 LJMP KEYFUN30 LJMP KEYFUN31 RETKEYTAB:DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH ;0 1 2 3 4 5 6 7 RETDL10MS1:MOV R4,#20DL3: MOV R5,#7DHDL4: NOP NOP DJNZ R5,DL4 DJNZ R4,DL3 RETKEYFUN00:MOV

37、R0,#00H MOV A,7EH CJNE A,#0FFH,CALCU RETKEYFUN01:MOV R0,#01H MOV A,7EH CJNE A,#0FFH,CALCU RETKEYFUN02:MOV R0,#02H MOV A,7EH CJNE A,#0FFH,CALCU RETKEYFUN03:MOV R0,#03H MOV A,7EH CJNE A,#0FFH,CALCU RETKEYFUN04:MOV R0,#04H MOV A,7EH CJNE A,#0FFH,CALCU RETKEYFUN05:MOV R0,#05H MOV A,7EH CJNE A,#0FFH,CALC

38、U RETKEYFUN06:MOV R0,#06H MOV A,7EH CJNE A,#0FFH,CALCU RETKEYFUN07:MOV R0,#07H MOV A,7EH CJNE A,#0FFH,CALCU RETKEYFUN08:MOV R0,#08H MOV A,7EH CJNE A,#0FFH,CALCU RETKEYFUN09:MOV R0,#09H MOV A,7EH CJNE A,#0FFH,CALCU RETCALCU: MOV A,71H MOV B,#0AH MUL AB ADD A,70H MOV 78H,A MOV A,74H MOV B,#0AH MUL AB

39、ADD A,73H MOV 79H,A MOV A,77H MOV B,#0AH MUL AB ADD A,76H MOV 7AH,A RETKEYFUN10:/調(diào)時鍵 CLR TR0 MOV R0,#77H ;R0指向時的偏移量 MOV 7DH,#00H ;閃爍標志位 LCALL FLASH RETFLASH:MOV A,R0 MOV R0,#0BH ;R0(此時77H)指向熄滅的偏移量 MOV 7CH,#3DH ;7CH單元存放循環(huán)次數(shù)RE: LCALL OFFSCAN DJNZ 7CH,RE ;調(diào)用OFFSCAN60次,半秒 MOV R0,A ;R0(此時77H)指向原來的偏移量 MOV 7CH,#3DHRE1:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論