原创 STM8的C语言编程(13)-- 蜂鸣器

2010-8-16 10:02 4100 16 16 分类: MCU/ 嵌入式

                 STM8的C语言编程(13)-- 蜂鸣器


 


蜂鸣器是现在单片机应用系统中很常见的,常用于实现报警功能。为此STM8特别集成了蜂鸣器模块,应用起来非常方便。


在应用蜂鸣器模块时,首先要打开片内的低速RC振荡器(当然也能使用外部的高速时钟),其频率为128KHZ。然后通过设置蜂鸣器控制寄存器BEEP_CSR中的BEEPDIV[4:0]来获取8KHZ的时钟,再通过BEEPSEL最终产生1KHZ或2KHZ或4KHZ的蜂鸣器时钟,最后使能该寄存器中的BEEPEN位,产生蜂鸣器的输出。


下面的实验程序首先初始化低速振荡器,然后启动蜂鸣器,再延时2.5秒,然后关闭蜂鸣器。


同样还是利用ST的开发工具,生成一个汇编程序的框架,然后修改其中的main.c,修改后的代码如下。


 


//  程序描述:启动单片机中的蜂鸣器模块


 


#include "STM8S207C_S.h"


 


// 函数功能:延时函数


// 输入参数:ms -- 要延时的毫秒数,这里假设CPU的主频为2MHZ


// 输出参数:无


// 返 回 值:无


// 备    注:无


void DelayMS(unsigned int ms)


{


  unsigned char i;


  while(ms != 0)


  {


    for(i=0;i<250;i++)


    {


    }


    for(i=0;i<75;i++)


    {


    }


    ms--; 


  }    


}


 


main()


{


  int i;


 


  CLK_ICKR = CLK_ICKR | 0x08;     // 打开芯片内部的低速振荡器LSI


  while((CLK_ICKR & 0x10) == 0);  // 等待振荡器稳定


         


  // 通过设置蜂鸣器控制寄存器,来打开蜂鸣器的功能


  // 蜂鸣器控制寄存器的设置:


  // BEEPDIV[1:0] = 00


  // BEEPDIV[4:0] = 0e


  // BEEPEN       = 1


  // 蜂鸣器的输出频率 = Fls / ( 8 * (BEEPDIV + 2) )= 128K / (8 * 16) = 1K   


  BEEP_CSR = 0x2e;


 


  for(i=0;i<10;i++)


  {


    DelayMS(250);


  }


       


  BEEP_CSR = 0x1e;            // 关闭蜂鸣器


 


  while(1);


}


 


 


                2010-8-16


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
16
关闭 站长推荐上一条 /3 下一条