首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

想用瑞萨单片机R8C/25用蜂鸣器写一个容易音乐播放器,隔一秒发出七个音符,写出来却没有预期的效果。请各位大侠多多指教。

2013-11-21 
想用瑞萨单片机R8C/25用蜂鸣器写一个简单音乐播放器,,隔一秒发出七个音符,,,写出来却没有预期的效果。。。请

想用瑞萨单片机R8C/25用蜂鸣器写一个简单音乐播放器,,隔一秒发出七个音符,,,写出来却没有预期的效果。。。请各位大侠多多指教。。
#include "sfr_r825.h"// Definition of the R8C/25 SFR 
#define uchar unsigned char
#define uint unsigned int
uchar BTH0,BTL0;
uchar Time;

#define_Disableintasm("Fclr I")   
#define_Enableintasm("Fset I") 
uchar table[]={0xef,0xd4,189,179,160,142,127};   //七个音符频率表

void delay(unsigned char t)   // 250ms 延时
{
    unsigned char i,j;
unsigned int k;
for(i=0;i<t;i++)
    for(j=0;j<250;j++)
{
for(k=0;k<1000;k++);
}    
tstart_tracr=0;
 }
void Song()    //播放子程序
{
 tra=BTH0;//赋值定时器时间,决定频率
 trapre=BTL0;
 tstart_tracr=1;       //打开定时器
 delay(4); //延时所需要的节拍                      
 }
void main(void)
{

uchar i;

asm("Fclr I");

//系统时钟初始化
prcr=0x01;                          //关闭和时钟相关的保护寄存器,允许修改时钟 
cm13=1;     //XIN-XOUT引脚连接内部起振电路
cm15 =1;     //XIN-XOUT引脚使用高驱动能力
cm05=0;        //开始振荡
asm("NOP\nNOP\nNOP\nNOP");
asm("NOP\nNOP\nNOP\nNOP");
ocd2=0x00;    //使用主时钟作为系统时钟 
 cm16=0;cm17=0;cm06=0;           //f1
prcr=0;                             //打开保护寄存器

pd1_1=1;
p1=0xfd;
tstart_tracr = 0;//停止计数
while(tcstf_tracr != 0);//等待计数完成
traic = 0x00;//屏蔽RA中断
tstop_tracr = 1;//强制停止计数
tramr = 0x00;//定时模式 f1分频
traic = 0x04;//开启RA中断 优先级2
asm("Fset I");
while(1)
{
i=0;
while(i<8){

           BTH0=3;//音符频率高字节
            BTL0=table[i]-1;//音符频率低字节

            Song();

}

}

}




#pragma INTERRUPT TimerRA (vect=22)//中断翻转蜂鸣器电平
void TimerRA(void){
tstart_tracr = 0;
    p1_1=~p1_1;

tra=BTH0;
trapre=BTL0;
tstart_tracr =1;
}
瑞萨R8C 定时器A 中断
[解决办法]

引用:
while语句错了。。改成for..还有就是蜂鸣器的硬件局限也有问题,,

蜂鸣器只能发一个声音,我们有一次仅仅是想改蜂鸣器声音大小(需要区别明显但又不像是没电那种嘶哑声)都费了老大的劲

热点排行