📄 单音音乐.lst
字号:
C51 COMPILER V8.02 单____乐 06/19/2010 14:29:57 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 单____乐
OBJECT MODULE PLACED IN 单音音乐.OBJ
COMPILER INVOKED BY: D:\处理软件\keil\C51\BIN\C51.EXE 单音音乐.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <at89x52.h>
2 #define uchar unsigned char
3 bit flag; //标志音乐输出脚电平的高低
4 uchar ptr = 0x00; //取音符
5 uchar high; //计数器高位
6 uchar low; //计数器低位
7 // 本曲谱为 "新年好",前两个十六进制表示发声频率,后一个表示发声时间,0xFF,0xFF 表示休止符
8 // 0x00 表示结束
9 // 1 _ 1_ 1 .5
10 uchar code music[] = {
11 0xFC,0x44,0x7F, 0xFC,0x44,0x7F, 0xFC,0x44,0xFF, 0xFA,0x68,0xFF,
12 // 3 _ 3_ 3 1
13 0xFD,0x23,0x7F, 0xFD,0x23,0x7F, 0xFD,0x23,0xFF, 0xFC,0x44,0xFF,
14 // 1_ 3_ 5 5
15 0xFC,0x44,0x7F, 0xFD,0x23,0x7F, 0xFD,0x82,0xFF, 0xFD,0x82,0xFF,
16 // 4_ 3_ 2 -
17 0xFD,0x23,0x7F, 0xFD,0x23,0x7F, 0xFC,0xAC,0xFF, 0xFF,0xFF,0xFF,
18 // 2_ 3_ 4 4
19 0xFC,0xAC,0x7F, 0xFD,0x23,0x7F, 0xFD,0x34,0xFF, 0xFD,0x34,0xFF,
20 // 3_ 2_ 3 1
21 0xFD,0x23,0x7F, 0xFC,0xAC,0x7F, 0xFD,0x23,0xFF, 0xFC,0x44,0xFF,
22 // 1_ 3_ 2 .5
23 0xFC,0x44,0x7F, 0xFD,0x23,0x7F, 0xFC,0xAC,0xFF, 0xFA,0x68,0xFF,
24 // .7_ 2_ 1 -
25 0xFC,0x0C,0x7F, 0xFC,0xAC,0x7F, 0xFC,0x44,0xFF, 0xFF,0xFF,0xFF,
26 0x00//结束
27
28
29
30 };
31 void Init(void); //初始化函数
32 void DelayMs(unsigned int time); //毫秒级延时函数
33 main()
34 {
35 1 uchar time;
36 1 Init();
37 1 TH0 = high;
38 1 TL0 = low;
39 1 while (1)
40 1 {
41 2 if (music[ptr] != 0xFF && music[ptr] != 0x00)//判断是否是正常音符
42 2 {
43 3 TR0 = 0;
44 3 P2_3 = 1;
45 3 DelayMs(10); //间歇
46 3 TR0 = 1;
47 3 high = music[ptr]; //取设置频率数值的高8 位
48 3 low = music[ptr + 1]; //取设置频率数值的低8 位
49 3 time = music[ptr + 2]; //取发声时间
50 3 DelayMs(time);
51 3 ptr += 3;
52 3 }
53 2 else if (music[ptr] == 0xFF) //判断是否是休止符
54 2 {
55 3 time = music[ptr + 2];
C51 COMPILER V8.02 单____乐 06/19/2010 14:29:57 PAGE 2
56 3 DelayMs(time);
57 3 ptr += 3;
58 3 }
59 2
60 2 else //结束符,停止2 秒后继续
61 2 {
62 3 TR0 = 0;
63 3 P2_3 = 1;
64 3 DelayMs(2000);
65 3 ptr = 0;
66 3 }
67 2 }
68 1 }
69 /*********************************************************************************
70 * 名称:Count1(void) interrupt 1
71 * 功能:设置计时器0 溢出中断,每中断一次改变P2_3 引脚电平
72 *********************************************************************************/
73 void Count1(void) interrupt 1
74 {
75 1 TH0 = high;
76 1 TL0 = low;
77 1 if (flag == 0) //改变P2_3 引脚电平
78 1 {
79 2 P2_3 = 0;
80 2 flag = 1;
81 2 }
82 1 else
83 1 {
84 2 P2_3 = 1;
85 2 flag = 0;
86 2 }
87 1 }
88 /*********************************************************************************
89 * 名称:Init()
90 * 功能:设置计数器0 工作方式,16 位计数,溢出中断方式
91 **********************************************************************************/
92 void Init()
93 {
94 1 TMOD = 0x01; //定时器0 处于计时方式,16 位
95 1 EA = 1;
96 1 ET0 = 1; //定时器0 溢出中断
97 1 }
98 /*********************************************************************************
99 * 名称:DelayMs(unsigned int time)
100 * 功能:延时time * 1ms 时间
101 *********************************************************************************/
102 void DelayMs(unsigned int time)
103 {
104 1 unsigned int i;
105 1 unsigned int j;
106 1 for (j =0; j < time; j++) //每个循环 约 3ms
107 1 {
108 2 for (i =0; i < 363; i++)
109 2 {;}
110 2 }
111 1 }
112
113
114
115
116
117
C51 COMPILER V8.02 单____乐 06/19/2010 14:29:57 PAGE 3
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 160 ----
CONSTANT SIZE = 97 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 1
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -