【正文】
公共塊子程序:需要重復(fù)使用的多條指令被提取組成子程序。 通過寄存器傳遞參數(shù):最多三個參數(shù)通過寄存器傳遞。以下列出的是目前 C51編譯器提供的所有優(yōu)化級別的內(nèi)容: 常量折疊:在表達式及尋址過程中出現(xiàn)的常量被綜合為一個單個的常量。 代碼優(yōu)化 C51是一個杰出的優(yōu)化編譯器,它通過很多步驟以確保產(chǎn)生的代碼是最有效率的(最小和 /或最快)。 C運行連接庫包含一些標(biāo)準(zhǔn)的子程序,如 :格式化輸出,數(shù)字轉(zhuǎn)換,浮點運算。這使整個應(yīng)用系統(tǒng)的結(jié)構(gòu)變得清晰,同時讓源代碼變得可重復(fù)使用。 C51優(yōu)化的 C語言交叉編譯器 Keil C51交叉編譯器是一個基于 ANSI C標(biāo)準(zhǔn)的針對 8051系列 MCU的 C編譯器,生成的可執(zhí)行代碼快速、緊湊,在運行效率和速度上可以和匯編程序得到的代碼相媲美 。 RTX51 實時操作系統(tǒng) RTX51 實時操作系統(tǒng)是一個針對 8051系列的多任務(wù)核。 利用高級的 GDI( AGDI)接口,把 uVision2調(diào)試器綁定到你的目標(biāo)系統(tǒng)。 uVision2 調(diào)試器 uVision2 源代碼級調(diào)試器是一個理想地快速,可靠的程序調(diào)試器。所有的代碼和數(shù)據(jù)被安置在固定的存儲器單元中。庫是一種被特別地組織過并在以后可以被連接重用的對象模塊。 Keil C51 編譯器完全遵照 ANSI C 語言標(biāo)準(zhǔn),支持 C 語言的所有標(biāo)準(zhǔn)特性。利用 uVision2 創(chuàng)建你的源代碼并把它們組織到一個能確定你的目標(biāo)應(yīng)用的項目中去。 3. 用項目管理器實現(xiàn)你的應(yīng)用。 RTX51實時操作系統(tǒng)簡化了復(fù)雜和對時間要求敏感的軟件項目。 A51宏匯編器從你的 8051匯編源代碼產(chǎn)生可重定位的目標(biāo)文件。Vision2 Debugger using the serial port of the 8051 and a COM port of your PC. With Monitor51, 181。Vision2 Debugger provides several ways for you to test your programs on real target hardware: Install the MON51 Target Monitor on your target system and download your program using the Monitor51 interface 第 22 頁 共 32 頁 builtin to the 181。Vision2 automatically piles, assembles, and links your embedded application and provides a single focal point for your development efforts. LIB51 Library Manager The LIB51 library manager allows you to create object library from the object files created by the piler and assembler. Libraries are specially formatted, ordered program collections of object modules that may be used by the linker at a later time. When the linker processes a library, only those object modules in the library that are necessary to create the program are used. BL51 Linker/Locator The BL51 linker creates an absolute object module using the object modules extracted from libraries and those created by the piler and assembler. An absolute object file or module contains no relocatable code or data. All code and data reside at fixed memory locations. The absolute object file may be used: To program an EPROM or other memory devices, With the 181。Vision2 for Windows? is an Integrated Development Environment that bines project management, source code editing, and program debugging in one single, powerful environment. The C51 ANSI Optimizing C Cross Compiler creates relocatable object modules from your C source code. The A51 Macro Assembler creates relocatable object modules from your 8051 assembly source code. The BL51 Linker/Locator bines relocatable object modules created by the C51 Compiler and the A51 Assembler into absolute object modules. The LIB51 Library Manager bines object modules into libraries that may be used by the linker. The OH51 ObjectHEX Converter creates Intel HEX files from absolute object modules. The RTX51 Realtime Operating System simplifies the design of plex, timecritical software projects. Software Development Cycle When you use the Keil Software tools, the project development cycle is roughly the same as it is for any other software development project. 1. Create a project, select the target chip from the device database, and configure the tool settings. 2. Create source files in C or assembly. 3. Build your application with the project manager. 4. Correct errors in source files. 5. Test the linked application. 181。只是今后大家就難得再聚在一起吃每年元旦那頓飯了吧,沒關(guān)系,各奔前程,大家珍重。 感謝我的爸爸媽媽,焉得諼草,言樹之背,養(yǎng)育之恩,無以回報,你們永遠健康快樂是我最大的心愿 。 總之,這次設(shè)計從軟件編寫、調(diào)試到軟硬件聯(lián)機調(diào)試,我傾注了大量的時間和心血。 與 第一種方式 的不同之處為:當(dāng) D1 移向 D2 時, D1 不熄滅,再從 D2 移向 D3時, D2 也不熄滅,以此類推。 測試結(jié)果 .總體運行圖 圖 系統(tǒng)總體運行圖 第 17 頁 共 32 頁 .花樣燈 3種 花樣圖 由于截圖只能 看到靜態(tài)圖,不能看到整體圖樣,下面畫圖說明: 圖 花樣燈 ( 1) 第一種花樣燈顯示方式為:從 D1 移向 D2,然后 D1 熄滅 , 再從 D2 移向 D3,然后 D2 熄滅, 以此 類推, 往復(fù)循環(huán)。 } 程序源代碼 (見附錄 A) 第 16 頁 共 32 頁 5 調(diào)試 檢查硬件連接 在 PROTUES 檢查各硬件 管腳 是否連接正確, 線路邏輯是否正確,例如 :晶振電路的連接,復(fù)位電路是否設(shè)計正確。x0。y0。 } 延時程序代碼: void delay(uint z) //延時 165MS,即十六分音符 { uint x,y。 TR0=1。//關(guān)蜂鳴器 } delay(temp%16)。 if(jp!=0) { timeh=cuzhi[jp*2]。 jp=temp/16。 while(1) { if(count2==0) { break。 delay1(1000)。 duan=0。x++) { duan=1。 if(count1!=2) break。 P1=huayang2[x]。 } break。 beep()。 第 12 頁 共 32 頁 while(1) { if(count1!=0) //音樂停止,花樣燈開始 按照花樣閃爍 { switch(count1) { case 1: for(x=0。//外部中斷 1 下降沿觸發(fā)方式 TMOD=0x01。//開總中斷 EX0=1。 count1=0。 舉例 2:音調(diào) re,發(fā)音長度為半拍,即八分音符,將其編碼為 0x22 歌曲播放的設(shè)計。播放長度以十六分音符為單位(在本程序中為 165ms),一拍即四分音符等于 4 個十六分音符,編為 4,其它的播放時間以此類推。如果 1 拍為 秒, 1/4 拍實 秒,只要設(shè)定延遲時間就可求得節(jié)拍的時間。了解音樂的一些基礎(chǔ)知識,我們可知產(chǎn)生不同頻率的音頻脈沖即能產(chǎn)生音樂。至于 1拍多少 s,并沒有嚴格規(guī)定,就像人的心跳一樣,大部分人的心跳是每分鐘 72下,有些人快一點,有些人慢一點,只要聽的悅耳就好。高音的DO( 1046Hz)的計算值 T=65536N=65536Fi? 2? Fr=655361000000? 2? Fr=65536500000/Fr 低音 DO 的 T=65536500000/262=63627 低音 DO 的 T=65536500000/523=64580 低音 DO 的 T=65536500000/1047=65059 5) C 調(diào)各音符頻率與計數(shù)值 T 的對照表如 表 。 此外結(jié)束符和休止符可以分別用代碼 00H 和 FFH 來表示,若查表結(jié)果為 00H,則表示曲子終了;若查表結(jié)果為 FFH,則產(chǎn)生相應(yīng)的停頓效果。例如高音 DO 的頻率( 1046Hz)剛好是中音 DO 的頻率( 523Hz)的一倍,中音 DO 的頻率( 523Hz)剛好是低音 DO 頻率( 266 Hz)的一倍;同樣的,高音 RE 的頻率( 1175Hz)剛好是中音 RE 的頻率( 587Hz)的一倍,中音 RE 的頻率( 587Hz)剛好是低音 RE 頻率( 294 Hz)的一倍。兩個音之間的距離有兩個“半音”,就叫“全音”。 音調(diào)、 節(jié)拍 以及 編碼的確定 方法 一般說來,單片機演奏音樂基本都是單音頻率,它不包含相應(yīng)幅度的諧波頻率,也就是說不能像電子琴那樣能奏出多種音色的聲音。按鍵 1使得 count1 在 1和 2之間切換,按鍵 2使得 count2 在 1~4之間切換。 2) ~ 控制 LED。采用外部時鐘的電路如圖示。外接石英晶體及電容 C C2 接在放大器的反饋回路中構(gòu)成并聯(lián)振蕩電路。外形及引腳排列如圖 所示 圖 AT89C51 系列單片機 LED 顯示電路設(shè)計與原理 LED 顯示電路是 由 8 個 LED 發(fā)光二極管組成, 連接方式為 共 陽極 , LED 接到單片機的 P1 口,若為低電平 ,可使 LED 亮起。單片機的 可擦除只讀存儲器可以反復(fù)擦除 100 次。 Keil C51 生成的目標(biāo)代碼效率非常之高,多數(shù)語句生成的