




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
姓名:实现了实时存储,能将演奏的音律存储起来并一块演奏出来。 STCC 3 LCD1602 6 1概述1.1电子琴设计目的及意义把一个计算机1.2设计任务D1.3设计项目与功能简介1.31设计项目简介本项目设计是采用STC89C52单片机作为核心,利用单片机技术、无源蜂鸣器、1.32系统功能简介(1)能实现基本的琴键功能。即按下每一个琴键,单片机能够检测到键盘的按键,并通过键盘的位置,通过程出不同频率的声音。(2)能够实现LCD显示按键。每按下一个按键时,单片机能够检测到所按下的按键,然后通过按键的位置通过(3)能够实现实时存储。每按下一个按键时,发出一个单音并能将其存储起来。然后,通过一个播放键将(4)能够实现按键中断。放音乐时可以按下中断键使音乐暂停与播放。2硬件设计及说明2.1硬件系统设计该设计要实现一种由单片机控制可存储式电子琴,因为这是一个比较简单的系统,而STC89C52单片机经济实惠,也有很多优点,其性能完全可以满足设计的需求,所以STC89C52来作为此设计项目的核心。电子琴首先必须要有按键,又要求输出单片机蜂鸣器LCD液晶2.2元件简介2.21STC89C52STC89C52是一种带8K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理2.22蜂鸣器蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、1.压电式蜂鸣器压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及管或集成电路构成。当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。经极化和老化处理后,再与黄铜片或不锈钢片粘在一起。2.23矩阵键盘(1)判断键盘中有无键按下将全部行线置低电平,然后检测列线的状态。只要(2)判断闭合键所在的位置在确认有键按下后,即可进入确定具体闭合键的过2.24LCD16023软件程序设计3.1软件系统设计软件设计实际上就是程序编程,根据项目设计要求,我们把软件,设计部分大体LCD驱动驱动矩阵键盘开始NY弹奏音乐储存音乐LCD显示相应音符NY播放储存音乐NY暂停播放N播放完成Y3.2音乐相关知识由3.3产生音频脉冲频率(HZ)频率(HZ)计数值(T864820652833.4识别矩阵键盘行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,介绍过(2)去除键抖动。(3)若有键被按下,应识别出是哪一个键闭合。方法是对键盘的行线进行逐行扫(4)为了保证键每闭合一次CPU仅作一次处理,必须却除键释放时的抖动。{TL1=0x18;TH1=0xfc;}KeyScan{uint8i;KeyOutintKeyScanBuffKeyScanBuff[iKeyOut][0]=((KeyScanBuff[iKeyOut][0]<<1)|KEY_IN_1)&DEBOUNCE_MASK;KeyScanBuff[iKeyOut][1]=((KeyScanBuff[iKeyOut][1]<<1)|KEY_IN_2)&DEBOUNCE_MASK;KeyScanBuff[iKeyOut][2]=((KeyScanBuff[iKeyOut][2]<<1)|KEY_IN_3)&DEBOUNCE_MASK;KeyScanBuff[iKeyOut][3]=((KeyScanBuff[iKeyOut][3]<<1)|KEY_IN_4)&DEBOUNCE_MASK;fori0;i<4;i++){anBuffiKeyOutiDEBOUNCEMASK{KeySta[iKeyOut][i]=KEY_UP;}elseif(KeyScanBuff[iKeyOut][i]==0){KeySta[iKeyOut][i]=KEY_DOWN;}}{KEY_OUT_4=1;KEY_OUT_1=0;case1:KEY_OUT_1=1;KEY_OUT_2=0;KEY_OUT_2=1;KEY_OUT_3=0;KEY_OUT_3=1;KEY_OUT_4=0;}}BFACHD还提供了清屏指{{_nop_();}lestax}cmd{LCD1602_E=1;LCD1602_E=0;}{LCD1602_E=1;_nop_();LCD1602_E=0;}{}3.6实时存储音律信息脉冲通过查询数组的方式存入另一个数组中,在连续播放时再调用这个数组。例如{STH0=music_tab[music_save[play_count]]/256;STL0=music_tab[music_save[play_count]]%256;}4系统调试4.1硬件调试硬件调试主要是针对单片机部分进行调试,自行制作了电路板。硬件调试我们先采用了普中HC6800-EM3开发板进行调试,后自行制作了电路板,正LCD电路调试:接通电源,随机按下按钮可以看到LCD液晶显示数字。4.2软件调试(1)编写了键盘扫描程序,初步实现弹奏。(2)放弃原来键盘扫描程序,编写新的键盘扫描程序。(3)实现弹奏和播放储存音乐功能。(4)初步编写LCD1602的驱动程序。(5)继续编写LCD1602程序,实现显示弹奏的音符和频谱图。(6)编写播放暂停功能。(7)完成在普中HC6800-EM3开发板调试。5课程设计个人分工及心得体会5.1个人分工主程序的编写与整合、键盘扫描及按键动作程序的编写、电路板的加工与调试。5.2心得体会调试电路、成型,整个过程都需要我们充分利用所学的知识进行思考、借鉴。可以说,参考文献社,2008.月【9】杨恢先,黄辉先.单片机原理及应用[M].北京:人民邮电出版社,2006【10】张虹.单片机原理及应用[M].北京:中国电力出版社,2009C程序(非程序文字)/****************************************************************************************************************************************/#include<reg52.h>#include<intrins.h>#include"config.h"uint16codemusic_tab[]={63628,63835,64021,64103,64260,64400,64524,64580,64580,64633,64732,64820,64898,64968,65030,65058};//程序设置头文件//低音音阶//高音音阶uint8codeLedshow_mus_tab[]={'1',//低音音阶字符//高音音阶字符;uint8codeLedshow_pic_tab[]={1,//低音音阶频谱图//高音音阶频谱图volatileuint8KeySta[4][4];uint8uint16uint16uint8uint8uint8uint8uint16uint16xdatamusic_save[80];xdatamusic_time[80];key_time;save_count;play_count;play_flag;pause_flag;STL;STH;voidKeyScan();voidKeyHandle();voidplay();voidLcd1602WaitReady();//当前的按键状态//保存音乐的音符//保存音乐的时间//音符时间计数//保存计数//播放计数//播放标志位//暂停标志位//键盘扫描子程序//键盘按键动作判断子程序//音乐播放子程序LCD子程序voidLcd1602WriteCmd(uint8DvoidLcd1602WriteDat(uint8DvoidLcd1602Init();DvoidLcd1602_show_L1(uint8voidLcd1602_show_L2(uint8voidplay_pause();//音乐播放暂停子程序voiddelay_ms(uint8i);/********************************************************************函数名称:主函数函数功能:实现对个子函数的扫描调用********************************************************************/voidmain(){TMOD|=0x11;TMOD&=0xdd;ET0=1;ET1=1;EA=1;TR1=1;while(1){000100011XX01XX01KeyHandle();play_pause();LAYER{play_flag=1;}if(play_flag){play();}}}/********************************************************************函数功能:定时不同时间,产生不同频率的方波,产生音符********************************************************************/voidtimer0()interrupt1//Timer0定时产生特定频率的波形驱动蜂鸣器{TH0=STH0;TL0=STL0;SPEAKER=~SPEAKER;key_time++;}/********************************************************************函数功能:定时1ms,调用键盘扫描子程序实现按键状态的采集和按键的消抖********************************************************************/voidtimer1()interrupt3//Timer1定时1ms,用于按键的检测和消抖{TL1=0x18;TH1=0xfc;KeyScan();}/********************************************************************函数名称:键盘扫描子程序********************************************************************/voidKeyScan(){uint8i;staticuint8iKeyOut=0;staticuint8KeyScanBuff[4][4];//扫描按键输入eyScanBuffiKeyOutKEYINDEBOUNCEMASKeyScanBuffiKeyOutKEYINDEBOUNCEMASKeyScanBuffiKeyOutKEYINDEBOUNCEMASKeyScanBuffiKeyOutKEYINDEBOUNCEMASK//消抖后更新按键状态for(i=0;i<4;i++){if(KeyScanBuff[iKeyOut][i]==DEBOUNCE_MASK){KeySta[iKeyOut][i]=KEY_UP;}elseif(KeyScanBuff[iKeyOut][i]==0){KeySta[iKeyOut][i]=KEY_DOWN;}}//逐行拉低行输出switch(iKeyOut){case0:KEY_OUT_4=1;KEY_OUT_1=0;break;case1:KEY_OUT_1=1;KEY_OUT_2=0;break;case2:KEY_OUT_2=1;KEY_OUT_3=0;break;case3:KEY_OUT_3=1;KEY_OUT_4=0;break;default:break;}}/********************************************************************函数名称:键盘按键动作判断子程序函数功能:实判断按键的按下和弹起动作,及执行相关操作********************************************************************/voidKeyHandle(){uint8i,j;staticuint8bkKey[4][4];//检索按键状态的变化for(i=0;i<4;i++){for(j=0;j<4;j++){if(bkKey[i][j]!=KeySta[i][j]){//按键按下时的操作if(bkKey[i][j]==KEY_UP){//按键按下时播放音乐STH0=music_tab[i*4+j]/256;STL0=music_tab[i*4+j]%256;TR0=1;//显示频谱和音符Lcd1602WriteCmd(0x01);//清屏Lcd1602_show_L1(Ledshow_pic_tab[i*4+j]);Lcd1602_show_L2(Ledshow_mus_tab[i*4+j]);//储存键值music_save[save_count]=i*4+j;}{//按键弹起时的操作//关闭音乐TR0=0;//储存按键按下的时间music_time[save_count]=key_time;save_count++;key_time=0;//时间计数清零}bkKey[i][j]=KeySta[i][j];}}}}/********************************************************************函数名称:音乐播放子程序********************************************************************/voidplay(){PLAYER{Lcd1602WriteCmd(0x01);if(play_count==save_count){save_count=0;play_count=0;play_flag=0;}if(play_count<save_count)//播放初始时清屏//判断是否播放完成,//若播放完成清除各标志和计数{//播放音乐STH0=music_tab[music_save[play_count]]/256;STL0=music_tab[music_save[play_count]]%256;if(~pause_flag)//判断是否暂停播放{TR0=1;}Lcd1602_show_L1(Ledshow_pic_tab[music_save[play_count]]);Lcd1602_show_L2(Ledshow_mus_tab[music_save[play_count]]);if(music_time[play_count]<key_time){TR0=0;key_time=0;play_count++;if(~pause_flag){Lcd1602WriteCmd(0x01);}}}}//暂停后不清屏//播放完每个音符清屏/****************************************************************************************************************************************/voidLcdWaitReady()//检测并等待1602液晶空闲{uint8sta;P0=0xFF;LCD1602_RS=0;LCD1602_RW=1;{LCD1602_E=1;staP0;LCD1602_E=0;}while((sta&0x80)!=0);//延时}/****************************************************************************************************************************************/voidLcd1602WriteCmd(uint8cmd)//1602液晶命令写入函数{Lcd1602WaitReady();LCD1602_RS=0;LCD1602_RW=0;LCD1602_E=1;P0=cmd;LCD1602_E=0;}//延时/****************************************************************************************************************************************/voidLcd1602WriteDat(uint8dat)//1602液晶数据写入函数{Lcd1602WaitReady();LCD1602_RS=1;LCD1602_RW=0;LCD1602_E=1;P0=dat;LCD1602_E=0;}//延时/****************************************************************************************************************************************/voidLcd1602Init(){Lcd1602WriteCmd(0x38);Lcd1602WriteCmd(0x0C);Lcd1602WriteCmd(0x06);}//显示器开、光标关//文字不动,光标自动右移/****************************************************************************************************************************************/voidLcd1602_show_L1(uint8dat)//LCD第一行,频谱显示函数{Lcd1602Init();Lcd1602WriteCmd(0x80);while(dat){Lcd1602WriteDat(0Xff);}}//频谱方块/****************************************************************************************************************************************/voidLcd1602_show_L2(uint8dat)//LCD第二行,音符显示函数{Lcd1602Init();Lcd1602WriteCmd(0xc0);Lcd1602WriteDat(dat);}/*********************************************
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 对赌协议跟投资协议书
- 电工师傅带徒弟协议书
- 揭阳公积金抵扣协议书
- 电梯补签协议书
- 联姻合作协议书
- 遗产赠予协议书
- 追资投资协议书
- 碰伤调解协议书
- 美国后勤协议书
- 工程股份制合同协议书
- 2025年全球经济风险试题及答案
- 北京北大方正软件职业技术学院《实践中的马克思主义新闻观》2023-2024学年第二学期期末试卷
- 2025年下半年甘肃张掖市山丹县事业单位招聘112人(第二批)易考易错模拟试题(共500题)试卷后附参考答案
- 血液透析常用药物
- 2025-2030中国酿酒行业市场发展现状及商业模式与投资发展研究报告
- 2025年陕西咸阳亨通电力(集团)有限公司招聘笔试参考题库附带答案详解
- 初中生物人体的骨骼肌 2024-2025学年七年级生物下册(北师大版2024)
- 河道整治施工组织设计(技术标)
- DeepSeek赋能设计行业:AI提示词生成与3D建模自动化
- 2025年江苏省南通市如东县实验中学中考一模英语试题(原卷版+解析版)
- 核医学临床技术操作规范
评论
0/150
提交评论