源码 4 -- 喇叭播放插曲 You
间,保证按键与按键之间能分得清楚
/*********************************************************************************************************************
定时时间 time 的计算:
以 中央 C 为例:频率为 261.6 Hz,就是每秒 261.6 下,倒数就是 每下 1/261.6 s,
换成 us 就是 1,000,000/261.6,每响一次是一个上升沿加一个下降沿,
因此,变换的次数应该是 2 倍,每次变换所花时间是一半,
即:1,000,000/(2*261.6)
**********************************************************************************************************************/
time = (unsigned int)(1000000 / (2 * PIANO_F[PITCH[i]]));
time_h = (65536 - time) / 256;
time_l = (65536 - time) % 256;
TH0 = time_h;// 定时器赋值
TL0 = time_l;
TR0 = 1;// 开 定时器0
/****************************************************************************************************************
如果音高是 0,说明是 八分休止符,关定时器,定时器不驱动喇叭,也就没有声音了
****************************************************************************************************************/
if(PITCH[i] == 0) TR0 = 0;
/********************************************************************************************************
相当重要的延时!节拍全部由它控制,不是很精确,其实用 定时器 1 可能更好
********************************************************************************************************/
Delay_ms(BEAT[i] * 30);
}
TR0 = 0;// 音乐播放完后,关定时器,收尾
/*****************************************************************************************************************
相当重要!没有此语句将导致循环执行 main 函数!
详细讨论参见:http://gaebolg.blog.163.com/blog/static/19826906820122254823928/
*****************************************************************************************************************/
while(1);
}
voidInit_Timer0(void)
{
TMOD = 0x01;// 定时器 0,模式1
EA = 1;// 开 总中断
ET0 = 1;// 开 定时器 0 中断
}
voidTimer0_ISR(void)interrupt1
{
TH0 = time_h;// 重装初值
TL0 = time_l;
SPK = !SPK;// 产生方波,驱动喇叭发声
}
voidDelay(unsigned intt)
{
while(t--);
}
voidDelay_ms(unsigned intt)// 根据测试,可以相当近似的表示 t ms
{
while(t--) {
Delay(245);
Delay(245);
}
}
C51喇叭播 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)