当前位置:文档之家› 单片机音乐彩灯设计

单片机音乐彩灯设计

艺术彩灯控制系统设计一.概述1.1 艺术彩灯的设计背景及意义彩灯是人们日常生活中的一种装饰用品,它美观大方,尤其在节日期间,倍增节日气氛。

它蕴涵着丰富的文化底蕴,被广泛地应用于各种店面的装饰。

变换无穷的彩灯样式,给城市增添活力,吸引着人们的注意力,深受人民的喜爱。

在日常生活中,人们还将彩灯摆放成各种图案,增添美感。

随着电子技术的发展,应用系统向着小型化、快速化、大容量、重量轻的方向发展。

科学技术更加贴近人们的生活,向着满足人们需求的方向发展。

节日彩灯的设计与制作工艺也一步一步的走向成熟。

1.2 系统设计功能概述本设计是以AT89C51单片机为基础的音乐彩灯控制方案,来实现对LED彩灯的控制。

以AT89C51单片机作为主控核心,通过汇编语言来控制单片机按下“开始”按键,8个LED 灯从上到下开始循环点亮,按下“上”按键,灯由上向下流动,按下“下”按键,灯由下向上流动,按下“停止”按键,所有灯为暗。

二.彩灯设计内容简要:2.1彩灯设计任务:以单片机为核心,设计一个节日音乐彩灯控制器。

2.2彩灯设计要求:P1.2----开始,按此键则灯开始流动(由上而下)。

P1.3----停止,按此键则停止流动,所有灯为暗。

P1.4----上,按此键则灯由上向下流动。

P1.5----下,按此键则灯由下向上流动。

2.3彩灯总体控制框图:3.2 A T89C51单片机硬件结构: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系统的硬件构成及功能描述:控制系统硬件设计电路图如图所示:四.系统的软件设计ORG 0000HAJMP MAINORG 000BHAJMP INTORG 0020HMAIN: JNB P1.2,START ;判断按键P1.2(开始键)为0时转MAIN程序JMP MAIN ;否则返回START: MOV 50H,#HIGH TABLE10 ;开始(默认情况下上到下)MOV 51H,#LOW TABLE10ACALL BOFANG ;音乐播放初始设置LJMP DOWNLIGHTSTOP: MOV P0,#0FFH ;停止SETB P3.5JNB P1.2,STARTAJMP STOPDOWN: MOV 50H,#HIGH TABLE10 ;上到下MOV 51H,#LOW TABLE10ACALL BOFANG ;音乐播放初始设置DOWNLIGHT: MOV DPTR,#TABLE1 ;将TABLE1首地址赋数据指针AJMP GETDA TAUP: MOV 50H,#HIGH TABLE10 ;下到上MOV 51H,#LOW TABLE10ACALL BOFANG ;音乐播放初始设置UPLIGHT: MOV DPTR,#TABLE2 ;将TABLE2首地址赋数据指针GETDA TA: MOV R0,#08HMOV R6,DPH ;暂存指针值MOV R7,DPLLOOP: CLR A ;A清零MOV DPH,R6MOV DPL,R7MOVC A,@A+DPTR ;表数据送AMOV P0,A ;将A值送P0端口INC DPTR ;数据指针加1,指向表中的下一数据MOV R6,DPHMOV R7,DPLJNB P1.2,START ;P1.2口低电平则转START程序执行JNB P1.3,STOP ;P1.3口低电平则转STOP程序执行JNB P1.4,DOWN ;P1.4口低电平则转DOWN执行JNB P1.5,UP ;P1.5口低电平则转UP左循环程序执行LJMP MUSIC ;跳转音乐程序BACK: DJNZ R0,LOOPCLR A ;判断是上还是下MOV DPH,R6MOV DPL,R7MOVC A,@A+DPTRJNZ DOWNLIGHTLJMP UPLIGHT BOFANG:MOV TMOD,#11H ;音乐播放初始设置MOV IE,#82HMOV 40H,#00HRETMUSIC: MOV A,40H ;音乐播放处理MOV DPH,50H ;取表地址MOV DPL,51HMOVC A,@A+DPTR ;将表数据送累加器AJZ STOP2 ;累加器A为0则转移(说明歌曲播放完得重新播放)MOV R1,AANL A,#0FHRL AMOV R2,AMOV A,R1SW AP AANL A,#0FHJNZ SINGCLR TR0LJMP W1SING: DEC AMOV 22H,ARL AMOV DPTR,#TABLE00MOVC A,@A+DPTRMOV TH0,AMOV 21H,AMOV A,22HRL AINC AMOVC A,@A+DPTRMOV TL0,AMOV 20H,ASETB TR0W1: LCALL DELAYINC 40HJNZ STOP1 ;A不为0则转移LJMP BACKSTOP1: CLR TR0 ;音符结束重新播放处理LJMP BACKSTOP2: CLR TR0 ;整首歌曲播放结束处理MOV R2,#03HLCALL DELAYLCALL BOFANGLJMP BACKTABLE00: DW 64580,64684,64777,64820DW 64898,64968,65030,64260DW 64400,64524,65058,63835,64021INT: PUSH PSWPUSH ACCMOV TH0,21HMOV TL0,20HCPL P3.5POP ACCPOP PSWRETIDELAY: MOV R4,#100 ;延时100msLOOP3: MOV R5,#0FFHLOOP4: DJNZ R5,$DJNZ R4,LOOP3DJNZ R2,DELAYRETTABLE1:DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH,01H TABLE2:DB 7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH,00H TABLE10:DB 0d4H,84H,94H,82H,92HDB 12H,22H,82H,92H,02H,92H,82H,0d2HDB 82H,92H,14H,84H,02H,0d1H,0d1HDB 0c2H,0d2H,84H,0d2H,0d2H,82H,82HDB 84H,82H,82H,94H,82H,0d2HDB 82H,82H,82H,92H,02H,82H,82H,0d2HDB 0c4H,84H,0d4H,92H,0d2HDB 82H,0d2H,82H,92H,98HDB 04H,94H,88HDB 04H,94H,88HDB 04H,94H,88HDB 04H,94H,88H,04HDB 32H,32H,22H,12H,02H,92H,12H,92HDB 32H,32H,22H,12H,02H,92H,12H,92HDB 32H,32H,22H,12H,02H,92H,12H,22HDB 54H,44H,34H,12H,22HDB 34H,22H,12H,02H,92H,12H,92HDB 32H,32H,22H,12H,02H,92H,12H,92HDB 32H,32H,22H,12H,02H,92H,12H,22HDB 54H,44H,32H,22H,12H,92HDB 00HEND4.1程序流程图:四.系统的软件设计4.1程序流程图:程序如下:ORG 0000H AJMP MAIN ORG 000BH AJMP INT ORG 0020H MAIN:JNB P1.2,STAR T ;判断按键P1.2(开始键)为0时转MAIN程序 JMP MAIN ;否则返回START:MOV 50H,#HIGH TABLE10 开始(默认情况下上到下) MOV 51H,#LOW TABLE10 ACALL BOFANG ;音乐播放初始设置LJMP DOWNLIGHTSTOP:MOV P0,#0FFH 停止 SETB P3.5JNB P1.2,START AJMP STOPDOWN:MOV 50H,#HIGH TABLE10 ;上到下 MOV 51H,#LOW TABLE10 ACALL BOFANG ;音乐播放初始设置 DOWNLIGHT:MOV DPTR,#TABLE1 ;将TABLE1首地址赋数据指针 AJMP GETDATA UP:MOV 50H,#HIGH TABLE10 ;下到上 MOV 51H,#LOW TABLE10 ACALL BOFANG ;音乐播放初始设置 UPLIGHT:MOV DPTR,#TABLE2 ;将TABLE2首地址赋数据指针 GETDA TA:MOV R0,#08H MOV R6,DPH ;暂存指针值 MOV R7,DPL LOOP:CLR A ;A清零 MOV DPH,R6 MOV DPL,R7 MOVC A,@A+DPTR ;表数据送A MOV P0,A ;将A值送P0端口 INC DPTR ;数据指针加1,指向表中的下一数据 MOV R6,DPH MOV R7,DPL JNB P1.2,START ;P1.2口低电平则转START程序执行 JNB P1.3,STOP ;P1.3口低电平则转STOP程序执行 JNB P1.4,DOWN ;P1.4口低电平则转DOWN执行 JNB P1.5,UP ;P1.5口低电平则转UP左循环程序执行 LJMP MUSIC ;跳转音乐程序 BACK: DJNZ R0,LOOP CLR A ;判断是上还是下 MOV DPH,R6 MOV DPL,R7 MOVC A,@A+DPTR JNZ DOWNLIGHT LJMP UPLIGHT BOFANG: MOV TMOD,#11H ;音乐播放初始设置 MOV IE,#82H MOV 40H,#00H RETMUSIC: MOV A,40H ;音乐播放处理 MOV DPH,50H ;取表地址 MOV DPL,51HMOVC A,@A+DPTR ;将表数据送累加器A JZ STOP2 ;累加器A为0则转移(说明歌曲播放完得重新播放) MOV R1,A ANL A,#0FH RL A MOV R2,A MOV A,R1 SW AP A ANL A,#0FH JNZSING CLR TR0 LJMP W1 SING: DEC A MOV 22H,A RL A MOV DPTR,#TABLE00 MOVC A,@A+DPTR MOV TH0,A MOV 21H,A MOV A,22H RL A INC A MOVC A ,@A+DPTR MOV TL0,A MOV 20H,A SETB TR0 W1: LCALL DELAY INC 40H J NZ STOP1 ;A不为0则转移 LJMP BACK STOP1: CLR TR0 ;音符结束重新播放处理 LJMP BACK STOP2: CLR TR0 ;整首歌曲播放结束处理 MOV R2,#03H LCALL DELAY LCALL BOFANG LJMP BACK TABLE00: DW 645 80,64684,64777,64820 DW 64898,64968,65030,64260 DW 64400,64524,65058,63835,64021 I NT: PUSH PSW PUSH ACC MOV TH0,21HMOV TL0,20H CPL P3.5 POP ACC POP PSW RETI DELAY: MOV R4,#100 ;延时100ms LOOP3: MOV R5,#0FFH LOOP4: DJNZ R5,$ DJNZ R4,LOOP3 DJNZ R2,DELAY RET TABLE1:DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH,01H TABLE2:DB 7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH,00H ;-------------------------------------------------------------------- TABLE10: DB 0d4H,84H,94H,82H,92HDB 12H,22H,82H,92H,02H,92H,82H,0d2H DB 82H,92H,14H,84H,02H,0d1H,0d1H DB 0c2H, 0d2H,84H,0d2H,0d2H,82H,82H DB 84H,82H,82H,94H,82H,0d2HDB 82H,82H,82H,92H,02H,82H,82H,0d2H DB 0c4H,84H,0d4H,92H,0d2H DB 82H,0d2H,82H ,92H,98H DB 04H,94H,88H DB 04H,94H,88H DB 04H,94H,88H DB 04H,94H,88H,04HDB 32H,32H,22H,12H,02H,92H,12H,92H DB 32H,32H,22H,12H,02H,92H,12H,92H DB 32H, 32H,22H,12H,02H,92H,12H,22H DB 54H,44H,34H,12H,22HDB 34H,22H,12H,02H,92H,12H,92H DB 32H,32H,22H,12H,02H,92H,12H,92H DB 32H,32H, 22H,12H,02H,92H,12H,22H DB 54H,44H,32H,22H,12H,92H DB 00HEND五.设计体会:历时2个星期的单片机课程设计,我从中受益匪浅。

相关主题