1、 计算机与通信工程计算机与通信工程学院学院 单片机单片机与接口技术与接口技术课程设计总结报告课程设计总结报告 设计题目设计题目: 简易电子琴设计 学生姓名学生姓名: 系系 别别:计算机与通信工程学院 专专 业业:电子信息科学与技术 班班 级级:09-01 学学 号号: 指导教师指导教师: 2011 年 12 月 26 日 2 / 16 简易电子琴设计简易电子琴设计 电子琴概述电子琴概述 这次设计的电子琴与市场上的电子琴相比虽然音色逊了一点,但是其物美价 廉,功能强大,携带方便,深受大家喜欢。此次课程设计的电子琴是有 4*4 矩阵键盘来实现发音,其中 4 个键是功能键,剩下的 12 键实现真正的
2、发音。 此外在电子琴的功能上又加上了音乐播放功能、选择歌曲、暂停以及录音回 放功能,使电子琴变得更强大。让电子琴不再是简单的弹出音调简单的电子 琴,而是一个功能齐全的电子琴。 本设计功能本设计功能 1. 通过矩阵键盘能够弹出美妙的音乐。 2. 通过功能切换,能够切换到音乐播放器功能 3. 能够把弹出的音乐录制下来,并且还能够回放出来。 本设计的仿真图本设计的仿真图 3 / 16 引脚描述:矩阵键盘接的是 P3 口,显示部分的段控制口接的是 P0 口,位控制口 接的是 P2.0、P2.1、P2.2、P2.4、P2.5,蜂鸣器接的 P2.3 口。各种功能键如图 所示。 设计的流程图设计的流程图 开
3、始 初始化 功能选择 进入电子琴功能 通过键盘弹音乐 是否录音 是否回放 返回 进入音乐播放 是否选择下一曲 是否暂停 返回 4 / 16 我负责的模块我负责的模块 主程序主程序:也就是本程序的整体构造、功能构造。也就是本程序的整体构造、功能构造。 主程序程序: void main() init();/初始化 while(1) keyscan();/调用键盘扫描 display();/显示 if(key_function=1)/如果选择音乐播放 switch(count) case 1:play(music1,music1_L);break;/播放第一首 case 2:play(music2,
4、music2_L);break;/播放第二首 case 3:play(music3,music3_L);break;/播放第三首 else /否则选择为电子琴 if(key_record=2)/判断是否回放 replay(record,record_L); 录音录音功能功能。录音程序和键盘扫描再一个模块中。录音程序和键盘扫描再一个模块中。 功能描述:它能够把你所弹的音调、按下键盘的时间即音长以及键与键之 间的时间给记录下来,它完全模拟了现实中电子琴的功能,功能之强大。 时间的记录是利用定时器 1 实现的。定时器 0 是产生一定频率的方波,使 蜂鸣器发出不同的音调。 本功能程序: void ke
5、yscan() /键盘扫描:线反转法 uchar h,l; /h:行 l:列 if(key_record=1 TL1=(65536-5000)%256; 5 / 16 TR1=1; flag=1; P3=0xf0; /列全置低电平,行全置高电平 h=P3 while(h!=0xf0) /若有键按下则行会出现低电平 delay(10); /按键去抖 P3=0xf0; /列全置低电平,行全置高电平 h=P3 while(h!=0xf0) if(key_record=1)/如果有按键按下, 则把按键前的时间记 录下来 TR1=0;/关闭计时 record_Lb=a;/把按键前的时间记录下来 a=0;
6、/时间次数清零 b+;/下标加一 h=P3 /读入行值 P3=0x0f; /电平反转 l=P3 /读入列值 k=h+l; switch(k) case 0xee:temp=0;key_function+; if(key_function=2) key_function=0; break;/功能选择按钮 case 0xed:temp=0;count+;next_flag=1; if(count=4) count=1; break;/ 选曲按钮 case 0xeb:temp=0;key_record+; if(key_record=3) key_record=0; break;/录音、回放、返回 case 0xe7:temp=0;pause+; if(pause=2) pause=0; break; / case 0xde:temp=6;break; /6 case 0xdd:temp=7;bre