艺术彩灯控制系统设计一.概述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 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系统的硬件构成及功能描述:控制系统硬件设计电路图如图所示:四.系统的软件设计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 GETDATAUP: MOV 50H,#HIGH TABLE10 ;下到上MOV 51H,#LOW TABLE10ACALL BOFANG ;音乐播放初始设置UPLIGHT: MOV DPTR,#TABLE2 ;将TABLE2首地址赋数据指针GETDATA: 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,R1SWAP 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 002 0H 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.5JNB P1.2,START AJMP STOPDOWN:MOV 50H,#HIGH TABLE10 ;上到下MOV 51H,#LOW TABLE10 ACALL BOFANG ;音乐播放初始设置DOWNLIGHT:MOV DPTR,#TABLE1 ;将TABLE1首地址赋数据指针AJMP GETDATAUP: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 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 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 SET B 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,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 D B 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个星期的单片机课程设计,我从中受益匪浅。