![基于AT89C51的電子琴設計_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-8/19/271f8892-c59a-4c0c-a39d-c237b009c5f1/271f8892-c59a-4c0c-a39d-c237b009c5f11.gif)
![基于AT89C51的電子琴設計_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-8/19/271f8892-c59a-4c0c-a39d-c237b009c5f1/271f8892-c59a-4c0c-a39d-c237b009c5f12.gif)
![基于AT89C51的電子琴設計_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-8/19/271f8892-c59a-4c0c-a39d-c237b009c5f1/271f8892-c59a-4c0c-a39d-c237b009c5f13.gif)
![基于AT89C51的電子琴設計_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-8/19/271f8892-c59a-4c0c-a39d-c237b009c5f1/271f8892-c59a-4c0c-a39d-c237b009c5f14.gif)
![基于AT89C51的電子琴設計_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-8/19/271f8892-c59a-4c0c-a39d-c237b009c5f1/271f8892-c59a-4c0c-a39d-c237b009c5f15.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、等級:湖南工程學院課 程 設 計課程名稱 單片機原理與應用 課題名稱 電子琴 專 業(yè) 電氣工程 班 級 1005班 學 號 姓 名 指導教師 2013 年 6 月 21 日湖南工程學院課 程 設 計 任 務 書課程名稱 單片機原理與應用 課 題 電子琴 專業(yè)班級 電氣工程1005 學生姓名 學 號 指導老師 審 批 任務書下達日期 2013 年 6 月 8 日任務完成日期 2013 年 6 月 21 日設計內(nèi)容與設計要求設計內(nèi)容:本課題以單片機為核心,設計和制作一個電子琴。要求由4x4組成16個按鈕矩陣,設計成16個音,可隨意彈奏想要表達的音樂。設計要求:1. 設計方案要合理、正確;2. 系統(tǒng)
2、硬件設計;3. 完成必要元器件選擇;4. 系統(tǒng)軟件設計及調(diào)試;5. 寫出設計報告。主 要 設 計 條 件1. mcs-51單片機實驗操作臺1臺;2. pc機及單片機調(diào)試軟件;3. 單片機應用系統(tǒng)板1套;4. 制作工具1套;5. 系統(tǒng)設計所需的元器件。說 明 書 格 式1. 封面2. 課程設計任務書3. 目錄4. 系統(tǒng)總體方案設計5. 系統(tǒng)硬件設計6. 軟件設計(包括流程圖)7. 系統(tǒng)的安裝調(diào)試說明8. 總結(jié) 9. 參考文獻10. 附錄11. 課程設計成績評分表。 進 度 安 排第一周星期一、上午:布置課題任務,課題介紹及講課。 下午:借閱有關(guān)資料,總體方案討論。星期二、確定總體方案,學習與設計
3、相關(guān)內(nèi)容。星期三、各部分方案設計。星期四、各部分設計。星期五、設計及上機調(diào)試。第二周星期一:設計及上機調(diào)試。星期二:調(diào)試,中期檢查。星期三:調(diào)試、寫說明書。星期四-星期五上午:寫說明書、完成電子版并打印成稿。 星期五下午:答辯。參 考 文 獻1.單片機原理與應用 王迎旭等編 機械工業(yè)出版社2.51系列單片機設計實例 樓然苗等編 北京航空航天大學出版社3.計算機硬件技術(shù)基礎實驗教程 黃勤等編 重慶大學出版社4.微型計算機接口技術(shù)及應用 劉樂善主編 華中科技大學出版社5.單片微型計算機原理及接口技術(shù)陳光東等 華中科技大學出版社目 錄第1章 課題設計的背景、要求及目的11.1課題設計的背景11.2課
4、題設計的要求11.3課題設計的目的2第2章 系統(tǒng)總體方案選擇與說明22.1 系統(tǒng)方案綜述22.2 系統(tǒng)設計思路32.3 系統(tǒng)設計方案3第3章 系統(tǒng)框圖與工作原理及芯片介紹43.1 系統(tǒng)硬件電路設計框圖43.2 工作原理43.3 芯片介紹5第4章 各硬件電路的設計說明64.1 按鍵模塊的設計74.2 蜂鳴器模塊的設計84.3電源部分及其他附屬模塊的設計8第5章 系統(tǒng)軟件設計95.1 系統(tǒng)軟件方案的設計95.2 系統(tǒng)程序的設計10設計總結(jié)15參考文獻16附錄a 系統(tǒng)硬件電路原理圖17附錄b 程序設計數(shù)據(jù)18第1章 課題設計的背景、要求及目的1.1課題設計的背景 電子計算機的發(fā)展經(jīng)歷了從電子管、晶體
5、管、中小規(guī)模集成電路到大規(guī)模集成電路四個階段,尤其是隨著大規(guī)模的集成電路技術(shù)的飛速發(fā)展,在20世紀70年代初誕生的單片微型計算機,使得計算機應用日益廣泛。而單片微型計算機(簡稱單片機)的問世,更進一步推動了計算機應用技術(shù)的發(fā)展,標志著計算機系統(tǒng)兩大部分的正式形成,即通用計算機系統(tǒng)和嵌入式計算機系統(tǒng)。前者主要以發(fā)展海量、高速數(shù)值計算為趨勢,后者則主要實現(xiàn)面向?qū)ο蟮膶崟r控制。 單片微型計算機是大規(guī)模集成電路技術(shù)發(fā)展的產(chǎn)物,屬于第四代電子計算機它具有高性能、高速度、體積小、價格低廉、穩(wěn)定可靠、應用廣泛的特點。他的應用必定導致傳統(tǒng)的控制技術(shù)從根本上發(fā)生變革。因此,單片機的開發(fā)應用已成為高科技和工程領(lǐng)域
6、的一項重大課題。 電子琴是現(xiàn)代電子科技與音樂結(jié)合的產(chǎn)物,是一種新型的鍵盤樂器。它在現(xiàn)代音樂扮演重要的角色,單片機具有強大的控制功能和靈活的編程實現(xiàn)特性,它已經(jīng)溶入現(xiàn)代人們的生活中,成為不可替代的一部分。本文的主要內(nèi)容是用at89c51單片機為核心控制元件,設計一個電子琴。以單片機作為主控核心,與鍵盤揚聲器等模塊組成核心主控制模塊,在主控模塊上設有16個按鍵,設計成16個音,可隨意彈奏想要表達的音樂。因此,我們只要把一首歌曲的音階對應頻率關(guān)系編寫正確就可以達到我們想要的曲目。1.2課題設計的要求 本課題以單片機為核心,設計和制作一個電子琴。要求由4x4組成16個按鈕矩陣,設計成16個音,可隨意彈
7、奏想要表達的音樂。1.3課題設計的目的 1、能夠?qū)﹄娮与娐?、電子元器件、印制電路板等方面的知識有進一步的認識,獨立對其進行測試與檢查。 2、熟悉at89c51單片機的內(nèi)部結(jié)構(gòu)和功能,合理使用其內(nèi)部寄存器,能夠完成相關(guān)軟件編程設計工作。 3、為實現(xiàn)預期功能,能夠?qū)ο到y(tǒng)進行快速的調(diào)試,并能夠?qū)Τ霈F(xiàn)的功能故障進行分析,及時修改相關(guān)軟硬件。 4、對軟件編程、排錯調(diào)試、相關(guān)軟件的使用技能等方面得到較全面的鍛煉和提高。 5、理解音樂產(chǎn)生的原理和編碼鍵盤掃描方法以及單片機內(nèi)部定時器的溢出中斷編程方法。 6、本次課程設計從硬件和軟件兩個方面入手,全面具體地掌握設計思路、方法和過程,使理論與實際相結(jié)合,充分地鍛
8、煉了動手能力和思維擴展能力。第2章 系統(tǒng)總體方案選擇與說明2.1 系統(tǒng)方案綜述 從系統(tǒng)實現(xiàn)的功能上來看,簡易電子琴的課程設計主要是手動按鍵彈奏樂曲。手動彈奏樂曲是根據(jù)具體的硬件鍵盤設置功能鍵實現(xiàn)音譜的各個音。 從系統(tǒng)硬件結(jié)構(gòu)上來看,我們主要使用到51系列單片機、矩陣16鍵輸入電路、蜂鳴器以及電源電路等等。將這些硬件電路有機地結(jié)合起來使之滿足簡易電子琴的實現(xiàn)硬件需要。 從系統(tǒng)軟件設計角度來看,將簡易電子琴的課程設計采用程序模塊化設計方法,將程序分為主程序、鍵盤掃描程序模塊、音樂產(chǎn)生模塊等等。此外,采用程序設計思想、外部按鍵方式,來實現(xiàn)可手動彈奏樂曲。 因此,我們可以綜合上述的方案設計原理,從軟件
9、和硬件兩部分進行有計劃有步驟的系統(tǒng)分析和設計。2.2 系統(tǒng)設計思路 1、手動彈奏樂曲用編碼的矩形鍵盤來實現(xiàn),手動彈奏樂曲中矩陣鍵盤的16個鍵分別設置不同的音符。 2、軟件的設計主要包括無符號音符的定義、矩形鍵盤鍵值的讀取和手動彈奏樂曲控制程序。 3、此次程序設計主要是手動彈奏樂曲程序控制。而音符的在程序的開始就被定義好了,只要在控制程序中調(diào)用即可。2.3 系統(tǒng)設計方案2.3.1 播放模塊 播放模塊是由擴音器接單片機控制引腳p3.7構(gòu)成,中間接限流電阻以及pnp三極管,且它幾乎不存在噪聲,音響效果較好,而且由于所需驅(qū)動功率較小,且價格低廉,所以,被廣泛應用。2.3.2 按鍵控制模塊 電子琴設有1
10、6個按鍵, 16個按鍵分別代表16個音符,包括中音段的全部音符,通過軟硬件設計,然后通過查詢電子琴所按下的按鍵,讀取電子琴按鍵的輸入狀態(tài),跳轉(zhuǎn)到對應的程序入口,實現(xiàn)自編歌曲的。2.3.3 鍵盤掃描程序 檢測是否有鍵按下,有鍵按下則記錄按下鍵的鍵值,并跳轉(zhuǎn)至功能轉(zhuǎn)移程序;無鍵按下,則返回鍵盤掃描程序繼續(xù)檢測。2.3.4 功能轉(zhuǎn)移程序 對檢測到得按鍵值進行判斷,是琴鍵則跳轉(zhuǎn)至琴鍵處理程序,是功能鍵則跳轉(zhuǎn)至相應的功能程序,我們設計的功能程序有兩種,即音色調(diào)節(jié)功能。第3章 系統(tǒng)框圖與工作原理及芯片介紹3.1 系統(tǒng)硬件電路設計框圖 基于單片機系統(tǒng)電子琴的基本結(jié)構(gòu)如下圖圖3.1 系統(tǒng)框圖3.2 工作原理
11、1、演奏音樂原理:通過控制單片機程序首先設置的音符,通過控制程序調(diào)用,以及通過程序判斷是否有按鍵按下來經(jīng)放大后驅(qū)動蜂鳴器是否發(fā)出不同音節(jié)的聲音。用軟件延時來控制發(fā)音時間的長短,控制節(jié)拍。把樂譜的音符和相應的節(jié)拍變換為定時常數(shù)和延時常數(shù),作為數(shù)據(jù)表格存放在存儲器中,由程序到這量常數(shù)和延時常數(shù)。另單片機晶振頻率為12mhz。 2、鍵盤掃描原理:先將44矩陣鍵盤的行和列全部置為高電平,然后再逐行置為低電平,當有鍵按下時p1口的值會發(fā)生相應的改變,通過與給定數(shù)的比較,判定是否有鍵按下和是否鍵已松開。并給定列號,根據(jù)所給的列號的值,一方面給單片機送入確定好的數(shù)值,即發(fā)出相應音符音,從而來達到譜樂譜的目的
12、。3.3 芯片介紹 (1)在本次電子琴設計中,我所用的單片機芯片選用了at89c51型號的芯片, 89c51系列的兼容性也比較好。p3口也可作為at89c51的一些特殊功能口,如下表所示:p3口引腳特殊功能p3.0rxd(串行輸入口)p3.1txd(串行輸出口)p3.2(外部中斷0)p3.3(外部中斷1)p3.4t0(定時器0外部輸入)p3.5t1(定時器1外部輸入)p3.6wr(外部數(shù)據(jù)存儲器寫選通)p3.7rd(外部數(shù)據(jù)存儲器讀先通)(2)p3.7口音頻輸出,接一個喇叭。(3)復位電路我們本來在方案選擇的時候有兩種選擇的,上電復位和按扭復位,上電復位是利用電容充電來實現(xiàn)的,而按扭復位是電源
13、對外節(jié)電容的充電使rst為高電平,復位松開后,電容通過下拉電阻放電,使rst恢復低電平。為了功能的完美我還是選擇用上電自動復位,因為它比較方便,不需要人另外去操作。第4章 各硬件電路的設計說明由于時間原因,本次所設計硬件電路以及程序只經(jīng)過了仿真軟件測試,而沒有去單片機實驗室去用單片機試驗箱去測試程序。4.1 按鍵模塊的設計圖4.1.1 按鍵電路上圖為硬件系統(tǒng)的16鍵44的矩陣式鍵盤電路邏輯圖,鍵盤的行線連接到p1.0-p1.3口上,列線連接到p1.4-p1.7口上,單片機通過逐行掃描的方法對鍵盤進行掃描,讀取判斷有無鍵被按下以及按鍵的位置。為了判斷有沒有鍵被按下,可先經(jīng)輸出口向所有列線輸出高電
14、平然后在輸出各行狀態(tài)。若行線狀態(tài)皆為高電平則表明無鍵被按下;若行線狀態(tài)中有低電平就表示有鍵被按下,然后再根據(jù)接通的行線和列線判定按鍵的位置。當經(jīng)掃描表明有鍵被按下后,緊接著就是進行去抖動處理,抖動時間的長短與鍵的機械特性有關(guān),一般為10-20ms。4.2 蜂鳴器模塊的設計圖4.2.1擴音電路 電磁式蜂鳴器由振蕩器、電磁線圈、磁鐵振動膜片及外殼等組成。接通電源后,振蕩器產(chǎn)生的音頻信號電流通過電磁線圈,使電磁線圈產(chǎn)生磁場。振動膜片在電磁線圈和磁鐵的相互作用下,周期性地振動發(fā)聲。本系統(tǒng)設計的蜂鳴器通過驅(qū)動電路與單片機的p3.7連接,單片機就可以通過p3.7的輸出信號進行控制。4.3電源部分及其他附屬
15、模塊的設計圖4.3.1 上電復位電路 對輸入電路產(chǎn)生的電源我們的要求是穩(wěn)定在5v左右,保證單片機的正常工作。 復位是單片機的初始化操作,其作用是使cpu和系統(tǒng)中其他部件都處于一個確定的初始狀態(tài),并從這個狀態(tài)開始工作。本系統(tǒng)采用上電與按鍵復位電路,為了防止干擾串擾復位端,所以再接一個去耦電容。 晶振電路的設計可以兩個電容與一個晶振即可,用來產(chǎn)生一個約等于12mhz的穩(wěn)定的頻率。第5章 系統(tǒng)軟件設計5.1 系統(tǒng)軟件方案的設計 進行應用軟件設計時可采用模塊化設計,其優(yōu)點是:(1)每個模塊的程序結(jié)構(gòu)簡單,任務明確,易于編寫、調(diào)試和修改;(2)程序可讀性好,對程序的修改可局部進行,其他部分可以保持不變,
16、便于功能的擴充和版本的升級;(3)對于使用頻繁的子程序可以建立子程序庫,便于多個模塊調(diào)用;(4)便于進行程序的編寫和修改調(diào)試工作,加快軟件的研制進度。 根據(jù)設計要求,首先要確定軟件設計方案,即確定該軟件應該完成哪些功能;其次是規(guī)劃這些功能需要分成多少個功能模塊,以及每一個程序模塊的具體任務是什么。其系統(tǒng)的軟件設計的模塊應該遵循下述原則: (1) 每個模塊應具備獨立的功能,能產(chǎn)生一個明確的結(jié)果。 (2) 模塊之間的控制參數(shù)應盡量簡單,數(shù)據(jù)參數(shù)應盡量少??刂茀?shù)是指模塊進入和退出的條件及方式,數(shù)據(jù)參數(shù)是指模塊間信息的交換方式、交換量的多少及交換的頻繁程度。 (3) 模塊的長度適中。模塊語句的長度要
17、始終,模塊太長,調(diào)試和分析會有難度;模塊太短,信息交換太過頻繁,不利于模塊功能的體現(xiàn) 系統(tǒng)的結(jié)構(gòu)模塊圖如下所示:主程序模塊手動彈奏樂曲模塊功能轉(zhuǎn)換模塊音樂播放模塊5.2 系統(tǒng)程序的設計 系統(tǒng)主程序的功能是進行端口定義,以及各個音符的無符號定義,這樣方便程序的調(diào)用.5.2.1主程序設計如下#include#include soundplay.h#define uchar unsigned char#define uint unsigned int#define cnt_delay_cnt1 25 /按鍵去抖動延時閥值#define cnt_delay_cnt2 5 /按鍵行輸出信號穩(wěn)定的小延時閥
18、值unsigned int dleay_time1;/*各個按鍵的音調(diào)*/unsigned char code music_code_1= 0x15,0x02, 0x00,0x00;unsigned char code music_code_2= 0x16,0x02, 0x00,0x00;unsigned char code music_code_3= 0x17,0x02, 0x00,0x00;unsigned char code music_code_4= 0x18,0x02, 0x00,0x00;unsigned char code music_code_5= 0x19,0x02, 0x0
19、0,0x00;unsigned char code music_code_6= 0x1a,0x02, 0x00,0x00;unsigned char code music_code_7= 0x1b,0x02, 0x00,0x00;unsigned char code music_code_8= 0x0b,0x02, 0x00,0x00;unsigned char code music_code_9= 0x0c,0x02, 0x00,0x00;unsigned char code music_code_10=0x0d,0x02, 0x00,0x00;unsigned char code musi
20、c_code_11=0x0e,0x02, 0x00,0x00;unsigned char code music_code_12=0x0f,0x02, 0x00,0x00;unsigned char code music_code_13=0x10,0x02, 0x00,0x00;unsigned char code music_code_14=0x11,0x02, 0x00,0x00;unsigned char code music_code_15=0x15,0x03, 0x00,0x00;unsigned char code music_code_16=0x16,0x03, 0x00,0x00
21、;unsigned char key_step=1;/按鍵掃描步驟變量,在switch()語句的括號里unsigned int delay_cnt2=0; /延時計數(shù)器的變量unsigned char key_lock1=0; /按鍵自鎖標志unsigned int delay_cnt1=0; /延時計數(shù)器的變量uchar key_sec;sbit key_dr1= p10; /4x4按鍵行輸出sbit key_dr2= p11; /4x4按鍵行輸出sbit key_dr3= p12; /4x4按鍵行輸出sbit key_dr4= p13; /4x4按鍵行輸出sbit key_sr1= p14
22、; /4x4按鍵行輸入sbit key_sr2= p15; /4x4按鍵行輸入sbit key_sr3= p16 ; /4x4按鍵行輸入sbit key_sr4= p17; /4x4按鍵行輸入5.2.2主函數(shù)程序的設計/*主函數(shù)*/void main() initialsound(); /初始化播發(fā)器 key_lock1=0; while(1) key_scan(); switch(key_sec) case 1: play(music_code_1,0,3,360); key_sec=0; break; case 2: play(music_code_2,0,3,360); key_sec=
23、0; break; case 3: play(music_code_3,0,3,360); key_sec=0; break;case 4: play(music_code_4,0,3,360); key_sec=0; break; case 5: play(music_code_5,0,3,360); key_sec=0; break; case 6: play(music_code_6,0,3,360); key_sec=0; break; case 7: play(music_code_7,0,3,360); key_sec=0; break;case 8: play(music_cod
24、e_8,0,3,360); key_sec=0; break;case 9: play(music_code_9,0,3,360); key_sec=0; break; case 10: play(music_code_10,0,3,360); key_sec=0; break;case 11: play(music_code_11,0,3,360); key_sec=0; break; case 12: play(music_code_12,0,3,360); key_sec=0; break; case 13: play(music_code_13,0,3,360); key_sec=0;
25、 break;case 14: play(music_code_14,0,3,360); key_sec=0; break; case 15: play(music_code_15,0,3,360); key_sec=0; break; case 16: play(music_code_16,0,3,360); key_sec=0; break; 設計總結(jié) 由于我以前專科階段上過c語言版的單片機課程,相對于本學期的所學的匯編語言,我覺得c語言版的更容易接受,所以本次課程設計我選用c編程。 經(jīng)過這兩周的單片機課程設計對我獲益匪淺,讓我重新系統(tǒng)性地認識和掌握了單片機技術(shù),讓我將平常學的c語言和編程
26、方法學以致用,使我的c語言能力有了很大提高和進步,讓我對單片機外圍接口設備有了深入細致的了解。 由于課程設計安排跟我個人的很多事情安排起沖突,所以課程設計的主要完成是在第二周。一開始,我在網(wǎng)上尋找有關(guān)的資料和仔細讀懂老師設計任務書從而研究設計方案,進行設計的總體規(guī)劃,理清課程設計思路。但是將這些具體的方案落實到每一個設計環(huán)節(jié)和步驟中,難免會出現(xiàn)意想不到錯誤,這就需要我們在進行設計的過程中利用所掌握的知識認真排查錯誤原因,多方面的思考問題的關(guān)鍵不斷地改正自己的設計不足之處和錯誤。 此外,對硬件電路的工作原理和單片機知識的掌握是進行下一步的軟件設計的關(guān)鍵。這次課程設計能順利的完成任務很大程度上是因
27、為在軟件設計之前對硬件的設計及工作原理有了細致的了解。 在進入了軟件設計方案和具體的編程和調(diào)試運行階段。在這個階段中,對系統(tǒng)的需求分析和如何采用模塊化設計思想是設計方案主要解決的問題,通過不斷地設計嘗試和反復地設計調(diào)試初步解決了問題。但是也存在了設計上的不足之處,即如何實現(xiàn)自動音樂播放的暫停和斷點播放,在在我設計初期,希望能另外實現(xiàn)16個音樂的播放的自我播放和按鍵暫停,在采用了這樣的設計方法上在原理上可以行得通,但是由于難度太大,以及個人的水平問題,最后放棄了這個設想。最后,現(xiàn)在經(jīng)過兩周后,經(jīng)過實踐的操作和調(diào)試,對單片機軟件都有了更深的了解。通過設計,鞏固之前所學課程,使所學知識牢固掌握并靈活
28、運用。在整個課程設計中,我的指導老師尋大勇老師給予很多指導性的意見。軟件設計和仿真過程中,劉其濤同學也幫助我解決了一些實際問題。本次課程設計必將成為自己以后學習道路上的寶貴的實踐經(jīng)驗。參考文獻1、王迎旭編單片機原理與應用機械工業(yè)出版社.2、周向紅 編51系列單片機應用與實踐教程北航出版社3、樓然苗編51系列單片機設計實例 北航出版社.4、黃勤編計算機硬件技術(shù)基礎實驗教程重慶大學出版社5、劉樂善編微型計算機接口技術(shù)及應用華中科技大學出版社.6、陳光東編單片微型計算機原理及接口技術(shù)華中科技大學出版社。附錄a 系統(tǒng)硬件電路原理圖附錄b 程序設計數(shù)據(jù)#include#include soundplay
29、.h#define uchar unsigned char#define uint unsigned int#define cnt_delay_cnt1 25 /按鍵去抖動延時閥值#define cnt_delay_cnt2 5 /按鍵行輸出信號穩(wěn)定的小延時閥值unsigned int dleay_time1;/*各個按鍵的音調(diào)*/unsigned char code music_code_1= 0x15,0x02, 0x00,0x00;unsigned char code music_code_2= 0x16,0x02, 0x00,0x00;unsigned char code music_
30、code_3= 0x17,0x02, 0x00,0x00;unsigned char code music_code_4= 0x18,0x02, 0x00,0x00;unsigned char code music_code_5= 0x19,0x02, 0x00,0x00;unsigned char code music_code_6= 0x1a,0x02, 0x00,0x00;unsigned char code music_code_7= 0x1b,0x02, 0x00,0x00;unsigned char code music_code_8= 0x0b,0x02, 0x00,0x00;u
31、nsigned char code music_code_9= 0x0c,0x02, 0x00,0x00;unsigned char code music_code_10=0x0d,0x02, 0x00,0x00;unsigned char code music_code_11=0x0e,0x02, 0x00,0x00;unsigned char code music_code_12=0x0f,0x02, 0x00,0x00;unsigned char code music_code_13=0x10,0x02, 0x00,0x00;unsigned char code music_code_1
32、4=0x11,0x02, 0x00,0x00;unsigned char code music_code_15=0x15,0x03, 0x00,0x00;unsigned char code music_code_16=0x16,0x03, 0x00,0x00;unsigned char key_step=1;/按鍵掃描步驟變量,在switch()語句的括號里unsigned int delay_cnt2=0; /延時計數(shù)器的變量unsigned char key_lock1=0; /按鍵自鎖標志unsigned int delay_cnt1=0; /延時計數(shù)器的變量uchar key_sec
33、;sbit key_dr1= p10; /4x4按鍵行輸出sbit key_dr2= p11; /4x4按鍵行輸出sbit key_dr3= p12; /4x4按鍵行輸出sbit key_dr4= p13; /4x4按鍵行輸出sbit key_sr1= p14; /4x4按鍵行輸入sbit key_sr2= p15; /4x4按鍵行輸入sbit key_sr3= p16 ; /4x4按鍵行輸入sbit key_sr4= p17; /4x4按鍵行輸入/*/*/void delayus(unsigned char us)/delay us unsigned char uscnt; uscnt=us
34、1;/* crystal frequency in 12mhz*/ while(-uscnt);/*/void delayms(unsigned char ms)/delay ms while(-ms) delayus(250); delayus(250); delayus(250); delayus(250); void key_scan() /按鍵掃描函數(shù) /補充說明:如果中斷一次就把所有的按鍵都掃描完,中斷占用的時間片就會太多,勢/必會影響main函數(shù)里其他子程序的運行,為了避免一口氣把所/的按鍵都掃描完,此/處用switch語句把4個按鍵分成2等分,一次中斷只掃描2個按鍵switch(
35、key_step) /按鍵掃描步驟, case 1: /掃描1號鍵,2號鍵 key_dr1=0; /按鍵行掃描輸出第一行低電平 key_dr2=1;key_dr3=1;key_dr4=1; delay_cnt2=0; /延時計數(shù)器清零 key_step+; /切換到下一個運行步驟 break; case 2: delay_cnt2+; if(delay_cnt2cnt_delay_cnt2) /小延時,但不是去抖動延時,替代一直受網(wǎng)友爭議的delay1(40) delay_cnt2=0; key_step+; /切換到下一個運行步驟 break; case 3: if(key_sr1=1&ke
36、y_sr2=1&key_sr3=1&key_sr4=1) /如果沒有按鍵按下,則2個io輸入都是高電平 key_step+; /如果沒有按鍵按下,下一個中斷掃描下2個/按鍵key_lock1=0; /按鍵自鎖標志清零 delay_cnt1=0; /按鍵去抖動延時計數(shù)器清零,此行非常巧妙 else if(key_sr1=0&key_sr2=1&key_sr3=1&key_sr4=1&key_lock1=0) / key_lock1按鍵自鎖,避免按鍵一直觸發(fā),下降沿有效 +delay_cnt1; /延時計數(shù)器 if(delay_cnt1cnt_delay_cnt1) /延時計數(shù)器超過一定的數(shù)值 d
37、elay_cnt1=0;key_lock1=1; /自鎖按鍵置位,避免一直觸發(fā),只有松開按鍵,/此標志位才會被清零(經(jīng)典) key_sec=1; /觸發(fā)1號鍵dleay_time1 = 0; / 自鎖計數(shù)延時/led1 = 0; / 有按鍵按下,打開背光燈/dleay_time3 =0; / 背光燈延時計數(shù)器 清零 else if(key_sr1=1&key_sr2=0&key_sr3=1&key_sr4=1&key_lock1=0) +delay_cnt1; if(delay_cnt1cnt_delay_cnt1) delay_cnt1=0;key_lock1=1; /自鎖按鍵置位,避免一直
38、觸發(fā) key_sec=2; /觸發(fā)2號鍵dleay_time1 = 0; / 自鎖計數(shù)延時 / led1 = 0; / 有按鍵按下,打開背光燈 /dleay_time3 =0; / 背光燈延時計數(shù)器 清零 else if(key_sr1=1&key_sr2=1&key_sr3=0&key_sr4=1&key_lock1=0) +delay_cnt1; if(delay_cnt1cnt_delay_cnt1) delay_cnt1=0;key_lock1=1; /自鎖按鍵置位,避免一直觸發(fā) key_sec=3; /觸發(fā)3號鍵dleay_time1 = 0; / 自鎖計數(shù)延時 / led1 = 0
39、; / 有按鍵按下,打開背光燈 /dleay_time3 =0; / 背光燈延時計數(shù)器 清零 else if(key_sr1=1&key_sr2=1&key_sr3=1&key_sr4=0&key_lock1=0) +delay_cnt1; if(delay_cnt1cnt_delay_cnt1) delay_cnt1=0;key_lock1=1; /自鎖按鍵置位,避免一直觸發(fā) key_sec=4; /觸發(fā)4號鍵dleay_time1 = 0; / 自鎖計數(shù)延時 / led1 = 0; / 有按鍵按下,打開背光燈 /dleay_time3 =0; / 背光燈延時計數(shù)器 清零 break; ca
40、se 4: /掃描/掃描3號鍵,4號鍵 key_dr1=1; key_dr2=0; /按鍵行掃描輸出第二行低電平key_dr3=1;key_dr4=1; delay_cnt2=0; /延時計數(shù)器清零 key_step+; /切換到下一個運行步驟 break; case 5: delay_cnt2+; if(delay_cnt2cnt_delay_cnt2) /小延時,但不是去抖動延時,替代一直受網(wǎng)友爭議的delay1(40) delay_cnt2=0; key_step+; /切換到下一個運行步驟 break; case 6: if(key_sr1=1&key_sr2=1&key_sr3=1&key_sr4=1) /如果沒有按鍵按下,則2個io輸入都是高電平 key_step+; /如果沒有按鍵按下,下一個中斷掃描下2個按鍵key_lock1=0; /按鍵自鎖標志清零 delay_cnt1=0; /按鍵去抖動延時計數(shù)器清零,此行非常巧妙 else if(key_sr1=0&key_sr2=1&key_sr3=1&key_sr4=1&key_lock1=0) / key_lock1按鍵自鎖,避免按鍵一直觸發(fā),下降沿有效 +delay_cnt1; /延時計數(shù)器 if(delay_cnt1cnt_delay_cnt1) /延時計數(shù)器超過一定的數(shù)值 delay_cnt1=0
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度建筑工程零工合同施工廢棄物處理合同
- 2025年特白陶瓷行業(yè)深度研究分析報告
- 2025年哈爾濱租賃合同范本(含房屋使用限制條款)
- 2025年度駕校場地租賃及智能系統(tǒng)升級合同
- 2025年度金融風控人員保密及業(yè)務合規(guī)協(xié)議
- 2025年度健康體檢服務購銷合同規(guī)范文本
- 旅游列車與景區(qū)資源整合與協(xié)同發(fā)展
- 2025年度金融風險管理與內(nèi)部控制培訓協(xié)議
- 教研活動的組織與管理模式
- 2025年度國際貿(mào)易實務模擬實驗實訓報告審核合同
- 六年級英語上冊綜合測試卷(一)附答案
- 部編小學語文(6年級下冊第6單元)作業(yè)設計
- 餐飲服務與管理(高職)PPT完整全套教學課件
- 成人學士學位英語1000個高頻必考詞匯匯總
- 2023年菏澤醫(yī)學專科學校單招綜合素質(zhì)模擬試題及答案解析
- 常見食物的嘌呤含量表匯總
- 人教版數(shù)學八年級下冊同步練習(含答案)
- SB/T 10752-2012馬鈴薯雪花全粉
- 2023年湖南高速鐵路職業(yè)技術(shù)學院高職單招(英語)試題庫含答案解析
- 積累運用表示動作的詞語課件
- 機動車登記證書英文證書模板
評論
0/150
提交評論