单片机按键控制蜂鸣器发声程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
uint8 Count,i;
sbit Speak =P1A2; //蜂鸣器器控制脚
sbit keyl =卩3人2;〃按键控制引脚
sbit key2 =P3A3;
sbit key3 =P3A4;
/* 以下数组是音符编码 */
uint8 code SONG[]
={ 0xff,0x39,0x30,0x33,0x30,0xff,0x30,0x30,0x00,};
void Time0_Init()// 定时器 T0 方式 1 ,定时 10ms {
TMOD = 0x01;
IE = 0x82;
TH0 = 0xDC;
TL0 = 0x00;
void Time0_Int() interrupt 1
{
TH0 = 0xDC;
TL0 = 0x00;
Count++;
}
void delay (uint8 k)// 按键防抖延时
{
uint8 j;
while((k--)!=0)
{
for(j=0;j<125;j++)
{;}
}
}
void Delay_xMs(uint8 x)// 发声延时
{
uint8 i,j;
for(i=0; i { for(j=0; j<3; j++); } } void Play_Song(uint8 i)// 蜂鸣器发声函数{uint8 Temp1,Temp2; uint8 Addr; Count = 0; // 中断计数器清 0 Addr = i *3; while(1) { Temp1 = SONG[Addr++]; if (Temp1 == 0xFF) //休止符 { TR0 = 0; Delay_xMs(100); } else if (Temp1 == 0x00) //歌曲结束符 { return; } else { Temp2 = SONG[Addr++]; TR0 = 1; while(1) { Speak = ~Speak; Delay_xMs(Temp1); if(Temp2 == Count) { Count = 0; break; } } } } }void keyscan (void)// 按键切换声音函数{ if(key1==0) { delay(10); if(key1==0) { O U U CXI A 盖s L M e aj p (0儿@=一 O .L M)6UOSIAe_d o uBosA 雯 (L O Z M 0注()七u 「。① ELL ouroIAI p o > Z .II }O A A 雯)七s L M e o p