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

📄 tc.c

📁 很有意思的一个单片机程序 用AVR(MEGA16)和BEEP演奏两只老虎 使用了MEGA16的具有PWM功能定时/计数器2 比较输出结果有OCR2管脚输出
💻 C
字号:
/*音谱对照           1    2    3    4    5    6    7
           低音    0x8D 0x7E 0x70 0x69 0x5E 0x53 0x4A
           中音    0x46 0x3E 0x37 0x34 0x2E 0x29 0x25
           高音    0x23 0x1F 0x1B 0x1A 0x17 0x14 0x12*/
          
#define ENABLE_BIT_DEFINITIONS
#include <inavr.h>
#include <ioavr.h>
#include <stdio.h>
#include <iom16.h>
unsigned char __flash twotigersnote[] = 
   {
    0x8D,0x7E,0x70,0x8D,0x8D,0x7E,0x70,0x8D,0x70,0x69,0x5E,0x70,0x69,0x5E,
    0x5E,0x53,0x5E,0x69,0x70,0x8D,0x5E,0x53,0x5E,0x69,0x70,0x8D,
    0x46,0x2E,0x46,0x46,0x2E,0x46,0xFF   
   };
unsigned int __flash twotigerspace[] = 
   {
    2000,2000,2000,2000,2000,2000,2000,2000,2000,2000,4000,2000,2000,4000,
    1000,500,1000,500,2000,2000,1000,500,1000,500,2000,2000,
    2000,2000,4000,2000,2000,4000,0xFF
   };

void timer2_init(void)
{
  TCCR2 = (1<<WGM21)|(1<<COM20)|(1<<CS20)|(1<<CS22);//工作于CTC模式,TCNT2与OCR2匹配是OC2取反,128分频
  TCNT2 = 0x00;
  
}
void Delay(unsigned int ms)
{
    unsigned char j;
    while(ms--)
    {
      j = 255;
      while(j--);
    }
}
void playmusic(unsigned char __flash buffer[],__flash unsigned int delaytime[])
{
  unsigned char __flash *note_p;
  unsigned int __flash *pace_p;
  note_p = buffer;
  pace_p = delaytime;
  DDRD_Bit7 = 1;
  timer2_init();
  while(1)
  {   
  OCR2 = *note_p;
  Delay(*pace_p);
  DDRD_Bit7 = 0;
  Delay(200);
  DDRD_Bit7 = 1;
  note_p++;
  pace_p++;
  if(*note_p == 0xFF)
    break;
  }
}

void main(void)
{
  playmusic(twotigersnote,twotigerspace);
  DDRD_Bit7 = 0;
  while(1);
}

⌨️ 快捷键说明

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