📄 main.lst
字号:
C51 COMPILER V7.06 MAIN 10/23/2006 10:46:58 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE INTVECTOR(0X8000) DEBUG OBJECTEXTEND
stmt level source
1 /*******************************************************************************
2 程序名称:控制交流蜂鸣器演奏简单的乐曲
3 硬件接法:P1.2控制交流蜂鸣器,发声频率等于P1.2的方波振荡频率
4 运行效果:蜂鸣器演奏出动听的乐曲
5 *******************************************************************************/
6
7
8 #include <reg51.h>
9
10
11 //定义I/O接口
12 sbit BUZZER = P1^2;
13
14
15 //定义音符结构
16 typedef struct
17 {
18 unsigned int mFreq; //发声频率(对应的定时器初值)
19 unsigned int mDelay; //发声时值
20 }CNote;
21
22
23 //定义定时器T1重装值
24 unsigned char ReloadH;
25 unsigned char ReloadL;
26
27
28 /*******************************************************************************
29 函数:T1_ISR()
30 功能:定时器T1中断服务函数
31 *******************************************************************************/
32 void T1_ISR() interrupt 3
33 {
34 1 TR1 = 0;
35 1 TH1 = ReloadH;
36 1 TL1 = ReloadL;
37 1 TR1 = 1;
38 1 BUZZER = !BUZZER;
39 1 }
40
41
42 /*******************************************************************************
43 函数:Delay()
44 功能:延时0.001~65.536s
45 参数:t>0时,延时(t*0.001)s
46 t=0时,延时65.536s
47 *******************************************************************************/
48 void Delay(unsigned int t)
49 {
50 1 do
51 1 {
52 2 TH0 = 0xFC; //定时器赋初值,定时1ms
53 2 TL0 = 0x66+17;
54 2 TR0 = 1; //启动定时器
55 2 while ( !TF0 ); //等待定时器溢出
C51 COMPILER V7.06 MAIN 10/23/2006 10:46:58 PAGE 2
56 2 TR0 = 0; //关闭定时器
57 2 TF0 = 0; //清除溢出标志
58 2 } while ( --t != 0 ); //循环t次
59 1 }
60
61
62 /*******************************************************************************
63 函数:Sound()
64 功能:演奏一个音符
65 参数:*note,音符指针,指向要演奏的音符
66 *******************************************************************************/
67 void Sound(CNote *note)
68 {
69 1 //利用定时器T1发出音符的频率
70 1 if ( note->mFreq != 0 )
71 1 {
72 2 ReloadH = (unsigned char)(note->mFreq >> 8);
73 2 ReloadL = (unsigned char)(note->mFreq);
74 2 TH1 = 0xFF;
75 2 TL1 = 0xF0;
76 2 TR1 = 1;
77 2 }
78 1 //发声延时
79 1 Delay(note->mDelay);
80 1 //停止发声
81 1 TR1 = 0;
82 1 TF1 = 0;
83 1 BUZZER = 1;
84 1 //短暂停顿
85 1 Delay(5);
86 1 }
87
88
89 /*******************************************************************************
90 函数:Play()
91 功能:演奏一段乐曲
92 参数:music[],要演奏的乐曲
93 *******************************************************************************/
94 void Play(CNote music[])
95 {
96 1 unsigned int n = 0;
97 1 for (;;)
98 1 {
99 2 if ( music[n].mDelay == 0 ) break;
100 2 Sound(&(music[n]));
101 2 n++;
102 2 }
103 1 }
104
105
106 #include "MusicTab.h" //包含乐曲头文件
107
108
109 //主程序
110 void main()
111 {
112 1 unsigned char n;
113 1 TMOD = 0x11;
114 1 ET1 = 1;
115 1 EA = 1;
116 1 for (;;)
117 1 {
C51 COMPILER V7.06 MAIN 10/23/2006 10:46:58 PAGE 3
118 2 n = 3;
119 2 do
120 2 {
121 3 Play(MusicTab); //演奏乐曲
122 3 } while ( --n != 0 );
123 2 Delay(5000); //等待5秒,再循环播放
124 2 }
125 1 }
126
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 177 ----
CONSTANT SIZE = 292 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 6
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 + -