单片机课程设计————简易电子琴
目 录
1.设计题目????????????????????????3 2. 设计目的????????????????????????3 3. 主要内容????????????????????????3 4. 音符频率与计数初值对照表????????????????3 5.定时/计数器的工作原理??????????????????4 5.1 方式寄存器?????????????????????4 5.2启/停控制寄存器TCON ????????????????6 6. 中断控制????????????????????????6 6.1 TCON用于中断请求??????????????????6 6.2 中断允许寄存器IE??????????????????7 7.系统分析????????????????????????7 7.1 系统组成??????????????????????8 7.2 系统工作原理????????????????????8 8.系统硬件设计??????????????????????8 8.1 系统硬件总体设计 ? ????????????????8 8.2 LED显示模块 ????????????????????9 8.3 扬声器模块 ????????????????????9 8.4 子系统(模块)电路图????????????????10 8.4.1 共阳极电路图?????????????????10 8.4.2 上位开关???????????????????10
1
单片机课程设计————简易电子琴
9.系统软件设计 ?????????????????????10 9.1 系统软件总体设计 ?????????????????10 9.2 本系统总体代码 ??????????????????11 10. 课程设计成果 ????????????????????15 11.个人总结 ???????????????????????15 参考文献????????????????????????17
2
单片机课程设计————简易电子琴
一、设计题目:简易电子琴 二、设计目的:
(1)熟悉单片机的内部结构; (2)掌握C51编程方法; (3)掌握定时器与发声的关系;
(4)掌握交流蜂鸣器的发声原理和程序控制方法; (5)掌握串行控制键盘键的识别方法; (6)掌握声音频率的计算方法。 三、主要内容
本系统设计制作一个可演奏的电子琴。综合应用了两项设计。 (1)能产生纯音,了解音调高低的控制方法。 (2)用键盘代替电子琴的键盘,控制演奏音乐。 (a)掌握串行控制键盘键的识别方法; (b)根据键值控制发声。 (3)至少演奏一支乐曲。 四、音符频率与计数初值对照表:
音符 频率 计数处之 0xefa9 0xf173 0xf307 0xf3c8 0xf51e 音符 频率 计数初值 0xf7d8 0xf8bd 0xf987 0xf9e4 0xfa90 音符 频率 计数初值 0xfbef 0xfc62 0xfcc7 0xfcf6 0xfd4b 低音1 220 低音2 247 低音3 277 低音4 294 低音5 330 中音1 440 中音2 494 中音3 554 中音4 587 中音5 659 高音1 880 高音2 988 高音3 1109 高音4 1175 高音5 1318 3
单片机课程设计————简易电子琴
低音7 370 低音7 415 0xf64c 0xf75a 中音6 740 中音7 831 0xfb29 0xfbb1 高音6 1480 高音7 1661 0xfd98 0xfddc 五、定时/计数器原理
MCS-51单片机内部有2个16位的可编程定时/计数器,定时/计数器0由计数器TH0和TL0组成,定时/计数器1由计数器TH1和TL1组成,THX和TLX(X=0,1)分别为两个8位计数器,连接起来可组成16位计数器。定时/计数器的工作方式由方式控制字TMOD选择,定时/计数器的启停由控制寄存器TCON控制,这两个寄存器均属于特殊功能寄存器。定时/计数器的工作原理图如下:其核心是一个加1计数器,加1计数器的脉冲有两个来源:一个是外部脉冲源,另一个是系统的时钟振荡器。当脉冲源为时钟振荡器(等间隔脉冲序列)时,由于计数器脉冲周期相同,所以脉冲数乘以脉冲周期就是定时时间,此时为定时功能。当脉冲源为外部脉冲时,就是外部事件的计数器,此时为计数功能。
5.1方式寄存器TMOD
D7 D6 D5 D4 D3 D2 D1 D0
4
单片机课程设计————简易电子琴
GATE C/T M1 M0 GATE C/T M1 M0 定时/计数器1方式字 定时/计数器0方式字 GATE=0时,外部中断信号不参预控制,此时,只要控制位,TR0(TR1)为1时,定时/计数器就开始计数,而不管外部中断信号的电平为高还是为低。
C/T:计数方式还是定时方式选择位,当为0时为定时方式,当为1时为计数方式。
M1和M0:操作方式选择位。对应4种操作方式,当系统发生复位时,TMOD各位为0。 操作方式选择如下图: M1M0 00 01 10 11 操作方式 方式0 方式1 方式2 方式3 功能 13位计数器 16位计数器 可自动再装载的8位计数器 定时/计数器0分为两个独立计数器, 定时/计数器1为串行口波特率发生器 如: 若单片机晶振为12MHz,设定时/计数器1作定时器,以方式1工作,定时时间为5ms;定时/计数器0作计数器,以方式2工作,外界发生一次事件(一个负脉冲)即产生溢出。
解:定时/计数器0的初值为:
5
单片机课程设计————简易电子琴
X=28-1=255=FFH即:FFH装入TH0,FFH装入TL0。 定时/计数器1的初值为:
X=216-5ms/1μs=EC78H即:ECH装入TH1,78H装入TL1。 方式寄存器TMOD=00010110B=16H。 5.2启/停控制寄存器TCON
定时/计数器的控制寄存器也是一个8位的特殊功能寄存器,字节地址为88H,可以位寻址。其格式如下: TF1
TF1(TF0):定时/计数器1(0)溢出标志。当定时/计数器1(0)产生溢出时,由硬件置1,可向CPU发中断请求。CPU响应中断后被硬件自动清0,也可以由程序查询后清0.
TR1(TR0):定时/计数器1(0)启/停控制位,由软件置1或置0来启动或关闭定时/计数器1工作。 六、中断控制 6.1 TCON用于中断请求 TF1 TF0 IE1 IT1 IE0 IT0 TR1 TF0 TR0 IE1 IT1 IE0 IT0 IT0:外部中断请求触发方式。当IT0=0时,低电平触发;当IT0=1时,下降沿触发。
IT1外部中断请求触发方式。作用同IT0。
IE0:外部中断请求标志位。当发中断请求时,置1,否则置0。 IE1:外部中断请求标志位。作用同IE0。
6
单片机课程设计————简易电子琴
TF0:片内定时/计数器0的溢出请求标志位,定时/计数器0溢出时,置1,否则置0.
TF1:片内定时/计数器1的溢出中断请求标志位,作用同TF0. 6.2中断允许寄存器IE EA ES ET1 EX1 ET0 EX0 EA:开中断标志位。当EA=1时,CPU开中断;EA=0时,CPU关中断。
ES:串行口的中断允许位。当ES=1时,串行口允许中断;ES=0时,则不允许中断。
ET0(ET1):定时/计数器0(1)的中断允许位。当ET0=1,定时/计数器0(1)溢出,允许中断,否则不允许。 EX0(EX1):不允许。 七、系统分析: 7.1系统组成
本系统由矩阵键盘、扬声器、LED显示管模块一起组合而成。如下:
INTO的中断允许位,当EX0=1时,允许中断,否则,
7.2系统工作原理
本系统扫描键盘矩阵、显示按键、扬声器发出对应音符。
7
单片机课程设计————简易电子琴
4X2行列式键盘识别及显示原理如下:
编码键盘:键盘本身带有实现接口主要功能所需的硬件电路。不仅能自动检测被按下的键,并完成去抖动、防串键等功能,而且能提供与被按键功能对应的键码送往CPU。所以,编码键盘接口简单、使用方便。但由于硬件电路较复杂,因而价格较贵。 键盘接口必须具有去抖动、防串键、按键识别和键码4个基本功能。
(1)去抖动:所谓抖动是指在识别被按键是必须避开抖动状态,只有处在稳定接通或稳定断开状态才能保证识别正确无误。去抖问题可通过软件延时或硬件电路解决。
(2)防串键:防串键是为了解决多个键同时按下或者前一按键没有释放又有新的按键按下时产生的问题。常用的方法有双键锁定和N键轮回两种方法。 (3)被按键识别:如何识别被按键是接口解决的主要问题,一般可通过软硬结合的方法完成。常用的方法有行扫描法和线反转法两种。 (4)键码产生:为了从键的行列坐标编码得到反映键功能的键码,一般在内存区中建立一个键盘编码表,通过查表获得被按键的键码。用AT89C52的并行口P1接4×2矩阵键盘,以P1.0-P1.3作输入线,在数码管上显示每个按键的“1-8”序号。 八、系统硬件设计 8.1系统硬件总体设计
本系统由键盘矩阵、LED显示管、扬声器这几个部分组成,LED显
8
单片机课程设计————简易电子琴
示管显示当前按键,扬声器发出对应音符,最终还要完整的演唱一首歌曲。
一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系正确即可。
利用AT89C52的内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶。
8.2 LED显示模块
LED显示模块如图2-2所示,利用AT89S52单片机的P0端口的P0.0-P0.7连接到一个七段数码管的a-h的笔段上,数码管的公共端接电源。
矩阵扫描显示当前按键模块如下:
8.3 扬声器模块
矩阵扫描扬声器发出对应音符模块如下:
9
单片机课程设计————简易电子琴
8.4 子系统(模块)电路图 8.4.1 共阳极电路图
8.4.2 上位开关
9.系统软件设计 9.1 系统软件总体设计
本系统的软件流程图如下:
10
单片机课程设计————简易电子琴
9.2 本系统总体代码如下:
#include
#define uchar unsigned char #define uint unsigned int sbit BEEP=P1^7; sbit SDA=P1^0; sbit CLK=P1^1; sbit P12=P1^2; sbit P13=P1^3; uint flag,t0,n; uchar m,q;
code uchar Table[8]={0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80}; //数码管显示数据 Code
[music]={0xfbef,0xfbef,0xfd4b,0xfd4b,0xfd98,0xfd98,0xfd4b,0,0,0,0xfcf6,0xfcf6,0xfcc7,0xfcc7,0xfc62,0xfc62,0xfbef,0,0,0,0xfd4b,0xfd4b,0xfcf6,0xfcf6,0xfcc7,0xfcc7,0xfc62,0,0,0,0xfd4b,0,0};//乐谱
11
单片机课程设计————简易电子琴
Code uint freq[21]={0xefa9,0xf173,0xf307,0xf3c8,0xf51e,0xf64c,0xf75a,0xf7d8,0xf8bd,0xf987,0xf9e4,0xfa90,0xfb29,0xfbb1,0xfbef,0xfc62,0xfcc7,0xfcf6,0xfd4b,0xfd98,0xfddc}; //低中高音的频率
void delay() //延时函数 {
uint i;
for(i=0;i<5000;i++); }
timer0()interrupt 1 //发声函数 { TH0=t0/256; TL0=t0%6; BEEP=~BEEP; }
timer1()interrupt 3 { n++; TH1=0xd8; //定时500 1 0*50=500 TL1=0xf0; //65536-10ms/1us=55536--->0xd8fo if(n==50)
{ n=0; q++; TR0=0; TR1=0; } }
void send(uchar a) //串并转换函数 { uchar j; for(j=0;j<8;j++) { if(_crol_(a,j)&0x80) SDA=1; else SDA=0; CLK=0; CLK=1; } }
12
单片机课程设计————简易电子琴
void main(void) //主函数 {
uchar key8_count,com,i,a,j; key8_count=0; n=0;
TMOD=0x11; //定时/计数器0和定时/计数器1工作与方式1 EA=1; //cpu开中断 ET0=1; //定时/计数器0开中断 ET1=1; //定时/计数器1开中断 TH1=0xd8; //65536-10000=55536 -> 0xd8f0 TL1=0xf0; //th1=0xd8 TR0=0; //thl=0xf0 TR1=0; BEEP=1; q=0; m=0; while(1) { //歌曲自动循环播放 if(q>=33){ q=1; m=0; } //自动播放音乐 if(key8_count==3&&q>m){ t0=music[m++]; if(t0==0){ delay(); q++; }else{ TH0=t0/256; TL0=t0%6; TH1=0xd8; TL1=0xf0; TR0=1; TR1=1; } }else { delay(); flag=0; //快速扫描 a=0x00;
13
单片机课程设计————简易电子琴
P13=1; send(a); if(P12==0) { m=q=0; com=0xfe; for(i=0;i<8;i++) { P13=1; send(com); if(P12==0){ flag=1; P13=1; send(Table[i]); delay(); P13=0; break; }else com=_crol_(com,1); } if(flag==1) { for (j=0;j<5;j++){ delay(); } TR1=0; TR0=0; if(i==7) { key8_count++; key8_count=key8_count%4;
//由频率判断按键音或者播放歌曲 if(key8_count==3) {
q++; } } else { switch(key8_count) { case 0:t0=freq[i]; TH0=t0/256; TL0=t0%6;
14
单片机课程设计————简易电子琴
}
}
}
}
}
}
} TH1=0xd8; TL1=0xf0; TR1=1; TR0=1;break; case 1:t0=freq[i+7]; TH0=t0/256; TL0=t0%6; TH1=0xd8; TL1=0xf0; TR1=1; TR0=1;break; case 2:t0=freq[i+14]; TH0=t0/256; TL0=t0%6; TH1=0xd8; TL1=0xf0; TR1=1; TR0=1; break; case 3:q++;break;
十、课程设计成果:
课程设计结果和要求一样,能实现(1)能产生纯音;(2)用键盘代替电子琴的键盘,控制演奏音乐,并根据键值控制发声;(3)演奏一支乐曲。 十一、个人总结:
通过两周的课程设计,我学到了很多,这些不仅仅局限于巩固复习了课本上知识点,还锻炼了自己分析问题以及动手实际操作的能力,将以前学过的零散的知识串到一起冰学以致用。小组两个人长时间的讨论以及调试,本系统基本上实现了按下键盘矩阵中的按键会使数码
15
单片机课程设计————简易电子琴
管显示当前按键,扬声器播放对应的音符,同时单个程序也能播放歌曲,不足之处在于不能将按键和播放音乐的程序不能完美融合,只能在一定范围内满足按键或播放歌曲一种需要。。
本次综合设计主要涉及硬件和软件两方面的内容,通过这次课程,我的硬件和软件开发能力都获得了提高。首先硬件方面,更加熟悉了51单片机的结构以及它的实用,基本了解了电子产品的开发流程和所要做的工作。基本掌握了C51并设计了一个单片机最小系统。通过C语言编程的过程,使我对C语言的编程能力和C51单片机的功能有了更深层次的理解,熟悉了一些单片机常用的外围电路引脚和连接方法,如LED数码管,键盘等,并且我学会了遇到问题要分析问题及解决问题的能力,加深了对所学理论知识的理解和运用。我的动手能力得到了很大的提高,尤其是团队合作和沟通交流能力得到明显锻炼。 每次实际的经历都会给自己带来很多技能的提升,虽然现在的自己还仅仅是一名学生,可也就是学生的不断学习和创新,一个又一个创新和进步带来了生活的丰富,把握实践,成就将来,感谢老师的辛勤给我带来的收获,以后更加努力。
16
单片机课程设计————简易电子琴
参考文献:
[1] 彭伟.单片机C语言程序设计实训100例.电子工业出版社.2009年
[2] 李建忠.单片机原理及应用.西安:西安电子科技大学,2002年 [3] 周润景等. Proteus在MCS-51&ARM7系统中的应用百例[M].电子工业出版社,2006
[4] 马忠梅等.单片机的C语言应用程序设计[M].北京航空航天大学出版社,2006
17
单片机课程设计————简易电子琴
课 程 设 计 报 告
姓名: 卢 飞 班级:通信0802班 学号:200807020227 课程设计名:简易电子琴
1
单片机课程设计————简易电子琴
《硬件综合设计》
课程设计任务书
题 目 学生姓名 卢飞 学号 简易电子琴 200807020227 专业班级 通信0802 1.设计目的: (1)熟悉单片机的内部结构; (2)掌握C51编程方法; (3)掌握定时器与发声的关系; (4)掌握交流蜂鸣器的发声原理和程序控制方法; (5)掌握串行控制键盘键的识别方法; (6)掌握声音频率的计算方法。 2.设计内容及基本要求: (1)能产生纯音,了解音调高低的控制方法 要求:掌握发声的原理并实现发声。 (2)用键盘代替电子琴的键盘,控制演奏音乐。 要求:(a) 掌握串行控制键盘键的识别方法; (b) 根据键值控制发声。 (3)演奏至少一支乐曲。 3.撰写课程设计报告。报告内容要求如下: 设计题目、目的、内容; 设计思路; 系统结构图; 硬件资源分配说明,说明控制系统用到的接口电路模块、实现的功能、模块控制方法; 软件资源分配说明,包括存储器、中断等资源的分配; 程序流程图; 程序清单; 设计时碰到的问题及解决方法; 课程设计总结。 设 计 内 容 与 要 求 起止时间 指导教师签名 系(教研室)主任签名 学生签名 2011 年 12 月 19 日 至 2011 年 12 月 30 日 年 月 日 年 月 日 卢 飞 2011年 12月 15日 1
单片机课程设计————简易电子琴
1