STM8S蜂鸣器

STM8S蜂鸣器模块的使用:

蜂鸣器的功能:

外部晶体时钟的HSE高速的时钟源不管输入到预分频器前是多少MHz,最终的经过的预分频器的得到的时钟的频率都是128KHz。然后在同过选项字节CKAWUSEL选择是LSI RC 128KHz还是HSE分频后得到的128KHz。在这里可以将得到的128KHz的时钟信号通过AWU_CSR寄存器的MSR链接到TIM3定时器的输入捕捉中断,来测量得到的LSI 128KHz时钟是否准确。

并将得到的128KHz的频率写入BEEP_CSR寄存器BEEPDIV 5位的蜂鸣器程序计数器BEEPDIV在分频得到大约8KHz的频率。寄存器BEEP_CSR中的BEEPEN位用于使能BEEP输出。

如何操作蜂鸣器模块:

蜂鸣器的控制寄存器:

特别的需要注意使用蜂鸣器的时候需要更改选项字节,因为PD4引脚和beep引脚是一个复用功能的引脚,默认情况下使用的是正常的GPIO输入和输出。

自动唤醒:活跃停机直白的说就是在你睡觉的时候有一个闹钟定时的将你叫醒。

自动唤醒模块的功能:

自动唤醒模块的编程向导:

自动唤醒的时间间隔:

 

#include <STM8S208R.h>

const unsigned char  table0[]={0x3f,0x06,0x5b,0x4f,0x66,    
						                   0x6d,0x7d,0x07,0x7f,0x6f};   // 共阴码表无点
const unsigned char  table1[]= {0xbf,0x86,0xdb,0xcf,0xe6,   
																0xed,0xfd,0x87,0xff,0xef};  // 共阴码表有点
 												
unsigned char TIME;                //定义输出时间变量

void Delay_Ms(unsigned int ms);
void Delay_Us(unsigned char t);
void Seg_Init(void);
void Display(unsigned int num);
void Beep_Init(void);

/************主函数************/
main()
{
  CLK_SWCR = 0x02;     //使能时钟切换
  CLK_SWR  = 0xB4;     //时钟源为HSE 0xB4 HSI 0xE1 LSI 0xD2
	
 	Seg_Init();          //数码管驱动初始化
	Beep_Init();         //BEEP初始化
		
	while(1)
	{
		TIME++;
		if(TIME>50)
		{
			BEEP_CSR = 0x0e; //暂停蜂鸣器
			Display(0);      //数码管显示 0000
		}
		else
		{
			BEEP_CSR = 0x2e; //启动蜂鸣器 BEEP_CSR=0010 1110e
			Display(1111);   //数码管显示 1111   
		}
	}                              
} 
/************数码管初始化函数************/
void Seg_Init(void)
{
  PB_DDR  = 0xFF;    // 将PB口设置成推挽输出
  PB_CR1  = 0xFF;              
  PB_CR2  = 0x00;

	PF_DDR |= 0xF0;    // 将PF口高四位设置成推挽输出
  PF_CR1 |= 0xF0;              
  PF_CR2 &= 0x00;
	
	PE_DDR |= 0x01;    // 将PE0设置成推挽输出 SEGEN
  PE_CR1 |= 0x01;              
  PE_CR2 &= 0x00;
	
  PE_ODR &= 0xFE;    // PE0=0,使能数码管
}
/************延时MS函数************/
void Delay_Ms(unsigned int ms)
{
	unsigned int x,y;
	for(x=ms;x>0;x--)
	{
		for(y=300;y>0;y--)
		{
		}
	}
}
/************延时uS函数************/
void Delay_Us(unsigned char t)
{
	unsigned char m=t;
	while(m--);
}
/************显示函数************/
void Display(unsigned int num)
{
  unsigned char GeWei,ShiWei,BaiWei,QianWei; 

	GeWei = num%10;       
	ShiWei = num%100/10;
	BaiWei = num%1000/100; 
	QianWei = num/1000;      

	PB_ODR = table0[GeWei];
	PF_ODR = 0xE0;
	Delay_Ms(3);
	PB_ODR = 0;
	PF_ODR = 0xF0;
	Delay_Ms(1);

	PB_ODR = table0[ShiWei];
	PF_ODR = 0xD0;
	Delay_Ms(3);
	PB_ODR = 0;
	PF_ODR = 0xF0;
	Delay_Ms(1);

	PB_ODR = table0[BaiWei];
	PF_ODR = 0xB0;
	Delay_Ms(3);
	PB_ODR = 0;
	PF_ODR = 0xF0;
	Delay_Ms(1);

	PB_ODR = table0[QianWei];
	PF_ODR = 0x70;
	Delay_Ms(3);
	PB_ODR = 0;
	PF_ODR = 0xF0;
	Delay_Ms(1);
}
/************BEEP初始化函数************/
void Beep_Init(void)
{
	PD_DDR  = 0x10;    // 将PD4口设置成推挽输出
  PD_CR1  = 0x10;              
  PD_CR2  = 0x00;
	
  BEEP_CSR = 0x32;  //BEEP_CSR=0000 1110   输出频率=Fls/(8*BEEPDIV)
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值