单片机报告.docx

上传人:b****1 文档编号:2905466 上传时间:2023-05-05 格式:DOCX 页数:21 大小:211.67KB
下载 相关 举报
单片机报告.docx_第1页
第1页 / 共21页
单片机报告.docx_第2页
第2页 / 共21页
单片机报告.docx_第3页
第3页 / 共21页
单片机报告.docx_第4页
第4页 / 共21页
单片机报告.docx_第5页
第5页 / 共21页
单片机报告.docx_第6页
第6页 / 共21页
单片机报告.docx_第7页
第7页 / 共21页
单片机报告.docx_第8页
第8页 / 共21页
单片机报告.docx_第9页
第9页 / 共21页
单片机报告.docx_第10页
第10页 / 共21页
单片机报告.docx_第11页
第11页 / 共21页
单片机报告.docx_第12页
第12页 / 共21页
单片机报告.docx_第13页
第13页 / 共21页
单片机报告.docx_第14页
第14页 / 共21页
单片机报告.docx_第15页
第15页 / 共21页
单片机报告.docx_第16页
第16页 / 共21页
单片机报告.docx_第17页
第17页 / 共21页
单片机报告.docx_第18页
第18页 / 共21页
单片机报告.docx_第19页
第19页 / 共21页
单片机报告.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机报告.docx

《单片机报告.docx》由会员分享,可在线阅读,更多相关《单片机报告.docx(21页珍藏版)》请在冰点文库上搜索。

单片机报告.docx

单片机报告

单片机课程设计

实验报告

 

电子音调发生器

 

姓名:

杨柳

学号:

09232022

班级:

通信0907

指导教师:

付文秀

 

电子音调发生器

(一)实验目的

1、了解计算机发声原理。

2、熟悉定时器和键盘扫描电路的工作原理及编程方法。

(二)设计任务及要求

自行设计电路及编写程序制作电子音调发生器,要求:

1、利用开关进行音调选择,即拨动不同的开关产生不同的音调,依次拨动K0~K7,蜂鸣器发出1234567i八个音调。

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

(三)工作原理及设计思路

(1)发音部分

简单音调的实现

音调由不同频率的方波产生,音调与频率的关系如下所示。

音调

频率(Hz)

X(HEX)

1

523

FC44

2

587

FCAC

3

659

FD09

4

698

FD34

5

784

FD82

6

880

FDC8

7

988

FE06

i

1046

FE22

要产生音频方波,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。

利用计时器计时此半周期时间,每当计时到后就将输出方波的I/0反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚得到此频率的方波。

在电路板上,产生方波的I/O脚选用P3.7,将单片机的P3.7与蜂鸣器的驱动电路相连。

这样P3.7输出不同频率的方波,蜂鸣器便会发出不同的声音。

每个音节相应的定时器初值X可按下法计算:

(1/2)*(1/f)=(12/fose)*(216-x)

即x=216-(fose/24f)

其中f:

音调频率,当晶振fose=11.0592MHz时,音节“1”相应的定时器初值为x,则可得x=FC44,其它的可同样求得。

另外,音乐的节拍是由延时实现的,如果1拍为0.4秒,1/4拍是0.1秒。

只要设定延时时间,就可求得节拍的时间。

延时作为基本延时时间,节拍值只能是它的整数倍。

乐曲的实现

乐曲的实现就是简单音调实现的组合,将乐曲的音调和节拍制成一个表,通过查表的方式以简单音调发生的方法将乐曲播放出来。

(2)显示部分

显示电路采用LCD显示屏,可显示歌词及歌曲号。

LCD显示的原理为:

LCD液晶显示用5x7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等等,我们采用2行16个字的1602液晶模块。

LCD1602基于HD44780液晶芯片的,HD44780内置了DDRAM,DDRAM就是显示数据RAM,用来寄存待显示的字符代码。

共80个字节,其地址和屏幕的对应关系如下:

想要在LCD1602屏幕的第一行第一列显示一个"A"字,就要向DDRAM的00H地址写入“A”字的代码,但具体的写入是要按LCD模块的指令格式来进行的。

一行可有40个地址,在1602中我们就用前16个,第二行也一样用前16个地址。

但是写入地址的时候要注意:

例如第二行第一个字符的地址是40H,那么不能直接写入40H,因为写入显示地址时要求最高位D7恒定为高电平1,所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)

想要在LCD1602屏幕的第一行第一列显示一个"A"字,就要向DDRAM的00H地址写入“A”字的代码41H,41H这一个字节的代码就能让LCD模块在屏幕的阵点上显示“A”字。

这是因为在LCD模块上固化了字模存储器,这就是CGROM和CGRAM。

HD44780内置了192个常用字符的字模,存于字符产生器CGROM(CharacterGeneratorROM)中,另外还有8个允许用户自定义的字符产生RAM,称为CGRAM(CharacterGeneratorRAM)。

其部分对应关系如下:

若要显示字符,就要先定义字符显示的位置,再将字符代码写入。

(四)硬件描述

1、总体框图:

2、仿真原理图:

(五)程序清单

RSBITP2.0;定义液晶显示端口标号

RWBITP2.1

EBITP2.2

;********************************************

T0THEQU24H;T0两个暂存变量

T0TLEQU23H

ORG0000H

LJMPINITION

ORG000BH

LJMPT0INT

ORG0100H

;********************************************

;*************************液晶初始化******************

INITION:

MOVSP,#70H

MOVP0,#01H;清屏

CALLENABLE

MOVP0,#38H;8位,2行显示

CALLENABLE

MOVP0,#0CH;屏显on,关光标

CALLENABLE

MOVP0,#06H;计数地址加1,自动右移

CALLENABLE

;******************************************

;开机提示

;******************************************

MOVP0,#80H

CALLENABLE

MOVDPTR,#TABLE0;写数据的第一行

CALLWRITE1

MOVP0,#00010000B;光标左移两位

CALLENABLE

MOVP0,#00010000B

CALLENABLE

CALLDEL0

LJMPMAIN

;*********************************************写指令

ENABLE:

CLRRS

CLRRW

SETBE

CALLDEL0

CLRE

RET

;**********************************************写数据

WRITE1:

MOVR1,#00H;查表程序,从表头到表尾

A1:

MOVA,R1

MOVCA,@A+DPTR

CALLWRITE2

INCR1

CJNEA,#00H,A1;未到字符串末尾继续

RET

WRITE2:

MOVP0,A;直接将数据写入液晶屏

SETBRS

CLRRW

SETBE

CALLDEL0

CLRE

RET

DEL0:

MOVR4,#020H

C0:

MOVR5,#020H

C1:

DJNZR5,C1

DJNZR4,C0

RET

;******************************************

TABLE0:

DB'WELCOMHERE',00H

;*************************内存初始化******************

INITIAL:

MOVR3,#08H

MOVR0,#30H

M1:

MOV@R0,#00H

INCR0

DJNZR3,M1

RET

;*************************选择按键播放八个音调******************

MAIN:

MOVSP,#80H;初始化堆栈

MOVTMOD,#11H;定时器0工作方式1,定时器1工作方式1

SETBEA

SETBET0;计数器0允许

SETBET1;计数器1允许

START:

SETBP3.7;关蜂鸣器

CLRTR0;定时器不允许

SCAN:

;键盘扫描

MOVA,P1

CJNEA,#0FFH,SU_KEY;判断键盘按下,跳到SU_KEY,若未按,继续扫描

NOP

LJMPSCAN

SU_KEY:

SU_KEY1:

JBP1.0,SU_KEY2;如果不是第1个键按下,转

MOVDPH,#0FCH

MOVDPL,#44H

SJMPPLAY

SU_KEY2:

JBP1.1,SU_KEY3;如果不是第2个键按下,转

MOVDPH,#0FCH

MOVDPL,#0ACH

SJMPPLAY

SU_KEY3:

JBP1.2,SU_KEY4;如果不是第3个键按下,转

MOVDPH,#0FDH

MOVDPL,#09H

SJMPPLAY

SU_KEY4:

JBP1.3,SU_KEY5;如果不是第4个键按下,转

MOVDPH,#0FDH

MOVDPL,#34H

SJMPPLAY

SU_KEY5:

JBP1.4,SU_KEY6;如果不是第5个键按下,转

MOVDPH,#0FDH

MOVDPL,#82H

SJMPPLAY

SU_KEY6:

JBP1.5,SU_KEY7;如果不是第6个键按下,转

MOVDPH,#0FDH

MOVDPL,#0C8H

SJMPPLAY

SU_KEY7:

JBP1.6,SU_KEY8;如果不是第7个键按下,转

MOVDPH,#0FEH

MOVDPL,#06H

SJMPPLAY

SU_KEY8:

JBP1.7,KEY1;如果不是第8个键按下,转

MOVDPH,#0FEH

MOVDPL,#22H

SJMPPLAY

PLAY:

MOVT0TH,DPH;存高位字符

MOVT0TL,DPL;存低位字符

MOVTH0,T0TH

MOVTL0,T0TL

SETBTR0;启动定时器0

MOVR2,#01B;1/4拍

DJNZR2,PLAY

LCALLDELAY

SJMPJUDGE

JUDGE:

JBP2.4,START;按键未按下,则继续扫描,否则,开始放音乐

;*************************选择按键播放音乐******************

KEY1:

JBP2.5,KEY2;第一个键(P2.5)按下,放音音乐1

MOVR2,#00H

LCALLMODD;歌曲号显示

MOVDPTR,#MU_TAB1

AJMPMUSIC

KEY2:

JBP2.6,KEY3;第二个键(P2.6)按下,放音乐2

MOVR2,#01H

LCALLMODD;歌曲号显示

MOVDPTR,#MU_TAB2

AJMPMUSIC

KEY3:

JBP2.7,NEXT_2;第三个键(P2.7)按下,放音乐3

MOVR2,#02H

LCALLMODD;歌曲号显示

MOVDPTR,#MU_TAB3

AJMPMUSIC

NEXT_2:

LJMPSTART;返回

MUSIC:

MOVTMOD,#01H

MOVIE,#82H;允许T0中断

MOVR7,#00H

LOOP:

CLRA

MOVCA,@A+DPTR;查表取代码

MOVR1,A;定时器高八位存R1

INCDPTR

PUSHDPH;保护现场

PUSHDPL

GECI1:

JBP2.5,GECI2;第一个键(P2.5)按下,显示歌词1

MOVDPTR,#GE1

AJMPGECI

GECI2:

JBP2.6,GECI3;第二个键(P2.6)按下,显示歌词2

MOVDPTR,#GE2

AJMPGECI

GECI3:

JBP2.7,TIAOCHU;第三个键(P2.7)按下,显示歌词3

MOVDPTR,#GE3

AJMPGECI

TIAOCHU:

LJMPSTART

GECI:

LCALLQINGCHU

MOVP0,#0C0H;显示的位置

CALLENABLE

XIANSHI1:

MOVA,R7;查表取音乐汉语拼音显示

MOVCA,@A+DPTR

CALLWRITE2

INCR7

CJNEA,#00H,XIANSHI1

MOVP0,#00010000B;将光标左移一位

CALLENABLE

MOVP0,#00010000B;将光标左移一位

CALLENABLE

POPDPL

POPDPH

CLRA

MOVCA,@A+DPTR

MOVR0,A;定时器低八位存R0

ORLA,R1

JZNEXT0;相或结果全0为休止符

MOVA,R0

ANLA,R1

CJNEA,#0FFH,NEXT;相与结果为0FFH表示乐曲结束

MOVP0,#01H;清屏

CALLENABLE

LJMPINITION;从头开始演奏

NEXT:

MOVT0TH,R1;装定时初值

MOVTH0,T0TH

MOVT0TL,R0

MOVTL0,T0TL

SETBTR0;启动定时器

SJMPNEXT1

NEXT0:

CLRTR0;关闭定时器

NEXT1:

CLRA

INCDPTR

MOVCA,@A+DPTR;查延时常数

MOVR2,A

LOOP1:

ACALLD200

DJNZR2,LOOP1;控制延时次数

INCDPTR

AJMPLOOP

D200:

MOVR3,#81H;延时程序

D200B:

MOVA,#0FFH

D200A:

DECA

JNZD200A

DECR3

CJNER3,#00H,D200B

RET

QINGCHU:

MOVA,#00100000B

MOVP0,#0C0H;将第二行的第一位置0

LCALLENABLE

LCALLWRITE2

MOVA,#00100000B;将第二行的第二位置0

MOVP0,#0C1H

LCALLENABLE

LCALLWRITE2

MOVA,#00100000B;将第二行的第三位置0

MOVP0,#0C2H

LCALLENABLE

LCALLWRITE2

MOVA,#00100000B;将第二行的第四位置0

MOVP0,#0C3H

LCALLENABLE

LCALLWRITE2

MOVA,#00100000B;将第二行的第五位置0

MOVP0,#0C4H

LCALLENABLE

LCALLWRITE2

MOVA,#00100000B;将第二行的第六位置0

MOVP0,#0C5H

LCALLENABLE

LCALLWRITE2

MOVA,#00100000B;将第二行的第七位置0

MOVP0,#0C6H

LCALLENABLE

LCALLWRITE2;将第二行的第三位置0

;***************************************************

;定时器0中断子程序,定时音乐

;***************************************************

T0INT:

;中断服务子程序

MOVTH0,T0TH

MOVTL0,T0TL

CPLP3.7;反相输出,演示音乐

RETI

;******************************************

;显示

;******************************************

MODD:

MOVP0,#8EH

LCALLENABLE

MOVA,R2

MOVDPTR,#TABLE2

MOVCA,@A+DPTR

LCALLWRITE2

RET

TABLE2:

DB31H,32H,33H

GE1:

db'happy',00h,'happy',00h,'new',00h,'year',00h,'happy',00h,'happy',00h,'new',00h,'year',00h

db'happy',00h,'happy',00h,'new',00h,'year',00h,'to',00h,'you',00h,'all',00h

GE2:

DB'happy',00H,'happy',00H,'birthday',00H,'birthday',00H,'to',00H,'you',00H

DB'happy',00H,'happy',00H,'birthday',00H,'birthday',00H,'to',00H,'you',00H

DB'happy',00H,'happy',00H,'birthday',00H,'birthday',00H,'to',00H,'you',00H

DB'happy',00H,'happy',00H,'birthday',00H,'birthday',00H,'to',00H,'you',00H

GE3:

DB'twinkle',00h,'twinkle',00h,'twinkle',00h,'twinkle',00h,'little',00h,'star',00h,'star',00h,'how',00h,'I',00h,'wonder',00h,'wonder',00h,'what',00h,'you',00h,'are',00h,'up',00h,'up',00h,'above',00h,'above',00h,'theworld',00h,'so',00h,'high',00h,'like',00h,'like',00h,'a',00h,'diamond',00h,'in',00h,'the',00h,'sky',00h

;*************************延时子程序******************

DELAY:

MOV30H,#100;延长时间等待,键盘消抖

D1:

MOVR5,#200

D2:

DJNZR5,D2

DJNZ30H,D1

RET

;*******************happynewyear******************************

MU_TAB1:

DB0FCH,44H,04H,0FCH,44H,04H

DB0FCH,44H,04H,0FBH,04H,06H

DB0FDH,09H,04H,0FDH,09H,04H

DB0FDH,09H,06H,0FCH,44H,06H

DB0FCH,44H,04H,0FDH,09H,04H

DB0FDH,82H,04H,0FDH,82H,04H

DB0FDH,34H,04H,0FDH,09H,04H

DB0FCH,0ACH,06H

DB0FCH,0ACH,04H,0FDH,09H,04H

DB0FDH,34H,04H,0FDH,34H,04H

DB0FDH,09H,04H,0FCH,0ACH,04H

DB0FDH,09H,04H,0FCH,44H,04H

DB0FCH,44H,04H,0FDH,09H,04H

DB0FCH,0ACH,04H,0FBH,04H,04H

DB0FCH,0CH,04H,0FCH,0ACH,04H

DB0FCH,44H,06H

DB0FFH,0FFH

;*******************twinklestar******************************

MU_TAB3:

DB0FCH,44H,04H,0FCH,44H,04H,0FDH,82H,04H,0FDH,82H,04H

DB0FDH,0C8H,04H,0FDH,0C8H,04H,0FDH,82H,06H

DB0FDH,34H,04H,0FDH,34H,04H,0FDH,09H,04H,0FDH,09H,04H

DB0FCH,0ACH,04H,0FCH,0ACH,04H,0FCH,44H,06H

DB0FDH,82H,04H,0FDH,82H,04H,0FDH,34H,04H,0FDH,34H,04H

DB0FDH,09H,04H,0FDH,09H,04H,0FCH,0ACH,06H

DB0FDH,82H,04H,0FDH,82H,04H,0FDH,34H,04H,0FDH,34H,04H

DB0FDH,09H,04H,0FDH,09H,04H,0FCH,0ACH,06H

DB0FFH,0FFH,0FFH,0FFH

;*******************happybirthday******************************

MU_TAB2:

DB0FDH,82H,04H,0FDH,82H,04H,0FDH,0C8H,04H,0FDH,82H,04H

DB0FEH,22H,04H,0FEH,06H,06H

DB0FDH,82H,04H,0FDH,82H,04H,0FDH,0C8H,04H,0FDH,82H,04H

DB0FEH,56H,04H,0FEH,22H,06H

DB0FDH,82H,04H,0FDH,82H,04H,0FEH,0C1H,04H,0FEH,22H,04H

DB0FEH,06H,04H,0FDH,0C8H,06H

DB0FEH,9AH,04H,0FEH,9AH,04H,0FEH,85H,04H,0FEH,22H,04H

DB0FEH,56H,04H,0FEH,22H,06H

DB0FFH,0FFH,0FFH,0FFH

END

(六)实现功能介绍

1、可以播放1234567i八个音调

2、可以实现3首歌的选曲功能

3、可以通过LCD显示歌曲号及歌词

(七)关键技术分析

(1)键盘读取程序

键盘键值读取程序包括键盘扫描、消除抖动,按键按下与否会影响与按键相连接的端口的电平的高低与否,因此通过判断端口的电平高低便可判断按键是否按下,从而选择程序执行方向。

因为键盘为机械开关,容易引入抖动。

为了消除抖动干扰,在程序中要加入消除抖动的部分,即延时程序。

(2)中断计时

程序中采用中断控制方波的输出,定时器0计数时间到时调用中断,使方波输出端口取反,从而改变计时常数,输出不同频率的方波,产生声音,在播放音乐的时候通过延时程序通过控制音节的节拍。

(3)蜂鸣器发声

蜂鸣器的以PNP三极管做驱动,三极管和P3.7相连,所以当P3.7口输出的高低电平交替变化的时候可以使蜂鸣器震动发声。

(4)LCD显示

LCD1602的D0~D7和C52的P0.0~P0.7相连,可以将命令和数据通过P0口输出到LCD,从而控制LCD的显示。

主要指令要求可参看程序。

(八)调试时的问题

此次实验的的硬件电路很简单,外围电路主要有8个按键,复位电路,晶振电路,蜂鸣器及LCD显

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

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2