已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
基于 STC89C52RC 單片機(jī)的音樂播放器設(shè) 計 一 設(shè)計要實現(xiàn)的功能 1 利用 I O 口產(chǎn)生一定頻率的方波 驅(qū)動蜂鳴器 發(fā)出不同的音調(diào) 從而演奏歌曲 總共九首 2 采用共陽七段數(shù)碼管顯示當(dāng)前播放歌曲的序號 3 可以通過按鍵實現(xiàn)暫停 繼續(xù) 上一首 下一首以及復(fù)位等基本操 作 二 設(shè)計所需基礎(chǔ)知識儲備 1 要產(chǎn)生音頻脈沖 只要計算某一音頻的周期 然后將此周期處以 2 即為半 周期的時間 利用定時器記時這個個半周期時間 每當(dāng)記時到后就輸出脈沖 的 I O 反相 然后重復(fù)記時此半周期的時間再對 I O 反相 就可在 I O 腳上 得到此頻率的脈沖 2 利用 8051 的內(nèi)部定時器使其工作在計數(shù)器模式 MODE1 下 改變計數(shù)值 TH0 及 TL0 以產(chǎn)生不同頻率的方法 例如頻率為 523HZ 其周期 T 1 523 1912us 因此只要令計數(shù)器記時 956us 1us 956 在每次計數(shù) 956 次時將 I O 反相 就可得到中音 DO 523HZ 計數(shù)脈沖值與頻率的關(guān)系公 式如下 N Fi 2 Fr 其中 N 是計數(shù)值 Fi 是 8051 內(nèi)部頻率 一般用的是 1MHZ 因為 8051 內(nèi)部記時一次時間為 1us Fr 為要產(chǎn)生的頻率 3 計數(shù)初值的求法如下 T 65536 N 65536 Fi 2 Fr 例如 求低音 DO 261HZ 中音 DO 523HZ 高音 DO 1046HZ 的計數(shù)值 T 65536 N 65536 Fi 2 Fr 65536 1000000 2 Fr 65536 50000 Fr 低音 DO 的 65536 50000 262 63267 中音 DO 的 65536 50000 523 64580 高音 DO 的 65536 50000 1047 65059 三 硬件設(shè)計 本次設(shè)計用到的主要器件有 STC89C52 七段共陽數(shù)碼管 無源蜂鳴器 詳 細(xì)列表在后面列出 硬件原理圖也在后面列出 四 功能說明 1 硬件電路中 P1 0 口為音頻輸出端口 2 用 P1 1 和 P1 2 分別作為上一首和下一首歌曲的功能鍵 P1 3 接一個 自鎖按鍵 當(dāng)按鍵按下時暫停播放音樂 再按一下按鍵 按鍵彈起 繼續(xù)原來的播放進(jìn)度 3 用 P2 0 P2 7 這幾個管腳來控制七段數(shù)碼管的顯示 4 單片機(jī) 18 和 19 號管教接 12MHZ 的晶振 其中電容皆為 30PF 的瓷 片電容 5 單片機(jī) 40 號管腳接 VCC 20 號管腳接地 31 號管腳接 VCC 9 號管 腳外接復(fù)位電路 五 主要元器件介紹 STC89C52 單片機(jī) STC89C52 是高性能 CMOS 8 位單片機(jī) 片內(nèi)含 8k bytes 的可反復(fù)擦寫的只讀程 序存儲器 PEROM 和 256bytes 的隨機(jī)存取數(shù)據(jù)存儲器 RAM 器件采用高 密度 非易失性存儲技術(shù)生產(chǎn) 與標(biāo)準(zhǔn) MCS 51 指令系統(tǒng)及 8052 產(chǎn)品引腳兼 容 片內(nèi)置通用 8 位中央處理器 CPU 和 Flash 存儲單元 功能強(qiáng)大 STC89C52 單片機(jī)適合于許多較為復(fù)雜控制應(yīng)用場合 主要功能特性 兼容 MCS51 指令系統(tǒng) 8k 可反復(fù)擦寫 1000 次 Flash ROM 32 個雙向 I O 口 256x8bit 內(nèi)部 RAM 3 個 16 位可編程定時 計數(shù)器中斷 時鐘頻率 0 24MHz 2 個串行中斷 可編程 UART 串行通道 2 個外部中斷源 共 6 個中斷源 2 個讀寫中斷口線 3 級加密位 低功耗空閑和掉電模式 軟件設(shè)置睡眠和喚醒功能 主要管腳有 XTAL1 19 腳 和 XTAL2 18 腳 為振蕩器輸入輸出端口 外接 12MHz 晶振 RST 9 腳 為復(fù)位輸入端口 外接電阻電容組成的復(fù) 位電路 VCC 40 腳 和 VSS 20 腳 為供電端口 分別接 5V 電源 的正負(fù)端 P0 P3 為可編程通用 I O 腳 其功能用途由軟件定義 STC89C52 有 40 個引腳 32 個外部雙向輸入 輸出 I O 端口 同時內(nèi)含 2 個 外中斷口 3 個 16 位可編程定時計數(shù)器 2 個全雙工串行通信口 2 個讀寫口線 STC89C52 可以按照常規(guī)方法進(jìn)行編程 也可以在線編程 其將通用的微處理器 和 Flash 存儲器結(jié)合在一起 特別是可反復(fù)擦寫的 Flash 存儲器可有效地降低開 發(fā)成本 其管腳圖如下所示 P0 口有三個功能 1 外部擴(kuò)充存儲器時 當(dāng)做數(shù)據(jù)總線 D0 D7 2 外部擴(kuò)充存儲器時 當(dāng)做數(shù)據(jù)總線 A0 A7 3 不擴(kuò)充時 可做一般 I O 使用 但內(nèi)部無上拉電阻 作為輸入或輸出時 應(yīng)在外部接上拉電阻 P1 口 只做 I O 使用 但其內(nèi)部有上拉電阻 P2 口有兩個功能 1 擴(kuò)充外部存儲器時 當(dāng)做地址總線 A8 A15 使用 2 做一般 I O 使用 其內(nèi)部有上拉電阻 P3 口有兩種功能 除了作為 I O 使用外 內(nèi)部有上拉電阻 還有一些特殊功能 如下 端口引腳第二功能 P3 0RXD 串行輸入口 P3 1TXD 串行輸出口 P3 2INT0 外部中斷 0 P3 3INT1 外部中斷 1 P3 4T0 定時 計數(shù)器 0 P3 5T1 定時 計數(shù)器 1 P3 6WR 外部數(shù)據(jù)存儲器寫入控制信號 P3 7RD 外部數(shù)據(jù)存儲器讀取控制信號 此外 P3 口還接收一些用于 Flash 閃速存儲器編程和程序校驗的控制信號 RST 復(fù)位輸入 當(dāng)振蕩器工作時 RST 引腳出現(xiàn)兩個機(jī)器周期以上高電平 將使單片復(fù)位 ALE PROG 當(dāng)訪問外部程序存儲器或數(shù)據(jù)存儲器時 ALE 地址鎖存允許 輸出脈沖用于鎖存地址的低 8 位字節(jié) 一般情況下 ALE 仍以時鐘振蕩頻率 的 1 6 輸出固定的脈沖信號 因此它可對外輸出時鐘或用于定時目的 對 Flash 存儲器編程期間 該引腳還用于輸入編程脈沖 PROG 此 外 該引腳會被微弱拉高 單片機(jī)執(zhí)行外部程序時 應(yīng)設(shè)置 ALE 禁止位無 效 PSEN 程序儲存允許 PSEN 輸出是外部程序存儲器的讀選通信號 當(dāng) AT89C52 由外部程序存儲器取指令 或數(shù)據(jù) 時 每個機(jī)器周期兩次 PSEN 有效 即輸出兩個脈沖 在此期間 當(dāng)訪問外部數(shù)據(jù)存儲器 將跳過兩次 RSEN 信號 EA VPP 外部訪問允許 欲使 CPU 僅訪問外部程序存儲器 地址為 0000H FFFFH EA 端必須保持低電平 接地 需注意的是 如果加密 位 LB1 被編程 復(fù)位時內(nèi)部會鎖存 EA 端狀態(tài) 如 EA 端為高電平 接 Vcc 端 CPU 則執(zhí)行內(nèi)部程序存儲器中的指令 Flash 存儲器編程時 該引腳加上 12V 的編程允許電源 VPP 當(dāng)然這必須是 該器件是使用 12V 編程電壓 VPP XTAL1 振蕩器反相放大器的及內(nèi)部時鐘發(fā)生器的輸入端 XTAL2 振蕩器反相放大器的輸出端 VCC 電源電壓 GND 地 中斷寄存器 中斷寄存器 STC89C52 有 6 個中斷源 2 個中斷優(yōu)先級 IE 寄存器控制各中斷位 IP 寄存 器中 6 個中斷源的每一個可定為 2 個優(yōu)先級 數(shù)據(jù)存儲器 數(shù)據(jù)存儲器 AT89C52 有 256 個字節(jié)的內(nèi)部 RAM 80H FFH 高 128 個字節(jié)與特殊功能寄 存器 SFR 地址是重疊的 也就是高 128 字節(jié)的 RAM 和特殊功能寄存器的 地址是相同的 但物理上它們是分開的 當(dāng)一條指令訪問 7FH 以上的內(nèi)部地址單元時 指令中使用的尋址方式是 不同的 也即尋址方式?jīng)Q定是訪問高 128 字節(jié) RAM 還是訪問特殊功能寄存 器 如果指令是直接尋址方式則為訪問特殊功能寄存器 例如 下面的直接尋址指令訪問特殊功能寄存器 0A0H 即 P2 口 地址 單元 MOV 0A0H data 間接尋址指令訪問高 128 字節(jié) RAM 例如 下面的間接尋址指令中 R0 的內(nèi)容為 0A0H 則訪問數(shù)據(jù)字節(jié)地址為 0A0H 而不是 P2 口 0A0H MOV R0 data 堆棧操作也是間接尋址方式 所以 高 128 位數(shù)據(jù) RAM 亦可作為堆棧區(qū)使 用 中斷 STC89C52 共有 6 個中斷向量 兩個外中斷 INT0 和 INT1 3 個定時器中 斷 定時器 0 1 2 和串行口中斷 這些中斷源可通過分別設(shè)置專用寄存器 IE 的置位或清 0 來控制每一個中斷 的允許或禁止 IE 也有一個總禁止位 EA 它能控制所有中斷的允許或禁止 定時器 2 的中斷是由 T2CON 中的 TF2 和 EXF2 邏輯或產(chǎn)生的 當(dāng)轉(zhuǎn)向中斷服 務(wù)程序時 這些標(biāo)志位不能被硬件清除 事實上 服務(wù)程序需確定是 TF2 或 EXF2 產(chǎn)生中斷 而由軟件清除中斷標(biāo)志位 定時器 0 和定時器 1 的標(biāo)志位 TF0 和 TF1 在定時器溢出那個機(jī)器周期的 S5P2 狀態(tài)置位 而會在下一個機(jī)器周期才查詢該中斷標(biāo)志 然而 定時器 2 的標(biāo)志位 TF2 在定時器溢出的那個機(jī)器周期 S2P2 狀態(tài)置位 并在同一個 機(jī)器周期內(nèi)查詢到該標(biāo)志 時鐘振蕩器 時鐘振蕩器 STC89C52 中有一個用于構(gòu)成內(nèi)部振蕩器的高增益反相放大器 引腳 XTAL1 和 XTAL2 分別是該放大器的輸入端和輸出端 這個放大器與作為反饋元件的 片外石英晶體或陶瓷諧振器一起構(gòu)成自激振蕩器 外接石英晶體 或陶瓷諧振器 及電容 C1 C2 接在放大器的反饋回路中構(gòu) 成并聯(lián)振蕩電路 對外接電容 C1 C2 雖然沒有十分嚴(yán)格的要求 但電容容 量的大小會輕微影響振蕩頻率的高低 振蕩器工作的穩(wěn)定性 起振的難易程 序及溫度穩(wěn)定性 如果使用石英晶體 我們推薦電容使用 30pF 10pF 而如 使用陶瓷諧振器建議選擇 40pF 10pF 用戶也可以采用外部時鐘 采用外部時鐘的電路如圖右圖所示 這種情況下 外部時鐘脈沖接到 XTAL1 端 即內(nèi)部時鐘發(fā)生器的輸入端 XTAL2 則懸空 Flash 存儲器的編程存儲器的編程 STC89C52 單片機(jī)內(nèi)部有 8k 字節(jié)的 Flash PEROM 這個 Flash 存儲陣列出廠時 已處于擦除狀態(tài) 即所有存儲單元的內(nèi)容均為 FFH 用戶隨時可對其進(jìn)行 編程 編程接口可接收高電壓 12V 或低電壓 Vcc 的允許編程信號 低電壓編程模式適合于用戶在線編程系統(tǒng) 而高電壓編程模式可與通用 EPROM 編程器兼容 STC89C52 的程序存儲器陣列是采用字節(jié)寫入方式編程的 每次寫入一個字 節(jié) 要對整個芯片內(nèi)的 PEROM 程序存儲器寫入一個非空字節(jié) 必須使用片 擦除的方式將整個存儲器的內(nèi)容清除 共陽七段數(shù)碼管 LED 數(shù)碼管是由發(fā)光二極管構(gòu)成的 亦稱半導(dǎo)體數(shù)碼管 將條狀發(fā)光二極管按照共陽極 正極 的方法連接 組成 8 字 再把發(fā)光二極 管另一電極作筆段電極 就構(gòu)成了 LED 數(shù)碼管 若按規(guī)定使某些筆段上的發(fā) 光二極管發(fā)光 就能顯示從 0 9 的一系列數(shù)字 同熒光數(shù)碼管 VFD 輝光 數(shù)碼管 NRT 相比 它具有 體積小 功耗低 耐震動 壽命長 亮度高 單色性好 發(fā)光響應(yīng)的時間短 能與 TTL CMOS 電路兼容等的數(shù)顯器件 如上圖所示是共陽極七段數(shù)碼管的原理圖 共陽數(shù)碼管在應(yīng)用時應(yīng)將公共極 COM 接到 5V 當(dāng)某一字段發(fā)光二極管的陰極 為低電平時 相應(yīng)字段就點亮 當(dāng)某一字段的陰極為高電平時 相應(yīng)字段就不 亮 數(shù)碼管要正常顯示 就要用驅(qū)動電路來驅(qū)動數(shù)碼管的各個段碼 從而顯示出我 們要的數(shù)字 因此根據(jù)數(shù)碼管的驅(qū)動方式的不同 可以分為靜態(tài)式和動態(tài)式兩 類 靜態(tài)顯示驅(qū)動 靜態(tài)驅(qū)動也稱直流驅(qū)動 靜態(tài)驅(qū)動是指每個數(shù)碼管的每一個 段碼都由一個單片機(jī)的 I O 端口進(jìn)行驅(qū)動 或者使用如 BCD 碼二 十進(jìn)制譯碼器 譯碼進(jìn)行驅(qū)動 靜態(tài)驅(qū)動的優(yōu)點是編程簡單 顯示亮度高 缺點是占用 I O 端 口多 如驅(qū)動 5 個數(shù)碼管靜態(tài)顯示則需要 5 8 40 根 I O 端口來驅(qū)動 要知道 一個 89S51 單片機(jī)可用的 I O 端口才 32 個呢 實際應(yīng)用時必須增加譯碼驅(qū)動 器進(jìn)行驅(qū)動 增加了硬件電路的復(fù)雜性 動態(tài)顯示驅(qū)動 數(shù)碼管動態(tài)顯示接口是單片機(jī)中應(yīng)用最為廣泛的一種顯示方 式之一 動態(tài)驅(qū)動是將所有數(shù)碼管的 8 個顯示筆劃 a b c d e f g dp 的同名端連 在一起 另外為每個數(shù)碼管的公共極 COM 增加位選通控制電路 位選通由各自 獨立的 I O 線控制 當(dāng)單片機(jī)輸出字形碼時 所有數(shù)碼管都接收到相同的字形 碼 但究竟是那個數(shù)碼管會顯示出字形 取決于單片機(jī)對位選通 COM 端電路的 控制 所以我們只要將需要顯示的數(shù)碼管的選通控制打開 該位就顯示出字形 沒有選通的數(shù)碼管就不會亮 通過分時輪流控制各個數(shù)碼管的的 COM 端 就使 各個數(shù)碼管輪流受控顯示 這就是動態(tài)驅(qū)動 在輪流顯示過程中 每位數(shù)碼管 的點亮?xí)r間為 1 2ms 由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余輝效應(yīng) 盡管 實際上各位數(shù)碼管并非同時點亮 但只要掃描的速度足夠快 給人的印象就是 一組穩(wěn)定的顯示數(shù)據(jù) 不會有閃爍感 動態(tài)顯示的效果和靜態(tài)顯示是一樣的 能夠節(jié)省大量的 I O 端口 而且功耗更低 在本次設(shè)計中采用了靜態(tài)顯示驅(qū)動方式 蜂鳴器 蜂鳴器是一種一體化結(jié)構(gòu)的電子訊響器 采用直流電壓供電 廣泛應(yīng)用于計算 機(jī) 打印機(jī) 復(fù)印機(jī) 報警器 電子玩具 汽車電子設(shè)備 電話機(jī) 定時器等 電子產(chǎn)品中作發(fā)聲器件 它主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類型 壓電式蜂鳴器主要由多諧振蕩器 壓電蜂鳴片 阻抗匹配器及共鳴箱 外殼 等組成 有的壓電式蜂鳴器外殼上還裝有發(fā)光二極管 多諧振蕩器由晶體管 或集成電路構(gòu)成 當(dāng)接通電源后 1 5 15V 直流工作電壓 多諧振蕩器起 振 輸出 1 5 2 5kHZ 的音頻信號 阻抗匹配器推動壓電蜂鳴片發(fā)聲 電磁式蜂鳴器由振蕩器 電磁線圈 磁鐵 振動膜片及外殼等組成 接通電 源后 振蕩器產(chǎn)生的音頻信號電流通過電磁線圈 使電磁線圈產(chǎn)生磁場 振 動膜片在電磁線圈和磁鐵的相互作用下 周期性地振動發(fā)聲 蜂鳴器分為有源與無源之分 從外觀上分辨 將兩種蜂鳴器的引腳郡朝上 放置時 可以看出有綠色電路板的一種是無源蜂鳴器 沒有電路板而用黑膠 封閉的一種是有源蜂鳴器 進(jìn)一步判斷有源蜂鳴器和無源蜂鳴器 還可以用 萬用表電阻檔檔測試 用黑表筆接蜂鳴器 引腳 紅表筆在另一引腳上來 回碰觸 如果觸發(fā)出咔 咔聲的且電阻只有8 或 16 的是無源蜂鳴器 如果能發(fā)出持續(xù)聲音的 且電阻在幾百歐以上的 是有源蜂鳴器 有源蜂鳴器直接接上額定電源就可連續(xù)發(fā)聲 主要用于簡單的應(yīng)用 如報 警等 而無源蜂鳴器則和電磁揚(yáng)聲器一樣 需要接在音頻輸出電路中才能發(fā)聲 由此可以判定本次設(shè)計應(yīng)該用無源蜂鳴器 蜂鳴器驅(qū)動方式 一種是 PWM 輸出口直接驅(qū)動 另一種是利用 I O 定時 翻轉(zhuǎn)電平產(chǎn)生驅(qū)動波形對蜂鳴器進(jìn)行驅(qū)動 PWM 輸出口直接驅(qū)動是利用 PWM 輸出口本身可以輸出一定的方波來直 接驅(qū)動蜂鳴器 本次設(shè)計用的是第二種方式 即 利用 I O 定時翻轉(zhuǎn)電平產(chǎn)生驅(qū)動波形對蜂 鳴器進(jìn)行驅(qū)動 必須利用定時器來做定時 通過定時翻轉(zhuǎn)電平產(chǎn)生符合蜂鳴 器要求的頻率的波形 這個波形就可以用來驅(qū)動蜂鳴器了 比如為 2500Hz 的蜂鳴器的驅(qū)動 可以知道周期為400 s 這樣只需要驅(qū)動蜂鳴 器的 I O 口每 200 s 翻轉(zhuǎn)一次電平就可以產(chǎn)生一個頻率為2500Hz 占空 比為 1 2duty 的方波 再通過三極管放大就可以驅(qū)動這個蜂鳴器了 NPN 三極管 9013 9013 是一種 NPN 型硅小功率的三極管它是非常常見的晶體三極管 在 收音機(jī)以及各種放大電路中經(jīng)??吹剿?應(yīng)用范圍很廣 它是 NPN 型小功 率三極管 參數(shù) 集電極電流 Ic Max 500mA 工作溫度 55 to 150 集電極 基極電壓 Vcbo 40V 主要用途 放大電路 它利用雙極型半導(dǎo)體三極管輸入電流控制輸出電流的特性 或場效應(yīng)半導(dǎo)體 三極管輸入電壓控制輸出電流的特性 實現(xiàn)信號的放大 晶振 晶晶體體振振蕩蕩器器 簡稱晶晶振振 其作用在于產(chǎn)生原始的時鐘頻率 這個頻率經(jīng)過頻 率發(fā)生器的倍頻或分頻后就成了電腦中各種不同的總線頻率 晶振分為有源晶振和無源晶振 無源晶振只有兩個引腳 沒有所謂的正負(fù)極 有源晶振需要接電源才能工作 一般有四個引腳 其中有兩個電源輸入引腳 有正負(fù)極之分 本次設(shè)計中采用了 12MHZ 的無源晶振來為單片機(jī)提供標(biāo)準(zhǔn)的時鐘頻率 發(fā)光二極管 二極管又稱晶體二極管 簡稱二極管 diode 它只往一個方向傳送電流的電 子零件 發(fā)光二極管用磷化鎵 磷砷化鎵材料制成 體積小 正向驅(qū)動發(fā)光 工 作電壓低 工作電流小 發(fā)光均勻 壽命長 可發(fā)紅 黃 綠單色光 本次設(shè)計中用紅色發(fā)光二極管來指示電源接通與否 硬件原理圖如下所示 XTAL2 18 XTAL1 19 ALE 30 EA 31 PSEN 29 RST 9 P0 0 AD0 39 P0 1 AD1 38 P0 2 AD2 37 P0 3 AD3 36 P0 4 AD4 35 P0 5 AD5 34 P0 6 AD6 33 P0 7 AD7 32 P1 0 T2 1 P1 1 T2EX 2 P1 2 3 P1 3 4 P1 4 5 P1 5 6 P1 6 7 P1 7 8 P3 0 RXD 10 P3 1 TXD 11 P3 2 INT0 12 P3 3 INT1 13 P3 4 T0 14 P3 7 RD 17 P3 6 WR 16 P3 5 T1 15 P2 7 A15 28 P2 0 A8 21 P2 1 A9 22 P2 2 A10 23 P2 3 A11 24 P2 4 A12 25 P2 5 A13 26 P2 6 A14 27 U1 AT89C52 X1 12MHz C1 30pF C2 30pF LS1 SOUNDER JP1 JUMPER Q1 NPN Q2 NPN 復(fù)位電路如下圖所示 XTAL2 18 XTAL1 19 ALE 30 EA 31 PSEN 29 RST 9 P0 0 AD0 39 P0 1 AD1 38 P0 2 AD2 37 P0 3 AD3 36 P0 4 AD4 35 P0 5 AD5 34 P0 6 AD6 33 P0 7 AD7 32 P1 0 T2 1 P1 1 T2EX 2 P1 2 3 P1 3 4 P1 4 5 P1 5 6 P1 6 7 P1 7 8 P3 0 RXD 10 P3 1 TXD 11 P3 2 INT0 12 P3 3 INT1 13 P3 4 T0 14 P3 7 RD 17 P3 6 WR 16 P3 5 T1 15 P2 7 A15 28 P2 0 A8 21 P2 1 A9 22 P2 2 A10 23 P2 3 A11 24 P2 4 A12 25 P2 5 A13 26 P2 6 A14 27 U1 AT89C52 C1 10uF R1 10k 六 流程圖設(shè)計 主程序流程圖 下一首歌曲流程圖 上一首歌曲流程圖 數(shù)碼管顯示流程圖 上一首歌曲號數(shù)碼管顯示流程圖 下一首歌曲號數(shù)碼管顯示流程圖 通過判斷當(dāng)前播放的歌曲號 并將其號碼送往P2 口 驅(qū)動相應(yīng)的二極管 將號碼顯示出來 七 音樂播放器 C51 源程序 include sbit SPK P1 0 蜂鳴器 sbit a P3 0 上一首 sbit b P3 1 下一首 sbit e P3 2 控制暫停與繼續(xù) unsigned char code data song 指向具體歌的指針 unsigned int data j 取碼指針 unsigned char data i 用于循環(huán) unsigned char data k 幾個 1 4 拍 unsigned char data l 第幾個碼 void delay void unsigned char code yin 30 0 xFF 0 xFF 0 xFB 0 x90 0 xFC 0 x0C 0 xFC 0 x44 0 xFC 0 xAC 0 xFD 0 x09 0 xFD 0 x34 0 xFD 0 x82 0 xFD 0 xC8 0 xFE 0 x06 0 xFE 0 x22 0 xFA 0X15 0XFB 0 x04 0 xFA 0 x67 0 xFE 0 x85 C 調(diào)各音符頻率與計數(shù)初值 T 的對照表 第一首 蘭花草 unsigned char code song1 46 0 x12 0 x52 0 x52 0 x52 0 x56 0 x42 0 x32 0 x42 0 x32 0 x22 0 x18 0 x82 0 x82 0 x82 0 x82 0 x86 0 x72 0 xB2 0 x72 0 x72 0 x62 0 x58 0 x52 0 x82 0 x82 0 x72 0 x56 0 x42 0 x32 0 x42 0 x32 0 x22 0 x16 0 xB2 0 xB2 0 x32 0 x32 0 x22 0 x16 0 x52 0 x42 0 x32 0 x22 0 xC2 0 x88 0 xFF 第二首 兩只蝴蝶 unsigned char code song2 131 0 x52 0 x42 0 x58 0 x02 0 x42 0 x52 0 x42 0 x38 0 x04 0 x12 0 x32 0 x44 0 x42 0 x52 0 x42 0 x32 0 x12 0 x12 0 xC8 0 x04 0 x52 0 x42 0 x58 0 x02 0 x42 0 x52 0 x42 0 x38 0 x04 0 x12 0 x32 0 x44 0 x42 0 x52 0 x42 0 x32 0 x12 0 x32 0 x48 0 x04 0 x52 0 x42 0 x58 0 x02 0 x42 0 x52 0 x42 0 x38 0 x04 0 x12 0 x32 0 x44 0 x42 0 x52 0 x42 0 x32 0 x12 0 x11 0 x31 0 xC8 0 x04 0 x52 0 x72 0 x78 0 x02 0 x72 0 x82 0 x72 0 x58 0 x04 0 x42 0 x42 0 x44 0 x42 0 x52 0 x42 0 x32 0 x12 0 x12 0 x32 0 x32 0 x3C 0 x09 0 x72 0 x72 0 x82 0 xA2 0 x92 0 x92 0 x82 0 x52 0 x42 0 x42 0 x42 0 x58 0 x02 0 x52 0 x52 0 x72 0 x84 0 x84 0 x02 0 x12 0 x52 0 x42 0 x48 0 x04 0 x52 0 x72 0 x72 0 x52 0 x74 0 x02 0 xA4 0 x92 0 x82 0 x92 0 x54 0 x02 0 x82 0 x82 0 x92 0 x82 0 x72 0 x52 0 x42 0 x02 0 xC4 0 x12 0 x3C 0 xFF 第三首 最浪漫的事 unsigned char code song3 138 0 xC2 0 xC2 0 x12 0 x34 0 x32 0 x32 0 x32 0 x12 0 x12 0 x52 0 x54 0 x02 0 xC2 0 x12 0 x32 0 x32 0 x32 0 x32 0 x34 0 x52 0 x72 0 x7C 0 x02 0 x72 0 x82 0 x72 0 x82 0 x72 0 x84 0 x72 0 x41 0 x51 0 x52 0 x41 0 x31 0 x34 0 x02 0 x32 0 x32 0 x12 0 x34 0 x32 0 x12 0 x32 0 x54 0 x42 0 x32 0 x32 0 x32 0 x32 0 x34 0 x52 0 x72 0 x7C 0 x72 0 x72 0 x82 0 x72 0 x82 0 x72 0 x84 0 x82 0 x72 0 x42 0 x52 0 x42 0 x34 0 x12 0 x12 0 x32 0 xC4 0 x52 0 x42 0 x34 0 x12 0 x12 0 x31 0 x41 0 x32 0 x3C 0 x84 0 x82 0 x72 0 x82 0 x72 0 x52 0 x72 0 x78 0 x02 0 x72 0 x82 0 xA2 0 x84 0 x82 0 x72 0 x82 0 x72 0 x82 0 x32 0 x0A 0 x72 0 x82 0 xA2 0 x38 0 x02 0 x32 0 x42 0 x52 0 x64 0 x62 0 x72 0 x82 0 x82 0 x72 0 x82 0 x82 0 xA2 0 x82 0 x82 0 x82 0 xA2 0 x82 0 x72 0 x78 0 x72 0 x32 0 x82 0 x72 0 x78 0 x72 0 x82 0 xA3 0 x51 0 x42 0 x51 0 x41 0 x3C 0 xFF 第四首 一生有你 unsigned char code song4 77 0 xC2 0 xC2 0 x34 0 x42 0 x42 0 x52 0 x41 0 x51 0 x5C 0 x04 0 xC2 0 xC2 0 x34 0 x42 0 x42 0 x52 0 x31 0 x41 0 x4C 0 x04 0 xC2 0 xC2 0 x34 0 x42 0 x42 0 x52 0 x41 0 x51 0 x58 0 x32 0 x52 0 x4C 0 x42 0 x32 0 x34 0 x32 0 x42 0 x48 0 x04 0 xC2 0 xC2 0 x34 0 x42 0 x42 0 x72 0 x41 0 x51 0 x5C 0 x04 0 xC2 0 xC2 0 x32 0 x32 0 x42 0 x42 0 x52 0 x42 0 x4C 0 x04 0 xC2 0 xC2 0 x34 0 x42 0 x42 0 x52 0 x41 0 x51 0 x58 0 x32 0 x52 0 x4C 0 x42 0 x32 0 x32 0 x42 0 x4C 0 xFF 第五首 寧靜的夏天 unsigned char code song5 0X54 0XC4 0X12 0X32 0X34 0X52 0X52 0X52 0X52 0X42 0X32 0X34 0XC1 0XC2 0X52 0XC2 0X12 0X32 0X34 0X11 0X12 0X31 0X12 0XC2 0X78 0X72 0X52 0X52 0X42 0X32 0X42 0X52 0X11 0XC1 0XC4 0XC1 0XC1 0XC1 0XC1 0X12 0X32 0X32 0X12 0X42 0X42 0X44 0XC2 0X12 0X32 0X42 0X52 0X72 0X72 0X82 0X41 0X51 0X42 0X48 0X42 0X12 0X3C 0X72 0X62 0X3C 0X72 0X62 0X3C 0X72 0X62 0 x21 0 x31 0 x41 0 x51 0 x61 0 x71 0 x81 0 x91 0 x61 0 x71 0 x81 0 x91 0X3F 0X3F 0X54 0XC2 0XC2 0X42 0XC2 0XC4 0X34 0X32 0X42 0X52 0XC2 0XC4 0XD2 0XC2 0X12 0X22 0X38 0X12 0X22 0X32 0X42 0X48 0 xFF 第六首 老鼠愛大米 unsigned char code song6 0 x32 0 x31 0 x41 0 x52 0 x52 0 x42 0 x31 0 x41 0 x44 0 x31 0 x41 0 x52 0 x52 0 x42 0 x32 0 x34 0 x71 0 x11 0 x74 0 x71 0 x71 0 x11 0 x31 0 x34 0 x32 0 x32 0 x32 0 x32 0 x31 0 x41 0 x44 0 x32 0 x41 0 x51 0 x52 0 x52 0 x72 0 x81 0 x41 0 x44 0 x52 0 x41 0 x31 0 x32 0 x32 0 x42 0 x51 0 x71 0 x74 0 x71 0 x71 0 x12 0 x31 0 x31 0 x31 0 x52 0 x42 0 x32 0 x32 0 x41 0 x31 0 x34 0 x52 0 x51 0 x71 0 x72 0 x71 0 x71 0 x72 0 x71 0 x81 0 x84 0 x52 0 x42 0 x32 0 x32 0 x32 0 x41 0 x51 0 x54 0 x51 0 x71 0 x72 0 x72 0 x72 0 x81 0 xA1 0 xA2 0 x82 0 x72 0 x52 0 x42 0 x32 0 x32 0 x12 0 x44 0 x51 0 x71 0 x72 0 x72 0 x71 0 x82 0 x71 0 x84 0 x52 0 x42 0 x32 0 x32 0 x32 0 x41 0 x51 0 x54 0 x51 0 x71 0 x72 0 x72 0 x72 0 x81 0 xA1 0 xA2 0 x82 0 x72 0 x51 0 x41 0 x42 0 x42 0 x44 0 x32 0 x51 0 x61 0 x72 0 x42 0 x44 0 x52 0 x41 0 x31 0 x34 0 x52 0 x41 0 x31 0 x34 0 x52 0 x42 0 x52 0 x32 0 x52 0 x81 0 x71 0 x74 0 x51 0 x71 0 x82 0 x81 0 x71 0 x72 0 x81 0 x71 0 x74 0 x51 0 x41 0 x31 0 x42 0 x41 0 x51 0 x42 0 x31 0 x41 0 x44 0 x52 0 x41 0 x31 0 x34 0 x52 0 x41 0 x31 0 x34 0 x52 0 x42 0 x52 0 x32 0 x52 0 x81 0 x71 0 x74 0 x51 0 x41 0 x82 0 x82 0 xA2 0 x71 0 x81 0 x72 0 x71 0 x51 0 x41 0 x31 0 x44 0 x41 0 x31 0 x41 0 x51 0 x44 0 x52 0 x52 0 x42 0 x31 0 x34 0 x52 0 x41 0 x31 0 x42 0 x31 0 x34 0 xFF 第七首心心相印 unsigned char code song7 85 0 x04 0 x24 0 x14 0 xC4 0 x54 0 x54 0 x48 0 x04 0 x54 0 x44 0 x34 0 x22 0 x14 0 xB2 0 xC8 0 x04 0 x12 0 xC2 0 x16 0 x12 0 x76 0 x52 0 x46 0 x12 0 x3F 0 x04 0 xB4 0 xD4 0 xC4 0 x14 0 x28 0 xC4 0 x14 0 x12 0 x32 0 x16 0 xC2 0 x54 0 x78 0 x34 0 x4C 0 x42 0 x52 0 x86 0 x72 0 x76 0 x52 0 x74 0 x28 0 x42 0 x52 0 x46 0 x12 0 x26 0 x12 0 xCF 0 x04 0 x24 0 x14 0 xC4 0 x56 0 x52 0 x48 0 x04 0 x54 0 x44 0 x34 0 x22 0 x14 0 xB2 0 xC8 0 x04 0 x34 0 x14 0 xC4 0 x12 0 x32 0 x18 0 x42 0 x42 0 x74 0 x58 0 x44 0 x3F 0 xFF 第八首 祈禱 unsigned char code song8 37 0 xC4 0 x12 0 x32 0 x44 0 x42 0 x52 0 x52 0 x44 0 x32 0 x32 0 x12 0 x14 0 x12 0 x12 0 x32 0 x42 0 x54 0 x44 0 x4F 0 xC4 0 x12 0 x32 0 x44 0 x42 0 x72 0 x58 0 x42 0 x32 0 x34 0 x14 0 x12 0 x32 0 x34 0 x32 0 x12 0 x1F 0 xFF 第九首 偏偏喜歡你 unsigned char code song9 0XC2 0XB2 0X36 0X52 0X42 0X32 0X11 0XC1 0XB2 0XC6 0X12 0XC4 0X12 0XC2 0X76 0XA2 0X82 0X72 0X51 0X41 0X32 0X4C 0X42 0X32 0X74 0X82 0X74 0X82 0X72 0X52 0X41 0X38 0X32 0X42 0X16 0XC2 0X72 0X52 0X42 0X42 0X3C 0XC2 0XB2 0X36 0X52 0X42 0X32 0X11 0XC1 0XB2 0XC6 0X12 0XC4 0X12 0XC2 0X76 0XA2 0X82 0X72 0X51 0X41 0X32 0X4C 0X42 0X32 0X76 0X82 0X74 0X82 0X72 0X53 0X41 0X38 0X32 0X42 0X16 0XC2 0X72 0X52 0X41 0X51 0X12 0XCC 0XC2 0XB2 0X16 0XC2 0X72 0X52 0X42 0X42 0X3C 0X32 0X32 0X26 0X22 0X24 0X42 0X32 0 x22 0 x12 0 x18 0 x02 0 x52 0X46 0X12 0X44 0X72 0X82 0X5C 0X52 0X52 0X46 0X42 0X74 0X42 0X32 0X36 0X42 0X58 0X82 0X72 0X62 0X52 0X46 0X32 0X3C 0X12 0XB2 0X36 0X52 0X42 0X32 0X11 0XC1 0XB2 0XC6 0X12 0XC4 0X12 0XC2 0X76 0XA2 0X82 0X72 0X51 0X41 0X32 0X48 0X02 0X42 0X52 0X62 0X76 0X82 0X74 0X82 0X72 0X56 0X41 0X38 0X32 0X22 0X16 0XC2 0X72 0X52 0X42 0X42 0X3C 0X04 0X04 0X04 0X04 0 xFF 延時 20ms void delay1 unsigned int m n for m 1000 m 0 m for n 120 n 0 n 上一首歌曲 void last delay1 if a 1 if song song1 song song9 P2 0 x90 else if song song2 song song1 P2 0 xb7 else if song song3 song song2 P2 0 x19 else if song song4 song song3 P2 0 x91 else if song song5 song song4 P2 0 xb4 else if song song6 song song5 P2 0 xd0 else if song song7 song song6 P2 0 x50 else if song song8 song song7 P2 0 x97 else if song song9 song song8 P2 0 x10 下一首歌曲 void next delay1 if b 1 if song song1 song song2 P2 0 x19 else if song song2 song song3 P2 0 x91 else if song song3 song song4 P2 0 xb4 else if song song4 song song5 P2 0 xd0 else if song song5 song song6 P2 0 x50 else if song song6 song song7 P2 0 x97 else if song song7 song song8 P2 0 x10 else if song song8 song song9 P2 0 x90 else if song song9 song song1 P2 0 xb7 void main TMOD 0 x01 timer0 工作在方式 1 IE 0 x82 EA 1 ETO 1 song song2 預(yù)置演奏第二首 P2 0 x19 while 1 j 0 while song j 0 xFF 是否取到結(jié)束碼 if a 0 last break if b 0 next break if e 0 do while e 0 k song j 后 4 位為多少個 1 4 拍 l song j 4 song song j 中所放 的每個字節(jié) 前 4 位乘 2 表示為音符 頻率在數(shù)組 yin 中的位置 TH0 yin 2 l 置初值 TL0 yin 2 l 1 TR0 1 起動定時器 0 if yin 2 l 0 xff SPK 1 for i k i 0 i 節(jié)拍 K 為多少就執(zhí)行多少個 1 4 拍 delay TR0 0 j 回 main 每個音符的發(fā)聲 void timer0 interrupt 1 using 1 TH0 yin 2 l TL0 yin 2 l 1 SPK SPK 延時 1 4 拍時間即 187ms void delay void unsigned int c d for c 150 c 0 c for d 100 d 0 d 八 有關(guān)聲音產(chǎn)生的知識 表 1 C 調(diào)各音符頻率與計數(shù)值 T 的對照表 音符 頻率 Hz 簡譜碼 T 值 音符 頻率 Hz 簡譜碼 T 值 低 1DO 262 63628 4FA 740 64860 1DO 277 63731 中 5SO 784 64898 低 2RE 294 63835 5SO 831 64934 2RE 311 63928 中 6LA 880 64968 低 3M 330 64021 6 932 64994 低 4FA 349 64103 中 7SI 988 65030 4FA 370 64185 高 1DO 1046 65058 低 5SO 392 64260 1DO 1109 65085 5SO 415 64331 高 2RE 1175 65110 低 6LA 440 64400 2RE 1245 65134 6 466 64463 高 3M 1318 65157 低 7SI 494 64524 高 4FA 1397 65178 中 1DO 523 64580 4FA 1480 65198 1DO 554 64633 高 5SO 1568 65217 中 2RE 587 64684 5SO 1661 65235 2RE 622 64732 高 6LA 1760 65252 中 3M 659 64777 6 1865 65268 中 4FA 698 64820 高 7SI 1967 65283 表 2 節(jié)拍與節(jié)拍碼對照 節(jié) 拍 碼 節(jié) 拍 數(shù) 節(jié) 拍 碼 節(jié) 拍 數(shù) 1 1 4 拍 1 1 8 拍 2 2 4 拍 2 1 4 拍 3 3 4 拍 3 3 8 拍 4 1 拍 4 1 2 拍 5 1 又 1 4 拍 5 5 8 拍 6 1 又 1 2 拍 6 3 4 拍 8 2 拍 8 1 拍 A 2 又 1 2 拍 A 1 又 1 4 拍 C 3 拍 C 1 又 1 2 拍 F 3 又 3 4 拍 表 3 各調(diào) 1 4 節(jié)拍的時間設(shè)定 各調(diào) 1 8 節(jié)拍的時間設(shè)定 曲 調(diào) 值 DELAY 曲 調(diào) 值 DELAY 調(diào) 4 4 125 毫秒 調(diào) 4 4 62 毫秒 調(diào) 3 4 187 毫秒 調(diào) 3 4 94 毫秒 調(diào) 2 4 250 毫秒 調(diào) 2 4 125 毫秒 1 4 拍的延遲時間 187 毫秒 DELAY MOV R7 02 D2 MOV R4 187 別的延遲值 只需修改這兒的值為相應(yīng)值 即 可 D3 MOV R3 248 DJNZ R3 DJNZ R4 D3 DJNZ R7 D2 DJNZ R5 DELAY 節(jié)拍值放在 R5 決定節(jié)拍 RET 建立音樂的步驟 1 先把樂譜的音符找出 然后建立 T 值表的順序 2 把 T 值表建立在 TABLE1 構(gòu)成發(fā)音符是計數(shù)值放在 TABLE 3 簡譜碼 音符 為高位 節(jié)拍為 節(jié)拍數(shù) 為低 4 位 音符節(jié)拍碼放在程序 的 TABLE 處 相關(guān)知識 每一音符使用 1 個字節(jié) 字節(jié)的高 4 位代表音符的高低 低 4 位代表音符的 節(jié)拍 表 2 為節(jié)拍與節(jié)拍碼的對照 如果 1 拍為 0 4 秒 1 4 拍是 0 1 秒 只 要設(shè)定延遲時間就可求得節(jié)拍的時間 假使 1 4 拍為 1DELAY 則 1 拍應(yīng)為 4DELAY 以此類推 所以只要求得 1 4 拍的 DEALY 時間 其余的節(jié)拍就是 它的倍數(shù) 簡 譜 發(fā) 音 簡 譜 碼 T 值 5 低音 SO 1 64260 6 低音 LA 2 64400 7 低音 TI 3 64524 1 中音 DO 4 64580 2 中音 RE 5 64684 3 中音 MI 3 64777 4 中音 FA 7 64820 5 中音 SO 8 64898 6 中音 LA 9 64968 7 中音 TI A 65030 1 高音 DO B 65058 2 高音 RE C 65110 3 高音 MI D 65157 4 高音 FA E 65178 5 高音 SO F 65217 不發(fā)音 0 節(jié) 拍 碼 節(jié) 拍 數(shù) 1 1 4 拍 2 2 4 拍 3 3 4 拍 4 1 拍 5 1 又 1 4 拍 6 1 又 1 2 拍 8 2 拍 A 2 又 1 2 拍 C 3 拍 F 3 又 3 4 拍 編程思路如下 將常用的音符頻率所對應(yīng)的計數(shù)器初值放置在數(shù)組 yin 中 song1 song9 中所放的每個字節(jié)前 4 位乘 2 表示為音符頻率在數(shù)組 yin 中的位置 后 4 位 為多少個 1 4 拍 如 0 x34 表示音符音符頻率所對應(yīng)的計數(shù)器初值為 yin 6 和 yin 7 節(jié)拍數(shù)為 1 拍 即 4 個 1 4 拍 1 4 拍定時可以采用匯編精確定時 要 求不太高的可以嘗試用 C51 循環(huán)體來延時 9 首歌的選擇依靠指針進(jìn)行指向 九 關(guān)于本次設(shè)計元器件及原理的一點補(bǔ)充 定時器 計數(shù)器的應(yīng)用 16 位的定時器 計數(shù)器實質(zhì)上就是一個加 1 計數(shù)器 其控制電路受軟件控制 切換 當(dāng)定時器 計數(shù)器為定時工作方式時 計數(shù)器的加 1 信號由振蕩器的 12 分 頻信號產(chǎn)生 即每過一個機(jī)器周期 計數(shù)器加 1 直至計滿溢出為止 顯然 定
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版私募股權(quán)投資15%股權(quán)購買協(xié)議3篇
- 五下快樂讀書吧《水滸傳》|高頻考點50個
- 2024年電子企業(yè)核心保密協(xié)議樣本版B版
- 2024批次毛石購銷協(xié)議細(xì)則一
- 2025年度攤位租賃與品牌推廣合作合同3篇
- 2024投資借款協(xié)議書范本
- 2024年項目股份買賣合同樣本3篇
- 咖啡調(diào)機(jī)知識培訓(xùn)課件
- 2024版文化藝術(shù)作品創(chuàng)作合同
- 減速機(jī)知識培訓(xùn)課件
- DBJ∕T 15-19-2020 建筑防水工程技術(shù)規(guī)程
- 2025屆浙江省杭州市學(xué)軍中學(xué)生物高一第一學(xué)期期末統(tǒng)考試題含解析
- 互助資金管理辦法
- 青島版科學(xué)四年級下冊課程綱要
- 金葡素注射液與血小板功能的關(guān)聯(lián)
- 澳門的英文5篇
- 財富:2024年《財富》世界500 強(qiáng)排行榜
- NB/T 11434.5-2023煤礦膏體充填第5部分:膠凝材料技術(shù)要求
- NB-T32036-2017光伏發(fā)電工程達(dá)標(biāo)投產(chǎn)驗收規(guī)程
- 信息技術(shù)-計算機(jī)第三方支付行業(yè)深度報告:監(jiān)管加速第三方支付合規(guī)及出清提費利潤彈性巨大
- 年終培訓(xùn)機(jī)構(gòu)述職報告
評論
0/150
提交評論