📄 music.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 + -