北京治白癜风到哪家医院最好 http://www.xftobacco.com/m/前面我们用了快一周的时间不断更新制作过程,实物终于打造完成了,到了最后阶段——给单片机编写程序。这里采用c语言编写单片机程序。在编程之前先来分析一下程序的组成部分:程序结构:用一张图片来介绍程序的详细结构:单片机头文件:由于STC15系列单片机相对于传统51单片机多了很多寄存器和功能,因此最好获取一个头文件,然后在主程序main.c里声明一下,就可以了。在官方软件STC-ISP里面找到“头文件”选项,选择正确的系列,点击“保存文件”,保存到主程序文件所在文件夹里。定时器初装值对应频率表格:开始制作了一个表格,后来针对1T单片机重新制定了一个。这里要说明的是:该系列单片机的定时器时钟既可以设置为1T,也可以设置为12T,前面的担心是多余的。下面是新制作的“定时器时钟1T模式”表格图片,频率做了删减,保留了12个常用音的频率:单片机电子琴设计——定时器初值对应频率表截图初始化函数:初始化I/O端口。信号输出端口P2.6设置为强推挽输出;按键检测端口设置(开机默认)为准双向(弱上拉)。初始化定时器0:初始化不用赋值,不开计数,等到按键按下去再打开计数,定时器中断就会不断取反信号输出端口,产生相应频率的音频信号。定时器0中断函数:在中断里面只做一件事情,就是对信号输出端口取反,形成方波信号。按键检测函数:需要注意的问题:不使用“等待按键释放”的函数语句。因为按键按下的时候应该发出声音,如果等待按键释放会产生延时,影响效果。按键松开则关闭定时器计数,音频停止。同时按下两个或者多个按键的处理方法?这一点应该可以解决,此处暂未修改,当多个按键按下时,应该检测到无效键值,不产生声音。关于按键检测的详细思路内容较多,本处暂且略过,以后再细聊。主函数:需要注意的问题:因“按键检测函数”不使用“等待按键释放”的函数语句,所以按键检测是连续循环的,但是不能不断的给定时器赋值,所以需要定义一个变量来记录按键值,当检测到相同的按键时不需要重复赋值给定时器。以上是程序设计的结构和需要注意的问题。按照上面结构图中的框架,用kile软件新建一个工程,编写c语言程序,然后编译完生成烧写代码hex文件。单片机下载hex文件:用STC-ISP软件,通过串口小板把hex文件下载到单片机里面,单片机就可以工作了。当然一般需要反复修改程序,反复下载代码,直到单片机正常工作为止。下载代码时,在新版软件里面,硬件选项里除了频率需要设置为12.(MHz)以外,其它不用设置,用默认值就可以。结合本周前面的多篇文章,制作一款基于51单片机的简易电子琴应该很简单了。由于百家没有提供下载附件功能,因此无法上传单片机烧写代码文件,当然办法是有的。今天就聊到这里,如果您感兴趣,可以
转载请注明:http://www.0431gb208.com/sjszyzl/6822.html