摘要:本设计基于我们所学习的单片机课程讲座、实例以及自学,掌握单片机技术是一门不可或缺的技术,对我们将来的工作以及生活都有密切的联系。单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域的广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的32位300M的高速单片机。
关键词:IAP15F2K61S2芯片 STC89C51单片机 蜂鸣器 数码管 led灯 中断 定时器 嵌入式系统
前言:近年来,随着电子技术和微机计算机的迅速发展,单片机的档次不断提高,其运用领域也在不断的扩大,已在工业控制,尖端科学,智能仪器仪表,日用家电,汽车电子系统,办公自动化,个人信息终端及通信产品中得到了广泛的运用,成为现代电子系统中最重要的智能化的核心部件,在嵌入式系统中充当着人体头脑的最重要的作用。
一、课程设计目的,任务要求
设计概述:该设计的目的是设计出一个可以显示电子音乐的乐谱的工程。我们经常可以在酷狗,虾米音乐等等音乐app里使用听歌识曲的功能,哼着一个没有歌词的调子就可以搜出这个歌曲,对于喜欢音乐的人来说极其便捷。显然,通过一个曲调就识别然后匹配出相应的歌曲,这里必可以通过识别这首歌的一段乐谱,然后在乐曲库里寻找和这段曲调相似的歌曲。另一方面,有些人的确在音乐方面比较懵懂,播放一个乐曲直接学,很多调都听不准所以学不准,如果只有音乐没有乐谱,对于学习音乐就比较困难。所有如果能识别出音乐的乐谱并输出给人们看,会大大减小学习音乐的困难,是音乐感不强的人学音乐的福利。
任务要求:播放一段音乐,通过不同按键控制不同显示乐谱的方式,在数码管上显示简谱,或者用led灯显示乐谱。
二、程序的设计流程图
播放音乐子程序设计流程图如下:
整个程序设计流程图如下:
三、程序相关电路及工作原理说明
1.IAP15F2K61S2芯片40个引脚如下:
sbit beep=P3^4; //蜂鸣器引脚
sbit sel_led=P2^3; //控制数码管和led灯转换的引脚
sbit sel_0=P2^0;
sbit sel_1=P2^1;
sbit sel_2=P2^2; //控制三个进位的引脚
sbit key1=P3^2;
sbit key2=P3^3;
sbit key3=P1^7; //3个按键引脚
2.共阴极数码管电路图如下: P0口输入高电压led灯亮
3.按键电路示意图:按下是低电平, 高电平时常态
4.无源蜂鸣器电路示意图如下:输入方波,发出声音
四、程序设计框架
1.宏定义
#defineuint unsigned int
#defineuchar unsigned char
2.变量定义
bit k1=0;
bit k2=0;
bit k3=0; //控制三种乐谱显示方式的标志位
uchar qudiao,jp,weizhi; //曲调 音符 位置
uchar duanxuan[] //定义段选 数码管从0-7
uchar led[] //定义0-8led灯亮的情况
uchar timeh,timel; //定义定时器的重装值 表示不同的频率
3.程序函数说明
voiddelay(unsigned int xms); //延时程序
ucharquyin(uchar tem); //找到tem音符在quzi数组中的位置值,识别输入的音符,并根据不同的按键按下来控制不同的乐谱输出方式
voidplaymusic(); //播放音乐函数
voidinit(); //定时器初始化配置io口(系统初始化)
void tim1()interrupt 1; //定时器0中断服务程序,重新装值,产生方波,对应蜂鸣器发声
五、下载与调试(实验日志)
1. 2016.8.22 问题:程序下载到板子上没有反映,没有显示
解决思路:显示电路主要有usb口 、晶振片和iap15f2k61s2芯片组成,检测到usb口电路没有焊错,应该就是晶振片坏了。
解决过程:换了晶振,果然可以了。
已解决。
2. 2016.8.30 霍尔实例下载验证不了
解决思路:磁铁靠近与远离,霍尔元器件没有任何反应,检查霍尔元器件,发现正负极焊反了。
解决过程:把霍尔元器件再重新焊对一遍。
已解决。
3. 2016.9.2 设计乐谱显示工程:
2016.9.2:刚开始只设计出一种在数码管上显示乐谱的显示方式,也没有按键控制功能。
多次修改程序,下载验证成功。
2016.9.3:加一个用led灯来输出乐谱的方式,没有按键功能。
多次修改程序,下载验证成功。
2016.9.4:在原来的基础上,用按键来控制选择哪种方式来输出乐谱。