程序代码
#include unsigned char obuf1; unsigned char obuf2; unsigned int obuf3; bit stopb; bit flagb;
void delayms(unsigned int k) {
unsigned char p; for(; k > 0; k--)
for(p = 110; p > 0; p--); }
void main(void) {
unsigned char i,j, k;
TMOD=0x02; //定时器T0初始化 TH0=0x06; TL0=0x06;
5
ET0=1;
EA=1; //允许总中断 while(1) { if(P1_0==0) //检测K1按键 { for(k = 0; k < 3; k++){ // 三重循环 P1=0x00; for(i=10;i>0;i--) for(j=248;j>0;j--); if(P1_0==0) { obuf1=0; obuf2=0; obuf3=0; flagb=0; stopb=0; TR0=1; //启动定时器T0,发出\叮咚\声 while(stopb==0); P1=0xff; } delayms(3000); // 延时函数 } } } }
void t0(void) interrupt 1 using 0 { obuf3++; if(obuf3==3000) { obuf3=0; if(flagb==0) { flagb=~flagb; } else { stopb=1; TR0=0; } }
if(flagb==0) {
6
}
} else { }
obuf2++;
if(obuf2==1) { obuf2=0; P1_6=~P1_6; }
obuf1++; if(obuf1==25) { obuf1=0; P1_6=~P1_6; }
3、调试说明
在对系统设计以及实现后,需要进入调试阶段,以检查系统所存在的缺陷,以便排除各种可能出现的不利于系统正常运行的因素。调试本系统主要包括两个步骤:调试控制系统和各个模块是否能正常工作,其中分为底层硬件调试和上层软件的调试。
底层硬件调试和上层软件的调试是不可缺少的调试,这两者可分开调试,其间可以没有联系的调试,之后再整体的调试,看看是否能够达到我们的预期的效果。这样,我们才能及时的发现问题,从而着手的解决每一个问题。
软件调试
程序经KIEL4软件多次编译无误后,下载到单片机中,通过反复的调试,更改单片机的延时时间和输出频率,找到最适合的频率段和效果最明显的音频,使蜂鸣器发出最悦耳的叮咚声
7
硬件调试
本次课设只需要用到单片机最小系统,和一个蜂鸣器电路,电路简单,在工艺实习板子上稍作更改即可使用,在原有的工艺实习板子上,去掉多余的杜邦线和数码管,提高系统的稳定性。尝试下载程序,检查无误,电路可正常使用。 按键的测试
用电表对按键进行测试,当按键的按下,跟按键连接的管脚变为低电平,松开变为高电平。按键没有问题。 声音播放测试
由于声音播放模块电路很简单,只需一个高低电平即可进行测试。在测试中,我将声音播放模块的控制引脚给了单独断开,将其对电源进行试触、发现扬声器有声音传出,这说明了声音播放系统是能正常工作的!
4、设计结果及错误分析
在本次设计中,遇到了很多的问题和困难,由于自己不太擅长软件编程,需要查阅大量的质料,理解语句的意译,不得不得向同学求问,刚开始由于输出700Hz与500Hz的方波,我花了一个多礼拜的时间都无法攻克这个问题,因为频率不对,蜂鸣器发出的叮咚声音不够标准,后来在同学的帮助下,通过不断地调试,终于找到的最适合的频率,
8
四、总结
经过这一段时间的学习,我学到了不少的知识。在这为期不长的一个月里,我发现了要想认真做好一件并非是那么简单的。从一开始的什么也不知道,直到逐渐的对整个系统有个整体的思路,我经历了很对的艰辛。在这段时间内,幸好有老师和同学的耐心指导,我不断的努力,不断的尝试,最终完成了课设,我感觉我在短时间成长了很多很多。
在硬件设计中,我尽量做到硬件系统能够简单而稳定,给软件提供一个良好的编程环境。软件系统的编写的时候,我尽量做到思路的清晰,代码编写得简洁和规范,以使系统能够更好的运作,性能更加稳定,以便达到预期的要求。因时间有限,设计中还有许多需要改进的地方。
在这一段时间的学习中,我也真正认识到实践是检验真理的唯一标准这一句话的真谛。同时通过这次设计,我明白了“书到用时方恨少”。所以,在今后,我会不断的学习,不断的充实我自己!
9