流水灯显示课程设计.docx

上传人:b****9 文档编号:25795787 上传时间:2023-06-14 格式:DOCX 页数:36 大小:219.29KB
下载 相关 举报
流水灯显示课程设计.docx_第1页
第1页 / 共36页
流水灯显示课程设计.docx_第2页
第2页 / 共36页
流水灯显示课程设计.docx_第3页
第3页 / 共36页
流水灯显示课程设计.docx_第4页
第4页 / 共36页
流水灯显示课程设计.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

流水灯显示课程设计.docx

《流水灯显示课程设计.docx》由会员分享,可在线阅读,更多相关《流水灯显示课程设计.docx(36页珍藏版)》请在冰豆网上搜索。

流水灯显示课程设计.docx

流水灯显示课程设计

流水灯显示

 

第1章前言

随着科学技术特别是微型计算机技术的高速发展,单片机作为计算机的一个分支,从20世纪70年代初诞生以来,广泛地应用于工业控制、智能仪表、家用电器等各个领域,它正为我国经济的快速发展发挥着举足轻重的作用。

单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。

相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。

单片机内部也用和电脑功能类似的模块,比如CPU,内存,并行总线,还有和硬盘作用相同的存储器件,不同的是它的这些部件性能相对家用电脑弱很多,但因价钱低廉,被应用于各个领域。

单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。

采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。

例如精密的测量设备(功率计,示波器,各种分析仪)。

目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。

作为电子科学与技术专业的一名工科生掌握好这项技术,也是非常重要。

单片机课程设计是我们提高单片机应用能力的好机会,也是我们学好这一课程的必经环节。

通过课程设计可以进一步巩固我们前面所学理论知识,使我们对单片机理论知识有一个深刻的认识和全面的掌握。

另外通过这一真正意义上的实践活动,我们可以从中发现自己不足之处并能够在自己的深思下和老师同学的帮助下得到及时的解决,使我们的应用能力和科技创新能力得到较大的提高。

基于单片机的音乐播放器可应用于mp3、mp4,扩音器等很多方面,并可作为很多系统的辅助功能,作为单片机的重要硬件资源之一,利用定时器可以产生各种固定频率的方波信号,也可以产生包括"Do"、"Re"、"Me"等音阶在内的各种频率声音。

将各个音阶连接在一起,便可组成一支曲子或是演奏一段旋律。

基于这个思想,我设计了一个电子生日贺卡,本电子生日贺卡可实现文字显示、音乐播放、花样彩灯等功能。

由于时间及条件限制,本课程设计了一种简单的电子贺卡,其核心器件采用AT89C51单片机,本播放器具有电路简单,功能强大,易于拓展等特点。

通过音乐发声器的设计方案,掌握汇编语言的编程方法,并熟练的运用89C51单片机定时器产生固定频率的方波信号,推动喇叭发出旋律,最重要的是自己还可以通过程序设计输入自己喜欢的歌曲来演奏。

第2章方案设计

2.1基本原理

本次课程设计用AT89C51作为主控器制作一个电子生日贺卡。

此电子贺卡分为三个部分,分别是文字显示、音乐播放、花样彩灯。

2.1.1文字显示原理

采用单片机的LCD图形显示接口技术,利用LCD12864液晶显示模块,屏幕显示内容与12864内部存储器单元建立一一对应关系,模块内部自带扫描与驱动,将显示的内容输入12864对应的存储器中,就能实现内容的显示。

利用取码软件,按从左到右、从上到下的原则取码,可以得到“生日快乐”的16X16点阵码。

每一个字都有32字节与之对应。

编程时,也要按从左到右、从上到下的原则取数据送到相应的存储器中。

该类液晶显示模块的指令系统,总共只有七种。

其指令表如表2.1所示:

表2.1指令表

指令名称

控制信号

控制代码

R/W

RS

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

显示开关

0

0

0

0

1

1

1

1

1

1/0

显示起始行设置

0

0

1

1

X

X

X

X

X

X

页设置

0

0

1

0

1

1

1

X

X

X

列地址设置

0

0

0

1

X

X

X

X

X

X

读状态

1

0

BUSY

0

ON/OFF

RST

0

0

0

0

写数据

0

1

写数据

读数据

1

1

读数据

2.1.2音乐播放原理

乐曲中不同的音符,实质就是不同频率的声音。

通过单片机产生不同的频率的脉冲信号,经过放大电路,由蜂鸣器放出,就产生了美妙和谐的乐曲,其工作原理如下:

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

(2)利用8051的内部定时器使其工作在计数器模式TMOD1下,改变计数值TH0及TL0以产生不同频率的方法如下:

例如,频率为523Hz,其周期天/523S=1912uS,因此只要令计数器计时956uS/1us=956,在每计数956次时就将I/O反接,就可得到中音DO。

计数脉冲值与频率的关系公式如下:

N=Fi/2/Fr(2.1)

(N:

计数值;Fi:

内部计时一次为1uS;故其频率为1MHz;Fr:

要产生的频率)

(3)其计数值的求法如下:

T=65536-N=65536-Fi/2/Fr(2.2)

设K=65536,F=1000000=Fi=1MHz,求低音DO(261Hz)、中音DO(523Hz)、高音DO(1046Hz)的计数值。

T=65536-N=65536-Fi/2/Fr=65536-1000000/2/Fr=65536-500000/Fr(2.3)

(4)C调个音符频率与计数值T的对照表如下表所示:

表2.2C调各音符频率与计数值T的对照表

音符

频率/HZ

简谱码T

音符

频率/HZ

简谱码T

低1DO

262

63628

#4FA#

740

64860

#1DO#

277

63731

中5SO

784

64898

低2RE

294

63835

#5SO#

831

64934

#2RE#

311

63928

中6LA

880

64968

低3M

330

64021

#6

932

64994

低4FA

349

64103

中7SI

988

65030

#4FA#

370

64185

高1DO

1046

65058

低5SO

392

64260

#1DO#

1109

65085

#5SO#

415

64331

高2RE

1175

65110

低6LA

440

64400

#2RE#

1245

65134

#6

466

64463

高3M

1318

65157

低7SI

494

64524

高4FA

1397

65178

中1DO

523

64580

#4FA

1480

65198

#1DO#

554

64633

高5SO

1568

65217

中2RE

587

64684

#5SO#

1661

65235

#2RE#

622

64732

高6LA

1760

65252

中3M

659

64777

#6

1865

65268

中4FA

698

64820

高7SI

1967

65283

(5)每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,下表为节拍码的对照。

但如果1拍为0.4秒,1/4拍是0.1秒,只要设定延迟时间就可求得节拍的时间。

假设1/4节拍为1DELAY,则1拍应为4DELAY,以此类推。

所以只要求得1/4拍的DELAY时间,其余的节拍就是它的倍数,如下表为1/4和1/8节拍的时间设定。

表2.3节拍码对照表

节拍码

节拍数

节拍码

节拍数

1

1/4拍

1

1/8拍

2

2/4拍

2

1/4拍

3

3/4拍

3

3/8拍

4

1拍

4

1/2拍

5

1又1/4拍

5

5/8拍

6

1又1/2

6

3/4拍

8

2

8

1拍

A

2又1/2拍

A

1又1/4拍

C

3

C

1又1/2拍

F

3又3/4拍

表2.4各调节拍的时间设定表

1/4节拍

1/8节拍

曲调值

DELAY

曲调值

DELAY

调4/4

125毫秒

调4/4

62毫秒

调3/4

187毫秒

调3/4

94毫秒

调2/4

250毫秒

调2/4

125毫秒

 

表2.5简谱对应的简谱码、T值、节拍码

简谱

发音

简谱码

T值

节拍

节拍数

5

低音SO

1

64260

1

1/4拍

6

低音LA

2

64400

2

2/4拍

7

低音TI

3

64524

3

3/4拍

1

中音DO

4

64580

4

1拍

2

中音RE

5

64684

5

1又1/4拍

3

中音MI

6

64777

6

11/2拍

4

中音FA

7

64820

8

2拍

5

中音SO

8

64898

A

2又1/2拍

6

中音LA

9

64968

C

3拍

7

中音TI

A

65030

F

3又3/4拍

1

高音DO

B

65058

2

高音RE

C

65110

3

高音MI

D

65157

4

高音FA

E

65178

5

高音SO

F

65217

不发音

0

(6)一般的歌曲,有3/8、2/4、3/4、4/4等节拍类型,但不管有几拍,基本上是在C调下演奏的。

如果是C调,则音名C唱Do,音名D唱Re,音名E唱Mi,音名E唱Mi,音名F唱Fa,音名G唱So,音名A唱La,音名B唱Ti等。

但是,并不是所有的歌曲都是在C调下演奏的,还有D调、E调、F调、G调等。

D调是将C调各音符上升一个频率实现的,即C调下的音名D在D调下唱Do,C调下的音名E在D调下唱Re,C大调的音名F在D调下上升高半音符F#唱Mi,C调下的音名G在D调下唱Fa,C调下的音名C在D调下上升高伴音C#符唱Ti。

此唱法称为移调。

表2.6C调在各调中的音名

音名调

Do

Re

Mi

Fa

So

La

Ti

C调

C

D

E

F

G

A

B

D调

D

E

F#

G

A

B

C

E调

E

F#

G#

A

B

C

D

F调

F

G

A

B

C

D

E

G调

G

A

B

C

D

E

F#

A调

A

B

C#

D

E

F#

G#

B调

B

C

D

E

F

G

A

(7)音乐代码库的建立方法,先找出乐曲的最低音和最高音范围,然后确定音符表T的顺序,把T值表建立在TABLE1。

构成发音符的计数值放在“TABLE”,简谱码(音符)为高位,节拍为(节拍数)为低4位,音符节拍码放在程序的“TABLE”处。

2.1.3花样灯原理

LED显示电路是由8个LED发光二极管组成,连接方式为共阳极,LED接到单片机的P1口,若为低电平,可使LED亮起。

发光二极管的亮、灭由内部程序控制,8个LED发光二极管由两个按键控制,显示两种不同的花样。

2.2设计思路

为了确定其设计方案,首先必须构思好初步的设计思路。

根据设计要求和实验仿真条件,初步的设计思路可以总结如下:

(1)单片机的时钟引脚外接晶振频率为12MHZ的晶振信号电路。

(2)利用LCD12864液晶显示模块实现文字显示。

(3)当前花样灯用8只LED发光二极管组成。

(4)键盘采用独立式键盘,需要2个键。

(5)采样时间用定时/计数器1来实现音乐播放。

(6)采用外部中断1实现花样灯的切换。

2.3设计方案

根据设计要求和设计思路,可以确定该系统的设计方案,硬件主要由五部分组成,即LCD12864、单片机、键盘、LED显示器、扬声器。

单片机采用AT89C51。

在单片机中,定时功能既可以由硬件(定时/记数器)实现,也可通过软件定时实现。

硬件定时是利用单片机内定时器定时,启动以后定时器可与CPU并行工作,不占用CPU时间,CPU有较高的工作效率。

定时器的TMOD用于设置定时器/计数器的工作方式0~3,并确定用于定时还是用于计数。

TCON主要功能是为定时器在溢出时设定标志位,并控制定时器的运行或停止等。

硬件电路设计如图2.3所示:

时钟电路

按键电路

 

AT89C51

LED显示电路

音乐播放

文字显示电路

图2.3硬件电路设计图

 

第3章硬件电路设计

3.1按键设计电路图

对于按键电路的设计可以有2种方式:

一种方式是直接按键设计,也称独立按键,这种设计电路适用于按键较少的控制,具有按键电路简单,编程方便等优点;另一种方式是矩阵式键盘的设计,它适用于对控制按键较多的电路控制,占用较少的I/O接口,但是按键电路复杂,编程比较复杂。

本课题总共只需要2个按键,所以采用独立按键设计。

由上到下的按键分别是花样灯1,花样灯2,如图3.1所示:

图3.1按键电路图

3.2显示汉字电路设计图

本课题所采用得是由LCD12864作为显示电路,用以显示贺卡所要表达的文字即生日快乐。

硬件电路连接是单片机P0.0~P0.7接12864的DB0~DB78个各管脚,P2.0~P2.4接12864的控制端E、RW、RS、CS2、CS1。

连接图如图3.2所示:

图3.2显示汉字电路图

3.3花样灯电路设计图

LED显示电路是由8个LED发光二极管组成,连接方式为共阳极,LED接到单片机的P1口。

连接图如图3.3所示:

图3.3花样灯电路图

 

第4章软件设计

4.1主程序流程图及程序

初始化

左右屏控制

起始页设置

起始列设置

显示汉字设定

调用写汉字子程序

起始页设置

起始列设置

显示汉字设定

调用写汉字子程序

起始页设置

起始列设置

显示汉字设定

调用写汉字子程序

起始页设置

起始列设置

显示汉字设定

调用写汉字子程序

起始页设置

起始列设置

显示汉字设定

调用写汉字子程序

起始页设置

起始列设置

显示汉字设定

调用写汉字子程序

结束

开始

调用音乐播放子程序

图4.1主程序流程图

写入起始页地址

写入起始列地址

R0=0

调入写入数据子程序

R0=R0+1

R0=16?

起始页地址加1

重新设置起始列地址

调用写入数据子程序

R0=32?

R0=R0+1

计算汉字代码初始地址

RET

N

Y

N

Y

图4.2主程序的子程序流程图

4.2音乐播放子程序及流程图

4.2.1音乐播放子程序代码

MUISC:

MOVTMOD,#01H

MOVIE,#82H

START0:

MOV30H,#00H;取简谱码指针,初次30H=00

NEXT:

MOVA,30H

MOVDPTR,#TABLE

MOVCA,@A+DPTR;查表,首址(第0位)是52H

MOVR2,A;R2暂存简谱码,R2=52H

JZEND0;取到结束码(00H),跳至END0

ANLA,#0FH;取低4位(节拍码),A=02H

MOVR5,A;节拍码存于R5

MOVA,R2

SWAPA;交换高低4位,A=25H

ANLA,#0FH;取低4位(音符码),A=05H

JNZSING;取到的音符码为0吗?

不是跳至SING

CLRTR0;是,则不发音

JMPD1

SING:

DECA;取到的音符码,减1,A=4

MOV22H,A

RLA;乘2,A=8

MOVDPTR,#TABLE1;到表TABLE1取T值,首址64260

MOVCA,@A+DPTR

MOVTH0,A

MOV21H,A

MOVA,22H

RLA

INCA

MOVCA,@A+DPTR

MOVTL0,A

MOV20H,A

SETBTR0;启动定时器

D1:

CALLDELAY;基本延时单位187毫秒

INC30H

JMPNEXT;取下一个简谱码

END0:

CLRTR0;停止定时器0计时

JMPSTART1;重复循环

TIM0:

PUSHACC;定时器0中断子程序,重复加载

PUSHPSW

MOVTH0,21H

MOVTL0,20H

CPLP3.7;P3.7输出

POPPSW

POPACC

RETI

DELAY:

MOVR7,#02

D2:

MOVR4,#187

D3:

MOVR3,#248

DJNZR3,$

DJNZR4,D3

DJNZR7,D2

DJNZR5,DELAY;节拍的长短,即每个音符的发音时间的长短

RET

TABLE1:

DW64260,64400,64524,64580

DW64684,64777,64820,64898

DW64968,65030,65058,65110

DW65157,65178,65217

TABLE:

DB82H,01H,81H,94H,84H

DB0B4H,0A4H,04H

DB82H,01H,81H,94H,84H

DB0C4H,0B4H,04H

DB82H,01H,81H,0F4H,0D4H

DB0B4H,0A4H,94H

DB0E2H,01H,0E1H,0D4H,0B4H

DB0C4H,0B4H,04H

DB82H,01H,81H,94H,84H

DB0B4H,0A4H,04H

DB82H,01H,81H,94H,84H

DB0C4H,0B4H,04H

DB82H,01H,81H,0F4H,0D4H

DB0B4H,0A4H,94H

DB0E2H,01H,0E1H,0D4H,0B4H

DB0C4H,0B4H,04H

DB00H;简谱码表,高四位为音符,低四位为节拍数

END

 

给30H赋初值

A=30H

查表

简码表存于R2

给DPTR赋初值

建立简谱码

建立初值

系统初始化

取A的低四位存于R5

R2=00H?

取A的高四位存于A

TR0

调用延时

A=00H?

30H加1

TR0=0

给DPTR赋初值

建立TABLE1

查表

TH0=A,21H=A

查找下一个T值

TL0=A,20H=A

,20H=a

启动定时器

跳至花样灯

开始

4.2.2音乐子程序流程图

Y

N

N

Y

图4.3音乐子程序流程图

4.3花样灯程序及流程图

4.3.1花样灯程序代码

START1:

SETBIT0;系统初始化

SETBEX0

SETBIT1

SETBEX1

SETBEA

MOVA,#0FEH

LOOP:

MOVP1,A;依次点亮,循环点灯

LCALLDELAY

RLA

LJMPLOOP

INTER0:

JNBP2.5,S1;若P2.5=0,切换到花样灯1

JNBP2.7,S3;若P2.7=0,切换到花样灯2

SJMPEXIT

S1:

MOVR2,#10;八只彩灯“亮—灭—亮”闪烁10次

S2:

MOVP1,#00

LCALLDELAY1

MOVP1,#0FFH

LCALLDELAY1

DJNZR2,S2

SJMPS1

RETI

S3:

MOVR3,#10;八只彩灯从0、2、3、6到1、3、5、7交替闪烁10次

S4:

MOVP1,#0AAH

LCALLDELAY1

MOVP1,#55H

LCALLDELAY1

DJNZR3,S4

SJMPS3

EXIT:

RETI

DELAY:

MOVR0,#0FFH

D1:

MOVR1,#0FFH

D2:

NOP

NOP

DJNZR1,D2

DJNZR0,D1

RET

END

4.3.2花样灯流程图

开始

 

图4.4花样灯流程图

 

P2.5=0?

P2.7=0?

R2=10

P1=00H

延时

P1=0FFH

延时

R2-1=0

R3=10

P1=AAH

延时

P1=55H

延时

R3-1=0

中断返回

开始

 

Y

Y

N

 

NN

YY

图4.5花样灯中断服务流程图

 

第5章系统调试及软件仿真

在Proteus仿真软件中实现LCD12864液晶模块显示“生日快乐”的同时,蜂鸣器播放生日歌。

当生日歌播放完之后,八只彩灯被依次点亮并循环,如若要切换彩灯花样,可以按键实现。

在本次仿真过程中遇到的最大问题就是,出现“SimulationisnotrunninginrealtimeduetoexcessiveCPUload”的提示信息。

软件仿真时,音乐播放速度特别慢,感觉像卡带了一样,我以为是电路出了问题。

上网查询了解到,CPU过载,导致仿真速度不能实时运行,可能与电脑的配置过低,Proteus仿真软件的版本低以及电路太复杂有关,并不一定就是电路图出问题。

这个问题的出现,让我了解到,Proteus仿真软件要达到实时运行的效果还是有差距的。

在Proteus仿真软件的帮助教程中已经提到这方面问题的解决方案,我试着根据上面的方案进行操作。

分别点击电阻和发光二极管的属性,选“使用文本方式编辑所有属性(Editallpropertiesastext)”,将PRIMTIVE属性中的ANALOG改为DIGITAL。

按此操作,将所有的电阻和发光二极管的属性改变。

这次仿真时,音乐播放的速度基本正常,CPU占用不总是100%。

另外,我还发现改变属性的发光二极管比原先亮很多。

仿真时,文字显示效果图,如图5.1:

图5.1文字显示仿真结果

当按键花样灯1按下时,八只彩灯“亮—灭—亮”闪烁5次,如图5.2:

图5.2花样灯1仿真结果

当按键花样灯2按下时,八只彩灯从0、2、4、6到1、3、5、7交替闪烁,如图5.3和图5.4:

图5.3花样灯2仿真结果

图5.4花样灯2仿真结果

图形说明:

图5.1,刚开始仿真时,显示“生日快乐”,并伴随响亮的生日快乐歌曲。

图5.2,刚开始仿真时,按花样灯一时,显示“生日快乐”,伴随响亮的生日快乐歌曲,并且亮灯,八个彩灯按“亮灭亮”交替闪烁五次。

图5.3和图5.4,刚开始仿真时,按花样灯二时,显示“生日快乐”,伴随响亮的生日快乐歌曲,并且亮灯,先是0、2、4、6开始亮,熄灭后1、3、5、7接着亮,连着就是交替闪烁。

总结

通过短暂的两周时间的课程设计,使我对单片机的基本原理以及单片机的汇编语言编程有了一

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 广告传媒

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1