?? 單音音樂.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 + -