【单片机实验】扬声器实验

实验二 扬声器实验
一、实验目的
1.掌握扬声器的硬件电路;
2.掌握扬声器的程序编写和如何让扬声器发出不同的声音。
二、实验说明
LM386引脚说明如图2-1 LM386引脚介绍

LM386是一种音频集成功放,具有自身功耗低、电压增益可调整、电源电压范围大、外接元件少和总谐波失真小等优点的功率放大器,广泛应用于录音机和收音机之中。
引脚2为反相输入端,3为同相输入端;引脚5为输出端;引脚6和4分别为电源和地;引脚1和8为电压增益设定端;使用时在引脚7和地
之间接旁路电容,通常取10μF。


图2-1 LM386引脚介绍

本实验是利用单片机控制扬声器产生七音符,单片机STC12C5A60S2的PCA/PWM时钟输出方式输出高速脉冲,脉冲经放大滤波后,驱动扬声器发声。声音的频率由定时常数决定,声音的长短由定时器T0控制。实验只给出7个音频的程序。
三、实验内容及步骤
内容:
单片机最小系统单元的P1.3口发出高速脉冲,用信号线连接P1.3口与语音系统单元的VIN口,程序功能使扬声器循环发出七音符,同时利用可调电阻调节声音的大小。
步骤:
1、 根据硬件连接电路,编写程序并编译生成*.hex文件;
2、 打开实验箱电源;
3、 参照STC12C5A60S2下载说明中STC_ISP软件使用说明,给单片机下载程序;
4、 用信号线连接单片机最小系统单元的P1.3与语音系统单元的VIN口;
5、 打开语音系统单元开关;
6、听到扬声器会循环发出七音符,同时利用可调电阻器调节声音的响度。若结果不正确,请修改该程序,重复以上操作。

 1 #include <reg51.h>
 2 
 3 sfr CCON = 0xD8;
 4 sbit CCF0 = CCON^0;
 5 sbit CCF1 = CCON^1;
 6 sfr CMOD = 0xD9;
 7 sfr CL = 0xE9;
 8 sfr CH = 0xF9;
 9 sfr CCAPM0 = 0xDA;
10 sfr CCAP0L = 0xEA;
11 sfr CCAP0H = 0xFA;
12 sbit CR = CCON^6;
13 sbit CF = CCON^7;
14 
15 unsigned char TABLE[]={
16      0x1A,0x29,0x47,0x25,0x8F,0x20,0x0CC,0x1E,0x81,0x1B,0x0EA,0x17,0x9F,0x15
17 };                                                                            
18 
19 unsigned char time0_cnt;
20 unsigned char data_cnt; //取值为0~6,其中0代表 DO音.
21 unsigned int temp;        // 用来装载间隔时间16位.
22 
23 void main( void )
24 {
25     SP = 0x64;
26     time0_cnt = 15;
27     temp = 0x291A;
28     TMOD = 1;
29 
30     CCON = 0;
31     CL = 0 ;
32     CH = 0 ;
33     CMOD = 2;
34 
35     CCAP0L = 0x1A;
36     CCAP0H = 0x29;
37     CCAPM0 = 0x4D;
38     data_cnt = 1;
39 
40     CR = 1; 
41     EA = 1 ;
42     ET0 = 1;
43     TR0 = 1; 
44 
45     while(1);
46 }
47 
48 void T0_int(void) interrupt 1 
49 {
50     time0_cnt -- ;
51     
52     if( time0_cnt == 0 ) {
53          time0_cnt = 15;
54 
55         data_cnt = ( data_cnt + 1 ) % 7 ; 
56         temp = TABLE[data_cnt*2+1];
57         temp <<= 8 ;
58         temp += TABLE[data_cnt*2];
59     }
60 }
61 
62 void PCA_INT(void) interrupt 7
63 {
64     unsigned int temp1 ; 
65     CCF0 = 0; 
66 
67     temp1 = (CCAP0H << 8);
68     temp1 =  temp1 + CCAP0L  ;
69 
70     temp1 += temp;
71 
72     CCAP0L = temp1&0xff;
73     CCAP0H = ((temp1&0xff00)>>8);
74 }
View Code

猜你喜欢

转载自www.cnblogs.com/Osea/p/11083130.html