那位大虾给我解释下这个单片机程序吧!!看不懂!!俺是菜鸟!!谢谢了...
发布网友
发布时间:2024-09-29 18:17
我来回答
共3个回答
热心网友
时间:2024-09-29 20:21
这个程序写得有够臭的:
void int0() interrupt 1 //<<<从名字看是外部中断1的,从中断号上看是TIME0的
void delayms(unsigned char a) //<<<最大能接收255,可是调用时有个 delayms(1000);
两个延时函数且体能延多少时间都直接依赖于晶振频率,不知MCU型号和晶振时根本不能知道这些数字到底延时了多少
TMOD&=0x0f;TMOD|=0x01; //<<<啰里啰嗦,初始时TMOD为直接一个:TMOD = 0x01;就完事,
如果TMOD上已设置了值,如T1已设置,那也应当是:
TMOD&=0xf0; TMOD|=0x01;//<<<清低四位,再与1位 保证正确设置T0的模式为1
两个else 有没有都没影响程序流程:
a: p=music_tab[i];
if(p==0x00) { i=0, delayms(1000); goto play;}
else if(p==0xff) { i=i+1;delayms(100),TR0=0; goto a;}
else {m=music_tab[i++], n=music_tab[i++];}
与:
a: p=music_tab[i];
if(p==0x00) { i=0, delayms(1000); goto play;}
if(p==0xff) { i=i+1;delayms(100),TR0=0; goto a;}
m=music_tab[i++], n=music_tab[i++];
流程上有区别吗? 没区别还多写两个else和两个花括号,也没起额外的做用
两个goto,哦,goto play; 和 goto a; a 和 play之间只一个while(1)没有任何其它语句,两个标号完全可以并一起,全goto a 也不有一点差别, 此两处都用continue 替掉了没任何影响。
热心网友
时间:2024-09-29 20:21
sbit sound=P1^5; //51单片机P1.5接音乐播放蜂鸣器。
unsigned char code music_tab[] 音乐的节拍延时,以ox00结尾,
if(p==0x00) { i=0, delayms(1000); goto play;} // 表示播放结束后重新开始循环播放
while(n!=0) sound=~sound,delay(m); //这一句 语法有问题,while(n!=0){ sound=~sound;}
热心网友
时间:2024-09-29 20:21
播放一段音乐的,你具体哪儿不懂?