文档库 最新最全的文档下载
当前位置:文档库 › 基于单片机的电子琴和音乐播放器设计

基于单片机的电子琴和音乐播放器设计

基于单片机的电子琴和音乐播放器设计
基于单片机的电子琴和音乐播放器设计

北京邮电大学

基于单片机的电子琴和音乐播放器设计

实验报告

学院:信息与通信工程学院

指导老师:葛顺明

摘要

电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。本文的主要内容设计为一个基于PIC32MX795F512L单片机的电子琴与音乐播放器,利用单片机上的按键来选择相应功能,利用键盘按键来选择弹奏某一音调或播放某首曲子。能够实时将数据传至液晶屏显示。根据单片机的工作原理,通过硬件电路制作和软件编译,设计出一个能够自由弹奏乐曲及流畅播放内置音乐的电子琴与音乐播放器。该系统主要由液晶显示模块、键盘模块、喇叭模块组成。设计利用MPLAB软件对源程序进行编译和调试。

关键词:

PIC32MX795F512L单片机,模块

一.实验目的

1.通过学习使用单片机PIC32,使学生增进对单片机的感性认识,加深对单片机理论方面的理解。

2. 使学生掌握单片机的内部功能模块的功能和应用,如定时器/计数器、中断、I/O口等。

3使学生理解和掌握单片机应用系统的软件硬件设计过程、方法及实现,为以后设计和实现单片机应用系统打下良好基础。

二.实验分工

本次实验我的队友主要负责的部分是XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

过程期间出现的问题是由我们两个人共同查阅资料完成的,整体合作协调很好,完成的较为顺利。

三.功能简介

1.设计一个电子琴。所能实现的功能如下:

(1).能够实现舒适化菜单,由按键选择菜单中的两个功能:播放乐曲和弹奏乐曲,并实现其功能;

(2).播放乐曲:又初始化菜单选择进入,进入后屏幕提示”SONGPLAYING”,同时事先在程序中存入了8首不同的乐曲,可以一次通过键盘的按键来选择播放各首乐曲。在播放曲目中设置了暂停键,按下即暂停,不按下则继续播放循环播放。

(3).自行弹奏:设计键盘上的13个键能够发出低音部5,6,7,中音部1,2,3,4,5,6,7,高音部1,2,3总共14个音,要求按下按键发声,松开延时一段时间停止,中间再换按其他键则发另一音调的声音。

(4).走马灯:设计了4个蓝光走马灯配合播放音乐和演奏时闪烁。

2.当系统扫描到有键被按下,则快速检测出是哪一个键被按下,然后单片机的定时器被启动,发出一定频率的脉冲,该频率的脉冲输入到蜂鸣器后,就会发出相应的音调如果在前一个按下的键发声的同时另一个键被按下,则启动中断系统,前面键的发音停止,转到后按的发音程序,发出后按的键的音调。

四.实验原理

4.1 音频脉冲的产生

一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。

若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。利用定时器计时半周期时间,每当计时终止后就将相应的端口反相,然后重复计时再反相。就可在各对应的引脚上得到此频率的脉冲。

我们小组利用PIC32MX795F512L的80M主频,运用delay函数,改变delay的时间以产生不同频率的方法产生不同音阶。由于主频较高,没有一个音符的频率可以参考,于是我们小组是利用自己的乐理知识将每个音校正。

每个音与delay时间对应如下表所示:

音符Delay 音符Delay

中音Do 8876高音Re 2446

中音Re 7476高音Mi 1936

中音Mi 6456高音Fa 1666

中音Fa 5886高音So 1186

中音So 5036高音La 766

中音La 4036高音Xi 376

中音Xi 3236高音Do 186

高音Do 3006

4.2音乐节拍的产生

每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,表1-2为节拍与节拍码的对照表。如果1拍为0.4s,1/4拍是0.1s,只要设定延时时间就可求得节拍的时间。假设1/4拍为1DELAY,那么1拍应为4DELAY,以此类推。所以只要求得1/4拍的DELAY,其余的节拍就是它的倍数,表1-3为1/4和1/8拍的时间设定。

本小组的节拍是由while函数实现的,在每个节拍delay的时间中播放对应的音符,1/8为1,1/4为2,以此类推。而while循环的时间为节拍*310,这是我们经过反复试验确定的最佳的节拍延时。

五.方案设计

5.1硬件设计

5.1.1电路设计框图

输出模块:

5.1.2 硬件概述

本电路是由PIC32MX795F512L 单片机为控制核心,具有键盘输入、液晶显示屏输出和三极管驱动的喇叭构成的简易电子琴电路。 1.单片机

PIC32MX795F512L 型号单片机具有USB 、CAN 和以太网的高性能32 位闪存,其所拥有的主要资源有:

? 80MHz 的主频,1.56DMIPS/MHz ,总线32位; ? USB 2.0 接口;

? 2个带1024缓存的CAN 2.0接口; ? 8通道DMA 通道;

? 5级流水线,哈佛架构; ? 1个以太网接口;

? 512K 的Flash ,外加12k 的启动Flash ; ? 128K 的RAM ;

? 可编程中断向量控制器; ? 16个10位AD 转换器;

? UART/SPI/IIC 等串行通信方式;

? 带JTAG 调试口,具有休眠功能,节省能耗。

2.输入模块(键盘)

一个简易的电子琴需要键盘15个按键,选择用4*4行列式键盘完成输入。4*4行列式键盘又称为矩阵键盘,它是用4条I/O 线作为行线,4条I/O 线作为列线组成的键盘。在行线和列线的每一个交叉点上,设置一个按键。这样键盘中按键的个数是4×4个。这种行列式键盘结构能够有效地提高单片机系统中I/O 口的利用率。

而键盘应具有以下几个基本功能:

(1)去抖动:每个按键在按下或松开时,都会产生短时间的抖动。抖动的持续时间与键的质量相关,一般为5—20mm 。所谓抖动是指在识别被按键是必须避开抖动状态,只有处在稳定接通或稳定断开状态才能保证识别正确无误。去抖问题可通过软件延时或硬件电路解决。

(2)被按键识别:如何识别被按键是接口解决的主要问题,一般可通过软硬结合的方法完成。常用的方法有行扫描法和线反转法两种。行扫描法的基本思想是,由程序对键盘逐行扫描,通过检测到的列输出状态来确定闭合键,为此,需要设置入口、输出口一个,该方法在微机系统中被广泛使用。本实验采用扫描法。

(3)键码产生:为了从键的行列坐标编码得到反映键功能的键码,一般在内存区中建立一个键盘编码表,通过查表获得被按键的键码。

PIC32MX795F512L 芯片

输入模块: 4*4键盘 输出模块: 喇叭 输出模块: 走马灯

RG1

RD3

RE0

RG14

RE1 RD4 RE3 RE2

3.输出模块(显示屏)

采用型号为RT1602C的液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字、图形,显示多样,清晰可见, 与传统的阴极射线管相比,液晶显示屏具有占用空间小、低功耗、低辐射、无闪烁、降低视觉疲劳等优点。字符型液晶屏是一种用5*7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等,最常用的为2行16个字。

型号为RT1602C的液晶显示屏就是2行16个字。它有16个管脚,分别有电源地、电源正、偏压信号、读写控制、使能控制、I/O接口、背光控制等功能。它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。

VO为显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高。为了简化电路以及获得最好的显示效果,将VO端口直接接地。

R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。

GND接电源,VDD接正电源。

RS为寄存器选择,高电平时选择数据寄存器,低电平时选择指令寄存器。源代码中write_cmd函数为向LCD写入指令的函数,因此会有RS=0;write_date函数为向LCD写入数据的函数,因此会有RS=1。

E端为使能端,当E端由高电平跳变成低电平,也就是下降沿时,LCD模块进行命令执行。

BL1和BL2为设置LCD背光,分别接了电源与地。

DO~D7八个为数据I/O口,按照表格内的接法相连。

脚号符号引脚功能以及接法脚号符号引脚功能以及接法

1 GND 电源地9 D

2 RF13

2 VDD 电源正10 D

3 RB12

3 V0 显示偏压信号11 D

4 RB13

4.输出模块(喇叭)

将一固定端口通过三极管PNP 放大再连接喇叭构成我们的输出音频模块。喇叭一端接电源一端接发射极,当有方波送入时,喇叭便发出相应频率的响声。

5.输出模块(走马灯)

将四个发光二极管与四个端口相连,另外一端通过小电阻接地,通过控制四个端口依次为高电平使得四个灯依次点亮,实现走马灯的效果。

5.2 软件设计

5.2.1程序流程图

4 RS 数据/命令控制 RA7 12 D

5 RB14 5 R/W 读/写控制 RA

6 13 D6 RB8 6 E 使能信号 RF4 14 D

7 RB9 7 D0 数据I/O RF5 15 BL1 背光源正 8

D1

RF12

16

BL2

背光源负

开始

判断LCD 按键 SW1 SW3 弹奏功能

播放功能

键盘扫描 根据按键值在相应数组中寻找对应键值的音符频率 喇叭播放对应音符 键盘扫描

根据按键值含有七首曲子的二维数组中寻找对应键值的曲目

相应曲目节拍与音调通过同一参数一一对应

喇叭播放相应

结束

5.2.2 各模块具体软件实现

1.键盘模块

运用行扫描的方式来判断是否有键按下及按下的是哪一键。首先令行都为输出并置为零,列为输入且都为高电位,则只要有一列为低就是有键按下。再依次令每一行为低电平其他行为高电平,检查每一列是否为低电平,行和列均为低电平所对应的交汇处即为按键按下的地方。

#include "KEYBOARD.h"

//时延函数

void delay(uint ms)

{

uint x,y;

for(x=ms;x>0;x--)

for(y=10;y>0;y--);

}

uchar keyboard() //判断按下哪一键

{

while(1)

{

delay(100);

//将R行全部设置为输出为低电平0;

PORTSetPinsDigitalOut(IOPORT_G, BIT_14 | BIT_1 );

PORTSetPinsDigitalOut(IOPORT_D, BIT_3 );

PORTSetPinsDigitalOut(IOPORT_E, BIT_0 );

PORTClearBits(IOPORT_G, BIT_14 | BIT_1 );

PORTClearBits(IOPORT_D, BIT_3);

PORTClearBits(IOPORT_E, BIT_0); delay(1);

//将C列全部设置为输入为高电平1

PORTSetPinsDigitalIn(IOPORT_E, BIT_1 | BIT_2 | BIT_3);

PORTSetPinsDigitalIn(IOPORT_D, BIT_4 );

PORTSetBits(IOPORT_E, BIT_1 | BIT_2 | BIT_3);

PORTSetBits(IOPORT_D, BIT_4 );delay(1);

//第一列

R0=0;R1=1;R2=1;R3=1; //第一行

if(C0==0) //第一列

delay(10);

if(C0==0) return 1;

}

if(C1==0)

{

delay(10);

if(C1==0) return 2;

}

if(C2==0)

{

delay(10);

if(C2==0) return 3;

}

if(C3==0)

{

delay(10);

if(C3==0) return 4;

}

//第二列

R0=1;R1=0;R2=1;R3=1;

if(C0==0)

{

delay(10);

if(C0==0) return 5; }

if(C1==0)

{

delay(10);

if(C1==0) return 6;

}

if(C2==0)

{

delay(10);

if(C2==0) return 7;

}

if(C3==0)

{

delay(10);

if(C3==0) return 8;

}

//第三列

R0=1;R1=1;R2=0;R3=1;

if(C0==0)

delay(10);

if(C0==0) return 9;

}

if(C1==0)

{

delay(10);

if(C1==0) return 10;

}

if(C2==0)

{

delay(10);

if(C2==0) return 11;

}

if(C3==0)

{

delay(10);

if(C3==0) return 12;

}

//第四列

R0=1;R1=1;R2=1;R3=0;

if(C0==0)

{

delay(10);

if(C0==0) return 13;

}

if(C1==0)

{

delay(10);

if(C1==0) return 14;

}

if(C2==0)

{

delay(10);

if(C2==0) return 15;

}

if(C3==0)

{

delay(10);

if(C3==0) return 16;

}

}

};

uchar presskey() //判断是否有键按下

{ delay(100);

//将R行全部设置为输出为低电平0;

PORTSetPinsDigitalOut(IOPORT_G, BIT_14 | BIT_1 );

PORTSetPinsDigitalOut(IOPORT_D, BIT_3 );

PORTSetPinsDigitalOut(IOPORT_E, BIT_0 );

PORTClearBits(IOPORT_G, BIT_14 | BIT_1 );

PORTClearBits(IOPORT_D, BIT_3);

PORTClearBits(IOPORT_E, BIT_0); delay(1);

//将C列全部设置为输入为高电平1

PORTSetBits(IOPORT_E, BIT_1 | BIT_2 | BIT_3);

PORTSetBits(IOPORT_D, BIT_4 );

PORTSetPinsDigitalIn(IOPORT_E, BIT_1 | BIT_2 | BIT_3);

PORTSetPinsDigitalIn(IOPORT_D, BIT_4 );

delay(1);

R0=0;R1=0;R2=0;R3=0;

if(C0==0)

{

delay(10);

if(C0==0) return 1;

}

if(C1==0)

{

delay(10);

if(C1==0) return 1 ;

}

if(C2==0)

{

delay(10);

if(C2==0) return 1;

}

if(C3==0)

{

delay(10);

if(C3==0) return 1;

}

return 0;

}

2.LCD模块(本模块为组员xx主要编写,此处不再叙述)

3.喇叭播放模块

通过将不同频率的方波输送到喇叭的端口来使其发出声音。

在弹奏时,若一直按着按键,就会一直发出相应键值的音调。在播放音乐时,首先通过键盘选择一首乐曲,通过同一参数将节拍和音调结合,在第一个音调的节拍长度中播放第一

个音,直到节拍结束,令Tone_Index加1,继续下一个音的相应节拍中的发声,以此类推,直到播完一首曲子。

同时我们还通过设置中断实现了暂停的功能,只要按下单片机上的SW2,就可以暂停音乐的播放。

while(1)

{

if(FY==0)

{ // 若没有松开按键,则等待,等待期间弹奏该音符

while ( presskey()==1)

{

k= keyboard();

uint x=tab[k];

d(x);

SPK=!SPK;

if (h==499) h=1;

run (h); h++;

}

}

else

{

k= keyboard();

while (1)

{

if (Song[k][Tone_Index]==-1) Tone_Index=0;

uint ms=310*Len[k][Tone_Index];

while(ms--)

{

int x=2600+tab[Song[k][Tone_Index]];

d(x);

SPK=!SPK;

if (h==499) h=1;

run (h); h++;

};

Tone_Index++;

d(200000);

}

}

}

void __ISR(_CHANGE_NOTICE_VECTOR, ipl2) ChangeNotice_Handler(void)

{

//读取D端口的bit7的数据,放到全局变量dummy缓存中

dummy = PORTReadBits(IOPORT_D, BIT_7);

//清空中断标志位,目的是使其能产商第二次中断

mCNClearIntFlag();

//按钮按着则灯一直亮

if(dummy == BIT_7)

{ //D端口的bit1位清0,即LED2灯灭

PORTClearBits(IOPORT_D, BIT_1); // turn off LED2

LCD_Initialize(); //初始化LCD

LCD_ShowString(0,0,"2.SONGS PLAY");

}

else

{ //D端口的bit1位置1,即LED2灯亮

PORTSetBits(IOPORT_D, BIT_1); // turn on LED2

while( PORTReadBits(IOPORT_D, BIT_7)==0)

{

LCD_Initialize(); //初始化LCD

LCD_ShowString(0,0,"PAUSE");

d(2000000);

}

}

}

4.走马灯模块

通过控制四个端口依次为高电平使得四个灯依次点亮,实现走马灯的效果。由于系统主频较快,因此每一个灯亮的时间为100个系统周期,这样才能看清依次的变化。

#include "lighting.h"

#define uchar unsigned char

void run (int h)

{

PORTSetPinsDigitalOut(IOPORT_A, BIT_10 );

PORTSetPinsDigitalOut(IOPORT_E, BIT_4 );

PORTSetPinsDigitalOut(IOPORT_D, BIT_5 );

PORTSetPinsDigitalOut(IOPORT_G, BIT_13 );

if((h>0)&(h<100))

{

L1=1;L2=0;L3=0;L4=0;

}

if((h>99)&(h<200))

{

L1=0;L2=1;L3=0;L4=0;

}

if((h>199)&(h<300))

{

L1=0;L2=0;L3=1;L4=0;

}

if((h>299)&(h<500))

{

L1=0;L2=0;L3=0;L4=1;

}

};

六.实验问题及心得体会

6.1出现的问题

1.定时器

小学期的前五天我和我的队友四处搜集关于PIC单片机的资料,综合老师课上提供的数据手册使用说明,得知单片机有五个定时器,按理说依照说明在我们发声的部分正确书写代码就可以提供出我们相应音色的频率,并且我们发出声音的模块想要频率为1MHz的定时器来完成,这样无论从计数的计算上还是程序的编写上都十分方便,但是在读说明书和函数说明中出现了很多问题,很多地方不很清晰,英文版说明也给阅读带来了一定的障碍,经过三番五次向老师询问,写出的代码编译时总是不能完好通过,所以最终无奈之下我们放弃了这一方法,仅仅使用延时函数及自己的乐理知识来校准的每一个音,增加了不少工作量,而没有好好运用定时器也是这次小学期试验的一个遗憾,在以后的学习中一定会加深认识定时器并尽量学会应用。

2.显示屏的调试

显示屏的调试是我们班整体遇到的最大的问题,直到验收前一天显示屏还没有达到很好的效果。刚开始拿到硬件连接之后,我们的显示屏连背光都没有亮,经检查连接无误后想可能是显示屏本身出了问题,正好班上其他同学的显示屏也都存在着一定的错误,于是我们集体换了一批显示屏。新的显示屏拿来后背光是亮了,但是依旧没有字显示,经过代码的各种调试与更改终于能实现一行字的显示,但在我们想实现按键显示屏做出相应变化的功能时,发现显示屏根本没有变化,于是又回去调试它。经过老师的直到我们发现成功显示的那一句代码是放在设置主频之前的,而在主频之下我们的LCD代码就失效了,我们短暂的成功只是偶然性的。于是这次我们就先设置好主频,然后回去更改LCD 中延时的长度,经过多次尝试后终于能显示出字并实现刷新显示了。这之后又出现一个小问题,就是字符串不是一下子全显示出来,而是有那种渐变的效果,思考一下发现是延时太长,于是改短写数据的延时后问题迎刃而解。

LCD调试是个漫长需要耐心的工作,一旦成功,就会发现这一切努力都没有白费。

3.喇叭的调试

在网上查阅关于喇叭的连接方法和注意事项之后我们将喇叭焊在了板子上,第一次测验时随意取了一个机器频率测试是否能够正常发声,可是没有成功,喇叭没有声音而且变烫,我们迅速停止调试检查问题,发现三极管损坏,于是我们又换了一个PNP管并重新设计电路,采用共集放大电路并将喇叭一端接电源,此时喇叭发出了声音,但频率很低,我们又回去调整了频率和延时才得到了较为满意的结果。

4.键盘的调试

小学期的第二天就在网上查阅资料弄懂了键盘的扫描输入原理,后来通过几天的修改将

代码程序写好之后测试时是成功的,但是又过了几天待全部发声代码编写完成再次测试的时候有两个键按下时发声频率不正确,一个键按下后不论怎样调试频率没有变化,另一个键发声和相邻的键始终保持一致,后来通过不断地改代码调试发现第一个键出了问题,另一个键的接头接触不良,我们换了一个接口后差强解决了相邻键发声相同的问题。

6.2实验感悟

这次小学期是我和队友第一次接触单片机,对单片机之前没有任何接触和认识,所以刚上手时非常困惑,一来是不清楚单片机究竟什么构造和具有什么功能,二来不清楚选作哪个题目,于是第一天和第二天我和室友大致扫视了一遍数据手册,又通过上网查阅相关资料对于单片机有了一个大致的了解,之后去网上搜索各种单片机设计题目,因为我们两个人之前都懂一些音乐乐理,对音乐很感兴趣所以挑了这个电子琴发声器的题目,初次编写代码时一头雾水,不知从何下手,后来渐渐弄懂了电子琴发声的原理,通过开题报告做了流程图和模块分解,再加上老师的分析,开始尝试分模块编写代码。

编写代码后调试过程中耗费了很长时间,不断修改代码编译通过之后上机调试中又出现各种各样的问题,有的问题像LCD和发声问题花了好长时间调整修改,过程中很痛苦,但是每当问题解决看到成品时心情都是非常的愉悦。最后在验收前四天我们把基本功能全部能够实现了,为了丰富我们的成果,我找了四只蓝色发光二极管,在原有代码上补充了一个跑马灯类似的函数,让声音发出来的同时四只小灯泡循环一次闪亮,给我们的电子琴增加了一点绚丽的效果。

6.1实验总结

总体来说这次小学期我们圆满完成了电子琴所涉及的所有功能,对于单片机有了第一次的尝试和理解,唯一遗憾的是对于定时器的掌握和使用还是存在问题。在小学期过程中尤其感谢葛顺明老师的悉心指导,尤其是在小学期前半阶段,总是有各种问题麻烦老师,有的时候都不好意思去问,但是葛老师还是每次都认真的解答我们的问题,这次实验的成功离不开老师的指导和帮助。对于我们存在的问题,在大三大四阶段还会进一步学习和注意,进一步深入了解单片机。

六.参考文献

[1] PIC单片机实用教程-基础篇北京航空航天大学出版社 82317024 李学海

[2] PIC32系列手册

七.程序源代码

Keyboard.h:

***************************************************************************

#include

#include

#define R0 PORTGbits.RG1

#define R1 PORTDbits.RD3

#define R2 PORTEbits.RE0

#define R3 PORTGbits.RG14

#define C0 PORTEbits.RE1

#define C1 PORTDbits.RD4

#define C2 PORTEbits.RE3

#define C3 PORTEbits.RE2

#define uchar unsigned char

#define uint unsigned int

uchar keyboard();

void delay(uint ms);

uchar presskey();

keyboard.c

******************************************************************************* #include "KEYBOARD.h"

//时延函数

void delay(uint ms)

{

uint x,y;

for(x=ms;x>0;x--)

for(y=10;y>0;y--);

}

uchar keyboard()

{

while(1)

{

delay(100);

//将R行全部设置为输出为低电平0;

PORTSetPinsDigitalOut(IOPORT_G, BIT_14 | BIT_1 );

PORTSetPinsDigitalOut(IOPORT_D, BIT_3 );

PORTSetPinsDigitalOut(IOPORT_E, BIT_0 );

PORTClearBits(IOPORT_G, BIT_14 | BIT_1 );

PORTClearBits(IOPORT_D, BIT_3);

PORTClearBits(IOPORT_E, BIT_0); delay(1);

//将C列全部设置为输入为高电平1

PORTSetPinsDigitalIn(IOPORT_E, BIT_1 | BIT_2 | BIT_3);

PORTSetPinsDigitalIn(IOPORT_D, BIT_4 );

PORTSetBits(IOPORT_E, BIT_1 | BIT_2 | BIT_3);

PORTSetBits(IOPORT_D, BIT_4 );delay(1);

//第一列

R0=0;R1=1;R2=1;R3=1; //第一行

if(C0==0) //第一列

{

if(C0==0) return 1;

}

if(C1==0)

{

delay(10);

if(C1==0) return 2;

}

if(C2==0)

{

delay(10);

if(C2==0) return 3;

}

if(C3==0)

{

delay(10);

if(C3==0) return 4;

}

//第二列

R0=1;R1=0;R2=1;R3=1;

if(C0==0)

{

delay(10);

if(C0==0) return 5; }

if(C1==0)

{

delay(10);

if(C1==0) return 6;

}

if(C2==0)

{

delay(10);

if(C2==0) return 7;

}

if(C3==0)

{

delay(10);

if(C3==0) return 8;

}

//第三列

R0=1;R1=1;R2=0;R3=1;

if(C0==0)

{

if(C0==0) return 9;

}

if(C1==0)

{

delay(10);

if(C1==0) return 10;

}

if(C2==0)

{

delay(10);

if(C2==0) return 11;

}

if(C3==0)

{

delay(10);

if(C3==0) return 12;

}

//第四列

R0=1;R1=1;R2=1;R3=0;

if(C0==0)

{

delay(10);

if(C0==0) return 13;

}

if(C1==0)

{

delay(10);

if(C1==0) return 14;

}

if(C2==0)

{

delay(10);

if(C2==0) return 15;

}

if(C3==0)

{

delay(10);

if(C3==0) return 16;

}

}

};

uchar presskey()

{ delay(100);

//将R行全部设置为输出为低电平0;

PORTSetPinsDigitalOut(IOPORT_G, BIT_14 | BIT_1 );

PORTSetPinsDigitalOut(IOPORT_D, BIT_3 );

PORTSetPinsDigitalOut(IOPORT_E, BIT_0 );

PORTClearBits(IOPORT_G, BIT_14 | BIT_1 );

PORTClearBits(IOPORT_D, BIT_3);

PORTClearBits(IOPORT_E, BIT_0); delay(1);

//将C列全部设置为输入为高电平1

PORTSetBits(IOPORT_E, BIT_1 | BIT_2 | BIT_3);

PORTSetBits(IOPORT_D, BIT_4 );

PORTSetPinsDigitalIn(IOPORT_E, BIT_1 | BIT_2 | BIT_3);

PORTSetPinsDigitalIn(IOPORT_D, BIT_4 );

delay(1);

R0=0;R1=0;R2=0;R3=0;

if(C0==0)

{

delay(10);

if(C0==0) return 1;

}

if(C1==0)

{

delay(10);

if(C1==0) return 1 ;

}

if(C2==0)

{

delay(10);

if(C2==0) return 1;

}

if(C3==0)

{

delay(10);

if(C3==0) return 1;

}

return 0;

}

LCD.c

*************************************************************************** //-------------------------------------------------------

// 名称: LCD1602.c液晶控制与显示程序

//------------------------------------------------------

#include

#include "LCD.h"

/*-------------------------------------------------

LCD RS--RG13 RW——RG12 E——RG14

-------------------------------------------------*/

void Delay_1ms(void) //1ms延时函数

{

unsigned int i;

for (i=0;i<1000;i++);

}

void Delay_nms(unsigned int n) //N ms延时函数

{

unsigned int j=0;

for (j=0;j

Delay_1ms();

}

/******************************************************

写LCD命令

******************************************************/ void Write_LCD_Command(INT8U cmd)

{

PORTClearBits(IOPORT_A, BIT_7); //RS=0; PORTClearBits(IOPORT_A, BIT_6); //RW=0; PORTFbits.RF5 = (cmd)%2;

PORTFbits.RF12 = (cmd/2)%2;

PORTFbits.RF13 = ((cmd/2)/2)%2;

PORTBbits.RB12 = (((cmd/2)/2)/2)%2;

PORTBbits.RB13 = ((((cmd/2)/2)/2)/2)%2;

PORTBbits.RB14 = (((((cmd/2)/2)/2)/2)/2)%2;

PORTBbits.RB8 = ((((((cmd/2)/2)/2)/2)/2)/2)%2;

PORTBbits.RB9 =(((((((cmd/2)/2)/2)/2)/2)/2)/2)%2;

Delay_nms(50);

PORTSetBits(IOPORT_F, BIT_4); //E=1; Delay_nms(50);

PORTClearBits(IOPORT_F, BIT_4); //E=0; Delay_nms(50); //LCD忙等待

}

/****************************************************** void Write_LCD_Data(INT8U dat)

写LCD命令

******************************************************/

void Write_LCD_Data(INT8U dat)

{

PORTSetBits(IOPORT_A, BIT_7); //RS=1; PORTClearBits(IOPORT_A, BIT_6); //RW=0;

PORTFbits.RF5 = (dat)%2;

PORTFbits.RF12 = (dat/2)%2;

PORTFbits.RF13 = ((dat/2)/2)%2;

PORTBbits.RB12= (((dat/2)/2)/2)%2;

PORTBbits.RB13 = ((((dat/2)/2)/2)/2)%2;

PORTBbits.RB14 = (((((dat/2)/2)/2)/2)/2)%2;

PORTBbits.RB8= ((((((dat/2)/2)/2)/2)/2)/2)%2;

PORTBbits.RB9 =(((((((dat/2)/2)/2)/2)/2)/2)/2)%2;

Delay_nms(5);

PORTSetBits(IOPORT_F, BIT_4); //E=1;

Delay_nms(5);

PORTClearBits(IOPORT_F, BIT_4); //E=0;

Delay_nms(5); //LCD忙等待

}

/******************************************************

void LCD_Initialize()

LCD初始化

******************************************************/

void LCD_Initialize()

{

Write_LCD_Command(0x30); //置功能,8位,双行,5*7

Delay_nms(20);

Write_LCD_Command(0x01); //清屏

Delay_nms(20);

Write_LCD_Command(0x06); //字符进入模式:屏幕不动,字符后移Delay_nms(20);

Write_LCD_Command(0x0C); //显示开,关光标

Delay_nms(20);

}

//-----------------------------------------------------------------

// 在r行(0~1) c列(0~15)显示字符串

//-----------------------------------------------------------------

void LCD_ShowString(INT8U r, INT8U c,char *str)

{

INT8U i=0;

if (r==0)

单片机电子琴的设计

单片机电子琴的设计前言 1 第一章设计要求及工作原理1 1.1 差不多设计要求 1 1.2 方案比较与确定 2 1.3 系统组成与工作原理2 第二章硬件电路设计6 2.1 单片机最小系统 6 2.2 键盘模块 9 2.3 方波发生模块11 2.4 功率放大发声模块11 第三章软件设计12 3.1 软件结构功能设计12 3.2 主程序设计12 3.3 子程序设计13 第四章实验调试及测试结果分析15 4.1 软件调试 15 4.2系统联调16 结论17 参考文献18 附录1:系统原理图 19 附录2 源程序19 附录3 电子琴成品图26 附录4元件清单27

前言 电子琴是一种功能强大,易于制作,成本低廉的现代新型乐器。它可按照使用者的不同要求方便的进行设计,成为现代社会一种颇具市场号召力的乐器。单片机具有强大的操纵功能和灵活的编程实现特性,在现代工业生活中随处可见,此次课程设计要紧确实是利用STC89C52单片机为核心操纵元件,设计简易的一个电子琴,并以此对电子琴原理及硬件组成进行分析并设计,最终由此做出实物。由此更进一步把握微机原理及应用课程的有关知识,提升应用微机解决咨询题的能力,加深对微机应用的懂得。通过查阅资料,结合所学知识进行软、硬件的设计,初步把握应用微机解决咨询题的步骤及方法。为以后结合专业从事微机应用设计奠定基础。 第一章设计要求及工作原理 1.1 差不多设计要求 基于单片机STC89C52为核心。 利用定时/计数器8253设计并制作一个简易电子琴。

设计至少8个按键,每个按键对应一种音调,即1、2、3、4、5、6、7、8八个不同的音节。 按下按键发声,松开按键后声音延迟一段时刻后停止,可弹奏简单的乐曲。 1.2 方案比较与确定 方案一:使用单片机内部定时器,通过编程实现发出不同频率方波,产生音阶。 方案二:使用8253作为外部定时器,通过编程实现产生所需频率的方波。 通过对方案一和方案二的比较能够明白,方案一是通过使用单片机内部定时器,以编程实现方波输出,优点在于外部电路简单,程序结构简单,缺点在于消耗单片机资源过多,不利于优化升级;方案二是利用82 53来产生方波,相对来讲这种方案外部电路较为复杂,程序结构也更为复杂,优点在于占用单片机资源少,输出稳固,利于扩展;故而选择方案二较好 1.3 系统组成与工作原理 声音的频谱范畴约在几十到几千赫兹, 若能利用程序来操纵单片机某 个口线持续输出“高”“低”电平, 则在该口线上就能产生一定频率的方波, 将该方波接上喇叭就能发出一定频率的声音, 若再利用程序操纵“高”“低”电平的连续时刻, 就能改变输出波形的频率从而改变音调。乐曲中, 每一音符对应着确定的频率, 下表给出各音符频率。如果单片机某个口线输出“高”“低”电平的频率和某个音符的频率一样, 那么将此口线接上喇叭就能够发出此音符的声音。本系统确实是按照此原理设计, 关于单片机来讲要产生一定频率的方波大致是先将某口线输出高电平然后延时一段时刻再输出低电平, 如此循环的输出就会产生一定频率的方波, 通过 改变延时的时刻就能够改变输出方波的频率。单片机内部有两个位的定时计数器T1和T0, 单片机的定时计数器实际上是个计数装置它既能够对单片机的内部晶振驱动时钟计数也能够对外部输入的脉冲计数, 对内部晶振计

基于单片机的简易电子琴设计课程设计

基于单片机的简易电子琴设计课程设计

湖南文理学院 课程设计报告 课程名称:单片机课程设计 专业班级:自动化10102班17号学生姓名:肖葵 指导教师:王南兰 完成时间:2013年 6 月13 日报告成绩: 湖南文理学院制

摘要 随着社会的发展进步,音乐逐渐成为人们生活中很重要的一部分,有人曾说喜欢音乐的人不会向恶。我们都会抽空欣赏世界名曲,作为对精神的洗礼。本论文设计一个基于单片机的简易电子琴。人们对于电子琴如何实现其功能,如音色选择、声音强弱控制、节拍器、自动放音功能等等也很好奇。 电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。本文的主要内容是用AT89S52单片机为核心控制元件,设计一个电子琴。以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器。本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。 关键词:AT89S51;音色节拍器;电子琴

ABSTRACT With the development of our society, music has become an important part of life. There’s a saying goes that people who likes music cannot be an evil. During our life, we often enjoy all kinds of music in the world to baptize our spirits. This thesis has designed a simple microcontroller-based electronic key board. We are curious about the foundation of electronic keyboard, such as the choice of timber, the control of volume, the metrononme and automatic playback. The keyboard is a product of modern electronic technology combined with music, it is a new type of keyboard instruments. And it plays an important role in modern music. Single chip has a 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 an electronic organ, single chip as a host to the core, with the keyboard, speakers and other core modules main control module, in the main control module has 16 keys and speakers. Stability of the system, its advantages are simple hardware circuits, software functions, control system reliability, high cost performance and have certain practical and reference value. Key words : single chip MCU keyboard speaker electronic organ

单片机课程设计报告书----电子秤

一、设计任务及要求: 设计任务: 完成一个简单的使用数字电子秤的硬件与软件部分的设计。 设计要求: 1.利用单片机实现对所设计的电子秤的各项功能的控制。 2.电子秤能够LCD液晶显示出商品的名称、价格,重量、总价等信息。 3.电子秤具有储存几种简单商品价格的功能。 4.电子秤的测量范围要求达到5KG,测量精度要求达到0.001。 5.电子秤能够自动完成商品的价格计算。 指导教师签名: 2010 年6月16 日二、指导教师评语: 指导教师签名: 2010 年7月3日三、成绩 验收盖章 2010 年7 月日

基于单片机的实用电子秤的设计 1 设计目的 单片机以其功能强,体积小,功耗低,易开发等很多优势被广泛应用。本 次数字电子秤的设计就是需要通过选择合适的单片机来进行主控,再结合A/D 转换、键盘、液晶显示、复位电路和蜂鸣器报警驱动电路的知识,同时在软件 的设计过程中用到键盘扫描、液晶显示驱动、模数转换程序及汉字库的的设计, 做到对我们所学数电、模电、单片机等知识的综合应用,最终实现所设计数字 电子秤的各项功能,达到“巩固知识,培养技能,学而用之”的实践目的。通过这次课程设计,不但要提高我们在工作中的学习能力、探究能力、应用能力和动 手能力,还要历练我们不畏艰难、不懂便学、有漏必补的认真严谨的工作态度,强化我们的社会适应力和社会竞争力,为走向社会提前试水,完善自我。 2 设计的主要内容及要求 本设计主要完成一个简单实用数字电子秤的硬件电路部分和软件部分的设计。硬件部分包括数据采集、最小系统板、人机交互界面三大部分。其中,数 据采集部分由压力传感器和A/D 转换部分组成;人机界面部分为键盘输入、 液晶显示。软件部分应用单片机 C 语言实现了本设计的全部控制功能。本设 计的数字电子秤要求能够显示商品的名称、价格、总量、总价等;能够自动完 成商品的价格计算;能够储存几种简单商品的价格;能够具有超重提醒功能, 一旦重量超出了自身重量的测量的范围,发出警报;同时对数字电子秤的测量 范围要达到5KG,测量精度要求达到0.001。 3 整体设计方案 整个数字电子秤电路由压力传感电路(ADC0832采样)、模数转换系统、单 片机主控制电路、LM4229显示电路、蜂鸣器报警电路和4*4键盘电路6 个部

基于单片机的电子时钟课程设计报告

目录 一、引言········ 二、设计课题········· 三、系统总体方案········· 四、系统硬件设计······ 1.硬件电路原理图 2.元件清单 五、系统软件设计········· 1.软件流程图 2.程序清单 六、系统实物图········ 七、课程设计体会········ 八、参考文献及网站········· 九、附录·········

一.引言 单片机因将其主要组成部分集成在一个芯片上而得名,就是把中央处理器、随机存储器、只读存储器、中断系统、定时器/计数器以及I/O接口电路等部件集成在一个芯片上。 基于单片机设计的数字钟精确度较高,因为在程序的执行过程中,任何指令都不影响定时器的正常计数,即便程序很长也不会影响中断的时间。 数字钟是采用数字电路实现对日期、时、分、秒,数字显示的计时装置,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表的报时功能。数字钟已成为人们日常生活中的必需品,广泛应用于家庭、车站、码头、剧院、办公室等场所,给人们的生活、学习、工作带来极大的方便。不仅如此,在现代化的进程中,也离不开电子钟的相关功能和原理,比如机械手的控制、家务的自动化、定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。而且是控制的核心部分。因此,研究数字钟及扩大其应用,有着非常现实的意义。 本设计使用12MHZ晶振与单片机AT89C51相连接,以AT89C51芯片为核心,采用动态扫描方式显示,通过使用该单片机,加之在显示电路部分使用HD74LS373驱动电路,实现在8个LED数码管上显示时间,通过4个按键进行调时、复位等功能,在实现各功能时数码管进行相应显示。软件部分用C语言实现,分为显示、延迟、调时、复位等部分。通过软硬件结合达到最终目的。

基于51单片机的电子琴设计

随着社会的发展进步,音乐逐渐成为我们生活中很重要的一部分,有人曾说喜欢音乐的人不会向恶。我们都会抽空欣赏世界名曲,作为对精神的洗礼。本论文设计一个基于单片机的简易电子琴。 电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经融入现代人们的生活中,成为不可替代的一部分。本文的主要内容是用AT89C51单片机为核心控制元件,设计一个电子琴。以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有8个按键和扬声器。本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高,具有一定的实用和参考价值。 关键词:AT89C51单片机;数码管;电子琴

1 系统方案设计 (1) 1.1 设计指标 (1) 1.2 系统方案综述 (1) 1.3 系统设计思路 (1) 2 硬件设计 (2) 2.1 电路图 (2) 2.2 单片机AT89C51简介 (2) 2.3 单片机的工作过程 (4) 2.4 键盘电路 (5) 2.5 显示电路 (5) 2.6 声音电路 (7) 3 系统软件设计 (7) 3.1延时程序设计 (9) 3.2定时器初始化及其中断函数 (9) 3.3示例音乐播放程序 (10) 3.4单独按键中断处理函数 (10) 4 实验结果与分析 (10) 4.1 Proteus软件简介 (10) 4.2仿真调试 (12) 5 设计心得 (13) 6 参考文献 (14) 附录 (15) 附录A 元件清单、器件识别与检测 (15) 附录B 程序源代码 (16)

单片机电子琴音乐盒课程设计

课程设计报告 设计题目:单片机多功能音乐盒设计 【摘要】本设计是一个基于AT89C51系列单片机的音乐盒,依据单片机技术原理,通过硬件电路制作以及软件编译,设计制作出一个多功能多功能音乐盒。该音乐盒主要由按键电路、复位电路、时钟电路以及蜂鸣器组成。使用两个按键控制音乐盒,一个用来暂停歌曲,另一个用来切换歌曲本音乐盒共有四首歌曲,还有4*4矩阵键盘电子琴弹奏功能,播放歌曲时,蜂鸣器发出音调,矩阵键盘无扫描信号,不动作。当按下暂停歌曲键时,可继续弹奏电子琴。本设计利用KEIL编程软件对音乐盒源程序进行编程并调试,配合PROTEUS仿真软件对硬件进行仿真调试,节约了设计时间。 设计作者:吴文豪 专业班级/学号:10应电三班 1006020144 合作者1:专业班级/学号: 合作者2:专业班级/学号: 指导教师:王明文 设计时间:2012年5月12日———2012年6月3日

目录 引言 (1) 1.设计任务及要求 (2) 1.1设计任务 (2) 1.2设计要求 (2) 1. 3研究内容 (2) 2.系统总体设计 (3) 2.1系统结构框图设计及说明 (3) 3.软、硬件设计…………………………………………………………….. 3.1 系统硬件设计………………………………………………………… 3.1.1系统硬件原理图及工作原理说明………………………… 3.1.2单元电路设计原理与元件参数选择……………………… 3. 2系统软件设计…………………………………………………….. 3. 2. 1软件系统总流程图及设计思路说明…………………... 3. 2. 2软件各功能模块的流程图设计及思路说明…………... 4.安装与调试………………………………………………………………. 4.1安装调试过程……………………………………………………… 4.2调试中遇到的问题…………………………………………………5.结论………………………………………………………………………. 6.使用仪器设备清单………………………………………………………. 7.收获、体会和建议………………………………………………………. 8.参考文献…………………………………………………………………. 9.附录………………………………………………………………………

单片机电子秤设计报告

基于单片机的电子秤 单片机电子秤设计报告 秤是一种在实际工作和生活中经常用到的测量器具。随着计量技术和电子技术的发展,传统纯机械结构的杆秤、台秤、磅秤等称量装置逐步被淘汰,电子称量装置电子秤、电子天平等以其准确、快速、方便、显示直观等诸多优点而受到人们的青睐。 和传统秤相比较,电子秤利用新型传感器、高精度AD转换器件、单片 机设计实现,具有精度高、功能强等特点。本课题设计的电子秤具有基本称重、键盘输入、计算价格、显示、超重报警功能。该电子秤的测量范围为 0-10Kg,测量精度达到 5g,有高精度,低成本,易携带的特点。电子秤采用液晶显示汉字和测量记过,比传统秤具有更高的准确性和直观性。另外,该电子秤电路简单,使用寿命长,应用范围广,可以应用于商场、超市、家庭等场所,成为人们日常生活中不可少的必需品。 一、功能描述 1、采用高精度电阻应变式压力传感器,测量量程 0-10kg ,测量精度可 达 5g 。 2、采用电子秤专用模拟 / 数字( A/D)转换器芯片 hx711 对传感器信号进行调理转换, HX711 采用了海芯科技集成电路专利技术,是一款专为高精度电子秤而设计的 24 位 A/D 转换器芯片

3、采用 STC89C52单片机作为主控芯片,实现称重、计算价格等主控功 4、采用 128*64 汉字液晶屏显示称重重量、单价、总价等信息。 5、采用 4*4 矩阵键盘进行人机交互,键盘容量大,操作便捷。 6、具有超量程报警功能,可以通过蜂鸣器和 LED灯报警。 7、系统通过 USB电源供电,单片机程序也可通过 USB线串行下载。 二、硬件设计 1、硬件方案 单片机电子秤硬件方案如图 1 所示: 图 1 单片机电子秤硬件方案称重传感器感应被测重力,输出微弱的毫伏级电压信号。该电压信号经过电子秤专用模拟 /数字(A/D)转换器芯片hx711 对传感器信号进行调理转换。 HX711 采用了海芯科技集成电路专利技术,是一款专为高精度电子秤而设计的 24 位 A/D 转换器芯片,内置增益控制,精度高,性能稳定。 HX711芯片通过 2 线串行方式与单片机通信。单片机读取被测数据,进行计算转换,再液晶屏上显示出

单片机课程设计--简易电子钟.doc

单片机课程设计报告设计课题:简易电子时钟的设计 专业班级:07通信1班 学生姓名:黎捐 学号:0710618134 指导教师:曾繁政 设计时间:2010.11.5—2010.12.20

一、设计任务与要求 (1)设计任务: 利用单片机设计并制作简易的电子时钟,电路组成框图如图所示。 (2)(2) 设计要求:1)制作完成简易的电子时钟,时间可调整。 2)有闹钟功能。 二、方案设计与论证 简易电子时钟电路系统由主体电路和扩展功能电路两主题组成,总体功能原理是以STC89C52单片机为主要的控制核心,通过外接4个独立式键盘作为控制信号源,八个七段数码管作为显示器件,蜂鸣器作为定时器件,单片机实时的去执行相应的功能。在数码管上显示出来,此时通过不同的按键来观看和调节各种数据。CPU 控制原理图如图1所示。 图1. CPU 控制原理图 三、硬件系统的设计 3.1 STC89C52控制模块 STC89C52是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O )端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,STC89C51可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash 存储器结合在一起,特别是可反复擦写的Flash 存储器可有效地降低开发成本。 MCS-52单片机内部结构 8052单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明: 中央处理器: 中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU 负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。 数据存储器(RAM): 8052内部有128个8位用户数据存储单元和128 个专用寄存器单元,它们是统一编 时间显示显示 主控器(51单片机) 时间 调整 声音报 时 (选做)

基于51单片机简易电子琴的课程设计

基于51单片机简易电子琴 1 课题背景 单片微型计算机室大规模集成电路技术发展的产物,属于第四代电子计算机它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。他的应用必定导致传统的控制技术从根本上发生变革。因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。 电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。它在现代音乐扮演重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。本文的主要内容是用AT89S52单片机为核心控制元件,设计一个电子琴。以单片机作为主控核心,与键盘扬声器等模块组成核心主控制模块,在主控模块上设有8个按键,和一个复位按键。 主要对使用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴硬件的组成。利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏要表达的音符。并且分别从原理图,主要芯片,个模块原理及各莫奎的程序的调试来详细阐述。 一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,构成我们想演奏的那首曲目。当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样的方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系编写正确就可以达到我们想要的曲目。 2 任务要求与总体设计方案 2.1 设计任务与要求 利用所给键盘的1,2,3,4,5,6,7,8八个键,能够发出7个不同的音调,而且有一个按键可以自动播放歌曲,要求按键按下时发声,松开延时一小段时间,中间再按别的键则发另外一音调的声音,当系统扫描到键盘按下,则快速检测出是哪一个按键被按下,然后单片机的定时器启动,发出一定频率的脉冲,该频率的脉冲经喇叭驱动电路放大滤波后,就会发出相应的音调。如果在前一个按下的键发声的同时有另一个按键被按下,则启动中断系统。前面的发音停止,转到后按的键的发音程序。发出后按的键的音调。 2.2 设计方案 2.2.1 播放模块 播放模块是由喇叭构成,它几乎不存在噪声,音响效果较好,而且由于所需驱动功率较小,且价格低廉,所以,被广泛应用。 2.2.2 按键控制模块

单片机电子秤设计报告共28页文档

单片机电子秤设计报告 秤是一种在实际工作和生活中经常用到的测量器具。随着计量技术和电子技术的发展,传统纯机械结构的杆秤、台秤、磅秤等称量装置逐步被淘汰,电子称量装置电子秤、电子天平等以其准确、快速、方便、显示直观等诸多优点而受到人们的青睐。 和传统秤相比较,电子秤利用新型传感器、高精度AD转换器件、单片机设计实现,具有精度高、功能强等特点。本课题设计的电子秤具有基本称重、键盘输入、计算价格、显示、超重报警功能。该电子秤的测量范围为0-40Kg,测量精度达到5g,有高精度,低成本,易携带的特点。电子秤采用液晶显示汉字和测量记过,比传统秤具有更高的准确性和直观性。另外,该电子秤电路简单,使用寿命长,应用范围广,可以应用于商场、超市、家庭等场所,成为人们日常生活中不可少的必需品。 一、功能描述 1、采用高精度电阻应变式压力传感器,测量量程0-40kg,测量精度可达5g。 2、采用电子秤专用模拟/数字(A/D)转换器芯片hx711对传感器信号进行调理转换,HX711 采用了海芯科技集成电路专利技术,是一款专为高精度电子秤而设计的24 位A/D 转换器芯片。 3、采用STC89C52单片机作为主控芯片,实现称重、计算价格等主控功能。 4、采用128*64汉字液晶屏显示称重重量、单价、总价等信息。 5、采用4*4矩阵键盘进行人机交互,键盘容量大,操作便捷。 6、具有超量程报警功能,可以通过蜂鸣器和LED灯报警。 7、系统通过USB电源供电,单片机程序也可通过USB线串行下载。

二、硬件设计 1、硬件方案 单片机电子秤硬件方案如图1所示: 图1 单片机电子秤硬件方案 称重传感器感应被测重力,输出微弱的毫伏级电压信号。该电压信号经过电子秤专用模拟/数字(A/D)转换器芯片hx711对传感器信号进行调理转换。HX711 采用了海芯科技集成电路专利技术,是一款专为高精度电子秤而设计的24 位A/D 转换器芯片,内置增益控制,精度高,性能稳定。HX711芯片通过2线串行方式与单片机通信。单片机读取被测数据,进行计算转换,再液晶屏上显示出来。 矩阵键盘主要用于计算金额。当被测物体重量得到后,用户可以通过矩阵键盘输入单价,电子秤自动计算总金额并在液晶屏显示。电源系统给单片机、HX711电路及传感器供电。 2、称重传感器 传感器是测量机构最重要的部件。称重传感器本身具有单调性,其主要参数指标是灵敏度、总误差和温度漂移。 (1) 灵敏度 称重传感器的电灵敏度为满负荷输出电压与激励电压的比值,典型值是2mV/V。当使用2 mV/V灵敏度和5 V激励电压的传感器时,其满度输出电压为10 mV。通常,为了使用称重传感器线性度最好的一段称重范围,应当仅使用满度范围的三分之二。因此满度输出电压应当大约为6mV。当电子秤应用于工业环境时,在6mV满度范围内测量微小的信号变化并非易事。 (2) 总误差 总误差是指输出误差和额定误差的比值。典型电子秤的总误差指标大约是0.02%,这一技术指标相当重要,它限制了使用理想信号调节电路所能达到的精确度,决定了ADC分辨率的选择以及放大电路和滤波器的设计。

51单片机电子时钟课程设计实验报告

《单片机原理与应用》课程设计 总结报告 题目:单片机电子时钟(带秒表)的设计 设计人员:张保江江润洲 学号:2012197213 2012118029 班级:自动化1211 指导老师:阮海容

目录 1.题目与主要功能要求 (2) 2.整体设计框图及整机概述 (3) 3.各硬件单元电路的设计、参数分析及原理说明 (3) 4.软件流程图和流程说明 (4) 5.总结设计及调试的体会 (10) 附录 1.图一:系统电路原理图 (11) 2.图二:系统电路PCB (12) 3.表一:元器件清单 (13) 4.时钟程序源码 (14)

题目:单片机电子时钟的设计与实现 课程设计的目的和意义 课程设计的目的与意义在于让我们将理论与实践相结合。培养我们综合运用电子课程中的理论知识解决实际性问题的能力。让我们对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,同时在软件编程、排错调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独立完成某些单片机应用系统的开发和设计打下一个坚实的基础。 课程设计的基本任务 利用89C51单片机最小系统,综合应用单片机定时器、中断、数码显示、键盘输入等知识,设计一款单片机和简单外设控制的电子时钟。 主要功能要求 最基本要求 1)使用MCS-51单片机设计一个时钟。要求具有6位LED显示、3个按键输入。 2)完成硬件实物制作或使用Pruteus仿真(注意位驱动应能提供足够的电流)。3)6位LED数码管从左到右分别显示时、分、秒(各占用2位),采用24小时标准计时制。开始计时时为000000,到235959后又变成000000。 4)使用3个键分别作为小时、分、秒的调校键。每按一次键,对应的显示值便加1。分、秒加到59后再按键即变为00;小时加到23后再按键即变为00。在调校时均不向上一单位进位(例如分加到59后变为00,但小时不发生改变)。 5) 软件设计必须使用MCS-51片内定时器,采用定时中断结构,不得使用软件延时法,也不得使用其他时钟芯片。 6)设计八段数码管显示电路并编写驱动程序,输入并调试拆字程序和数码显示程序。 7)掌握硬件和软件联合调试的方法。 8)完成系统硬件电路的设计和制作。 9)完成系统程序的设计。 10)完成整个系统的设计、调试和制作。 11)完成课程设计报告。 基本要求 1)实现最基本要求的1~10部分。 2)键盘输入可以控制电子时钟的走时/调试。 3)设计键盘输入电路和程序并调试。 4)掌握键盘和显示配合使用的方法和技巧。 提高发挥部分

(完整版)基于51单片机简易电子琴的设计

电子琴的设计 1 课题背景 单片微型计算机室大规模集成电路技术发展的产物,属于第四代电子计算机它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。他的应用必定导致传统的控制技术从根本上发生变革。因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。 电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。它在现代音乐扮演重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。本文的主要内容是用AT89S52单片机为核心控制元件,设计一个电子琴。以单片机作为主控核心,与键盘扬声器等模块组成核心主控制模块,在主控模块上设有8个按键,和一个复位按键。 主要对使用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴硬件的组成。利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏要表达的音符。并且分别从原理图,主要芯片,个模块原理及各莫奎的程序的调试来详细阐述。 一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,构成我们想演奏的那首曲目。当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样的方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系编写正确就可以达到我们想要的曲目。一. 任务要求与总体设计方案 1.1 设计任务与要求 利用所给键盘的1,2,3,4,5,6,7,8八个键,能够发出7个不同的音调,而且有一个按键可以自动播放歌曲,要求按键按下时发声,松开延时一小段时间,中间再按别的键则发另外一音调的声音,当系统扫描到键盘按下,则快速检测出是哪一个按键被按下,然后单片机的定时器启动,发出一定频率的脉冲,该频率的脉冲经喇叭驱动电路放大滤波后,就会发出相应的音调。如果在前一个按下的键发声的同时有另一个按键被按下,则启动中断系统。前面的发音停止,转到后按的键的发音程序。发出后按的键的音调。 1.2 设计方案 1.2.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)

前言 音乐教育是学校美育的主要途径和最重要内容,它在陶冶情操、提高素养、开发智力,特别是在培养学生创新精神和实践能力方面发挥着独特的作用。近年来,我国音乐教育在理论与实践上都取得了有目共睹的成绩,探索并形成了具有中国特色的、较为完整的音乐教育教学体系。但我国音乐教育的改革力度离素质教育发展的要求还存在一定距离。如今,电子琴作为电子时代的新产物以其独特的功能和巨大的兼容性被人们广泛的接受和推崇。而在课堂教学方面,它拥有其它乐器无法比拟的两个瞬间:瞬间多元素思维的特殊的弹奏方法;瞬间多声部(包括多音色)展示的乐队音响效果的特点。结合电子琴自身强大的功能及独特的优点来进行音乐教育的实施,这样就应该大力推广电子琴进入音乐教室,让电子琴教学在音乐教育中发挥巨大的作用。现代乐器中,电子琴是高新科技在音乐领域的一个代表,体现了人类电子技术和艺术的完美结合。电子琴自动伴奏的稳定性、准确性,以及鲜明的强弱规律、随人设置的速度要求,都更便于人们由易到难、深入浅出的准确掌握歌曲节奏和乐曲风格,对其节奏的稳定性和准确性训练能起到非常大的作用。电子琴所包含的巨量的音乐信息和强大的音乐表现力可以帮助音乐教学更好地贯彻和落实素质教育,更有效地提高人们的音乐素质和能力。目前,市场上的电子琴可谓琳琅满目,功能也是越来越完备。以单片机作为主控核心,设计并制作的电子琴系统运行稳定,其优点是硬件电路简单、软件功能完善、控制系统可靠、性价比较高等,具有一定的实用与参考价值。这就为电子琴的普及提供了方便。 二、电子琴设计要求本设计主要是用AT89C51单片机为核心控制元件,设计一台电子琴。以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有7个按键和1个复位按键。本系统主要是完成2大功能:音乐自动播放、电子琴弹奏。关于声音的处理,使用单片机C语言,利用定时器来控制频率,而每个音符的符号只是存在自定义的表中。

基于单片机的电子秤的设计样本

四川信息职业技术学院 毕业设计阐明书(论文) 设计(论文)题目: 基于单片机电子秤设计 专业:应用电子技术 班级:应电12-3 学号: 1111111 姓名:某某某 指引教师:某某某

二〇一四年十一月二十五日

四川信息职业技术学院毕业设计(论文)任务书

目录 摘要................................................................................................... 错误!未定义书签。绪论................................................................................................... 错误!未定义书签。第一章方案设计与论证................................................................... 错误!未定义书签。 1.1方案选取 ............................................................................ 错误!未定义书签。 1.2方案论证 ............................................................................ 错误!未定义书签。第二章硬件设计与分析................................................................... 错误!未定义书签。 2.1单片机最小系统 ................................................................ 错误!未定义书签。 2.1.1 芯片简介.............................................................. 错误!未定义书签。 2.1.2 时钟电路设计...................................................... 错误!未定义书签。 2.1.3 复位电路设计...................................................... 错误!未定义书签。 2.2信号采集模块 .................................................................... 错误!未定义书签。 2.2.1 传感器选取.......................................................... 错误!未定义书签。 2.2.2 传感器选取.......................................................... 错误!未定义书签。 2.3数据转换电路 .................................................................... 错误!未定义书签。 2.3.1 A/D转换器选取................................................... 错误!未定义书签。 2.3.2 ADC0832简介 ..................................................... 错误!未定义书签。 2.3.3单片机对ADC0832控制原理 ............................ 错误!未定义书签。 2.4声光报警电路 .................................................................... 错误!未定义书签。 2.5显示电路 ............................................................................ 错误!未定义书签。 2.6整机电路 ............................................................................ 错误!未定义书签。

单片机课程设计 电子日历时钟显示器设计

目录 1.题目设计要求 (1) 2.开发平台简介 (1) 3.系统硬件设计 (2) 3.1设计原理 (2) 3.2器件的功能与作用 (2) 3.2.1 MCS51单片机AT89C51 (2) 3.2.2复位电路 (3) 3.2.3晶振电路 (4) 3.2.4 DS1302时钟模块 (4) 3.2.5 引脚功能及结构 (4) 3.2.6 DS1302的控制字节 (5) 3.2.7 数据输入输出(I/O) (5) 3.2.8 DS1302的寄存器 (6) 3.2.9 液晶显示LCD1602 (6) 3.2.10 串行时钟日历片DS1302 (8) 4.系统软件设计 (10) 4.1程序流程 (10) 4.2程序代码 (10) 5.系统仿真调试 (20) 5.1仿真原理图设计 (20) 5.2仿真运行过程 (21) 5.3仿真运行结果 (21) 6.总结 (21) 7.参考文献 (22)

1.题目设计要求 通过串行日历时钟芯片DS1302生成当前日期和是时间,通过IO口传输到AT89c52芯片中,然后再将AT89c52接收到的数据输出到LCD上。要求LCD上显示的日期和时间与当前系统时间保持一致。 2.开发平台简介 2.1系统仿真平台Proteus Proteus软件是由英国Labcenter Electronics公司开发的EDA工具软件,已有近20年的历史,在全球得到了广泛应用。Proteus软件的功能强大,它集电路设计、制版及仿真等多种功能于一身,不仅能够对电工、电子技术学科涉及的电路进行设计,还能够对微处理器进行设计和仿真,并且功能齐全,界面多彩。和我们手头其他的电路设计仿真软件,他最大的不同即它的功能不是单一的。另外,它独特的单片机仿真功能是任何其他仿真软件都不具备的。 2.2软件开发平台Keil C Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。Keil C51生成的目标代码效率之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。

单片机课程设计---简易电子琴设计

单片机 课程设计 课程设计名称: 专业班级: 学生姓名: 学号: 指导教师: 课程设计时间:

一、需求分析 1.1课题背景 随着社会的发展进步,音乐逐渐成为我们生活中很重要的一部分,有人曾说喜欢音乐的人不会向恶。我们都会抽空欣赏世界名曲,作为对精神的洗礼。本论文设计一个基于单片机的简易电子琴。电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。电子科技也在不断的前进,电子技术正在以不同的方式改变着我们的生活,电子琴设计也是希望给人们带来一些生活的乐趣。电子琴可以应用在很多方面,比如一些简易的玩具上或手机上。单片机技术使我们可以利用软硬件实现电子琴的功能,从而实现电子琴的微型化。 本文主要对使用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴统硬件组成。利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。并且本文分别从原理图,主要芯片,各模块原理及各模块的程序的调试来详细阐述。 1.2 课题设计的任务与主要内容 本文的主要内容是用AT89C51单片机为核心控制元件,设计一个简单的电子琴。以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器。定时器按设置的定时参数产生中断,由于定时参数不同,就会发出不同频率的脉冲,不同频率的脉冲经喇叭驱动电路放大滤波后,就会发出不同音调。 先根据要求设计硬件电路和编写相应的程序,然后进行仿真调试,最后细心焊接硬件电路图,将程序烤入芯片中,最终达到设计目的。本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。

电子称课程设计

1.前言 电子称重技术是现代称重计量和控制系统工程的重要基础之一,电子衡器经过40年的不断改进和完善,从60年代的机电结合型发展到现在的全电子型和数字化智能型。由于它具有称量准确、快速,读取方便,环境适应性强,便于与电子计算机结合而实现称重计量与过程控制自动化等特点,在工商贸易、能源交通、轻工食品、医药卫生、航空航天等部门得到了广泛的应用。本课题本着电子秤向高精度、高可靠方向研究,讲述了用单片机控制A/D转换、键盘输入和数据显示,对如何实现键盘中断、A/D采样进行研究。设计特别适用于测量精度要求较高的场合, 具有较高的实用价值和推广价值。本文中第一章讲述了电子秤的发展情况及其工作原理,第二章讲述了电子秤的硬件电路组成部分,第三章介绍了电子秤各部分功能实现的软件设计。 1.1研究本文的意义 物料计量是工业生产和贸易流通中的重要环节。称重装置或衡器是不可缺少的计量工具。随着工农业生产的发展和商品流通的扩大,衡器的需求也日益增多,过去沿用的机械杠杆秤己不能适应生产自动化和管理现代化的要求。自六十年代以来,由于传感器技术和电子技术的迅速发展,电子称重技术日趋成熟,并逐步取代机械秤。尤其是七十年代初期,微处理机的出现使电子称重技术得到了进一步的发展。快速、准确、操作方便、消除人为误差、功能多样化等方面已成为现代称重技术的主要特点。称重装置不仅是提供重量数据的单体仪表,而且作为工业控制系统和商业管理系统的一个组成部分,推进了工业生产的自动化和管理的现代化,它起到了缩短作业时间、改善操作条件、降低能源和材料的消耗、提高产品质量以及加强企业管理、改善经营管理等多方面的作用。称重装置的应用已遍及到国民经济各领域,取得了显著的经济效益。同时对称重仪表的要求也越来越高,要求仪表有更高抗干扰能力、更高的精度。 基于电子秤的现状,本文拟研究一种用单片机控制的高精度数字电子秤设计方案。这种高精度数字电子秤计量准确、携带方便,集质量称量功能与价格计算功能于一体,能够满足商业贸易和居民家庭的使用需求。 1.2 电子秤的发展 1.电子技术渗入衡器制造业 随着第二次世界大战后的经济繁荣,为了把称重技术引入生产工艺过程中去,对称重技术提出了新的要求,希望称重过程自动化,为此电子技术不断渗入衡器制造业。在1954年使用了带新式打印机的倾斜杠杆式秤,其输出信号能控制商用结算器,并且用电磁铁机构与代替人工操作的按键与办公机器联用。在1960年开发出了与衡器相联的专

相关文档
相关文档 最新文档