基于单片机电子琴程序设计
基于51单片机bluesky开发板的电子琴程序
#include<STC12C5A60S2.h>#include<LCD1602.h> //包含LCD1602的显示函数等#include<KEY_SCAN.h> //包含键值扫描函数,输出key_num#define FSCLK 11059200 //晶振频率sbit BEEP=P1^4; //蜂鸣器输出脚unsigned int fre[16]={100,200,300,400,500,600,700,800,900,1000,1100,1200,1300,1 400,1500,1600};//存好预定的频率值,可以设定任意想要的频率/********************************************************** ********************** 函数功能:延时函数,函数名Delay_ms() ** 函数说明:利用软件延时,占用CPU,经调试最小单位大约为1ms ** 入口参数:time:需要延时的时间,单位ms** 出口参数:无void Delay_ms(unsigned int time)unsigned int i,j;for(i = 0;i < time;i ++)for(j = 0;j < 930;j ++);** 函数功能:定时翻转跟蜂鸣器相连的引脚的电平,输出一定频率的脉冲信号** 函数说明:定时器0中断服务函数** 入口参数:无** 出口参数:无void time0() interrupt 1 //使用定时器0的工作方式2,定时器中断服务程序TH0 = (65536-FSCLK/(12*fre[piano]))/256; //每次中断,重新配置定时器的高8位TL0 = (65536-FSCLK/(12*fre[piano]))%256; //每次中断,程序配置定时器的低8位BEEP=!BEEP; //然后取反音乐输出,输出一个反电平} //短时间内多次取反则输出一定频率的脉冲/********************************************************** ********************** 函数功能:主函数** 入口参数:无** 出口参数:无void main()unsigned char piano=0,key=0; //初始值LCD_1602_Init(); //液晶显示前进行初始化TMOD = 0X01; //定时器使能TH0 = (65536-FSCLK/(12*fre[0]))/256; //配置定时器的高8位TL0 = (65536-FSCLK/(12*fre[0]))%256; //配置定时器的低8位ET0 = 1; //允许定时器0中断EA = 1; //打开总中断Write_1602_String("Welcome",0X80); //开机显示欢迎语:WelcomeWrite_1602_String("By 20192305007",0X80+0x40); //显示作者:20192305007Delay_ms(5000); //延时5s后开始进入正式程序LCD_1602_Init(); //液晶屏初始化Write_1602_String("Happy Play",0X80); //显示开始使用:Happy Playwhile(1){ //在这段函数中,不断扫描键值,每当键值不等于0时,说明有键被按下,//此时开始播放对应的音阶。
(完整版)基于51单片机的简易电子琴设计
鉴于 51 单片机的简略电子琴设计一.问题提出为何选择简略电子琴设计?1.关于音乐的兴趣我们对音乐都有着浓重的兴趣,喜爱听钢琴曲,如理查德·克莱德曼演奏的《思乡曲》《星空》《秋天的密语》等,音乐在我们的生活中饰演着很重要的角色。
有人曾说,喜爱音乐的人不会向恶。
从前不认为然,但是跟着这些年来慢慢喜爱上阴暗,听了愈来愈多的钢琴曲以后,感觉这句话特别有道理。
音乐是用艺术家用音符记录世界,传达感情的一种艺术形式,音乐里有一种和睦之美,听音乐能够让人心情愉快,与外界和睦一致。
音乐此刻已经成为我生活中很重要的一部分,我们每周都会抽些时间去赏识世界名曲,作为对精神的浸礼。
2.关于电子琴的好奇好奇是人的本性,人类关于自然的认识,关于科学的探究,无不始于好奇。
我们对电子琴怎样实现其功能,如音色选择、声音强弱控制、节拍器、自动放音功能等等也很好奇,想经过学习单片机这个时机,深入认识电子琴的功能实现原理。
3.关于51单片机强盛功能的信任51单片机有基本特征:(1)面向控制的 8 位 CPU 和指令系统(2)4K 字节的程序储存器( ROM 或 EPROM)(3)128 字节的数据储存器(4)可编程的并行 I/O 口 P0~P3,有 32 位双向输入 /输出线(5)一个全双工串行口(6)两个 16 位准时器 /计数器(7)五其中止源,两个优先级的中止构造(8)一个片内时钟振荡器和时钟电路(9)能够寻址 64K 字节的程序储存器和 64K 字节的外面数据储存器51单片机功能强盛,性能日益完美,在工业测控、智能仪器仪表、机电一体化产品、家电领域中应用宽泛,所以鉴于51 单片机设计简易的电子琴可行性特别大。
二.功能需求1.能够实现基本的琴键功能即每按下一个琴键,单片机能够检测到键盘的按键,并依据按键的地点,经过程序来控制,使蜂鸣器发出不一样频次(音调)的声音,声音延缓一段时间,等到按键松开后,声音停止。
而后再连续扫描,看能否有键按下,这样循环下去,即可实现基本的琴键功能。
基于51单片机的电子琴设计课程设计
目录前言 (2)第1章基于51单片机的电子琴设计 (3)1.1 电子琴的设计要求 (3)1.2 电子琴设计所用设备及软件 (3)1.3 总体设计方案 (3)第2章系统硬件设计 (5)2.1 琴键控制电路 (5)2.2 音频功放电路 (6)2.3 时钟-复位电路 (6)2.4 LED显示电路 (6)2.5 整体电路 (6)第3章电子琴系统软件设计 (7)3.1 系统硬件接口定义 (7)3.2 主函数 (8)3.2.1 主函数程序 (8)3.3 按键扫描及LED显示函数 (9)3.3.1 键盘去抖及LED显示子程序 (10)3.4 中断函数 (11)3.4.1 中断程序 (12)第4章电子琴和调试 (12)4.1 调试工具 (12)4.2 调试结果 (13)4.3 电子琴设计中的问题及解决方法 (14)第5章电子琴设计总结 (15)参考文献 (16)附录 (17)前言音乐教育是学校美育的主要途径和最重要内容,它在陶冶情操、提高素养、开发智力,特别是在培养学生创新精神和实践能力方面发挥着独特的作用。
近年来,我国音乐教育在理论与实践上都取得了有目共睹的成绩,探索并形成了具有中国特色的、较为完整的音乐教育教学体系。
但我国音乐教育的改革力度离素质教育发展的要求还存在一定距离。
如今,电子琴作为电子时代的新产物以其独特的功能和巨大的兼容性被人们广泛的接受和推崇。
而在课堂教学方面,它拥有其它乐器无法比拟的两个瞬间:瞬间多元素思维的特殊的弹奏方法;瞬间多声部(包括多音色)展示的乐队音响效果的特点。
结合电子琴自身强大的功能及独特的优点来进行音乐教育的实施,这样就应该大力推广电子琴进入音乐教室,让电子琴教学在音乐教育中发挥巨大的作用。
现代乐器中,电子琴是高新科技在音乐领域的一个代表,体现了人类电子技术和艺术的完美结合。
电子琴自动伴奏的稳定性、准确性,以及鲜明的强弱规律、随人设置的速度要求,都更便于人们由易到难、深入浅出的准确掌握歌曲节奏和乐曲风格,对其节奏的稳定性和准确性训练能起到非常大的作用。
基于单片机的电子琴设计报告-含有经典的程序案例
设计报告课程:微机接口技术与数字控制设计名称:基于单片机的电子琴设计小组成员:学号:专业:机械电子工程日期:指导老师:成绩:1 设计任务以生活中的电子琴为设计对象,实现音乐的按键控制功用。
尽量能弹奏出和谐而优美的旋律。
2 设计目的通过单片机电子琴的设计,更深层次的了解单片机技术。
熟悉单片机的控制功用和系统原理应用。
对系统设计与实用编程有进一步强化。
体验音乐的原理与魅力。
3 设计要求设计采用C语言编程控制,巧妙的运用单片机的定时器与中断功能,实现音乐的音频、节拍的实时控制。
具体要求如下:1)构造出微单片机的最小控制系统,能实现基本框架运作;2)学习音乐音符的发音原理与节拍原理,了解音乐的神奇效果,熟悉常用歌曲的歌谱,并为下面的相关实践打好理论基础;3)采用键盘设计理念,建立键符——音符的对应关系,巧妙运用音乐的频率特性,实现按键既得特定音符的功用;4)并增加按钮控制系统运作,数码管实现实时音符(按键)符显示的功能,使按键弹奏的效果更加人性化与和谐完美。
4 设计方案与技术分析4.1 某微机控制系统简介控制系统的整体设计框架,如图1所示。
图1 电子琴设计框架图设计中涉及被控对象模块和人机交互模块的电路设计,以及软件编程部分。
这将在后面的论述中逐一介绍。
本控制系统的整体设计图,如图2所示。
图2 控制系统整体设计硬件图上图为整体的电路设计,并利用PROTEUS进行了模拟仿真。
实现了预期效果。
设计中,选用两种工作模式:试音与弹奏。
通过两个按钮控制选取,并有相应的指示灯指示工作状态。
试音用于测试系统的可行性,选取童年歌曲“两只老虎”中的几句作为检测乐谱;弹奏模式下,通过4×4矩阵式键盘,完成美妙音乐的弹奏。
操作者可以按相应的键,弹奏出特定的音乐,实现作曲与奏乐的完美体验。
并且本设计中还添加了数码显示功能,用于显示实时的显示按下的键码,同时也与音符有内在的对应关系。
下面主要介绍,为何单片机可以实现美妙音乐的实时再现。
基于51单片机的电子琴设计
以下内容根据各专业特点自行确定(如条件、资料、内容、任务、进度安排及要求等):1.设计主要内容及要求基于单片机的简易电子琴的设计。
1)简要说明用单片机设计出一个简易电子琴。
此电子琴完成产生中音Do到高音Do的8个音阶功能。
2)任务和要求设计一个简易电子琴,该电子琴基本功能:通过本系统的扬声器产生从中音Do到高音Do的8个音阶。
实现的具体要求:首先设置8个按键分别连到单片机的I/O口,通过按键按下改变单片机I/O口的电平,其次根据单片机检测到I/O口上的信号,在某个I/O 引脚输出不同频率的方波,最后此方波最后输出到扬声器中。
对于此题目学生首先研究不同音阶所对应的输出频率,根据所研究的内容,完成延时模块的设计、按键检测模块和波形输出模块的设计。
3)训练目标熟练使用Keil开发环境,具备使用C语言编写单片机程序的初步能力,通过完成本课题的软硬件设计,使同学们了解单片机实例的整个开发流程。
2.对设计说明书、论文撰写内容、格式、字数的要求1)课程设计说明书(论文)是体现和总结课程设计成果的载体,一般不应少于3000字。
2)学生应撰写的内容为:中文摘要和关键词、目录、正文、参考文献等。
课程设计说明书(论文)的结构及各部分内容要求可参照《沈阳工程学院毕业设计(论文)撰写规范》执行。
应做到文理通顺,内容正确完整,书写工整,装订整齐。
3)说明书(论文)手写或打印均可。
手写要用学校统一的课程设计用纸,用黑或蓝黑墨水工整书写;打印时按《沈阳工程学院毕业设计(论文)撰写规范》的要求进行打印。
4)课程设计说明书(论文)装订顺序为:封面、任务书、成绩评审意见表、中文摘要和关键词、目录、正文、参考文献。
3.时间进度安排;III摘要随着社会的发展进步,音乐逐渐成为我们生活中很重要的一部分,有人曾说喜欢音乐的人不会向恶。
我们都会抽空欣赏世界名曲,作为对精神的洗礼。
本论文设计一个基于单片机的简易电子琴。
我们对于电子琴如何实现其功能,如声音强弱控制、节拍器、自动放音功能等等也很好奇。
基于单片机的电子琴设计_毕业设计论文
基于单片机的电子琴设计_毕业设计论文基于单片机的电子琴设计目录1 概述 (3)1.1 引言 (3)1.2 设计思路 (4)1.3 方案论证........................................................................4 2 系统总体方案及硬件设计 (4)2.1 系统组成及总体框图.........................................................4 2.2 元件介绍 (5)2.2.1 AT89S52 (5)2.2.2 三极管 (5)2.2.3 LED数码管............................................................6 2.3 按键选择方案..................................................................6 2.4各功能模块原理图 (6)2.4.1 AT89S52模块电路原理图 (6)2.4.2 键盘扫描模块电路原理图 (7)2.4.3 数码管显示模块电路原理图 (7)2.4.4 音频处理模块电路原理图..........................................7 3 软件设计 (8)3.1 音乐相关知识 (8)3.2 如何用单片机实现音乐的节拍 (8)3.3 如何用单片机产生音频脉冲 (8)3.4 系统总体功能流程图.........................................................10 4 Proteus软件仿真 (11)4.1 ISIS软件介绍 (11)4.2 仿真图介绍..................................................................11 5 系统调试 (12)5.1 硬件调试 (12)5.2 软件调试........................................................................12 6课程设计体会........................................................................12 参考文献.................................................................................12 附1:源程序代码.....................................................................22 附2:系统原理图 (23)河南理工大学本科课程设计报告概述1.1 引言电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。
基于单片机的电子琴设计
基于单片机的电子琴设计一、引言二、总体设计方案(一)设计目标设计一款基于单片机的电子琴,能够实现基本的音符演奏、音色切换、节奏控制等功能,并且具有良好的音质和稳定性。
(二)系统组成本电子琴系统主要由单片机控制模块、键盘输入模块、音频输出模块、显示模块和电源模块等部分组成。
1、单片机控制模块选用 STM32 系列单片机作为控制核心,负责处理键盘输入信号、生成音频信号、控制显示等功能。
2、键盘输入模块采用矩阵键盘,通过扫描键盘获取用户的按键操作,将其转换为对应的音符编码发送给单片机。
3、音频输出模块使用DAC 芯片将单片机生成的数字音频信号转换为模拟音频信号,再通过放大器和扬声器输出声音。
4、显示模块采用液晶显示屏,用于显示当前的演奏状态、音色选择、节奏模式等信息。
5、电源模块为整个系统提供稳定的电源供应,可采用电池供电或外接电源适配器。
三、硬件设计(一)单片机最小系统STM32 单片机的最小系统包括时钟电路、复位电路和电源电路。
时钟电路为单片机提供工作时钟,复位电路用于系统初始化,电源电路为单片机提供稳定的电源。
(二)键盘电路矩阵键盘由行线和列线组成,通过逐行扫描的方式检测按键状态。
将键盘的行线和列线分别连接到单片机的 GPIO 引脚,通过编程实现键盘扫描和按键识别。
(三)音频输出电路选用高性能的 DAC 芯片,如 PCM1794,将单片机输出的数字音频信号转换为模拟音频信号。
为了提高音频输出的质量,还需要添加放大器和滤波电路,以增强信号的功率和去除噪声。
(四)显示电路液晶显示屏通过 SPI 接口或 I2C 接口与单片机连接,单片机通过发送指令和数据来控制显示屏的显示内容。
(五)电源电路根据系统的工作电压和电流需求,选择合适的电源芯片,如LM7805 等,将输入电源转换为所需的电压,并通过滤波电容等元件提高电源的稳定性。
四、软件设计(一)主程序流程主程序首先进行系统初始化,包括单片机初始化、键盘初始化、音频输出初始化、显示初始化等。
基于51单片机简易电子琴设计报告
创新制作报告简易电子琴设计摘要本设计主要研究基于STC90C51单片机地简易电子琴设计.它是以单片机作为主控核心,键盘、电脑音响、led等外围器件构成;本设计硬件部分主要由最小系统,按键系统模块、led显示模块和发声模块组成.其软件部分主要有主程序模块、定时中断程序、定时计数程序、显示程序.(1)最小系统:它是单片机应用系统地设计基础.它包括单片机地选择、时钟系统设计、复位电路设计等.(2)按键系统模块:本设计采用24个按键,其中21个按键用来显示21个音调,其它3个按键可以进行功能地切换.(3)LED显示模块:八个LED,七个红色LED来显示音符,1个绿色LED指示.(4)发声模块:此电子琴发音是用现成地电脑音响.本次设计首先对单片机设计简易电子琴仔细分析,接着制作硬件电路和编写软件地程序,最后进行软硬件地调试运行.并且从原理图,主要芯片,各模块地原理和各个模块地程序调试来阐述.利用单片机产生不同频率来获得我们要求地音阶,实现高、中、低共21个音符地发音和显示和音乐播放时地控制显示,并且能自动播放程序中编排地音乐,同时还有保存兵播放已按下地音符.系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠.目录1.概述41.1设计背景41.2设计意义41.3 设计任务42.系统总体方案及硬件设计42.1总体设计42.2硬件设计62.3单片机地最小工作系统62.4电源设计:2.5按键设计:2.6LED灯设计:2.7发声模块:3.系统软件地地编写 73.1电子琴基本原理 73.2主程序 93.3播放音乐模块 163.4录音模块 204.1硬件调试 234.2软件调试 235课程设计体会附1 源程序代码241.概述1.1设计背景由于本课程要做一个创新制作,而老师给地参考题中觉得电子琴这课题不错,因为电子琴能陶冶人地情操,同时使人更快乐,他能真正影响人地心情,因此决定做.单片机技术使我们可以利用软硬件来实现电子琴地功能,从而可以实现电子琴地微型化,可以用作玩具琴、音乐转盘以及音乐童车等等.并且可以进行一定地功能扩展.鉴于传统电子琴可以用键盘上地“1”到“A”键演奏从低So到高DO等11个音,从而也可以通过单片机实现对十个按键地扩展,实现七个音符键地高、中、低21个音调地显示播放和音乐地自动播放.1.2设计意义①可以了解音乐地基本知识;②加深对单片机地使用;③学会自己做工程;1.3 设计任务实现电子琴发声控制系统;要求电路实现如下功能:利用现成电脑音响作为发声部件,21个音符键,实现高音、中音、低音地1、2、3、4、5、6、7地发音.并在存储几首歌曲地内容,可以实现自动播放.2.系统总体方案及硬件设计2.1总体设计音乐是有由不同地音阶组成地,而不同地音阶又是由不同地频率发出地,那么产生不同地频率,就可以发出不同地音乐了.而利用单片机就可以产生不同地频率地方波,因此选择单片机为为主来设计.通过程序编写实现单片机输出不同地频率,输出地方波信号再通过接口给电脑音响,让其发声.同时电子琴加入led用来显示.本设计地主要工作是程序编写,通过程序让电子琴实现音乐演奏,歌曲播放以及记录已按下地音符,并播放,最后实现led显示.而硬件主要有单片机最小系统,键盘模块,发声模块,还有一个电源模块.总体框图22.2硬件设计电路图1注:本系统有主控单片机、键盘、led 显示模块、发声模块以及电源组成.2.2.2单片机地最小工作系统:按键输入LED 显示电脑音响单片机这里用地单片机地型号是STC90C516RD+,配以12M地晶振,以及复位电路供电电路构成最小系统.2.2.3电源设计:这里电源直接用直流5v电源;2.2.4按键设计:按键采用4*6扫描;4根行线接P10-P13,六根列线接P14-P17以及P20,P21口共24个按键,0-20代表音符键,0-6代表低音1,2,3,4,5,6,7;7-13代表中音1,2,3,4,5,6,7;14-20代表高音1,2,3,4,5,6,7;21号按键表示播放歌曲键,当按下21号键,进入播放歌曲函数,当按下22号键时,播放下一首歌曲,当按下23键时,退出播放返回主程序.而在主程序中时,代表演奏状态,当按下23号键时,进入录音状态,此时有个绿色地指示灯会亮.而进入录音后,再按一次23键,指示灯灭,退出录音状态,返回主程序.2.2.5LED灯设计:七个红色地LED代表按键地音符DO,RE,MI...分别接到P0口地各个I端口音符DO时,一个LED亮,音符MI时,2个LED亮...同时为了区分高中低音,三个八度LED显示不同,当低音音符播放时,LED闪亮,当是中音时,LED也闪亮,但是闪亮地频率更快,当是高音时,LED全亮,这是通过调节LED亮灭时间来实现,也可以说是PWM吧.还有一个绿色LED指示当前状态,当电子琴处于录音时,LED亮,否则,灭;2.2.6发声模块:这里没有自己做功放,而是使用电脑地音响.3系统软件地地编写3.1电子琴基本原理首先地弄清楚电子琴地基本原理:声音地频谱范围约在几十到几千赫兹,若能利用程序来控制单片机地某个口线不断输出“高”“低”电平,则在该口线上就能产生一定频率地方波,讲该方波接上喇叭就能发出一定频率地声音,若再利用程序控制“高”“低”电平地持续时间,就能改变输出波形地频率从而改变音调.乐曲中,每个音符对应着确定地频率,下表给出各音符频率.如果单片机某个口线输出“高”“低”电平地频率和某个音符地频率一样,那么将此口线接上喇叭就可以发出此音符地声音.根据这个原理就能设计出,对于单片机来说要产生一定频率地方波大致是先将某口线输出高电平然后延迟一段时间再输出低电平,如此循环地输出就会产生一定频率地方波,通过改变延迟地时间就可以改变输出方波地频率.单片机内部有两个定时计数器T1和T0,单片机地定时计数器实际上是个计数装置,它既可以对单片机内部晶振驱动时钟计数,也可以对外部输入地脉冲计数,对内部晶振计数时称为定时器,对外部时钟计数时称为计数器.当对单片机内部晶振驱动时钟计数时,每个机器周期定时计数器地计数值就加,当计数值达到计数最大值时计数完毕并通知单片机.音乐中各个音符地频率表如下:音符频率表3弄懂后开始程序地实现3.2主程序模块主程序框图参数计算发音原理若要产生音频脉冲,只要算出某一音频地周期(1/频率),再将此周期除以2,即为半周期地时间.利用定时器计时半周期时间,每当计时终止后就将P1.0反相,然后重复计时再反相.就可在P1.0引脚上得到此频率地脉冲.利用AT89C51地内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率地方法产生不同音阶.计算举例例如,频率为523Hz,其周期T=1/523=1912μs,因此只要令计数器计时956μs/1μs=956,每计数956次时将I/O反相,就可得到中音DO(523Hz).计数脉冲值与频率地关系式是:N=fi÷2÷fr,式中,N是计数值;fi是机器频率(晶体振荡器为12MHz时,其频率为1MHz);fr是想要产生地频率.其计数初值T地求法如下:T=65536-N=65536-fi÷2÷fr 例如:设K=65536,fi=1MHz,求中音DO(261Hz).T=65536-N=65536-fi÷2÷fr =65536-1000000÷2÷fr=65536-500000/fr,中音DO地T=65536-500000/523=64580. 3.2.3计算结果(1)单片机12MHZ晶振,中音符与计数T0相关地计数值如表所示:采用查表程序进行查表时,可以为这个音符建立一个表格,有助于单片机通过查表地方式来获得相应地数据:低音0-19之间,中音在20-39之间,高音在40-59之间.用单片机播放音乐,或者弹奏电子琴,实际上是按照特定地频率,输出一连串地方波.为了输出合适地方波,首先应该知道音符与频率地关系.(2)音调数据表曲调值DELAY曲调值DELAY调4/4125ms调4/462ms调3/4187ms调3/494ms调2/4250ms调2/4125ms 上表中地频率数值,有些过多,去掉不常用地黑键频率,只是把白键对应地数据存放在单片机中,即可满足绝大部分地应用需求.定义音调数据表地程序如下:DW 63628,63835,64021,64103,64260,64400,64524 。
课程设计报告---基于单片机的电子琴设计
课程设计报告---基于单片机的电子琴设计河南理工大学《单片机应用与仿真训练》设计报告基于单片机的电子琴设计姓名:郭鹏超王芳学号:310808010609 310808010602专业班级:电气08-6班指导老师:王莉所在学院:电气工程与自动化学院2012年5月19 日摘要当代,爱好音乐的人越来越多,有不少人自己练习弹奏乐器作为业余爱好和一种放松的手段,鉴于一些乐器学习难度大需要太多的学习时间,且其价格又太过于高昂,使得一部分有这种想法的人不得不放弃这种想法。
而一些简易的电子乐器价格相对便宜,学习上手快,一般人容易负担的起,能够满足一般爱好者的需求,故简易电子琴的研制具有一定的社会意义。
本次课程设计主要研究基于AT89S52单片机的简易电子琴设计。
整个系统主要包括以下几个部分组成:(1)单片机的最小系统:最小应用系统设计是单片机应用系统的设计基础。
它包括单片机的选择、时钟系统设计、复位电路设计、简单的I/O口扩展、掉电保护等。
(2)矩阵键盘:当按键数目较多时,为了节省I/O口线,通常采用矩阵式键盘接口电路。
本设计采用5*8矩阵键盘(共40个按键,其中36个按键用来显示高中低音的1、1#、2、2#、3、4、4#、5、5#、6、6#、7的36个音调,其它4个按键可以随意的播放已存歌曲)。
(3)产生外部中断的系统:它由两个四输入与非门74LS20和一个两输入或非门74LS02组成,把矩阵的五行与与非门74LS20和或非门74LS02相接后接在了单片机的P3.2口,下降沿触发产生中断INT0。
(4)发音电路:此电子琴发音电路是由或非门来驱动扬声器发音的,控制单片机的P2.7口产生不同频率使扬声器发出不同的音调。
本文主要对单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴的硬件组成。
并且从原理图,主要芯片,各模块的原理和各个模块的程序调试来阐述。
利用单片机产生不同频率来获得我们要求的音阶,最终可以随意弹奏想要表达的音乐,还设计了一按键用来自动播放一首曲子。
基于单片机的电子琴设计
基于单片机的电子琴设计电子琴是一种常见的乐器,通过电子元件和技术实现各种声音效果和音调的变化。
基于单片机的电子琴设计,使用单片机作为核心控制芯片,可以实现各种音色的生成、乐曲演奏和音调调整等功能。
一、基本原理1.音源生成:通过单片机的计算和控制,生成各种音色的数字波形信号。
可以使用PWM波形发生器,通过控制占空比实现不同音调的发声。
2.按键输入:通过按键进行音符的选择和演奏,按键可以通过矩阵键盘或编码器等方式实现,通过单片机的GPIO口读取按键输入信号。
3.音量控制:通过调节音量电阻或数字控制器,调整输出音量大小。
4.音色调整:通过改变生成波形的参数和算法,实现不同音色效果的切换和调整。
二、硬件设计1.单片机:选择合适的单片机,如STC89C52或ATmega328P等,作为控制核心。
2.键盘:选择合适的键盘结构和按键数量,如矩阵键盘或编码器。
3.音源:可以选择合适的音源模块或芯片,如AD9833,用于生成各种音色的波形信号。
4.音量控制:将数字音频信号通过运放进行放大,通过音量电位器或数字控制器调节输出音量大小。
5.音箱:选择合适的音箱,用于放大和放出音频信号。
三、软件设计1.按键扫描:通过单片机的GPIO口读取按键输入信号,实现按键的扫描和检测。
2.音符和音调处理:将按键输入映射为相应的音符号,通过生成不同的波形并控制频率实现不同音调的发声。
3.音量控制:通过改变音源模块的输出幅度或控制运放的增益,实现音量的调节。
4.音色调整:通过改变生成音色的参数和算法,实现不同音色效果的切换和调整。
5.乐曲演奏:通过编写相应的乐曲和音符的编码和播放算法,实现各种乐曲的演奏功能。
6.界面显示:可以通过液晶显示屏或LED显示器,实现界面的显示和操作。
四、功能扩展1.录音和播放:在单片机上添加存储模块(如SD卡或FLASH芯片),实现录音和播放功能,可以录制和回放演奏的音乐。
2.MIDI接口:添加MIDI接口,通过MIDI合成音源模块,实现与其他乐器和设备的互联。
基于51单片机的简易电子琴的设计与实现
基于51单片机的简易电子琴设计一、设计任务及要求1、在该简易电子琴设计中,设置8个按键,8个按键能够发出do、re、mi、fa、sol、la、si、Do 8个音阶。
二、设计三个拨码开关,三个拨码开关能够调剂高音、中音、低音三个音调。
3、画出电路的整体方框图和电路原理图。
二、设计原理音乐由许多不同的音阶组成的,而每一个音阶对应着不同的频率,如此,咱们就能够够利用不同的频率组合,组成咱们想要的音乐。
简易电子琴是摁下拨码开关时,单片机AT89C51会发作声音,声音从端口通过LM386,通过放大以后传入喇叭。
声音主若是通过单片机4×4矩阵键盘的按键产生,那个地址只用到8个按键来产生高中低的8个音阶,来产生do re mi fa sol la si Do。
下面是计数初值:中1DO 523 0956 64580 #4FA# 1480 338 65198#1DO# 554 0903 64633 高5SO 1568 319 65217中2RE 578 0842 64684 #5SO# 1661 292 65235#2RE# 622 0804 64732 高6LA 1760 284 65252中3MI 659 0759 64777 #6LA# 1865 268 65268中4FA 698 0716 64820 高7SI 1976 253 65283三、设计方案本次设计的电子琴主若是利用AT89C51单片机为核心操纵元件,同时还包括键盘、拨码开关和扬声器等操纵模块,由键盘选择八个音阶。
一、电路原理图的整体设计整体电路需要c51单片机一片,音乐按键及喇叭等外围电路,要进行音调操纵和音频放大,设计好的电路图如以下图所示:2、键盘操纵模块的设计矩阵按键部份由8个轻触按键依照2行4列排列,连接到P3端口。
将行线所接的单片机的I/O口作为输出端,而列线所接的I/O,那么作为输入。
行线输出是低电平,有健按下,那么输入线就会被拉低,如此,通过读输入线的状态就可得知是不是有键按下。
基于单片机的电子琴设计程序
#include <reg51.h>#define uchar unsigned char#define uint unsigned int#define disp_Off 0x3e#define disp_On 0x3f#define page_Add 0xb8 //页#define col_Add 0x40 //列#define start_Line 0xC0 //行//以下是C调中音的音频宏定义#define Z1 523 //将"Z1"宏定义为中音"1"的频率523Hz #define Z2 587 //将"Z2"宏定义为中音"2"的频率587Hz #define Z3 659 //将"Z3"宏定义为中音"3"的频率659Hz #define Z4 698 //将"Z4"宏定义为中音"4"的频率698Hz #define Z5 784 //将"Z5"宏定义为中音"5"的频率784Hz #define Z6 880 //将"Z6"宏定义为中音"6"的频率880Hz #define Z7 987 //将"Z7"宏定义为中音"7"的频率523H //以下是C调高音的音频宏定义#define H1 1046 //将"H1"宏定义为高音"1"的频率1046Hz #define H2 1174 //将"H2"宏定义为高音"2"的频率1174Hz #define H3 1318 //将"H3"宏定义为高音"3"的频率1318Hz #define H4 1396 //将"H4"宏定义为高音"4"的频率1396Hz #define H5 1567 //将"H5"宏定义为高音"5"的频率1567Hz #define H6 1760 //将"H6"宏定义为高音"6"的频率1760Hz #define H7 1975 //将"H7"宏定义为高音"7"的频率1975Hz//液晶显示器的端口定义sbit cs1=P2^1 ; //片选1sbit cs2=P2^2 ; //片选2sbit res=P2^3 ; //复位信号sbit rs=P2^4 ; //数据/指令选择sbit rw=P2^5 ; //读/写选择sbit en=P2^6 ; //读/写使能sbit key2=P2^7 ; //定义功能键key2,按下后开始播放音乐sbit sound=P2^0; //定义音频输出端sbit key1=P3^7 ; //定义功能键key1,按下后键入电子琴状态//矩阵键盘的定义端口sbit P14=P1^4; //将P14位定义为P1.4引脚sbit P15=P1^5; //将P15位定义为P1.5引脚sbit P16=P1^6; //将P16位定义为P1.6引脚sbit P17=P1^7; //将P17位定义为P1.7引脚//定义led端口sbit d0=P3^0;sbit d1=P3^1;sbit d2=P3^2;sbit d3=P3^3;sbit d4=P3^4;sbit d5=P3^5;sbit d6=P3^6;uint C,ff,k,num; //c为初值,ff为频率uchar keyval; //定义变量储存按键值//数码管显示数组uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//以下是《天空之城》简谱uint code f[]={Z6,Z7,/**/H1,Z7,H1,H3,/**/Z7,Z3,Z3,/**/Z6,Z5,Z6,H1,/**/Z5,Z3,Z3, /**/Z4,Z3,Z4,H1,Z3,H1,H1,H1,/**/Z7,Z4,Z4,Z7,/**/Z7,Z6,Z7,/**/H1,Z7,H1,H3,/**/Z7,Z3,Z3,/**/Z6,Z5,Z6,H1, Z5,Z3,/**/Z4,H1,Z7,H1,/**/H2,H2,H2,H1,/**/H1,Z6,Z7,Z5,/**/Z6,H1,H2,/**/H3,H2,H3,H5, H2,Z5,Z5,/**/H1,Z7,H1,H3,/**/H3,/**/Z6,H1,Z7,H2,/**/H1,Z5,Z5,/**/H4,H3,H2,H1,H3, /**/Z3,H3,/**/H6,H5,H5, /**/H3,H2,H1,H1,/**/H2,H1,H2,H5,/**/H3,H3,H6,H5, /**/H3,H2,H1,H1,/**/H2,H1,H2,Z7,/**/Z6,Z6,Z7,/**/Z6,0xff}; //以0xff作为音符的结束标志//以下是简谱中每个音符的节拍//"4"对应4个延时单位,"2"对应2个延时单位,"1"对应1个延时单位uchar code JP[ ]={4,4,/**/12,4,8,8,/**/20,4,4,/**/12,4,8,8,/**/20,4,4,/**/12,4,4,12,20,4,4,4,/**/12,4,8,8,/**/20,4,4,/**/12,4,8,8,/**/20,4,4,/**/12,4,8,8,32,4,/**/8,4,6,8,/**/4,4,4,16,/**/8,4,6,8,/**/24,4,4,/**/12,4,8,8,24,4,4,/**/4,4,8,8,/**/32,/**/4,8,8,6,/**/12,4,16,/**/8,8,8,8,30,/**/20,8,/**/16,8,8,/**/4,4,16,8,/**/8,4,4,8,/**/20,8,16,16,/**/4,20,8,/**/8,4,4,8,/**/20,4,4,/**/32,};//定义"正(0) 在(1) 播(2) 放(3) :(4)"数组uchar code hz1[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0xC2,0x02,0x02,0x02,0xFE,0x82,0x82,0x82,0x82,0x82,0x02,0x00,0x00,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,/*"正",0*///正0x08,0x08,0x88,0xC8,0x38,0x0C,0x0B,0x08,0x08,0xE8,0x08,0x08,0x08,0x08,0x08,0x00,0x02,0x01,0x00,0xFF,0x40,0x41,0x41,0x41,0x41,0x7F,0x41,0x41,0x41,0x41,0x40,0x00,/*"在",1*///在0x10,0x10,0xFF,0x10,0x90,0x82,0x56,0x3A,0x12,0x7F,0x11,0x39,0x55,0x90,0x80,0x00,0x42,0x82,0x7F,0x01,0x00,0x00,0xFF,0x49,0x49,0x7F,0x49,0x49,0xFF,0x00,0x00,0x00,/*"播",2*///播0x08,0x08,0xF9,0x4A,0x48,0xC8,0x48,0x20,0xD8,0x17,0x10,0x10,0xF0,0x10,0x10,0x00,0x40,0x30,0x0F,0x20,0x40,0x3F,0x80,0x40,0x21,0x16,0x08,0x16,0x21,0x40,0x80,0x00,/*"放",3*///放0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*":",4*///:0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};//定义"《(0) 天(1) 空(2) 之(3) 城(4) 》(5)"数组uchar code hz2[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x90,0x48,0x24,0x12,0x09,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x09,0x12,0x24,0x48,0x10,0x20,0x00,0x00,/*"《",0*///《0x40,0x40,0x42,0x42,0x42,0x42,0x42,0xFE,0x42,0x42,0x42,0x42,0x42,0x40,0x40,0x00,0x80,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x03,0x0C,0x10,0x20,0x40,0x80,0x80,0x00,/*"天",1*///天0x10,0x0C,0x44,0x24,0x14,0x04,0x05,0x06,0x04,0x04,0x14,0x24,0x44,0x14,0x0C,0x00,0x00,0x40,0x40,0x41,0x41,0x41,0x41,0x7F,0x41,0x41,0x41,0x41,0x40,0x40,0x00,0x00,/*"空",2*///空0x00,0x10,0x10,0x10,0x10,0x10,0x11,0x16,0x10,0x90,0x50,0x30,0x10,0x00,0x00,0x00,0x00,0x40,0x20,0x10,0x10,0x28,0x44,0x42,0x41,0x40,0x40,0x40,0x40,0x40,0x40,0x00,/*"之",3*///之0x20,0x20,0xFF,0x20,0x20,0xF8,0x88,0x88,0x88,0x08,0xFF,0x08,0x09,0xCA,0x08,0x00,0x10,0x30,0x1F,0x88,0x68,0x1F,0x10,0x20,0x9F,0x40,0x27,0x18,0x26,0x41,0xF0,0x00,/*"城",4*///城0x00,0x00,0x02,0x04,0x09,0x12,0x24,0x48,0x90,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x10,0x48,0x24,0x12,0x09,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x00,/*"》",5*///》0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/************************************************函数功能:1个延时单位,延时200ms,用于节拍延时*************************************************/void delayjp(){unsigned char i,j;for(i=0;i<100;i++)for(j=0;j<250;j++);}/*************************************************函数功能:用于LCD显示延时程序**************************************************/void delaylcd(uchar x){int d;uchar y;for(y=0;y<x;y++)for(d=0;d<10;d++);}/*********************************************函数功能:一般延时函数**********************************************/void delayms(uint x){uint i,j;for(i=x;i>0;i--)for(j=110;j>0;j--);}/*********************************************函数功能:数码管显示函数**********************************************/void display(uchar key){uchar key1 ;key1=key-1 ;P0=table[key1];}/*******************************************函数功能:输出音频、输出数码管显示函数******************************************/void output(void){display(keyval);C=(46083/ff)*10; //计算定时常数,c为定时常数TH1=(8192-C)/32; //可证明这是13位计数器TH0高8位的赋初值方法TL1=(8192-C)%32; //可证明这是13位计数器TL0低5位的赋初值方法TR1=1 ; //开定时T0delayms(200) ; //延时200ms,播放音频TR1=0 ; //关闭定时器sound=~sound ; //关闭蜂鸣器keyval=0xff ; //播放按键音频后,将按键值更改,停止播放}/********************************************************函数功能:当播放音乐时使对应音符的LED灯亮*********************************************************/void opled(uint num){if((num==523)|(num==1046))d0=0;if((num==587)|(num==1174))d1=0;if((num==659)|(num==1318))d2=0;if((num==698)|(num==1396))d3=0;if((num==784)|(num==1567))d4=0;if((num==880)|(num==1760))d5=0;if((num==987)|(num==1975))d6=0;}/*************************************************函数功能:进行矩阵键盘扫描,判断键位**************************************************/void keyscan(void){P1=0xf0; //所有行线置为低电平“0”,所有列线置为高电平“1”if((P1&0xf0)!=0xf0) //列线中有一位为低电平“0”,说明有键按下{delayms(10); //延时一段时间、软件消抖if((P1&0xf0)!=0xf0) //确实有键按下{P1=0xfe; //第一行置为低电平“0”(P1.0输出低电平“0”)if(P14==0) //如果检测到接P1.4引脚的列线为低电平“0”{ keyval=1; //可判断是S1键被按下while(!(P1==0xfe));}if(P15==0) //如果检测到接P1.5引脚的列线为低电平“0”{keyval=2; //可判断是S2键被按下while(!(P1==0xfe));}if(P16==0) //如果检测到接P1.6引脚的列线为低电平“0”{keyval=3; //可判断是S3键被按下while(!(P1==0xfe));}if(P17==0) //如果检测到接P1.7引脚的列线为低电平“0”{ keyval=4; //可判断是S4键被按下while(!(P1==0xfe));}P1=0xfd; //第二行置为低电平“0”(P1.1输出低电平“0”)if(P14==0) //如果检测到接P1.4引脚的列线为低电平“0”{ keyval=5; //可判断是S5键被按下while(!(P1==0xfd));}if(P15==0) //如果检测到接P1.5引脚的列线为低电平“0”{ keyval=6; //可判断是S6键被按下while(!(P1==0xfd));}if(P16==0) //如果检测到接P1.6引脚的列线为低电平“0”{ keyval=7; //可判断是S7键被按下while(!(P1==0xfd));}if(P17==0) //如果检测到接P1.7引脚的列线为低电平“0”{ keyval=8; //可判断是S8键被按下while(!(P1==0xfd));}P1=0xfb; //第三行置为低电平“0”(P1.2输出低电平“0”)if(P14==0) //如果检测到接P1.4引脚的列线为低电平“0”{keyval=9; //可判断是S9键被按下while(!(P1==0xfb));}if(P15==0) //如果检测到接P1.5引脚的列线为低电平“0”{ keyval=10; //可判断是S10键被按下while(!(P1==0xfb)); }if(P16==0) //如果检测到接P1.6引脚的列线为低电平“0”{keyval=11; //可判断是S11键被按下while(!(P1==0xfb));}if(P17==0) //如果检测到接P1.7引脚的列线为低电平“0”{keyval=12; //可判断是S12键被按下while(!(P1==0xfb));}P1=0xf7; //第四行置为低电平“0”(P1.3输出低电平“0”)if(P14==0) //如果检测到接P1.4引脚的列线为低电平“0”{keyval=13; //可判断是S13键被按下while(!(P1==0xf7));}if(P15==0) //如果检测到接P1.5引脚的列线为低电平“0”{keyval=14; //可判断是S14键被按下while(!(P1==0xf7));}if(P16==0) //如果检测到接P1.6引脚的列线为低电平“0”{ keyval=15; //可判断是S15键被按下while(!(P1==0xf7));}if(P17==0) //如果检测到接P1.7引脚的列线为低电平“0”{keyval=16; //可判断是S16键被按下while(!(P1==0xf7));}}}}/*********************************************函数功能:检查LCD是否忙**********************************************/void checkstate(){uchar dat,DATA; //状态信息(判断是否忙)rs=0; // 数据\指令选择rw=1; //R/W="H" ,E="H"数据被读到DB7∽DB0do{DATA=0x00;en=1; //EN下降源delaylcd(1); //延时dat=DATA;en=0;dat=0x80 & dat; //仅当第7位为0时才可操作(判别busy信号) }while(!(dat==0x00));}/**********************************************函数功能:写命令到LCD程序***********************************************/void write_com(uchar cmdcode){checkstate(); //检测LCD是否忙rs=0;rw=0;P0=cmdcode;delaylcd(1);en=1;delaylcd(1);en=0;}/************************************************函数功能:写数据到LCD程序*************************************************/void write_data(uchar Dispdata){checkstate(); //检测LCD是否忙rs=1;rw=0;P0=Dispdata;delaylcd(1);en=1;delaylcd(1);en=0;}/*******************************************函数功能:LCD初始化程序********************************************/void init_lcd(){delaylcd(1);cs1=1; //刚开始关闭两屏cs2=1;delaylcd(1);write_com(disp_Off); //写初始化命令write_com(page_Add+0);write_com(start_Line+0);write_com(col_Add+0);write_com(disp_On);}/********************************************函数功能:清屏函数*********************************************/void clr_scr(){uchar j,k;cs1=0; //左、右屏均开显示cs2=0;write_com(page_Add+0);write_com(col_Add+0);for(k=0;k<8;k++) //控制页数0-7,共8页{write_com(page_Add+k); //每页每页进行写for(j=0;j<64;j++) //每页最多可写32个中文文字或64个ASCII字符{write_com(col_Add+j);write_data(0x00); //控制列数0-63,共64列,写点内容,列地址自动加1 }}}/**********************************************函数功能:LCD一行一行写入显示数据***********************************************/Disp(uchar page,uchar column, uchar code *word){uchar i;cs1=0;cs2=1;write_com(0xb8+page);write_com(0x40+column);for(i=0;i<16;i++)write_data(word[i]);for(i=32;i<48;i++)write_data(word[i]);for(i=64;i<80;i++)write_data(word[i]);for(i=96;i<112;i++)write_data(word[i]);cs1=1;cs2=0;write_com(0xb8+page);write_com(0x40);for(i=128;i<144;i++)write_data(word[i]);for(i=160;i<176;i++)write_data(word[i]);for(i=192;i<208;i++)write_data(word[i]);for(i=224;i<240;i++)write_data(word[i]);cs1=0;cs2=1;write_com(0xb8+page+1);write_com(0x40+column);for(i=16;i<32;i++)write_data(word[i]);for(i=48;i<64;i++)write_data(word[i]);for(i=80;i<96;i++)write_data(word[i]);for(i=112;i<128;i++)write_data(word[i]);cs1=1;cs2=0;write_com(0xb8+page+1);write_com(0x40);for(i=144;i<160;i++)write_data(word[i]);for(i=176;i<192;i++)write_data(word[i]);for(i=208;i<224;i++)write_data(word[i]);for(i=240;i<250;i++)write_data(word[i]);}/******************************************函数功能:程序主函数,进行功能选择*******************************************/void main(){uchar ii,jj; //ii确定音频数组元素,jj控制节拍数EA=1; //开总中断ET0=1; //定时器T0中断允许ET1=1; //定时器T1中断允许TMOD=0x00; //使用定时器T0、T1的模式0(13位计数器) P0=0; //开始使数码管不显示if(key2==0) //功能键key2按下,用于显示12864{delayms(10); //延时去抖if(key2==0) //功能键key2确实按下{P0=0;init_lcd();clr_scr();k=0;while(1){for(k=0xc0;k<0xff;k=k+16){Disp(2,0,hz1);Disp(4,0,hz2);}ii=0; //从第1个音符f[0]开始播放while(f[ii]!=0xff) //只要没有读到结束标志就继续播放{C=460830/f[ii]; //确定初值TH0=(8192-C)/32; //可证明这是13位计数器TH0高8位的赋初值方法 5TL0=(8192-C)%32; //可证明这是13位计数器TL0低5位的赋初值方法TR0=1; //启动定时器T0num=f[ii];opled(num);for(jj=0;jj<JP[ii];jj++) //控制节拍数delayjp(); //延时1个节拍单位TR0=0; //关闭定时器T0P3=0xff;ii++; //播放下一个音符}}}}if(key1==0) //功能键key1按下{delayms(10); //延时去抖if(key1==0) //功能键key1确实按下{cs1=1;cs2=1;P0=0xff; //使数码管全亮while(1) //无限循环{keyscan();switch(keyval){case 1:ff=Z1; //如果第1个键按下,将中音1的频率赋给ffoutput(); //转去计算定时常数,输出音频和数字break;case 2:ff=Z2; //如果第2个键按下,将中音2的频率赋给ffoutput(); //转去计算定时常数,输出音频和数字break;case 3:ff=Z3; //如果第3个键按下,将中音3的频率赋给ffoutput(); //转去计算定时常数,输出音频和数字break;case 4:ff=Z4; //如果第4个键按下,将中音4的频率赋给ffoutput(); //转去计算定时常数,输出音频和数字break;case 5:ff=Z5; //如果第5个键按下,将中音5的频率赋给ffoutput(); //转去计算定时常数,输出音频和数字break;case 6:ff=Z6; //如果第6个键按下,将中音6的频率赋给ffoutput(); //转去计算定时常数,输出音频和数字break;case 7:ff=Z7; //如果第7个键按下,将中音7的频率赋给ffoutput(); //转去计算定时常数,输出音频和数字break;case 8:ff=H1; //如果第8个键按下,将高音1的频率赋给ffoutput(); //转去计算定时常数,输出音频和数字break;case 9:ff=H2; //如果第9个键按下,将高音2的频率赋给ffoutput(); //转去计算定时常数,输出音频和数字break;case 10:ff=H3; //如果第10个键按下,将高音3的频率赋给ffoutput(); //转去计算定时常数,输出音频和数字break;case 11:ff=H4; //如果第11个键按下,将高音4的频率赋给ffoutput(); //转去计算定时常数,输出音频和数字break;case 12:ff=H5; //如果第12个键按下,将高音5的频率赋给ffoutput(); //转去计算定时常数,输出音频和数字break;case 13:ff=H6; //如果第13个键按下,将高音6的频率赋给ffoutput(); //转去计算定时常数,输出音频和数字break;case 14:ff=H7; //如果第14个键按下,将高音7的频率赋给ffoutput(); //转去计算定时常数,输出音频和数字break;case 15:ff=H1; //如果第15个键按下,将高音1的频率赋给ffoutput(); //转去计算定时常数,输出音频和数字break;case 16:ff=H2; //如果第16个键按下,将高音2的频率赋给ffoutput(); //转去计算定时常数,输出音频和数字break;}}}}}/************************************************************函数功能:定时器T0的中断服务,使P2.0引脚输出音频方波播放音乐**************************************************************/void Time0() interrupt 1 using 1{sound=!sound; //将P2.0引脚输出电平取反,形成方波TH0=(8192-C)/32; //可证明这是13位计数器TH0高8位的赋初值方法TL0=(8192-C)%32; //可证明这是13位计数器TL0低5位的赋初值方法}/************************************************************函数功能:定时器T1的中断服务,使P2.0引脚输出音频方波输出音符**************************************************************/void Time1() interrupt 3 using 1{TH1=(8192-C)/32; //可证明这是13位计数器TH0高8位的赋初值方法TL1=(8192-C)%32; //可证明这是13位计数器TL0低5位的赋初值方法sound=!sound; //将P2.0引脚取反,输出音频方波}。
基于51单片机的电子琴设计课程设计
基于51单片机的电子琴设计课程设计单片机原理》课程设计前言本课程设计旨在通过基于51单片机的电子琴设计,加深学生对单片机原理的理解和应用。
在本设计中,我们将介绍电子琴的设计要求、所用设备及软件以及总体设计方案。
随后,我们将详细介绍系统硬件设计中琴键控制电路、音频功放电路、时钟-复位电路和LED显示电路的设计。
第1章基于51单片机的电子琴设计1.1 电子琴的设计要求在电子琴的设计中,我们需要考虑琴键数量、音频输出质量、电源电压和外部接口等因素。
在本设计中,我们将采用25个琴键,保证音频输出质量和电源电压稳定,并提供外部接口以便于扩展和调试。
1.2 电子琴设计所用设备及软件在本设计中,我们将使用51单片机、琴键、音频功放、时钟、LED显示器等设备,并使用Keil C51编译器进行软件开发。
1.3 总体设计方案在总体设计方案中,我们将采用按键扫描方式实现琴键控制,使用PWM技术实现音频输出,使用外部晶振提供时钟信号,并使用LED显示器显示琴键状态。
第2章系统硬件设计2.1 琴键控制电路在琴键控制电路中,我们将采用矩阵按键扫描方式,通过51单片机的IO口进行扫描和检测。
同时,我们还将使用电容式触摸开关来实现琴键的触发。
2.2 音频功放电路在音频功放电路中,我们将采用TDA7297芯片作为功放,通过PWM技术实现音频输出,并通过滤波电路滤除杂音和谐波。
2.3 时钟-复位电路在时钟-复位电路中,我们将采用12MHz晶振作为时钟源,并使用复位电路确保系统在上电时能够正确运行。
2.4 LED显示电路在LED显示电路中,我们将采用MAX7219芯片实现LED点阵显示,并通过SPI接口与51单片机进行通信。
同时,我们还将使用CD4511芯片实现数码管显示琴键状态。
通过本课程设计,我们可以深入理解单片机原理的应用,掌握电子琴的设计和制作技术,提高自身的实践能力和创新能力。
2.5 整体电路本章将介绍电子琴的整体电路设计。
基于单片机的简易电子琴设计(C语言编程)
基于单片机的简易电子琴设计摘要电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。
它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。
本文的主要内容是用AT89S51单片机作为核心控制元件,设计一个电子琴。
以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器。
本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。
关键词:单片机键盘扬声器电子琴AbstractElectronic organ is a modern electronic music technology and the product is a new type of keyboard instruments. It played an important role in modern music. SCM has powerful control functions and flexible programming characteristics. It has converged with modern people's lives, become an irreplaceable part. The main content is AT89S51 control of the core components, design of a electronic organ. SCM as a host to the core, with the keyboard, speaker and other core modules. In the main control module has 16 keys and a speaker. The system is steady, its simple hardware circuits, software functions, reliability of control system and high cost performance is its advantages. It also has certain practical and reference value.Key words : SCM keyboard speaker electronic organ目录摘要................................................................................................................................................................ - 1 - Abstract.......................................................................................................................................................... - 2 - 目录.................................................................................................................................................................. - 3 -1 引言.............................................................................................................................................................. - 4 -2 原理图.......................................................................................................................................................... - 5 -2.1 系统板硬件连线.............................................................................................................................. - 6 -3 主要芯片简介.............................................................................................................................................. - 7 -3.1 AT89S51简介................................................................................................................................... - 7 -3.1.1 主要功能特性...................................................................................................................... - 8 -3.1.2 引脚功能.............................................................................................................................. - 8 -3.2 LM386................................................................................................................................................ - 9 -3.2.1 LM386的引脚图................................................................................................................. - 10 -3.2.2 音频放大器电路................................................................................................................ - 10 -3.3 LED数码管..................................................................................................................................... - 11 -4 模块原理.................................................................................................................................................... - 12 -4.1 4X4行列式键盘识别及显示......................................................................................................... - 12 -4.1.1 系统板上硬件连线设计.................................................................................................... - 12 -4.1.2 程序设计内容.................................................................................................................... - 14 -图4-2 行列式键盘电路............................................................................................................... - 14 -4.1.3 I/O并行口直接驱动LED显示 ......................................................................................... - 15 -4.1.4 键盘识别程序............................................................................................................................ - 18 -4.2 音乐产生的方法............................................................................................................................ - 24 -4.2.1 原理.................................................................................................................................... - 24 -4.2.2 程序框图............................................................................................................................ - 26 -4.2.3源程序:............................................................................................................................. - 27 -5 结束语........................................................................................................................................................ - 35 - 致谢.............................................................................................................................................................. - 36 - 参考文献........................................................................................................................................................ - 37 -1 引言单片微型计算机是大规模集成电路技术发展的产物,属第四代电子计算机,它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。
基于单片机的简易电子琴设计_毕业设计论文
基于单片机的简易电子琴设计摘要随着科学技术的不断发展,单片机的应用日益成熟。
单片机集成度高、处理功能强大、价格低廉使其在各个领域得到广泛应用。
同时电子琴作科学技术与音乐共同发展的产物,在这个电子信息化的时代,为音乐的大众化做出了不可代替的贡献。
本文主要介绍一种基于51单片机的简易电子琴设计方案。
它采用了STC公司出品的一款低功耗、高性能单片机STC89C52芯片作为主控单元,与4*4矩阵键盘、复位电路、LED双位数码显示器、扬声器等组成主控核心模块。
文章详细论述了电子琴硬件设计和软件结构设计流程,采用了Altium Designer 09画出原理图、PCB图,通过Keil编程软件对电子琴进行软件编程,然后进行软硬件的调试运行并将程序烧录到STC89C52芯片中。
此系统运行比较稳定,具有硬件设计电路简单、清晰,成本低,软件功能完善,控制系统牢靠,性价比高等优点,具有一定的实用和参考价值。
关键词:STC89C52;电子琴;矩阵键盘AbstractAlong with the development of science and technology, the application of SCM increasingly mature. Single chip microcomputer high level of integration, processing powerful, low prices make it is widely used in various fields. At the same time the keyboards for science and technology and music common development of the product, in the electronic information era, for music's popular do can't replace contribution.This paper mainly introduces a kind of simple keyboard based on 51 SCM design scheme. It USES the STC product of our company a low power consumption, high performance microprocessor STC89C52 chips as the master unit, and 4 * 4 matrix keyboard and reset circuit, LED digital display, a double master core module and other components of the speaker. This paper discusses the design of hardware and software structure keyboard design process, the use of a Altium Designer 09 draw a diagram, PCB figure, through the Keil software keyboard to software programming, then the software and hardware debugging run and will burn to STC89C52 chip program. Operation of the system is stable and has the hardware circuit design simple, clear, and the cost is low, the software perfect function, control system firm, price higher advantages, has certain practical and reference value.Key words : stc89c52; keyboard; matrix keyboard目录摘要 (I)Abstract (II)1 绪论 (1)1.1 设计的目的和意义 (1)1.2 设计的主要内容 (1)2 系统概述 (2)2.1 系统工作原理 (2)2.2 系统结构组成 (2)2.2.1 电源电路 (2)2.2.2 控制部分 (3)2.2.3 显示部分 (3)2.2.4 发声部分 (3)2.3 主要芯片及元件的介绍 (3)2.3.1 STC89C52单片机简介 (3)2.3.2 芯片引脚介绍 (4)2.3.3 STC89C52时钟介绍 (6)2.3.4 双位LED数码显示器简介 (7)3 硬件电路的设计 (9)3.1 电源电路的设计 (9)3.2 复位电路的设计 (10)3.2.1 复位操作 (10)3.2.2 复位信号及其产生 (11)3.3 键盘控制电路 (12)3.3.1 矩阵式键盘的概述 (12)3.3.2 矩阵式键盘按键识别原理及方法 (12)3.4 显示电路 (13)4 系统软件设计 (14)4.1 如何利用单片机实现音乐节拍 (14)4.2 如何用单片机产生音频脉冲 (15)4.2.1 音符和频率的关系 (15)4.2.2 定义初值 (16)4.3 音乐发生程序流程图 (17)结论 (18)参考文献 (19)附录一电子琴源程序 (20)附录二原理图 (24)附录三 PCB图 (25)附录四实物图 (26)致谢 (27)1 绪论1.1 设计的目的和意义单片机又称单片微型计算机,英文字母的缩写MCU。
基于51单片机的电子琴设计
基于51单片机的电子琴设计随着科技的不断发展,单片机技术已经成为了现代电子设备中的重要组成部分。
51单片机作为一种广泛应用的单片机系列,具有高性能、低功耗、高集成度等特点,被广泛应用于各种嵌入式系统开发中。
本文将介绍一种基于51单片机的电子琴设计。
一、系统硬件设计1、单片机选择本设计选用AT89C51单片机作为主控制器,AT89C51是一种低功耗、高性能的8位单片机,具有4K字节的可编程存储器和128字节的RAM,同时具有丰富的外设接口,如UART、SPI、I2C等。
2、电子琴设计电子琴采用8×8 LED点阵作为输出设备,通过单片机控制点阵的亮灭状态来展示音乐波形。
具体实现方式是将音频信号通过一个运放放大器放大,然后将其输入到LED点阵中,通过控制点阵的亮灭状态来展示音乐的波形。
3、存储模块设计为了实现电子琴曲目的存储和播放,本设计选用了一块AT24C02 EEPROM芯片作为存储设备。
AT24C02是一种串行E2PROM存储器,容量为256字节,可以通过I2C总线与单片机进行通信。
将曲目信息存储在AT24C02中,可以实现曲目的存储和播放功能。
4、按键模块设计本设计采用4×4矩阵键盘作为输入设备,通过扫描按键状态来实现音符的选择和节奏控制。
矩阵键盘的行线连接到单片机的P1口,列线连接到P2口,通过检测行列组合的变化来确定按下的键位。
二、系统软件设计1、音符解码本设计采用MIDI音符编码方式来存储和播放曲目信息。
在解码过程中,根据音符的频率和持续时间计算出对应的音高和节奏信息,然后将其用于驱动电子琴的输出设备展示音乐的波形。
2、演奏控制为了实现节奏控制,本设计采用了一种基于时间间隔的演奏方式。
在演奏过程中,单片机根据设定的节奏间隔时间来触发音符输出,从而实现对节奏的控制。
同时,为了实现曲目的停止和播放功能,我们需要在软件中加入相应的控制逻辑。
3、存储和播放在软件设计中,我们需要实现将曲目信息存储到AT24C02中以及从AT24C02中读取曲目信息的功能。
毕业论文基于单片机STC52的电子琴设计
毕业论文基于单片机STC52的电子琴设计电子琴是一种能够模拟真实乐器声音的电子音乐乐器,它使用数字信号处理技术来模拟不同音调和音色的声音。
在这篇毕业论文中,我们将基于STC52单片机设计一个电子琴。
首先,我们需要了解电子琴的基本原理和工作方式。
电子琴主要由白键和黑键组成,每个键对应一个音调。
当用户按下一些键时,电子琴会发出相应音调的声音。
为了模拟各种音调和音色,电子琴还需要使用合成器来生成声音波形。
在本设计中,我们将使用STC52单片机作为主控芯片。
这款单片机具有强大的计算和处理能力,并且易于编程和控制。
我们将使用C语言编程来实现电子琴的功能。
首先,我们需要设计一个按键矩阵来接收用户的按键输入。
按键矩阵将通过电子琴的键盘连接到STC52单片机的I/O口。
当用户按下一些键时,相应的I/O口将被触发,并且可以通过编程来检测并响应按键动作。
接下来,我们将设计一个音频输出电路来输出电子琴的声音。
音频输出电路将连接到STC52单片机的PWM输出口。
通过调节PWM输出的频率和占空比,我们可以生成不同频率和音量的声音波形。
然后,我们需要设计一个合成器来生成不同音调和音色的声音波形。
合成器可以通过不同的算法和参数来模拟不同乐器的声音。
我们可以使用数字信号处理技术,如傅里叶变换和滤波器设计,来实现合成器的功能。
最后,我们需要编写软件程序来控制和管理电子琴的功能。
我们可以使用STC52单片机的开发环境和编程工具来编写程序。
程序需要实现按键检测、声音生成和处理等功能。
通过编程,我们可以实现不同音调、音色和演奏效果的电子琴。
在设计实现过程中,我们还需要考虑到电子琴的硬件和电路布局、电源供应、按键和音频接口等方面的问题。
同时,我们还需要进行测试和调试,以保证电子琴的正常工作和良好的声音质量。
通过以上的设计和实现,我们可以制作一个基于STC52单片机的电子琴。
这款电子琴具有丰富的音调和音色选择,可以模拟不同乐器的声音,同时具有简单易用的操作和良好的音质。
基于单片机的电子琴设计资料
基于单片机的电子琴设计资料电子琴是一种电子乐器,通过电子回路和单片机控制,可以模拟出多种乐器的声音。
下面是一个基于单片机的电子琴设计资料,包括硬件设计和软件编程。
硬件设计:1.材料准备:选择一个适当大小的键盘,通常有8个到16个键位,每个键位可以连接到一个按钮开关。
2.连接按钮开关:将按钮开关连接到单片机的GPIO引脚上,通过读取引脚状态来检测按键的按下与释放。
3.音频输出:将单片机的数字音频输出连接到扬声器上,以发出相应的声音。
4.电源供应:提供适当的电源电压和电流给单片机和其他电子元件使用。
软件编程:1.初始化:在程序开始时,初始化单片机的GPIO引脚以及其他必要的外设,设置合适的时钟频率和中断设置。
2.按键扫描:通过循环遍历GPIO引脚,检测按钮开关的状态。
当检测到按键按下时,记录下按键对应的音符。
3.声音发生器:根据按键记录的音符,生成相应的音频信号。
可以使用一组预设的音符频率和振幅值,或者使用数学公式生成声音波形。
4.声音输出:将生成的音频信号发送到数字音频输出引脚,输出到扬声器上。
5.多音同步:为了更好的音乐体验,可以通过增加多音同步功能,使得按下多个按键时可以同时发出多个音符。
设计注意事项:1.硬件连接:确保正确连接按钮开关、声音输出和电源供应等元件,避免短路或其他电路问题。
2.音频信号处理:可以通过数字信号处理(DSP)算法对音频信号进行增强、滤波等处理,提高音质和音效。
3.功耗优化:在编程时,可以考虑使用低功耗模式以延长电子琴的电池寿命。
4.隔音材质:适当在琴身上加入隔音材质,减少按键和扬声器震动传递到外部的噪音。
总结:基于单片机的电子琴设计包括硬件连接和软件编程两个方面,硬件连接主要涉及键盘、按钮开关、扬声器和电源供应等元件的连接,软件编程则负责按键扫描、音频发生和音频输出等功能。
在设计过程中需注意硬件连接的正确性和优化声音效果,使得电子琴能够发出优美的音乐。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
22.电子琴1.实验任务(1.由4X4 组成16 个按钮矩阵,设计成16 个音。
(2.可随意弹奏想要表达的音乐。
2.电路原理图3.系统板硬件连线(1.把“单片机系统”区域中的P1.0 端口用导线连接到“音频放大模块”区域中的SPK I N端口上;(2.把“单片机系统“区域中的P3.0-P3.7 端口用8 芯排线连接到“4X4 行列式键盘”区域中的C1-C4 R1-R4 端口上;4.相关程序内容(1. 4X4 行列式键盘识别;(2.音乐产生的方法;一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0 来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。
现在以单片机12MHZ 晶振为例,例出高中低音符与单片机计数T0 相关的计数值如下表所示音符频率(HZ)简谱码(T 值)音符频率(HZ)简谱码(T 值)低1 DO 262 63628 # 4 FA# 740 64860 #1 DO# 277 63731 中5 SO 784 64898 低2 RE 294 63835 # 5 SO# 831 64934 #2 RE# 311 63928 中6 LA 880 64968 低3 M 330 64021 # 6 932 64994低4 FA 349 64103 中7 SI 988 65030 # 4 FA# 370 64185 高1 DO 1046 65058 低5 SO 392 64260 # 1 DO# 1109 65085 # 5 SO# 415 64331 高2 RE 1175 65110 低6 LA 440 64400 # 2 RE# 1245 65134 # 6 466 64463 高3 M 1318 65157 低7 SI 494 64524 高4 FA 1397 65178中1 DO 523 64580 # 4 FA# 1480 65198 # 1 DO# 554 64633 高5 SO 1568 65217 中2 RE 587 64684 # 5 SO# 1661 65235 # 2 RE# 622 64732 高6 LA 1760 65252 中3 M 659 64777 # 6 1865 6下面我们要为这个音符建立一个表格,有助于单片机通过查表的方式来获得相应的数据低音0-19 之间,中音在20-39 之间,高音在40-59 之间TABLE: DW 0,63628,63835,64021,64103,64260,64400,64524,0,0DW 0,63731,63928,0,64185,64331,64463,0,0,0DW 0,64580,64684,64777,64820,64898,64968,65030,0,0DW 0,64633,64732,0,64860,64934,64994,0,0,0DW 0,65058,65110,65157,65178,65217,65252,65283,0,0DW 0,65085,65134,0,65198,65235,65268,0,0,0 DW 02、音乐的音拍,一个节拍为单位(C 调)5268 KEYBUF EQU 30HSTH0 EQU 31HSTL0 EQU 32HTEMP EQU 33HORG 00HLJMP STARTORG 0BHLJMP INT_T0START: MOV TMOD,#01HSETB ET0SETB EAWAIT:MOV P3,#0FFHCLR P3.4MOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY1LCALL DELY10MSMOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY1MOV A,P3ANL A,#0FHCJNE A,#0EH,NK1 MOV KEYBUF,#0LJMP DK1NK1: CJNE A,#0DH,NK2 MOV KEYBUF,#1LJMP DK1NK2: CJNE A,#0BH,NK3 MOV KEYBUF,#2LJMP DK1NK3: CJNE A,#07H,NK4 MOV KEYBUF,#3LJMP DK1NK4: NOPDK1:MOV A,KEYBUFMOV DPTR,#TABLEMOV P0,AMOV A,KEYBUF MOV B,#2MUL ABMOV TEMP,AMOV DPTR,#TABLE1 MOVC A,@A+DPTR MOV STH0,AMOV TH0,AINC TEMPMOV A,TEMP MOVC A,@A+DPTR MOV STL0,AMOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,AMOV A,KEYBUF MOV B,#2MUL ABMOV TEMP,AMOV DPTR,#TABLE1MOV STH0,A MOV TH0,AINC TEMPMOV A,TEMP MOVC A,@A+DPTR MOV STL0,A MOV TL0,A SETB TR0DK1A: MOV A,P3 ANL A,#0FH XRL A,#0FH JNZ DK1ACLR TR0 NOKEY1:MOV P3,#0FFH CLR P3.5MOV A,P3ANL A,#0FH XRL A,#0FHJZ NOKEY2 LCALL DELY10MSMOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY2MOV A,P3ANL A,#0FHCJNE A,#0EH,NK5 MOV KEYBUF,#4LJMP DK2NK5: CJNE A,#0DH,NK6 MOV KEYBUF,#5LJMP DK2NK6: CJNE A,#0BH,NK7 MOV KEYBUF,#6LJMP DK2NK7: CJNE A,#07H,NK8 MOV KEYBUF,#7LJMP DK2NK8: NOPDK2:MOV A,KEYBUFMOV DPTR,#TABLEMOVC A,@A+DPTR MOV P0,AMOV A,KEYBUF MOV B,#2MUL ABMOV TEMP,AMOV DPTR,#TABLE1 MOVC A,@A+DPTR MOV STH0,AMOV TH0,AINC TEMPMOV A,TEMP MOVC A,@A+DPTR MOV STL0,AMOV TL0,ASETB TR0DK2A: MOV A,P3 ANL A,#0FHXRL A,#0FHJNZ DK2ACLR TR0NOKEY2:MOV P3,#0FFHCLR P3.6MOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY3LCALL DELY10MSMOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY3MOV A,P3ANL A,#0FHCJNE A,#0EH,NK9MOV KEYBUF,#8LJMP DK3NK9: CJNE A,#0DH,NK10 MOV KEYBUF,#9LJMP DK3NK10: CJNE A,#0BH,NK11 MOV KEYBUF,#10LJMP DK3NK11: CJNE A,#07H,NK12 MOV KEYBUF,#11LJMP DK3NK12: NOPDK3:MOV A,KEYBUFMOV DPTR,#TABLEMOVC A,@A+DPTRMOV P0,AMOV A,KEYBUFMOV B,#2MUL ABMOV TEMP,AMOV DPTR,#TABLE1 MOVC A,@A+DPTRMOV STH0,AMOV TH0,AINC TEMPMOV A,TEMPMOVC A,@A+DPTRMOV STL0,AMOV TL0,ASETB TR0DK3A: MOV A,P3 ANL A,#0FHXRL A,#0FHJNZ DK3ACLR TR0NOKEY3:MOV P3,#0FFH CLR P3.7MOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY4LCALL DELY10MS MOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY4MOV A,P3ANL A,#0FHCJNE A,#0EH,NK13 MOV KEYBUF,#12LJMP DK4NK13: CJNE A,#0DH,NK14 MOV KEYBUF,#13LJMP DK4NK14: CJNE A,#0BH,NK15 MOV KEYBUF,#14LJMP DK4NK15: CJNE A,#07H,NK16 MOV KEYBUF,#15LJMP DK4NK16: NOPDK4:MOV A,KEYBUFMOV DPTR,#TABLEMOVC A,@A+DPTRMOV P0,AMOV A,KEYBUFMOV B,#2MUL ABMOV TEMP,AMOV DPTR,#TABLE1MOVC A,@A+DPTR MOV STH0,A MOV TH0,AINC TEMPMOV A,TEMP MOVC A,@A+DPTR MOV STL0,A MOV TL0,ASETB TR0DK4A: MOV A,P3 ANL A,#0FHXRL A,#0FHJNZ DK4ACLR TR0NOKEY4:LJMP WAITDELY10MS:MOV R6,#10D1: MOV R7,#248 DJNZ R7,$DJNZ R6,D1RETINT_T0:MOV TH0,STH0MOV TL0,STL0CPL P1.0RETITABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H TABLE1: DW 64021,64103,64260,64400DW 64524,64580,64684,64777DW 64820,64898,64968,65030DW 65058,65110,65157,65178END13.动态数码显示技术1.实验任务如图4.13.1 所示,P0 端口接动态数码管的字形码笔段,P2 端口接动态数码管的数位选择端,P1.7 接一个开关,当开关接高电平时,显示“12345”字样;当开关接低电平时,显示“HELLO”字样。
2.电路原理图3.系统板上硬件连线(1.把“单片机系统”区域中的P0.0/AD0-P0.7/AD7 用8 芯排线连接到“动态数码显示”区域中的a-h 端口上;(2.把“单片机系统”区域中的P2.0/A8-P2.7/A15 用8 芯排线连接到“动态数码显示”区域中的S1-S8 端口上;(3.把“单片机系统”区域中的P1.7 端口用导线连接到“独立式键盘”区域中的SP1 端口上;4.程序设计内容(1.动态扫描方法动态接口采用各数码管循环轮流显示的方法,当循环显示频率较高时,利用人眼的暂留特性,看不出闪烁显示现象,这种显示需要一个接口完成字形码的输出(字形选择),另一接口完成各数码管的轮流点亮(数位选择)。