?? music.lst
?? C51單片機電子琴程序 可以自由彈奏樂曲
?? LST
字號:
??
C51 COMPILER V7.50 MUSIC 05/22/2008 17:07:16 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE MUSIC
OBJECT MODULE PLACED IN Music.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE Music.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /**************Copyright********************************
2 ** 單位:南京工業大學信息學院電子系
3 ** 網址:http://cise.njut.edu.cn
4 ** 日期:2008.5.21
5 ** 實驗內容:通過蜂鳴器播放音樂
6 **************Copyright*********************************/
7
8 /*****以下是單片機與8155控制線的接線說明******
9 8155 MCU(1)
10 數據口: D0~D7 P10~P17
11 IO口與RAM選擇口: 8155IO/M P20
12 片選端: CE P27
13 *****以上是單片機與8155控制線的接線說明******/
14
15 /*****以下是單片機與蜂鳴器的接線說明******
16 蜂鳴器 MCU(1)
17 : 1 P10
18 *****以上是單片機與蜂鳴器的接線說明******/
19 #include<reg51.h>
20 #include<absacc.h>
21 #include <intrins.h>
22 #include<math.h>
23
24 #define uint unsigned int
25 #define uchar unsigned char
26
27 //定義8155端口地址
28 #define PA8155 XBYTE[0x7101]
29 #define PB8155 XBYTE[0x7102]
30 #define COM8155 XBYTE[0x7100]
31
32 /************************段碼說明***********************
33 段碼 D7 D6 D5 D4 D3 D2 D1 D0
34 段名 a b c d e f g dp
35 *************************段碼說明**********************/
36 unsigned char code Table1[16]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e
-,0x8e}; //0~F的段碼
37 unsigned char Dis_BUF[4]={1,0,0,0};//顯存
38
39 //定義蜂鳴器的管腳
40 sbit bell=P1^0;
41 //樂曲數據://格式為: 頻率常數, 節拍常數, 頻率常數, 節拍常數,
42 unsigned char code music_tab[] ={
43 0x18, 0x30, 0x1C , 0x10,0x20, 0x40, 0x1C , 0x10,
44 0x18, 0x10, 0x20 , 0x10,0x1C, 0x10, 0x18 , 0x40,
45 0x1C, 0x20, 0x20 , 0x20,0x1C, 0x20, 0x18 , 0x20,
46 0x20, 0x80, 0xFF , 0x20,0x30, 0x1C, 0x10 , 0x18,
47 0x20, 0x15, 0x20 , 0x1C,0x20, 0x20, 0x20 , 0x26,
48 0x40, 0x20, 0x20 , 0x2B,0x20, 0x26, 0x20 , 0x20,
49 0x20, 0x30, 0x80 , 0xFF,0x20, 0x20, 0x1C , 0x10,
50 0x18, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,
51 0x30, 0x20, 0x2B , 0x40,0x20, 0x20, 0x1C , 0x10,
52 0x18, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,
53 0x30, 0x20, 0x2B , 0x40,0x20, 0x30, 0x1C , 0x10,
54 0x18, 0x20, 0x15 , 0x20,0x1C, 0x20, 0x20 , 0x20,
C51 COMPILER V7.50 MUSIC 05/22/2008 17:07:16 PAGE 2
55 0x26, 0x40, 0x20 , 0x20,0x2B, 0x20, 0x26 , 0x20,
56 0x20, 0x20, 0x30 , 0x80,0x20, 0x30, 0x1C , 0x10,
57 0x20, 0x10, 0x1C , 0x10,0x20, 0x20, 0x26 , 0x20,
58 0x2B, 0x20, 0x30 , 0x20,0x2B, 0x40, 0x20 , 0x15,
59 0x1F, 0x05, 0x20 , 0x10,0x1C, 0x10, 0x20 , 0x20,
60 0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,
61 0x20, 0x30, 0x1C , 0x10,0x18, 0x20, 0x15 , 0x20,
62 0x1C, 0x20, 0x20 , 0x20,0x26, 0x40, 0x20 , 0x20,
63 0x2B, 0x20, 0x26 , 0x20,0x20, 0x20, 0x30 , 0x30,
64 0x20, 0x30, 0x1C , 0x10,0x18, 0x40, 0x1C , 0x20,
65 0x20, 0x20, 0x26 , 0x40,0x13, 0x60, 0x18 , 0x20,
66 0x15, 0x40, 0x13 , 0x40,0x18, 0x80, 0x00
67 };
68
69
70 /****************************************************
71 函數名稱:
72 功能: 延時函數
73 參數: unsigned int i(四位數組顯存)
74 返回值:無
75 ****************************************************/
76 void delay(unsigned int itime) //延時函數
77 {
78 1 while(itime--);
79 1 }
80
81 unsigned char TenMS_Num; //延時10MS的次數
82 //定義定時器初值//for(10ms)
83 #define STH0 0xD8
84 #define STL0 0xF0
85 /****************************************************
86 函數名稱:
87 功能: 定時器0中斷函數,產生10MS精確定時
88 參數:
89 返回值:無
90 ****************************************************/
91 void Int_Time0(void) interrupt 1 using 1
92 {
93 1 TH0=STH0;
94 1 TL0=STL0;
95 1 TenMS_Num--;
96 1 }
97
98 /****************************************************
99 函數名稱:
100 功能: 播放音樂
101 參數: unsigned char *Pt_Music(音樂數據組)
102 返回值:無
103 ****************************************************/
104 void Play_Music(unsigned char *Pt_Music)
105 {
106 1 unsigned char Overflag=1;
107 1 unsigned char Music_Freq;//Music_Freq為頻率常數
108 1 unsigned char Music_Time;//Music_Time為節拍常數
109 1 while(Overflag)
110 1 {
111 2 switch(*Pt_Music)
112 2 {
113 3 case 0x00:// 曲終停頓一定時間,并設置結束標志位
114 3 Overflag=0;
115 3 delay(60000);
116 3 delay(60000);
C51 COMPILER V7.50 MUSIC 05/22/2008 17:07:16 PAGE 3
117 3 break;
118 3 case 0xff://遇到休止符停頓一定時間100微秒,再取下一個頻率
119 3 Pt_Music++;
120 3 delay(50);
121 3 break;
122 3 default:
123 3 Music_Freq=*Pt_Music++;
124 3 Music_Time=*Pt_Music++;//取頻率到m,取節拍到n
125 3 TenMS_Num=Music_Time;
126 3 TR0=1;
127 3 while(TenMS_Num!=0)
128 3 {
129 4 P1=bell;
130 4 delay(2*Music_Freq);//調整產生的頻率,可以通過在m前的值來修正音調的高低
131 4 bell=!bell;
132 4 }
133 3 TR0=0;
134 3 break;
135 3 }
136 2 }
137 1 }
138
139
140 /****************************************************
141 函數名稱:
142 功能: 顯示函數,將溫度顯示在數碼管上
143 參數: *Bufptr(四位數組顯存)
144 返回值:無
145 ****************************************************/
146 void Disp_lED(unsigned char *Bufptr)
147 {
148 1 unsigned char disi;
149 1 unsigned char BitCT=0X10;
150 1 for(disi=0;disi<4;disi++)
151 1 {
152 2 PA8155=BitCT; //選中個位數碼管
153 2 PB8155=Table1[*Bufptr++]; //取段碼
154 2 BitCT=_crol_(BitCT,1); //左移一位
155 2 delay(500);
156 2 }
157 1 }
158
159 //主函數
160 void main()
161 {
162 1
163 1 COM8155=0x03; //初始化8155控制口
164 1 Disp_lED(Dis_BUF);
165 1
166 1 //初始化定時器
167 1 TMOD=(TMOD&0xf0)|0x01;
168 1 TH0=STH0;
169 1 TL0=STL0;
170 1 EA=1;
171 1 ET0=1;
172 1 TR0=0;
173 1 while(1)
174 1 {
175 2 Play_Music(music_tab);
176 2 }
177 1 }
C51 COMPILER V7.50 MUSIC 05/22/2008 17:07:16 PAGE 4
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 266 ----
CONSTANT SIZE = 207 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 5 9
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -