单片机音乐彩灯设计说明.doc
.艺术彩灯控制系统设计 一 概述 11 艺术彩灯的设计背景及意义 彩灯是人们日常生活中的一种装饰用品,它美观大方,尤其在节日期间,倍增节日气氛。它蕴涵着丰富的文化底蕴,被广泛地应用于各种店面的装饰。变换无穷的彩灯样式,给城市增添活力,吸引着人们的注意力,深受人民的喜爱。在日常生活中,人们还将彩灯摆放成各种图案,增添美感。随着电子技术的发展,应用系统向着小型化、快速化、大容量、重量轻的方向发展。科学技术更加贴近人们的生活,向着满足人们需求的方向发展。节日彩灯的设计与制作工艺也一步一步的走向成熟。 1.2 系统设计功能概述 本设计是以AT89C51单片机为基础的音乐彩灯控制方案,来实现对LED彩灯的控制。以AT89C51单片机作为主控核心,通过汇编语言来控制单片机按下“开始”按键,8个LED灯从上到下开始循环点亮,按下“上”按键,灯由上向下流动,按下“下”按键,灯由下向上流动,按下“停止”按键,所有灯为暗。 二彩灯设计容简要: 2.1彩灯设计任务: 以单片机为核心,设计一个节日音乐彩灯控制器。 2.2彩灯设计要求: P1.2-开始,按此键则灯开始流动(由上而下)。 P1.3-停止,按此键则停止流动,所有灯为暗。 P1.4-上,按此键则灯由上向下流动。 P1.5-下,按此键则灯由下向上流动。2.3彩灯总体控制框图: 3.2 AT89C51单片机硬件结构: AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROMFlash 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:反向振荡放大器的输入及部时钟工作电路的输入。 33系统的硬件构成及功能描述: 控制系统硬件设计电路图如图所示: 四系统的软件设计 ORG 0000H AJMP MAINORG 000BH AJMP INT ORG 0020H MAIN: JNB P1.2,START ;判断按键P1.2(开始键)为0时转MAIN程序 JMP MAIN ;否则返回 START: MOV 50H,#HIGH TABLE10 ;开始(默认情况下上到下) MOV 51H,#LOW TABLE10 ACALL BOFANG ;音乐播放初始设置 LJMP DOWNLIGHTSTOP: MOV P0,#0FFH ;停止 SETB P3.5 JNB P1.2,START AJMP STOP DOWN: 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首地址赋数据指针 GETDATA: 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,LOOPCLR 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 RET MUSIC: 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 SWAP A ANL A,#0FH JNZ SING 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 JNZ STOP1 ;A不为0则转移 LJMP BACK STOP1: CLR TR0 ;音符结束重新播放处理 LJMP BACK STOP2: CLR TR0 ;整首歌曲播放结束处理 MOV R2,#03H LCALL DELAY LCALL BOFANG LJMP BACK TABLE00: DW 64580,64684,64777,64820 DW 64898,64968,65030,64260 DW64400,64524,65058,63835,64021INT: PUSH PSW PUSH ACC MOV TH0,21H MOV TL0,20H CPL P3.5 POP ACC POP PSW RETI DELAY: MOV R4,#100 ;延时100ms LOOP3: MOV R5,#0FFHLOOP4: 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,92H DB12H,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,0d2H DB 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 DB04H,94H,88H DB 04H,94H,88H,04H DB 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,22H DB 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 00H END4.1程序流程图: 四系统的软件设计 4.1程序流程图: 程序如下:ORG 0000H AJMP MAIN ORG 000BH AJMP INT ORG 0020H MAIN:JNB P1.2,START 判断按键P1.2(开始键)为0时转MAIN程序 JMP MAIN 否则返回 START:MOV 50H,#HIGH TABLE10 开始(默认情况下上到下) MOV 51H,#LOW TABLE10 ACALL BOFANG 音乐播放初始设置 LJMP DOWNLIGHT STOP:MOV P0,#0FFH 停止 SETB P3.5 JNB P1.2,START AJMP STOP DOWN: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首地址赋数据指针 GETDATA: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 RET MUSIC: MOV A,40H 音乐播放处理 MOV DPH,50H 取表地址 MOV DPL,51H MOVC A,A+DPTR 将表数据送累加器A JZ STOP2 累加器A为0则转移(说明歌曲播放完 得重新播放) MOV R1,A ANL A,#0FH RL A MOV R2,A MOV A,R1 SWAP A ANL A,#0FH JNZ SING 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 JNZ STOP1 A不为0则转移 LJMP BACK STOP1: CLR TR0 音符结束重新播放处理 LJMP BACK STOP2: CLR TR0 整首歌曲播放结束处理 MOV R2,#03H LCALL DELAY LCALL BOFANG LJMP BACK TABLE00: DW 64580,64684,64777,64820 DW 64898,64968,65030,64260 DW 64400,64524,65058,63835,64021 INT: PUSH PSW PUSH ACC MOV TH0,21H MOV 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,92H DB 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,0d2H DB 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,04H DB 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,22H DB 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 00H END五设计体会: 历时2个星期的单片机课程设计,我从中受益匪浅。因为对我而言学到的不仅是专业知识,而且是团队的合作精神。 作为一个团队,分工就显得尤为重要,我主要负责系统硬件电路设计和最终调试的任务,我和搭档互相帮助,彼此勉励,有问题一起寻求解决之道。虽然一开始我们就对方案的选择发生分歧,但这丝毫不影响我们的交流、探讨。因为大家初衷是一样的。开始设计的功能不能全部实现出来,于是拿着程序反复分析和修改,在老师和同学的帮助指导下最终找出错误所在。 通过过自己的努力制作和调试,我的音乐彩灯控制器终于完成。电路板调试成功,满足了设计要求中的基本要求及大部分提高要求.从这次课程设计中,学到了很多的专业知识,以及一些宝贵的心得。从找寻参考书这方面来说,别人的答案只能参考,不能照搬。要有独立的见解,善于发现错误,勤于讨论和提问,这样才能改正错误。 起初,拿到设计要求的时候,大脑是很空白的,因为这就是专业知识的缺乏成为了整个过程最大的阻力,“书到用时方知少”,此时才知自己专业知识的贫乏。通过不懈的找寻,查资料,以及向老师提问,对于电路的构造和基本设计有了大概的蓝图,经过慢慢的探索和仔细的调试,电路功能得以实现,这让自己很有满足感! 这次课程设计使我明白理论与实际相结合的重要,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从而提高自己的实际动手能力和独立思考的能力。同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。在接下来的复习中我会再接再厉,加深对单片机相关知识的理解。 六参考文献: 单片机应用技术晔 王玉民 ·:高等教育 出版日期:2006.6 跟我学用单片机. 肖洪兵 航空航天大学 出版日期:2002.8 单片机实践应用与技术马长林、怡 大学 出版日期:2008 单片机高级教程第1版 何立民 航空航天大学 出版日期:2001 单片机课程设计指导 程成 清华大学 出版日期:2009 单片机原理及接口技术 朝清 航空航天大学出 版日期:199914 / 14