📄 123.lst
字号:
C51 COMPILER V7.08 123 03/29/2008 13:16:16 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE 123
OBJECT MODULE PLACED IN 123.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE 123.c DEBUG OBJECTEXTEND
line level source
1 /*12Mhz晶振工作*/
2 #include <at89x51.h>
3 #define uint unsigned int
4 #define uchar unsigned char
5 sbit BUZZER=P3^7;
6 uint m,i,rti,l;
7
8 //在12M频率下的高低音音频率表,toneh为高字节,toneh1为低字节
9 uchar code toneh[15]={0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
10 uchar code toneh1[15]={0x22,0x56,0x85,0x9a,0xc1,0xe3,0x03,0x10,0x2b,0x42,0x4c,0x60,0x71,0x81,0xff};
11
12 /*******************************************************************************************
13 以下为用户自定义
14 song[]为音乐的音谱。1~7为高音。8为停音节,a~g为低音。
15 length[]为每个音谱的音第。如1/4节拍。1/2节拍 以下为一首名曲“茉莉花”
16 *****************************************************************555**************************/
17 uchar code song[]="335676556558335676556558555356655832353211211321322356755235231feef1223121fee8"; //音谱
-,把你喜欢的乐谱加入就可
18 uchar code length[]="422422442241422422442241444224444142242242244222244242244422222244444422222442"; //音
-长 ;
19 void timer0(void)interrupt 1
20 {
21 1 if(rti!=14)
22 1 {
23 2 BUZZER=!BUZZER; //输出
24 2 TH0=toneh[rti]; //装入音谱
25 2 TL0=toneh1[rti];
26 2 }
27 1 }
28
29 void timerl(void)interrupt 3
30 {
31 1 TH1=0x0c;
32 1 TL1=0xdc; //音长定时值。125毫秒
33 1 m++; //音长计数器
34 1 }
35
36 playc(char ch)
37 {
38 1 int ti;
39 1 switch(ch)
40 1 {
41 2 case'a': ti=0;break;
42 2 case'b': ti=1;break;
43 2 case'c': ti=2;break;
44 2 case'd': ti=3;break;
45 2 case'e': ti=4;break;
46 2 case'f': ti=5;break;
47 2 case'g': ti=6;break;
48 2 case'1': ti=7;break;
49 2 case'2': ti=8;break;
50 2 case'3': ti=9;break;
51 2 case'4': ti=10;break;
52 2 case'5': ti=11;break;
53 2 case'6': ti=12;break;
C51 COMPILER V7.08 123 03/29/2008 13:16:16 PAGE 2
54 2 case'7': ti=13;break;
55 2 case'8': ti=14;break;
56 2 default:ti=50;break;
57 2 }
58 1 return(ti);
59 1 }
60
61
62 void main()
63 {
64 1 m=0;
65 1 TMOD=0X11;
66 1 P1_0=0;
67 1 TH0=toneh[0];
68 1 TL0=toneh1[0];
69 1 TH1=0x0c; //定时器1为125毫秒中断
70 1 TL1=0xdc;
71 1 IP=0x08; //定时器1优先级高。
72 1 EA=1;
73 1 ET0=1;
74 1 ET1=1;
75 1 TR0=1;
76 1 TR1=1;
77 1 i=0;
78 1 while(1)
79 1 {
80 2
81 2 if(song[i]=='\0') //是否播放完毕。
82 2 i=0;
83 2 rti=playc(song[i]); //把音谱加入寄存器
84 2 l=length[i]-0x30; //把音长力入寄存器
85 2 while(m<l); //等待音长结束
86 2 m=0; //音长清归零
87 2 i++;
88 2 }
89 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 366 ----
CONSTANT SIZE = 188 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 8 2
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 + -