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


    实验二 扬声器实验
    一、实验目的
    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
  • 相关阅读:
    Linux makefile 教程 很具体,且易懂
    工作流技术学习
    23种设计模式(5):原型模式
    NETSH WINSOCK RESET这条命令的含义和作用?
    OpenGL中shader使用
    【我所認知的BIOS】—&gt;ADU.exe
    socket通信简单介绍
    Android开发之合并文件的几种方式
    Python 单词字母顺序不变且所有倒排
    VC2010 Working Directory
  • 原文地址:https://www.cnblogs.com/Osea/p/11083130.html
Copyright © 2020-2023  润新知