2395|0

9

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

大家看下这个 到底哪错了 [复制链接]

#include
#include
#define         F_CPU        7372800                                                // 单片机主频为7.3728MHz,用于延时子程序和计算定时器初始值
#include
#include
#include
#include                                      //中断信号头文件

//***********************************************************************
//                        定义变量区
//***********************************************************************


#define uchar           unsigned char
#define uint            unsigned int
#define ulong           unsigned long

#define Data_IO                PORTB                //音频输出口
#define Data_DDR        DDRB                 

uint t[9]={0,956,865,759,716,638,568,506,470};
uint d[9]={0,105,116,132,140,157,176,198,209};

uchar music[]={5,2,8,2,5,2,4,2,3,2,2,2,1,4,1,2,1,2,2,2,3,2,3,2,1,2,3,2,4,2,5,8};
uchar note_n;
uint int_n;
uint play_on;

//***********************************************************************
//                        程序初始化
//***********************************************************************

void system_init()
{
    Data_IO=0x20;                                                             //数据口为输出
    Data_DDR=0xFF;
}


//*************************************************************************
//                        定时器1初始化子程序
//*************************************************************************

void timer1_init()                                 //定时器初始化
{
  TCCR1A=0x40;                                     //定时器工作方式
  TCCR1B=0x11;                                    
  TIFR=0x10;                                       //清中断标志位
  TIMSK=0x10;                                      //使能定时器0溢出中断
}

//*************************************************************************
//                定时器1中断服务子程序
//*************************************************************************
ISR(SIG_OUTPUT_COMPARE1A)                                   //中断服务程序
{
  if(!play_on)           //是否播放完
  {
    note_n=0;
        int_n=1;
        play_on=1;
  }
  else
  {
    if(--int_n==0)
        {
           TCCR1B=0X10;
           if(note_n<32)
           {
             OCR1A=t[music[note_n]];
                 int_n=d[music[note_n]];
                 note_n++;
                 int_n=int_n*music[note_n];
                 note_n++;
                 TCCR1B=0x11;
                }
                else
                play_on=0;
        }          
}


//*************************************************************************
//                主程序
//*************************************************************************

int main(void)
{
  system_init();                             //系统初始化
  timer1_init();                             //定时器0初始化,完成定时器相关配置
  SREG|=0x80;                                //开启全局中断
  while(1)
  {
  }
}
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表