喇叭的落幕
这几天一直在学习喇叭,其实本来觉得很简单,没想到一些小小的细节让我纠结了好几天。频率的变化及其对电平的变更可以导致喇叭发出不同的声音;以下是某代表程序:消防车的代码:
1 #include< reg52.h >
2 sbit SPK = P1^2;//喇叭端口
3 unsigned char frq;
4
5 void Delay( unsigned char z )
6 {
7 while ( --z ) ; //若为z--则频率会不同
8 }
9
10 void Delayms( unsigned char z )
11 {
12 while ( z-- )
13 {
14 Delay( 245 );
15 Delay( 245 );
16 }
17 }
18
19 void init( );
20
21 void main( )
22 {
23 unsigned int i;
24 init( );
25 while ( 1 )
26 {
27 frq = 0;
28 for ( i = 0; i<60; ++i )//播放1s左右的频率
29 {
30 Delayms( 10 );
31 }
32 frq = 100;
33 for ( i = 0; i<60; ++i )//播放1s左右的频率
34 {
35 Delayms( 10 );
36 }
37 }
38 }
39
40 void init( )
41 {
42 TMOD |= 0x01;
43 EA = 1;
44 ET0 = 1;
45 TR0 = 1;
46 }
47
48 void timer0( ) interrupt 1
49 {
50 TH0 = 0xfe;//重新赋值
51 TL0 = frq;//低8位值在主程序不断累加
52
53 SPK = !SPK;//端口电平取反
54 }