单片机音乐彩灯设计文档格式.docx
《单片机音乐彩灯设计文档格式.docx》由会员分享,可在线阅读,更多相关《单片机音乐彩灯设计文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
3.2
AT89C51单片机硬件结构:
AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROM—Flash
Programmable
and
Erasable
Read
Only
Memory)的单片机芯片,它采用静态CMOS
工艺制造8位微处理器,最高工作频率位24MHZ。
AT89C5外形及引脚排列如图所示:
管脚说明:
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0
口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,
ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次PSEN有效。
但在访问外部数据存储器时,这两次有效的PSEN信号将不出现。
EA/VPP:
当EA保持低电平时,则在此期间外部程序存储器
(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,EA将内部锁定为RESET;
当EA端保持高电平时,此间内部程序存储器。
XTAL1和XTAL2:
反向振荡放大器的输入及内部时钟工作电路的输入。
3.3系统的硬件构成及功能描述:
控制系统硬件设计电路图如图所示:
四.系统的软件设计
ORG0000H
AJMPMAIN
ORG000BH
AJMPINT
ORG0020H
MAIN:
JNBP1.2,START;
判断按键P1.2(开始键)为0时转MAIN程序
JMPMAIN;
否则返回
START:
MOV50H,#HIGHTABLE10;
开始(默认情况下上到下)
MOV51H,#LOWTABLE10
ACALLBOFANG;
音乐播放初始设置
LJMPDOWNLIGHT
STOP:
MOVP0,#0FFH;
停止
SETBP3.5
JNBP1.2,START
AJMPSTOP
DOWN:
MOV50H,#HIGHTABLE10;
上到下
MOV51H,#LOWTABLE10
DOWNLIGHT:
MOVDPTR,#TABLE1;
将TABLE1首地址赋数据指针AJMPGETDATA
UP:
下到上
UPLIGHT:
MOVDPTR,#TABLE2;
将TABLE2首地址赋数据指针
GETDATA:
MOVR0,#08H
MOVR6,DPH;
暂存指针值
MOVR7,DPL
LOOP:
CLRA;
A清零
MOVDPH,R6
MOVDPL,R7
MOVCA,@A+DPTR;
表数据送A
MOVP0,A;
将A值送P0端口
INCDPTR;
数据指针加1,指向表中的下一数据
MOVR6,DPH
JNBP1.2,START;
P1.2口低电平则转START程序执行
JNBP1.3,STOP;
P1.3口低电平则转STOP程序执行
JNBP1.4,DOWN;
P1.4口低电平则转DOWN执行
JNBP1.5,UP;
P1.5口低电平则转UP左循环程序执行
LJMPMUSIC;
跳转音乐程序
BACK:
DJNZR0,LOOP
CLRA;
判断是上还是下
MOVDPH,R6
MOVDPL,R7
MOVCA,@A+DPTR
JNZDOWNLIGHT
LJMPUPLIGHTBOFANG:
MOVTMOD,#11H;
MOVIE,#82H
MOV40H,#00H
RET
MUSIC:
MOVA,40H;
音乐播放处理
MOVDPH,50H;
取表地址
MOVDPL,51H
将表数据送累加器A
JZSTOP2;
累加器A为0则转移(说明歌曲播放完得重新播放)
MOVR1,A
ANLA,#0FH
RLA
MOVR2,A
MOVA,R1
SWAPA
ANLA,#0FH
JNZSING
CLRTR0
LJMPW1
SING:
DECA
MOV22H,A
RLA
MOVDPTR,#TABLE00
MOVTH0,A
MOV21H,A
MOVA,22H
INCA
MOVCA,@A+DPTR
MOVTL0,A
MOV20H,A
SETBTR0
W1:
LCALLDELAY
INC40H
JNZSTOP1;
A不为0则转移
LJMPBACK
STOP1:
CLRTR0;
音符结束重新播放处理
LJMPBACK
STOP2:
CLRTR0;
整首歌曲播放结束处理
MOVR2,#03H
LCALLDELAY
LCALLBOFANG
TABLE00:
DW64580,64684,64777,64820
DW64898,64968,65030,64260
DW64400,64524,65058,63835,64021
INT:
PUSHPSW
PUSHACC
MOVTH0,21H
MOVTL0,20H
CPLP3.5
POPACC
POPPSW
RETI
DELAY:
MOVR4,#100;
延时100ms
LOOP3:
MOVR5,#0FFH
LOOP4:
DJNZR5,$
DJNZR4,LOOP3
DJNZR2,DELAY
TABLE1:
DB0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH,01H
TABLE2:
DB7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH,00H
TABLE10:
DB0d4H,84H,94H,82H,92H
DB12H,22H,82H,92H,02H,92H,82H,0d2H
DB82H,92H,14H,84H,02H,0d1H,0d1H
DB0c2H,0d2H,84H,0d2H,0d2H,82H,82H
DB84H,82H,82H,94H,82H,0d2H
DB82H,82H,82H,92H,02H,82H,82H,0d2H
DB0c4H,84H,0d4H,92H,0d2H
DB82H,0d2H,82H,92H,98H
DB04H,94H,88H
DB04H,94H,88H,04H
DB32H,32H,22H,12H,02H,92H,12H,92H
DB32H,32H,22H,12H,02H,92H,12H,22H
DB54H,44H,34H,12H,22H
DB34H,22H,12H,02H,92H,12H,92H
DB32H,32H,22H,12H,02H,92H,12H,22H
DB54H,44H,32H,22H,12H,92H
DB00H
END
4.1程序流程图:
程序如下:
ORG
0000H
AJMP
MAIN
000BH
INT
0020H
JNB
P1.2,START
;
判断按键P1.2(开始键)为0时转MAIN程序