那位大虾给我解释下这个单片机程序吧!!看不懂!!俺是菜鸟!!谢谢了...

发布网友 发布时间:2小时前

我来回答

3个回答

热心网友 时间:2分钟前

这个程序写得有够臭的:
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 替掉了没任何影响。

热心网友 时间:2分钟前

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;}

热心网友 时间:2分钟前

播放一段音乐的,你具体哪儿不懂?

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com