- C51單片機編程與應用
- 孔維功主編
- 14字
- 2018-12-29 14:25:42
項目1 認識單片機及其開發環境
1.1 項目提出
1.任務
利用單片機系統播放一段音樂。
2.要求
(1)按照所給電路圖連接單片機系統。
(2)將所給單片機程序調試、編譯下載至單片機中,運行單片機系統。
3.播放音樂的單片機電路圖

用單片機I/O口P1.7擴展蜂鳴器演奏一首曲子。
4.音樂程序
/* *********************************** 這是一首 2002年第一場雪的曲子 * ***********************************/ #include<reg51.h> /*8051單片機資源說明*/ sbit SPK=P1^7; //音樂輸出口 void Delayms(unsigned char ms); //節拍延時 unsigned int data j; unsigned char code song[636]={ //歌曲數組,格式為:頻率常數,節拍常數 0xFF,0xFF,4,0xFD,0x08,2, 0xFD,0x08,2,0xFD,0x08,2, 0xFD,0x08,2,0xFD,0x08,2, 0xFD,0x08,2,0xFD,0x5B,4, 0xFD,0x08,2,0xFC,0xAB,2, 0xFC,0x0B,2,0xFC,0x0B,2, 0xFF,0xFF,2,0xFC,0x0B,2, 0xFC,0xAB,2,0xFC,0xAB,2, 0xFC,0xAB,2,0xFC,0xAB,2, 0xFC,0xAB,4,0xFC,0xAB,2, 0xFC,0xAB,2, 0xFB,0x8F,2,0xFC,0x0B,2, 0xFC,0x0B,4,0xFF,0xFF,8, 0xFF,0xFF,2,0xFD,0x08,2, 0xFD,0x08,2,0xFD,0x08,2, 0xFD,0x08,4,0xFD,0x08,2, 0xFD,0x08,2, 0xFD,0x5B,4,0xFD,0x08,2, 0xFC,0xAB,4,0xFD,0x08,6, 0xFF,0xFF,2,0xFB,0x8F,2, 0xFB,0x8F,2,0xFB,0x8F,2, 0xFB,0x8F,2,0xFB,0x8F,2, 0xFB,0x03,2,0xFA,0x14,2, 0xFC,0xAB,4,0xFC,0xAB,2, 0xFC,0xAB,2,0xFC,0xAB,2, 0xFC,0x0B,2,0xFC,0x0B,4, 0xFF,0xFF,4,0xFD,0x08,2, 0xFD,0x08,2,0xFD,0x08,2, 0xFD,0x08,2,0xFD,0x08,2, 0xFD,0x08,2, 0xFD,0x5B,4,0xFD,0x08,2, 0xFC,0xAB,4,0xFD,0x08,6, 0xFF,0xFF,2,0xFB,0x8F,2, 0xFB,0x8F,2,0xFB,0x8F,2, 0xFB,0x8F,2,0xFB,0x8F,2, 0xFB,0x03,2,0xFA,0x14,2, 0xFC,0xAB,4,0xFC,0xAB,2, 0xFC,0xAB,2,0xFC,0xAB,2, 0xFC,0x0B,2,0xFC,0x0B,4, 0xFF,0xFF,4,0xFD,0x08,2, 0xFD,0x08,2,0xFD,0x08,2, 0xFD,0x08,2,0xFD,0x08,2, 0xFD,0x08,2, 0xFD,0x5B,4,0xFD,0x08,2, 0xFD,0x5B,2,0xFC,0xAB,2, 0xFC,0x0B,2,0xFC,0x0B,4, 0xFF,0xFF,2,0xFB,0x8F,2, 0xFB,0x8F,2,0xFB,0x03,2, 0xFB,0x8F,4,0xFB,0x8F,2, 0xFB,0x03,2, 0xFC,0x0B,4,0xFB,0x8F,2, 0xFC,0x0B,2,0xFB,0x03,2, 0xFA,0x14,2,0xFA,0x14,4, 0xFF,0xFF,2,0xFD,0x08,2, 0xFD,0x08,2,0xFD,0x08,2, 0xFD,0x08,2,0xFD,0x08,2, 0xFD,0x08,2,0xFD,0x08,2, 0xFD,0x5B,4,0xFD,0x08,2, 0xFD,0x5B,2,0xFC,0xAB,2, 0xFC,0x0B,2,0xFC,0x0B,4, 0xFF,0xFF,2,0xFB,0x8F,2, 0xFB,0x8F,2,0xFB,0x8F,2, 0xFB,0x8F,2,0xFB,0x8F,2, 0xFB,0x03,2,0xFA,0x14,2, 0xfc,0xab,4,0xfc,0xab,2, 0xfc,0xab,2,0xfb,0x8f,2, 0xfc,0x0b,2,0xFC,0x0B,4, 0xFF,0xFF,2,0xFD,0x08,2, 0xFD,0x08,2,0xFD,0x08,2, 0xFD,0x08,2,0xFD,0x08,4, 0xFD,0x08,2, 0xfD,0x5b,4,0xfD,0x08,2, 0xfc,0xab,4,0xfc,0x0b,6, 0xFF,0xFF,2,0xFB,0x8F,2, 0xFB,0x8F,2,0xFB,0x03,2, 0xFB,0x8F,2,0xFB,0x8F,2, 0xFB,0x8F,2,0xFB,0x03,2, 0xFC,0x0B,4,0xFB,0x8F,2, 0xFC,0x0B,2,0xFB,0x03,2, 0xFA,0x14,2,0xFA,0x14,4, 0xFF,0xFF,2,0xFB,0x8F,2, 0xFB,0x8F,2,0xFB,0x8F,2, 0xFB,0x8F,2,0xFB,0x8F,2, 0xFB,0x03,2,0xFA,0x14,2, 0xFB,0x03,2,0xFB,0x03,2, 0xFB,0x03,2,0xFA,0x14,2, 0xFA,0x14,1,0xF9,0x5B,1, 0xF8,0x2A,2,0xF8,0x2A,4, 0xFF,0xFF,2,0xFB,0x8F,2, 0xFB,0x8F,2,0xFB,0x8F,2, 0xFB,0x8F,2,0xFB,0x8F,2, 0xFB,0x03,2,0xFA,0x14,2, 0xFB,0x8F,2,0xFC,0x08,2, 0xFC,0x08,2,0xFC,0x08,10, 0xFF,0xFF,2,0xFB,0x8F,2, 0xFB,0x8F,2,0xFB,0x8F,2, 0xFB,0x8F,2,0xFB,0x8F,2, 0xFB,0x03,2,0xFA,0x14,2, 0xFB,0x03,2,0xFB,0x03,2, 0xFB,0x03,2,0xFA,0x14,2, 0xFA,0x14,1,0xF9,0x5B,1, 0xF8,0x2A,2,0xF8,0x2A,4, 0xFF,0xFF,2,0xFB,0x8F,2, 0xFB,0x8F,2,0xFB,0x8F,2, 0xFB,0x8F,2,0xFB,0x8F,2, 0xFB,0x03,2,0xFA,0x14,2, 0xFC,0xAB,2,0xFD,0x08,2, 0xFD,0x08,2,0xFD,0x08,2, 0xFF,0xFF,4,0xFF,0xFF,4}; void main() { TMOD=0x01; IE=0x82; while(1) { j=0; while (j<636) { TR0=1; if ((song[j]==0xff)&&(song[j+1]==0xff)) TR0=0; //休止符用0xff,0xff表示出現休止符時CT0禁止,不發聲 Delayms(song[j+2]); //每一音符唱多長 j=j+3; } } } /* 音調程序*/ void timer0()interrupt 1 using 1 //每一音符唱多高 { TH0=song[j]; TL0=song[j+1]; SPK = !SPK; } /* 節拍程序*/ void Delayms(unsigned char ms) //基本延時子程序(1/16拍的時間) { unsigned int i; while(ms--) {for(i=0;i<10300;i++); //節拍快慢控制 } TR0=0; }
推薦閱讀
- AutoCAD繪圖實用速查通典
- Canvas LMS Course Design
- 影視后期制作(Avid Media Composer 5.0)
- 工業機器人工程應用虛擬仿真教程:MotoSim EG-VRC
- 基于ARM 32位高速嵌入式微控制器
- 統計學習理論與方法:R語言版
- Apache Superset Quick Start Guide
- 大數據時代
- MATLAB/Simulink權威指南:開發環境、程序設計、系統仿真與案例實戰
- Linux嵌入式系統開發
- 網絡服務器搭建與管理
- 貫通Java Web輕量級應用開發
- Instant Slic3r
- 菜鳥起飛電腦組裝·維護與故障排查
- Hands-On Agile Software Development with JIRA