1          课程设计总体目标1.1 功能目标

(1)利用JD51开发板上的按键S1~S4进行音调选择,即按下不同的开关产生不同的音调,依次按动S1~S4 及组合按键,蜂鸣器发出1234567i八个音调;并在数码管上显示。

(2)编写2支歌曲,并可进行选择播放。

(3)拓展题:播放音乐前亮灯10秒,并可以通过按下按键来中断播放。1.2 总体结构

图1-1  总体结构1.3 工作原理

音节由不同频率的方波产生,音节与频率的关系通过查表可得。要产生音频方波,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。利用计时器计时此半周期时间,每当计时到后就将输出方波的 I/0 反相,然后重复计时此半周期时间再对I/O 反相,就可在 I/O 脚得到此频率的方波。在 ZKS-03 实验仪上,产生方波的 I/O 脚选用P1.7,通过跳线选择器 JP1 将单片机的 P1.7 与蜂鸣器的驱动电路相连。这样 P1.7 输出不同频率的方波,蜂鸣器便会发出不同的声音。另外, 音乐的节拍是由延时实现的,如果 1 拍为0.4 秒, 1/4 拍是 0.1 秒。只要设定延时时间,就可求得节拍的时间。延时作为基本延时时间,节拍值只能是它的整数倍,每个音节相应的定时器初值 X 可按下法计算:

(式1-1)

(式1-2)

其中,f是音调频率。当晶振f_osc=11.0592MHz时,音节“1”相应的定时器初值为x,则可得x=63777D=F921H其他的可同样求得。

另外,音乐的节拍是由延时实现的,如果1拍为0.4秒,1/4拍是0.1秒。只要设定延时时间,就可求得节拍的时间。延时作为基本延时时间,节拍值只能是它的整数倍。

表1-1 音调频率对照表音调频率(Hz)X(HEX)

1262F921

2294F9E1

3330FA8C

4349FAD8

5392FB68

6440FBE9

7494FC5B

i523FC8F

2 硬件设计

运用到相关硬件为:51单片机、数码管、蜂鸣器等。2.1数码管

LED数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个,如图2-1所示,这些段分别由字母a,b,c,d,e,f,g,dp来表示,DP表示小数点。当数码管特定的段加上电压后,这些特定的段就会发亮,这样就可以看到不同的字样。发光二极管的阴极连接到一起连接到低电平的称为共阴极数码管,如图2-2所示,发光二极管的阳极连接到一起连接到电源正极的称为共阳极数码管,如图2-3所示。

图2-1 数码管             图2-2 共阴极数码管          图2-4 共阳极数码管

各段码位的对应关系,如表2-1所示:

表2.1 码位对应关系段码位D7D6D5D4D3D2D1D0

显示段Dpgfedcba

LED显示断码如表2-1所示:

表2-2 LED显示段码字型共阳极段码共阴极段码字型共阳极断码共阴极段码

0C0 H3F H990 H6F H

1F9 H06 HA88 H77 H

2A4 H5B HB83 H7C H

3B0 H4F HCC6 H39 H

499 H66 HDA1 H5E H

592H6D HE86 H79 H

682 H7D HF84 H71 H

7F8 H07 H空白FF H00 H

880 H7F HP8C H73 H2.2蜂鸣器

图2-4 蜂鸣器电路图

这里的三极管主要是做驱动用的。因为单片机的IO口驱动能力不够让蜂鸣器发出声音,所以我们通过三极管放大驱动电流,从而可以让蜂鸣器发出声音,你要是输出高电平,三极管导通,集电极电流通过蜂鸣器让蜂鸣器发出声音,当输出低电平时,三极管截止,没有电流流过蜂鸣器,所以就不会发出声音。2.3定时/计数器

单片机内有两个16位定时/计数器(增量式计数)

1.工作方式(方式0、方式1、方式2、方式3)

(1)方式0(13位定时/计数)

图2-5 工作方式0

(2)方式1(16位定时/计数)

图2-6 工作方式1

(3)方式2(8位自动重装时间常数定时/计数)

图2-7 工作方式2

(4)方式3(仅适用于定时/计数器0)

TL0 用于8位定时/计数,TH0 只用于8位定时。

图2-8 工作方式3

2.控制寄存器

(1)定时/计数器方式控制寄存器:TMOD

├──── T1 ────┼──── T0 ────┤

├──┬──┬──┬──┼──┬──┬──┬─—┤

│GATE│C/T │ M1 │ M0 │GATE│C/T │ M1 │ M0 │

└──┴──┴──┴──┴──┴──┴──┴──┘

GATE:门控位。1:打开,0:关闭

C/T:工作状态选择。1:计数状态,0:定时状态

M1,M0:工作方式选择

00 方式0

01 方式1

10 方式2

11 方式3

(2)定时/计数器控制寄存器:TCON

┌──┬──┬──┬──┬──┬──┬──┬──┐

│TF1 │TR1 │TF0 │TR0 │IE1 │IT1 │IE0 │IT0 │

└──┴──┴──┴──┴──┴──┴──┴──┘

TF1,TF0:定时/计数器中断请求标志,1:有请求;0:无请求

TR1,TR0:定时/计数器运行控制位,1:打开;0:关断

IE1,IE0:外部中断INT1,INT0 中断请求标志,1:有请求;0:无请求

IT1,IT0:外部中断INT1,INT0 触发方式,1:下降沿触发;0:低电平触发

3.中断系统

五个中断源:

INT0:外部中断0

INT1:外部中断1

T0:定时/计数器0中断

T1:定时/计数器1中断

TI/RI:串行I/O中断

中断允许寄存器:IE(1:允许;0:不允许)

┌──┬──┬──┬──┬──┬──┬──┬──┐

│EA  │× │× │ES │ET1 │EX1 │ET0 │EX0 │

└──┴──┴──┴──┴──┴──┴──┴──┘

EA: 全局中断允许位

ES: 串行口中断允许位

ET1:T1 中断允许位

EX1:INT1 中断允许位

ET0:T0 中断允许位

EX0:INT0 中断允许位

3 软件设计3.1流程图

根据要实现的功能,流程图如下:功能选择

音乐

开始

系统初始化

判断按键

判断按键

电子琴

液晶显示

播放音调

播放音乐

3.2软件组成

键盘扫描、中断计时、数码显示、音乐播放、主程序

①键盘扫描

键盘键值读取程序包括键盘扫描、消除抖动、键译码等内容。按键的识别主要有两种方法:行反转法和行扫描法。因为键盘为机械开关,容易引入抖动。为了消除抖动干扰,在程序中要加入消除抖动的部分。

②中断计时

中断部分,中断定时器1主要负责输出不同频率的方波,产生声音,中断定时器1主要是计时按键时间及按键间隔时间的功能,在播放音乐的时候,还担任着播放音乐的节拍的任务。

③音乐播放

音乐播放部分主要是实现播放程序里面的音乐的功能。

④主程序

主程序主要是随时发出按键的声音功能,并且通过不同P口的扫描,判断是否是播放按键声音还是播放音乐,还是继续发出按键声音。3.3详细思路

1.题目一:利用JD51开发板上的按键S1~S4进行音调选择,即按下不同的开关产生不同的音调,依次按动S1~S4 及组合按键,蜂鸣器发出1234567i八个音调;并在数码管上显示。

方案:我们计划设计以C语言为主体的程序代码,用按键控制音符的输出,4个按键单个按下时会输出4个音符,另外4个按键进行两两组合表示另外4个音符,效果就像电子琴的按键一样。由于平时不能发声,只有按键后才发声,我们用定时器的启动TR0作为声音输出开关。在发现按键后,送入对应频率值,打开定时器,就发出了声音,延时一阵再关闭定时器,声音就停止了。整体C代码应该分为以下模块:

(1)变量的定义。在这个模块里,我们要定义喇叭的输出脚,四个按键等。

(2)频率对照模块。在这个模块中,按照频率对照表定义一个矩阵,按照工作原理,每个频率值用两个八位二进制数来表示。这两个八位二进制数分为低八位和高八位,并可合并看做四位十六进制数。四位十六进制数可以表示0~65535范围内的数。对于12MHz的晶振,每一个电平保持时间为【65535-(四位十六进制数表示的十进制数)】微秒,用t来表示。因此该音调的一个周期为T=2*t,音调的频率f=1/T。在本项目中,由于要使用1234567i八个音调,因此建立的矩阵大小应为2*8,矩阵内的每个元素为一个八位二进制数,分别表示八个不同的频率。

(3)定时中断模块。产生定时中断以及音乐输出。4.主函数模块。在这个模块中,我们将使用while循环以及if判断等函数,对每个按键是否按下进行判定以及数码管的显示。

2.题目二:编写2支歌曲,并可进行选择播放。

方案:我们计划用三个按键来控制播放音乐。K1、K2每个键播放一首音乐,K4键停止音乐的播放。 程序分为以下几个模块。

(1)变量定义模块。在这个模块中,我们定义一些必要的引脚以及按键。

(2)频率对照模块。不同于任务一的频率对照模块,在这里我们要定义尽可能全的音调的频率。我们使用36*2的矩阵定义36个由低到高不同的频率,用于之后播放音乐。

(3)定时中断模块。调入预定时值,产生对应频率的音调。

(4)音乐符号串解释模块。使用此模块的原因在于,在之后的模块中我们会用123等数字、“’”、“.”、“_”、“|”等单引号、英文句号、下划线、分隔线等,来对一首歌进行编写。在这个模块中,我们使用switch函数,将以上不同符号分成多个case分别进行处理。

(5)奏乐模块。该模块是自定义的函数,入口是要演奏的音乐符号串,对音乐符号进行逐一解释,按照音长进行延时或中断,进而完成一首完整的曲子。在这个模块中,同时也要使用一个if函数进行判定,当在演奏过程中,使用者按下了K4按键,则退出音乐的演奏。

(6)音乐符号编写模块。在这个模块中,由两个自定义函数构成。每个自定义函数表示一首曲子。函数内容为该曲子对应的数字曲谱。

(7)主函数模块。在这个模块中进行对以上所有模块的统筹调用。

电子音调发生器c语言编程,单片机电子音调发生器设计相关推荐

  1. 电子音调发生器c语言编程,单片机课程设计(论文)_电子音调发生器.doc

    单片机课程设计(论文)_电子音调发生器 电子音调发生器 姓 名 XXX 所在学院 电子信息工程学院 专业班级 通信XXXX 学 号 XXXXX 指导教师 XXXXXX 日 期 2011 年 12月 1 ...

  2. 51单片机波形发生器51c语言,51单片机实现波形发生器.doc

    word完美格式 精心整理 学习帮手 摘要 这个系统是基于AT89C51单片机的波形信号发生器.使用AT89C51单片机作为控制核心,该系统由数字/模拟转换电路(DAC0832).运放电路(OP07) ...

  3. c语言编程基础 教案,C语言编程基础电子教案.doc

    C语言编程基础电子教案 课题(内容)1.1 C语言简史及特点课时1教学任务分析教学目标知识技能通过本节课的教学,使学生了解并熟悉编程语言C的发展历史.特点及其种类和适用范围.过程与方法通过C语言的发展 ...

  4. c语言delay_利用C语言编程单片机,制作可以根据环境光照调整亮度的智能灯

    上一节,我们利用C语言编程单片机仿制了达文西的"古怪手电筒",达成了"在有光的时候就会亮,在没有光的情况下绝对不会亮!"的目标. 其实在此基础上,C语言还能做些 ...

  5. 单片机c语言 课程设计报告,C语言编写单片机万年历系统课程设计报告98分

    <C语言编写单片机万年历系统课程设计报告98分>由会员分享,可在线阅读,更多相关<C语言编写单片机万年历系统课程设计报告98分(30页珍藏版)>请在人人文库网上搜索. 1.多功 ...

  6. 单片机电子密码锁C语言程序,单片机电子密码锁的设计(汇编语言).doc

    word格式整理版 文档可编辑 一.设计总说明 ? 随着人们对安全的重视和科技的发展,许多电子智能锁(指纹识别.IC卡辨认)已在国内外相继面世.但是这些产品的特点是针对特定的指纹和有效卡,只能适用于保 ...

  7. c语言编程基础第四版电子教案,《C语言编程基础》电子教案.doc

    <C语言编程基础>电子教案 课题(内容)1.1 C语言简史及特点课时1教学任务分析教学目标知识技能通过本节课的教学,使学生了解并熟悉编程语言C的发展历史.特点及其种类和适用范围.过程与方法 ...

  8. c语言密码锁门禁系统程序,基于C语言STC89C52单片机电子密码锁的系统设计与仿真...

    摘 要:介绍一种通过 Protues 软件成功仿真的电子密码锁的实现过程.它采用高可靠性的STC89C52单片机来实现*和密码酌识别,采用具备IC总线接田的EPROM芯片来完成密码的聋储,通过l602 ...

  9. 闹钟定时设计c语言编程,单片机定时闹钟(课程设计).docx

    单片机定时闹钟(课程设计) PAGE \* MERGEFORMAT10 绪 论 摘要: 单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM.只读 ...

最新文章

  1. MultipartFile 使用 记录
  2. linux shell脚本中调用另一个shell脚本
  3. [性能测试]:关于MQ协议脚本开发
  4. Spark入门(四)Idea远程提交项目到spark集群
  5. 【Python爬虫】股票数据定向爬虫
  6. 联通突然从4g变成3g了_联通正式关闭2G、3G服务?官方回应:是用户手机的问题...
  7. 数学老师从没这么教过,乘法竖式中进位可以是多位(附Python实现与测试源码)...
  8. 每天一个linux命令(59):rcp命令
  9. python难学吗-我没有基础,能否学会Python?Python难吗?
  10. 【基于obs插件-5】-屏幕截图
  11. Libcef源码下载与编译
  12. 企业网站建设教程:自己怎么建网站,做网站的步骤有哪些
  13. 安装Office InfoPath 2007
  14. 导出单帧图片以及时间线介绍(PR)
  15. 0717Python总结-return返回值,全局及局部变量,函数名的使用,函数的嵌套,nonlocal修改局部变量,及locals和globals
  16. 事件坐标:screenX,clientX,pageX,offsetX的区别
  17. 丁香园php岗_丁香园面试药学新闻编辑岗位体悟
  18. 阿里云盘内测申请_阿里云网盘公测预约开始了,现在申请还送2个T的空间!
  19. 字符串“false“转 Boolean false
  20. 请教游戏高手一款外国游戏名称和下载地址

热门文章

  1. Go-读取文件和写入文件三种方法的操作
  2. 另一个角度理解岭回归
  3. 多个containers 共用一个pvc_中山PVC活接球阀价格,化工管材厂家
  4. stm32两轮平衡车项目资料 ,两轮平衡车原理图+PCB+程序
  5. 07年1月份工作总结
  6. ZETA SDR网关推动LPWAN2.0泛在物联,覆盖距离可达30km
  7. 产品经理适合创业,项目经理适合打工
  8. idea导入现成的快捷键文件
  9. 《考前模拟》全国计算机等级考试一级练习题。这些题目你都会吗
  10. 羊皮卷之二 我要用全身心的爱来迎接今天