⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 STM8S105S4程序
💻 C
字号:
/******************** 2011电子科技协会 ********************
;名称 :蜂鸣器    
;作者 : 郑品洪
;日期 : 07/25/2011
;描述 : 利用定时器产生
;***********************************************************/
#include <stm8s105s4.h>
#define uchar unsigned char 
_Bool beep @PD_ODR:4;
uchar t2,t3;
void init(void)
{
	PD_DDR=0X10;
	PD_CR1=0X10;       //连接蜂鸣器的IO口初始化
	PD_CR2=0X00;
	
	
	PD_ODR|=0x10;

	TIM2_EGR=0X01;       //允许产生更新事件
	TIM2_PSCR=0X01;     //分频,使频率为1MHz
        
	TIM2_ARRH=0XC3;     //更新后计数器的值
	TIM2_ARRL=0X50;     //定时50ms,用于控制发声时间
        
	TIM2_CR1=0X05;      //允许定时器工作
	TIM2_IER=0X01;     //允许更新中断
	
	
	TIM3_EGR=0X01;       //允许产生更新事件
	TIM3_PSCR=0X01;     //分频,使频率为1MHz
        
	TIM3_ARRH=0X00;     //更新后计数器的值
	TIM3_ARRL=0Xfa;     //这里定时0.25ms,用于产生所需的频率
        
	TIM3_CR1=0X05;      //允许定时器工作
	TIM3_IER=0X01;     //允许更新中断
	
	_asm("rim");       //汇编语句,启动定时器

}
void delay(uchar s)
{
	uchar i;
	for(s;s>0;s--)
	  for(i=0;i<250;i++);
}
void main()
{
	init();
	while(1)
  {
		if(t3%2==0)            //前一秒产生2KHz频率的声音
		  beep=1;              //定时器3时间0.25ms,一个周期0.5ms,故频率为2K
		else
		  beep=0;
			
		while(t2>=20&&t2<40)   //第二秒产生1KHz频率声音
	  {
		  if(t3%4<2)
		    beep=1;
		  else
		    beep=0;
		}
		
		while(t2>=40&&t2<60)    //第三秒产生500Hz频率声音
	  {
		  if(t3%8<4)
		   beep=1;
		  else
			beep=0;
		}
		if(t2>=60) 
		  t2=0;  
    if(t3==8)
      t3=0;		
	}
}

@far @interrupt void TIM2_UP_IRQHandler (void)      //定时器2中断函数

{ 
   TIM2_SR1 = 0x00;                                 //清零TIM2_SR1
     t2++;
}

@far @interrupt void TIM3_UP_IRQHandler (void)      //定时器三中断函数

{
   TIM3_SR1 = 0x00;                                 //清零TIM2_SR1
     t3++;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -