日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

歷史上的今天

今天是:2025年01月02日(星期四)

正在發(fā)生

2020年01月02日 | 基于STM8單片機(jī)的蜂鳴器和弦聲音的設(shè)計(jì)

發(fā)布者:凌晨2點(diǎn)369 來源: eefocus關(guān)鍵字:STM8  單片機(jī)  蜂鳴器  弦聲音 手機(jī)看文章 掃描二維碼
隨時隨地手機(jī)看文章

   1. 實(shí)驗(yàn)功能:本實(shí)驗(yàn)的功能是利用STM8單片機(jī)控制蜂鳴器發(fā)出和弦聲音。
   2. 電路原理:按鍵接PB2口,蜂鳴器接PD4口,當(dāng)按下按鍵時STM8利用TIM2的PWM模式驅(qū)動蜂鳴器就發(fā)出“123”的和弦聲音。
   3. 采用IAR FOR STM8開發(fā)環(huán)境,外部晶振16M。
   4. 程序代碼如下:

/********************************************************************************

* 文件名稱:STM8_Buzzer.c

* 開發(fā)環(huán)境:IAR FOR STM8 1.20

********************************************************************************/
#include "iostm8s105s4.h"

#define uchar                              unsigned char
#define uint                                  unsigned int

uchar SysDeal_Flag = 0;
uchar Sys_Count = 0;
uchar SendData_Flag =0;
uchar K_Flag = 0;
#define Sys_Time                      99 //100*4us = 400us
#define Sys_Prescaler             6 //2^6 = 64

#define Key_In_Power             PB_IDR_IDR2
#define Key_Delay                    10
uchar Key_In = 0;
uchar Key_Value = 0;
uchar Key_Flag = 0;

#define BELL_PWM1           640 //320us
#define BELL_PWM2           564 //282us
#define BELL_PWM3           540 //270us
#define BELL_PWM4           460 //230us
#define BELL_PWM5           408 //204us
#define Buzzer_Stop()         (TIM2_CR1 = 0x00)
#define BELL_MODE2         0
uchar Buz_Time = 0;
uchar Buz_State = 0;
uchar Buz_Mode = 0;
uchar Buz_Start = 0;
const uint BUZ_PWMTAB[][11]=  
{
  {BELL_PWM3,BELL_PWM3, BELL_PWM4,BELL_PWM4, BELL_PWM5,BELL_PWM5, 0xff,0xff,0xff,0xff,0xff}
};
const uchar BUZ_TIMETAB[][11]=

  {8,10,6,10,6,20,0xff,0xff,0xff,0xff,0xff}
};


void Delay_ms( uint ms )

  uint i,j;
  for( j=0; j  { 
    for( i=0; i<1000; i++ )
    {;} 
  }
}

void CLK_Init(void)
{
  CLK_ECKR=0x03;//外部時鐘寄存器 外部時鐘準(zhǔn)備就緒,外部時鐘開
  CLK_SWCR=0x02;//切換控制寄存器 使能切換機(jī)制
  CLK_SWR=0xB4;//主時鐘切換寄存器 選擇HSE為主時鐘源*/

  while (!(CLK_SWCR & 0x08));  
  CLK_CSSR=0x01;//時鐘安全系統(tǒng)寄存器    
}

void SysClk_Init(void)

  asm("sim");
  TIM4_IER = 0x00; //禁止中斷
  TIM4_EGR = 0x01; //允許產(chǎn)生更新事件
  TIM4_PSCR = Sys_Prescaler;
  TIM4_ARR = Sys_Time;
  TIM4_CNTR = Sys_Time;
                        //定時周期= 400us
  TIM4_CR1 = 0x01;
  TIM4_IER = 0x01;
  asm("rim");
}

#pragma vector = TIM4_OVR_UIF_vector
__interrupt void TIM4_OVR_UIF(void)

  TIM4_SR = 0x00;
  Sys_Count ++;
//---------------------------------------
  if( Sys_Count % 5 == 1 )  //2ms
  { 
    SysDeal_Flag = 1; 
  }
  else if(Sys_Count  == 5)
  {
    SendData_Flag =1;
  }
  else if(Sys_Count >= 15)
  {
    Sys_Count = 0;
  }
  else
  { 
    K_Flag = 1;        
  }  
}

void Buzzer_Init(void)

  PD_DDR |= 0x90;           // 配置PD4方向?yàn)檩敵?br/>  PD_CR1 |= 0x90;           // 設(shè)置PD4推挽輸出
  PD_CR2 &= 0x6f;
  //------------------------------------
  TIM2_PSCR = 3;            //8分頻。f=16m/8=2m----0.5us
  TIM2_CCMR1 = 0x70;        // PWM 模式 2
  TIM2_CCER1 = 0x03;        // CC1配置為輸出
}

void Buzzer_Pwm(uint timenum)

  TIM2_ARRH = (uchar)(timenum>>8);
  TIM2_ARRL = (uchar)(timenum);
  TIM2_CCR1H = (uchar)(timenum>>9);
  TIM2_CCR1L = (uchar)(timenum>>1);
  TIM2_CR1 = 0x01;          // 計(jì)數(shù)器使能,開始計(jì)數(shù)
}

void Bell_DealFun(void)

  static uchar index = 0;
  switch( Buz_State )
  { 
  case 0: 
         Buz_Time = 0; 
         Buzzer_Stop(); 
         index = 0;
         if( Buz_Start == 1 )
         { 
           Buz_State ++; 
           Buzzer_Pwm( BUZ_PWMTAB[Buz_Mode][index] );
         }
         break;
  case 1: 
         Buz_Time++;
         if( Buz_Time >= BUZ_TIMETAB[Buz_Mode][index] )
         { 
           Buz_Time = 0; 
           Buz_State = 2; 
           index ++;
           if( BUZ_TIMETAB[Buz_Mode][index] == 0xff )
           { 
             Buz_State = 0; 
             Buzzer_Stop(); 
             Buz_Start = 0; 
           }
             else
             { 
               Buzzer_Pwm( BUZ_PWMTAB[Buz_Mode][index] ); 
             }
         }
         break;
  case 2: 
         Buz_Time++;
         if( Buz_Time >= BUZ_TIMETAB[Buz_Mode][index] )
         { 
           Buz_Time = 0; 
           Buz_State = 1; 
           index ++;
           if( BUZ_TIMETAB[Buz_Mode][index] == 0xff )
           { 
             Buz_State = 0; 
             Buzzer_Stop();
             Buz_Start = 0;
           }
           else
           { 
             Buzzer_Pwm( BUZ_PWMTAB[Buz_Mode][index] );
           }
         }
         break;
  default: 
         Buz_State = 0; 
         Buz_Time = 0; 
         index = 0;
         break;
  }
}

void Buzzer_Start(uchar mode)

  if( Buz_Start == 0 )
  { 
    Buz_Mode = mode; 
    Buz_Start = 1; 
  }
}


void Get_Key(void)
{
  Key_In = 0;
  if(!Key_In_Power)
  {
    Key_In |= 0x01;
  }
}

uchar Scan_Key(void)

  static uchar Key_Task=0,Key_Count=0;
  switch( Key_Task )
  { 
  case 0: 
          if( Key_In != 0 )
          { 
            Key_Task = 1; 
            Key_Count = 0; 
          } 
       break;
  case 1: 
          Key_Count++;
          if( Key_Count >= Key_Delay )
          { 
            Key_Task = 2; 
            Key_Count = 0; 
          }
          break;
  case 2: 
          if( Key_In != 0 )
          { 
            Key_Task = 3; 
            Key_Count = 0; 
            Key_Value = Key_In; 
            return(1); 
          }
          else
          { 
            Key_Task = 0; 
          }
          break;
  case 3: 
          if( Key_In == 0 )
          { 
            Key_Task = 0; 
            Key_Count = 0; 
          } 
          break;
  default: 
          Key_Task = 0; 
          Key_Count = 0; 
          break;
  }   
  return(0);
}

[1] [2]
關(guān)鍵字:STM8  單片機(jī)  蜂鳴器  弦聲音 引用地址:基于STM8單片機(jī)的蜂鳴器和弦聲音的設(shè)計(jì)

上一篇:STM8學(xué)習(xí)筆記---利用UID碼實(shí)現(xiàn)開機(jī)產(chǎn)生隨機(jī)數(shù)
下一篇:STM8學(xué)習(xí)筆記---如何在程序中確定寄存器名稱

推薦閱讀

? ? 最強(qiáng)桌面一體機(jī)iMac Pro已經(jīng)發(fā)售了,但是你會好奇這款三萬多起步的電腦內(nèi)部么?雖然配置我們已經(jīng)知道,但是內(nèi)部設(shè)計(jì)你清楚么?  帶著這些疑問,國外的升級公司OWC發(fā)布了iMac Pro的拆機(jī)過程,如果你有iMac Pro不建議你做任何模仿,即使是升級內(nèi)存與硬盤空間,請將這些工作都交給天才吧的工程師,因?yàn)椴饳C(jī)有著極大的風(fēng)險(包括屏幕碎裂、劃傷手...
SK Innovation宣布將在CES2019上推出Flexible Cover Window,這是柔性顯示的核心材料。SK Innovation柔性蓋板預(yù)計(jì)會受到很多人關(guān)注,因?yàn)槿藗儗?yīng)用于智能手機(jī)、筆記本電腦、平板電腦和全球其他產(chǎn)品的柔性顯示器越來越感興趣。SK Innovation于2006年開始開發(fā)聚酰亞胺薄膜技術(shù)。SK Innovation還開發(fā)了特殊的硬涂層技術(shù)和功能性涂層技術(shù),以防止污染,...
使用的51單片機(jī)作為主控芯片,兩個51單片機(jī)通過24L01通信,一個檢測吊瓶滴液的速度,如果太快太慢或者不滴液都會報(bào)警,并發(fā)送到主機(jī),輸液者也可以主動通過按鍵呼叫主機(jī),叢機(jī)用1602顯示,主機(jī)用12864顯示。 Altium Designer畫的原理圖和PCB圖如下: 單片機(jī)源程序如下:#include <reg52.h>#include <intrins.h>#include "keys.h"#include "24L01.h"#in...
據(jù)digitimes報(bào)道,業(yè)內(nèi)人士透露,臺積電和三星在各自3nm制程技術(shù)的開發(fā)過程中都遇到了不同但關(guān)鍵的瓶頸。報(bào)道稱,臺積電和三星因此將不得不推遲3nm制程工藝的開發(fā)進(jìn)度。臺積電董事長劉德音此前表示,臺積電今年?duì)I收持續(xù)創(chuàng)新高,在3nm領(lǐng)先布局,于南科的累計(jì)投資將超過2萬億元新臺幣(下同),目標(biāo)是3nm量產(chǎn)時, 12英寸晶圓月產(chǎn)能超過60萬片。臺積電規(guī)劃,...

史海拾趣

小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved