微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > AVR单片机学习程序(音乐合成)

AVR单片机学习程序(音乐合成)

时间:10-23 来源:互联网 点击:

  • };

    //---------------------节拍表------------------------------------------------
    __flash uchar time[]={
    40,40,40,40,160,40,40,40,40,160,
    40,40,40,40,40,40,80,40,40,40,40,160,40,40,40,40,120,20,20,
    40,40,40,40,160,40,40,40,40,40,40,80,40,80,40,160,
    40,40,40,40,120,20,20,40,40,40,40,160,40,40,40,40,40,40,80,
    40,40,40,40,160,40,40,40,40,160,40,40,40,40,80,80,
    40,40,40,40,40,40,80,40,80,20,20,160,
    40,40,40,40,160,40,40,40,40,160,
    40,40,40,40,40,40,80,40,40,40,40,160,40,40,40,40,120,20,20,
    40,40,40,40,160,40,40,40,40,40,40,80,40,80,40,160,
    //40,40,40,40,120,20,20,40,40,40,40,160,40,40,40,40,40,40,80,
    //40,40,40,40,160,40,40,40,40,160,40,40,40,40,80,80,
    //40,40,40,40,40,40,80,40,80,20,20,160,
    40,40,40,40,120,20,20,40,40,40,40,160,40,40,40,40,40,40,80,
    40,40,40,40,160,40,40,40,40,160,40,40,40,40,80,80,
    40,40,40,40,40,40,80,40,80,20,20,160,
    40,40,50,55,60,65,240,40,80,20,20,160,200,//198个

    120,20,20,80,40,40,40,80,20,20,200,40,40,40,40,40,40,40,160,40,
    40,40,40,40,40,40,40,60,40,80,40,40,40,40,40,40,40,40,255 ,120,
    40,80,40,40,40,40,40,40,160,40,40,40,40,40,20,20,40,40,240,40,
    40,120,40,80,40,20,20,40,40,20,20,20,20,160,40,40,40,40,40,20,
    20,40,20,20,255,40,40,40,40,40,40,40,40,250,//96个
    120,20,20,80,40,40,40,80,20,20,200,40,40,40,40,40,40,40,160,40,
    40,40,40,40,40,40,40,60,40,80,40,40,40,40,40,40,40,40,255 ,120,
    40,80,40,40,40,40,40,40,160,40,40,40,40,40,20,20,40,40,240,40,
    40,120,40,80,40,20,20,40,40,20,20,20,20,160,40,40,40,40,40,20,
    20,40,20,20,255,40,40,40,40,40,40,40,40,250,255,

    60,20,80,20,20,20,20,80,40,40,40,40,160,60,20,40,40,40,40,80,
    40,40,40,40,160,40,20,20,40,40,40,40,80,40,20,20,40,40,40,40,
    80,60,20,40,40,40,40,80,40,40,40,40,160,60,20,40,40,40,40,80,
    120,40,80,80,160,200,//66个

    20,10,10,20,20,20,10,10,20,20,120,20,20,30,10,30,10,20,10,10,
    20,20,160,20,20,20,20,20,20,40,20,20,20,20,20,20,40,30,10,20,
    20,20,20,40,30,10,20,20,20,10,10,20,20,160,20,10,10,20,20,20,
    10,10,20,20,120,20,20,20,20,20,20,20,10,10,20,20,160,20,20,20,
    20,20,20,40,20,20,20,20,20,20,40,30,10,20,20,20,20,40,30,10,
    20,20,20,10,10,20,20,160,40,20,20,20,10,10,20,20,120,20,20,60,
    20,20,10,10,20,20,160,30,10,20,20,20,20,40,30,10,30,10,20,20,
    40,40,20,20,40,20,20,80,60,20,255,40,//153个
    30,10,20,20,20,20,20,20,40,20,20,40,20,20,40,20,20,20,20,20,20,20,
    20,40,40,20,20,40,20,20,20,20,20,10,10,40,40,80,
    40,20,20,20,10,10,20,20,120,20,20,60,
    20,20,10,10,20,20,160,30,10,20,20,20,20,40,30,10,30,10,20,20,
    40,40,20,20,40,20,20,80,60,20,255,
    20,20,10,10,20,20,160,30,10,20,20,20,20,40,30,10,30,10,20,20,
    40,40,20,20,40,20,20,80,60,20,255,
    };
    //===================延时MS子程序===========================================
    void delayms(uint m)
    {
    uint i,j;
    for(i=0;im;i++)
    {
    for(j=0;j10000;j++);
    }
    }
    //==============IO初始化=========================
    void IO_init(void)
    {
    DDRA = 0xff;
    PORTA = 0XFF;
    DDRB = 0xff;
    DDRC = 0xff;
    DDRD = 0xff;
    }
    //==============定时器T0初始化====================
    void timer0_init(void)
    {
    TCCR0 = 0x0B; //64分频
    TCNT0 = 0x00; //计数器清0
    OCR0 = 1; //1*8/8M=8uS
    TIMSK |=0x02; //使能OCIE0
    TIFR |=0x02; //清OCIF0中断标识位
    }
    //==============使能全局中断======================
    void Interrupt_init()
    {
    SREG|=0x80;
    }
    //==============初始化============================
    void init(void)
    {
    IO_init();
    timer0_init();
    Interrupt_init();//使能全局中断
    }
    //===============主函数===========================
    void main()
    {
    init();
    while(1)
    {
    for(x=0;x820;x++)
    {
    a=yin[x];
    if(a==0){DDRD=0x00;}
    else {DDRD=0xFF;OCR0=a;}
    a=time[x];
    delayms(a);
    DDRD=0x00;
    delayms(1);
    }
    }
    }
    //============定时器T0中断服务子程序===============
    #pragma interrupt_handler Timer0_Interrupt:20
    void Timer0_Interrupt(void)
    {
    TIFR |=0x02;
    TCNT0 =0x00;
    PORTD^=0x80; //PD7输出音乐
    }

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top