
单片机应用及原理实践报告.doc
9页1 -《单片机应用及原理》实 践 报 告题 目 简易电子琴设计 专 业 电子工程 学生姓名 林 新 准考证号 036813200024 指导教师 宗接华 2015 年 4 月- 2 -一、实验目的:1.设计任务 基于 MCS 系列单片机 AT89C51设计一个简易电子琴 2.功能描述 1)利用所给键盘的 1,2,3,4,5,6,7,8 八键,能够发出 8 个不同的音符2)并且要求按下按键发声,松开延时一段时间停止,中间再按别的键则发出另一音符的声音 3)使用 LED 数码管显示 8 个不同的音调 4)如果在一个按下的键发声的同时有另一键被按下,前面键的发音停止,转到后按的键的发音 5)增加变调钮“UP1”,“UP2”,“DN1”,“DN2”,在按下“0—8”音符时,变调键,产生相应的变调,使用 LED 数码管显示变调情况。
6)其它功能 3.软硬件描述 该课题主要由软件及其硬件两个基本部分共同完成硬件主要部分:4x44 矩阵式键盘(主要用于音符的输入以及变调的键值输入,其与单片机的 P0 口连接). MCS51-AT89 单片机芯片. 两位 LED 数码管显示器.以及一些基本外围电路软件主要部分:运用 c 语言进行相应的编程,其主要包括控制按键扫描程序,发声主程序,以及显示程序 4.模块描述 总体方案:本系统采用单片机 AT89C51 为电子琴的控制核心,系统主要包括播放模块.按键控制模块以及显示模块 电路设计总体框图:2.步骤: A. 根据设计题目的具体要求及题目的设计提示 B. 利用 Proteus 软件来画原理图(硬件) C. 利用 Keil 软件进行程序的编写,执行,及仿真从而生成 HEX 文件调 D. 将 HEX 文件导入原理图的 AT89C51 中进行仿真 AT89C51 E. 试并实现相应的功能 3 -2、 实训过程内容:总 体 原 理 图 :1.4 x4 矩 阵 键 盘 控 制 模 块其 与 单 片 机 的 具 体 连 接 方 式 如 下 :(1)矩阵式键盘的结构与工作原理 在键盘中按键数量较多时,为了减少 I/O 口的占用,通常将按键排列成矩阵形式,如图所示。
在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接这样,一个端口 P1 就可以构成 4*4=16 个按键矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,上图中,列线通过电阻接正电源,并将行线所接的单片机的 I/O 口作为输出端,而列线所接的 I/O 口则作为输入这样,当按键没有按下时,所有的输入端都是高电平,代表无键按下行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了 4 -具体的识别及编程方法如下述 (2)矩阵式键盘的按键识别方法 行扫描法 行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,如上图所示键盘,介绍过程如下 a.判断键盘中有无键按下 将全部行线置低电平,然后检测列线的状态只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与 4 根行线相交叉的 4 个按键之中若所有列线均为高电平,则键盘中无键按下 b.判断闭合键所在的位置 在确认有键按下后,即可进入确定具体闭合键的过程其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。
若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键 程序扫描法就是调用键盘扫描程序,查询键盘并给予处理的方法 1)查询是否有键盘按下 2)延时去除抖动 3) 确定下来按键所在的行. 列位置 具 体 框 图 如 下2. 发声模块 扬声器与单片机的连接方式如图:- 5 -扬声器连接在 P3.0 口,当有键盘按下时候,单片机会通过程序调用相应键值,由 P3.0 输出对应的频率信号,从而驱动扬声器发声 具体框图如下: 3. 显示模块 2 位 LED 数码管与单片机的连接图 :图中:1、2 是公共端,控制位码,控制那个数码管亮(左右),如果是共阴的则接低电平,若为供阳的则相反a-g、dp 是控制断码,控制 9 个二极- 6 -管的亮暗,可以直接接 51 的输出口(P0 要加上拉电阻),如果是共阴的则接高电平来使数码管亮,若为供阳的则相反用 8 位码控制,用 16 进制表示!二极管从最上面顺时针分别为 a,b,c,d,e,f 中间横线为 g,点为 dp 4 重要程序及源代码 /************************************************************* 程序功能 : 对 4×4 矩阵键盘进行扫描,显示键值和输出声音 **************************************************************/ #include #include #define uint unsigned int #define uchar unsigned char sbit SPK = P3^0; //P3.0 外接扬声器 uint FreqTemp; unsigned int code Key[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; unsigned int code Freqtab[] = { //定时半周期的初始值 64021,64103,64260,64400, //低音 3 4 5 6 64524,64580,64684,64777, //低音 7,中音 1 2 3 64820,64898,64968,65030, //中音 4 5 6 7 65058,65110,65157,65178}; //高音 1 2 3 4 /************************************************************* * 函数功能 : 用扫描法读 P1 外接 4×4 键盘 * 函数返回 : 按下键:返回 0~15、如无键按下:返回 0 **************************************************************/ uchar Keyscan(void) { uchar i, j, temp, Buffer[4] = {0xfe, 0xfd, 0xfb, 0xf7}; for(j = 0; j >= 1; //换右边一位 } } return 16; //没有键按下就返回 16 作为误判动作 } /************************************************************** * 名称: Display(uchar k) * 功能:显示键值(音调或者音符) - 7 -* 输入: k (键盘数值) * 输出: P0 口输出七段码,P2 口输出位选码(根据要求这里只输出一位) ***************************************************************/ void Display(uchar k) { P0 = Key[k]; } /************************************************************** * 主函数 ***************************************************************/ void Main(void) { uchar Key_Value = 16, Key_Temp1, Key_Temp2;//读出的键值 TMOD = 0x01; //T0 定时方式 1 ET0 = 1; //允许 T0 中断 EX0 = 1; //允许 X0 中断 EA = 1; while(1) { TR0 = 0; //暂不发音 Key_Temp1 = Keyscan(); //读入按键 if(Key_Temp1 != 16) { //有键按下 Display(Key_Value); //显示键值、延时消抖 Key_Temp2 = Keyscan(); //再读一次 if (Key_Temp1 == Key_Temp2) {//两次相等 Key_Value = Key_Temp1; //就确认下来 FreqTemp = Freqtab[Key_Value]; //根据键值,取出定时半周期的初始值 Display(Key_Value); //显示 TR0 = 1; //启动定时器,发音 while (Keyscan() > 8; SPK = ~SPK; //发音 } 三 、 硬 件 的 调 试 过 程 及 调 试 方 法 :- 8 -1. 由于本次设计并没有进行实际硬件的实做,所 以 我 们 本 次 对 硬 件 的 调 试 过程 仅 仅局限于电路图的修改调试。
一 开 始 仿 照 题 目 进 行 画 图 仿 真 , 我 们 并 没 得 到 相应 的结果2.对于软件我们便是不断检查并修改 C 程序,从而形成合格的 HEX 文件驱动单片机实现相应的功能 4、实训心得和体会:特别感谢学校和老师给我们安排了这次课程设计,通过这次实训我们发现现在书本上的知识与实际的应用存在着不小的差距,书本上的知识很多都是理想化后的结论,忽略了很多实际的因素,或者涉及的不全面,可在实际的应用时这些是不能被忽略的,我们不得不考虑这方的问题,这让我们无法根据书上的理论就轻易得到预想中的结果,有时结果甚至很差别很大通过这次实践使我更深刻的体会到了理论联系实际的重要性,我们在今后的学习工作中会更加的注重实际,努力提高自己的动手能力 9 -指导教师评语成 绩 指导教师:年 月 日。












