标题:
使用中断,蜂鸣器实现音乐功能,为什么我的FrepSelect的值在数组中无法改变
[打印本页]
作者:
1322804412
时间:
2022-12-18 13:14
标题:
使用中断,蜂鸣器实现音乐功能,为什么我的FrepSelect的值在数组中无法改变
#include <REGX51.H>
#include "Timer0.h"
void delay (int m);
sbit Beep=P3^6;
unsigned int code FrepTable[]={
63628,63731,63835,63928,64021,64103,64185,64260,64331,64400,64463,64528,
64580,64633,64684,64732,64777,64820,64860,64898,64934,64968,65000,65030,
65058,65085,65110,65134,65157,65178,65198,65217,65235,65252,65268,65283};
unsigned char Music[]={12,12,19,19,21,21,19,17,17,16,16,14,14,12};
unsigned int FrepSelect;
void main()
{
Timer0Init();
while(1)
{[url=]U[/url]
FrepSelect++;
delay(500);
}
}
void Timer0_Routine() interrupt 1
{
TL0=FrepTable[FrepSelect]%256;
TH0=FrepTable[FrepSelect]/256;
Beep=!Beep;
}
void delay (int m)
{
unsigned char i,j;
for (i=0;i<m;i++)
for (j=0;j<253;j++);
}
作者:
人中狼
时间:
2022-12-18 22:20
FrepSelect没赋初值
作者:
wulin
时间:
2022-12-19 07:48
延时函数使用的数据类型不当,一旦实参m大于255就导致永远出不了for (i=0;i<m;i++)循环。
#include <REG51.H>
//#include "Timer0.h"
void delay (int m);
sbit Beep=P3^6;
unsigned int code FrepTable[]={
63628,63731,63835,63928,64021,64103,64185,64260,64331,64400,64463,64528,
64580,64633,64684,64732,64777,64820,64860,64898,64934,64968,65000,65030,
65058,65085,65110,65134,65157,65178,65198,65217,65235,65252,65268,65283};
unsigned char Music[]={12,12,19,19,21,21,19,17,17,16,16,14,14,12};
unsigned int FrepSelect;
void Timer0Init(void)
{
TMOD = 0x01;
TH0 = 0;
TL0 = 0;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void main()
{
Timer0Init();
while(1)
{//[url=]U[/url]
FrepSelect++;
delay(500);
}
}
void Timer0_Routine() interrupt 1
{
TL0=FrepTable[FrepSelect]%256;
TH0=FrepTable[FrepSelect]/256;
Beep=~Beep;
}
void delay (int m)
{
int i,j;
for (i=0;i<m;i++)
for (j=0;j<253;j++);
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1