课程设计(论文)基于单片机音乐倒数定时器的设计

上传人:仙*** 文档编号:31835630 上传时间:2021-10-12 格式:DOC 页数:29 大小:197KB
返回 下载 相关 举报
课程设计(论文)基于单片机音乐倒数定时器的设计_第1页
第1页 / 共29页
课程设计(论文)基于单片机音乐倒数定时器的设计_第2页
第2页 / 共29页
课程设计(论文)基于单片机音乐倒数定时器的设计_第3页
第3页 / 共29页
点击查看更多>>
资源描述
华北科技学院课程设计 目录一、设计要求1二、设计目的1三、设计的具体实现21系统概述22单元电路设计33软件程设计和调试7四、结论和展望24五、心得体会及建议25六、附录26七、参考文献27基于单片机音乐倒数定时器的设计报告一、 设计要求利用单片机结合LCD显示器设计一个倒数计时器,可以放在家中使用,例如煮方便面、煮开水或小睡片刻等,做一小段时间计时。当倒数计时为0时,则发出一段音乐,通知倒数终了,该做重要的事情了。具体要求:文字型LCD(16*2)显示目前倒数的时间;显示格式为“TIME 分分:秒秒”;具有4个按键操作来设置现在想要倒数的时间;一旦按键后则开始倒数计时,当计时为零则发出一阵音乐声响,程序执行后工作指示灯LED闪动,表示程序开始执行,七段显示器显示“0500”,按下操作键K1K4动作如下:操作键K1,可调整倒数时间1min60min;操作键K2,设置倒数计时时间为5min,显示“0500”;操作键K3,设置倒数计时时间为10min,显示“1000”;操作键K4,设置倒数计时时间为20min,显示“2000”, RESET后按下K1显示如下:UP DOWN OKTIME 04:59倒数时间操作键K2:增加倒数计时1min;操作键K3,减少倒数计时1min,操作键K4:设置完成。一旦按键后则开始倒数计时,当计时为0时则发出一段音乐,同时继电器启动二、 设计目的1、通过该设计能提高学生分析解决问题的能力。2、了解模拟电路及数字电路的相关知识。3、学习单片机定时器时间计时处理、按键扫描、LCD显示及音乐旋律演奏的设计方法。 三、设计的具体实现 1系统概述1.1 总体方案论证要实现音乐倒数定时器可以用两种方案实现。方案一:利用PROG-110可编程控制器PROG-110 可编程器,是一种用数字简码控制的产品,它的特点是:自带一套用于输入数码的按键和显示程序的数码管,只要我们现场输入一列2位数码,编制的程序即能完成,即编,即用。每一种数字简码控制器,它都自带一套系统软件,每一套系统软件都有一套相对应的指令表,配套的指令表表明,只要输入什么样的数,程序将去做什么事,输入一列数,它就会按次序去完成你要求它做的所有的事。但是首先PROG-110模块总共只有6个I/O端口,这就必须扩展模块端口,用两部以上模块串联,但花钱要多;其次是程序过长,PROG-110模块的E2PROM存储器24C01只可输入128步程序;第三是受PROG-110模块跳转指令步数的限制。方案二:利用单片机、LCD显示器和压电喇叭单片机具有性能高、速度快、体积小、价格低、稳定可靠、应用广泛、通用性强等突出优点。它在硬件结构、指令系统、I/O端口、功率消耗及可靠性等方面均有其独特之处,其最显著的特点之一就是具有非常有效的控制功能。而LCD显示器具有体积小、重量轻、工作电压低、功耗极低、显示内容丰富、稳定可靠、成本低、控制驱动方便、接口简单易用、模块化结构紧凑等特点。综上所述,按照设计要求我选择第二种方案,即利用单片机和LCD显示器来实现定时倒数,通过压电喇叭来发出音乐。 1.2 单片机选择方案采用8051单片机8051单片机内部包含一个8位CPU、一个片内振荡器及时钟电路、ROM程序存储器、RAM数据存储器、两个16位定时器/计数器、可分别寻址64KB的程序存储器空间和64KB的数据存储器空间、32条可编程的I/O口线(4个8位并行I/O端口)、一个可编程全双工串行口、具有5个中断源和2个优先级的中断结构。可以有效实现本次设计中要求的各项功能。具体的设计流程可见图1:2单元电路设计2.1控制电路主程序开始继电器OFF初始化变量及LCD接口初始化定时器LCD闪动表示程序开始执行LCD扫描显示器更新倒数时间数据,检查闹铃时间是否到了是否按K1,K2,K3,K4键K1:调整倒数时间K2:倒数计时时间为5MINK3:倒数计时时间为10MINK4:倒数计时时间为20MINYN图1 设计流程图2单元电路设计2.1控制电路倒数计数器的控制电路可以见附图,其中主要分为以下几部分单片机80518051 基本资料如下:图2 8051引脚图 8051主要使用引脚功能说明如下:l 8051的引脚40接+5V电源,引脚20接电源地线。l 传统8051工作时钟的最高为12MHz。l EA引脚低电平动作用来存取外部程序ROM控制。l EA接地,由外部程序ROM来执行程序。l EA接高电平,由内部ROM来执行程序。l 开机时必须加入芯片重置信号。(RESET)l RESET信号高电平动作,高电平时产生芯片重置。l RESET信号低电平时,由程序ROM地址0开始执行程序。在本次设计中采用的8051外接电路如图3所示:图3 8051外接电路图8051系列的单片机的时钟方式分为内部方式和外部方式。内部方式就是在单片机的引脚18、19外接晶振,就够成了自激振荡器在单片机内部产生时钟脉冲信号。外部时钟方式是把外部已经有的时钟信号引入到单片机内部。时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间。用一个12MHz晶振和两个30Pf瓷片电容组成,为单片机提供标准时钟,其中两个瓷片电容可以增加电路的稳定性,可以抗噪声增加稳定性,不容易死机。在8051中之所以采用高性能的振荡电路,因为:1.单片机电子钟的计时脉冲基准是由外部晶振的频率经过12分频后提供,采用内部的定时/计数器来实现计时功能。所以,外接晶振频率精确度直接影响电子钟计时的准确性。 2.单片机电子钟利用内部定时/计数器溢出产生中断(12M晶振一般为50ms)再乘以相应的倍率来实现秒、分、时的转换。大家都知道从定时/计数器产生中断请求到响 应中断需要3-8个机器周期,定时中断子程序中的数据入栈和重装定时/计数器的初值还需要占用数个机器周期,还有从中断入口转到中断子程序也要占用一定的机器周期。工作指示灯LED,送出低电平时,LED点亮,高电平时则使LED熄灭。即l 程序执行中有情况产生时,LED闪动一下。l 用于状态区分,如状态1闪动一下,状态2闪动两下。l 程序执行中遇到特殊错误时,持续闪动。LCD显示器图4 LCD芯片接线图本次设计使用的倒数计时LCD控制,使用的是16字*2行设计。图4中为4位控制电路,以8051 P0的6调输出控制线来实现控制,P0还有提升电阻以增强其驱动能力,控制信号如下:R/W=0,LCD执行写入的动作,RS寄存器选择控制线。EN启用控制线。VO亮度调整控制引脚。D0D7双向的数据总线。必须在有亮度照明的地方,才能看见时间,若使用LCD,选择有背光显示的模块,则在夜晚或黑暗的场合也可以使用,有背光显示的LCD模块在引脚上,与无背光显示的模块兼容,指示价格较贵,一般显示的背光颜色为黄光,与手机的背光颜色相似。按键控制按键控制室控制程序执行时数据的输入或是特殊功能的设置及操作,使用8051端口2的4条输入口,由程序来控制,平时输入端为高电平,当有按键按下则相对位会呈现低电平,进过轮流扫描判断输入端是否为低电平,便可知道按下的是哪一个按钮。压电喇叭图5 压电喇叭接线图8051端口3的第4位是压电喇叭的驱动位,持续送出工作脉冲可以推动喇叭发出哔的声响,当工作频率越高时,声音越清脆,工作频率低时,声音则较低沉。继电器继电器接点说明如下:NC:常闭点。以COM为共同点,NC与COM在平时是呈导通。COM:共同点。输出控制接点的共同接点。NO:常开点。NO与COM平时呈开路的状态,当继电器动作时,NO与COM导通,NC与COM则呈开路状态。电源输入J1为+5V电源输入,当电源加入时电源指示灯LED将亮起,用哪个以指示电源供给正常,定时器在倒数时间到后压电喇叭会发出音乐旋律,并启动继电器使其状态为ON,控制继电器的ON/OFF状态,可以直接控制家电开关。2.2控制程序本课程设计中,可以学习利用单片机定时器设计时间计时处理,其时分秒控制,定时器0计时中断程序每个5ms中断一次当做一个计数,每中断一次则计数加1,当计数200次时,表示1s到了,秒变量加1,同理再判断是否1min钟到了,再判断是否1h到了,若计数到了则将相关变量清除为0。单片机定时器负责定时的技术,不会因为案件处理而中断时间描述的增加,时,分,秒数据是存在变量内并写入LCD而显示相关时间的。在主控程序循环中主要工作为扫描是否有按键,若有按键则做相应的功能处理,同时也检查所倒数的时间是否为0,若为0表示倒数的时间终了,应该执行想对应的工作了,图为主程序控制工作流程。时间计时处理程序时等过了1s 后,则更新时间数据,将最新剩余倒数的分秒的时间数据转换为数字数据,并显示在LCD上。程序中如何判断是否已过了1s?可以设一旧秒数变量,当新旧秒数变量不一样时,则表示已过了1s,要做相关程序处理了。倒数计时闹铃的动作利用时间计时处理来做秒数倒数,当所设置的时间为0,压电喇叭则不断发出音乐声,LED持续闪动,启动继电器,有继电器可以控制家电开启或关闭。音乐声的产生也是有定时器来产生固定频率的方波信号推动压电喇叭,发出旋律。而定时器原先已利用设计时间计时处理了,怎么能在设计来做音乐旋律的控制?在此设计定义一个音乐演奏标志,若音乐演奏标志为0则执行中断程序中计时程序的部分程序,若音乐演奏标志为1则执行音乐发生控制程序。因此只要适当的运用程序设计技巧,计时中断程序中可以做许多种不同的工作,而这些工作是需要特定一段时间久必须要被触发而被执行的程序。倒数计数器控制程序文件名为DSDS.ASM。注意:在程序中128行有以下的指令:SINCLUDE (DSDS1.ASM); 加载程序一起来汇编及编译表示在主程序DSDS.ASM中还会自动加载另一程序DSDS1.ASM程序一起进来汇编及编译,只是为了方便程序编译用,一些测试正确的程序代码可以分别存档好方便管理,此外整个程序源代码长度也不至于太长,不方便编辑。DSDS1.ASM主要的程序代码功能为以定时器演奏歌曲旋律的控制。3软件程设计和调试3.1延时时间的计算若我们想设计程序执行100ms时间延时,程序可以设计如下DELAY: MOV R6, #50D1:MOV R7,#100 DJNZ R7,$ DJNZ R6,D1 DJNZ R5,DELAY RET如果震荡频率为12MHz则执行时间按为T=1+50*(1+100*2)+2+2+2us =10.057ms如果执行10次此子程序,则延时时间约为100ms3.2工作方式设计本次设计中采用的定时器模式0来设计,在此方式中T0、T0可以进行13位的计时,其值保存在两个8位的定时寄存器中。对于其中任一定时器,工作时钟可以由内部或是外部来提供,由C/T位来决定做定时器还是计数器。定时器的时钟为系统工作时钟除以12.此次试验中采用12MHz石英震荡器则产生1us的计数时间脉冲宽度。本次实验的定时器计时时间为5ms,因此定时器0需计数5000次,其定时器初值的加载可以计算如下:TL0=(8191-5000).MOD.32TH0=(8191-5000)/32执行后的结果为,产生的脉冲宽度为T=5ms3.3有定时器产生各种频率的声音我们可以设定发音的频率来改变声音产生音乐,计时时间长短也是按照发音的频率而定的。由频率值推得定时器计数初值由下关系式得到:T=1/f(us) ;方波宽度Co=(int)t/2 ;定时器所得计数的次数Lo=(8191-co)%32 ;计数初值低字节Hi=(8191-co)/32 ;计数初值高字节软件的编译和调试使用的是KEIL软件,文件格式是ASM。3.4子程序说明DSDS.ASM 主要控制子程序说明如下:INIT:初始化控制变量。INIT_TIMER:初始化定时器接口,使用定时器0的模式0计时。T0_INT:定时器0计时中断程序每隔5ms中断一次,或是做音乐演奏控制。SHOW_DIG:在LCD的第一行显示数字。SHOW_DIG2: 在LCD的第二行显示数字。SET_LCD:对LCD做初始化工作。CLR_LINE1:清除LCD的第一行显示字符。CLR_LINE2:清除LCD的第二行显示字符。LCD_PRINT:在LCD的第一或第二行显示字符。WCOM:以4位控制方式将命令写至LCD。WDATA:以4位控制方式将数据写入LCD。LCDP1:在LCD的第一行显示字符。LCDP2: 在LCD的第二行显示字符。CONV1:将分秒的倒数数据转换为数字数据系那是在LCD第二行。DOWN_TIME:检查是否计时终了。SET_TIME:设置所要倒数的时间。BZ:压电喇叭发出哔一声。TIME_OUT:计时终止启动音乐演奏。DSDS1.ASM主要控制子程序说明如下:MUSIC:以定时器0计时中断程序做音乐演奏控制。PLAY:演奏单音控制。PLAY_SONG:测试演奏音乐。SOUND_ON:启动定时器0开始计时,是喇叭发声。SOUND_OFF:停止定时器0计时动作,喇叭静音。LOAD_VALUE:一查表法由音阶计数值来载入定时器计数初值。3.5具体程序解释下面是对本次程序的说明解释,定义使用软件,文件名称,每个键的作用。;-; DSDS.ASM 8051 COUNT DOWN TIMER WITH LCD+MUSIC;-; K1: SET MIN 0-60 K2:UP K3:DOWNK4:OK; K2: 5 MIN K3:10 MIN K4:20 MIN;-; 5 ms ; MOV TL0,#(8191-5000).MOD.32; MOV TH0,#(8191-5000)/32以下是开始对各个变量的具体定义,加载字节,确定时间常数,时间变量的存放,倒数的分钟秒钟的存放地址,各变量的含义。LOAEQU 24HIAEQU 99COEQU 200 ;5ms中断计数时间常数,计数200次表示1sMUBEQU 20H.0HOUREQU 30HMINEQU 31HSECEQU 32HDEDAEQU 33H ; 5 mS计数值SEC0EQU 34H ;存放旧的秒数XEQU 35H ;LCD 显示的地址MMEQU 36H ; 倒数时间分钟数SSEQU 37H ; 倒数时间秒钟数LOEQU 38HHIEQU 39HTCEQU 3AH以下是对四个按键的定义K1EQU P2.4K2EQU P2.5K3EQU P2.6K4EQU P2.7以下是对LCD、继电器、喇叭、灯的定义RSEQU P0.0ENEQU P0.1RY1EQU P3.5RY2EQU P3.6SPKEQU P3.4WLEDEQU P3.7程序开始,代码由地址0开始执行,使用的是定时器0中断ORG 0H JMP START ORG 0BH ;T0中断 JMP T0_INTSTART:SETB MUB ;测试音乐演奏; CALL MUSIC CLR EN ;LCD 的状态设为OFF CLR RY1 CLR RY2 CLR MUB ;清除音乐演奏标志 CALL LED_BL CALL SET_LCD CALL BZ CALL INIT CALL INIT_TIMER CALL MENULOOP:CALL DOWN_TIME JB K1,L1 ;对按键进行检测 JNB K1,$; 按键1按下:;MOV MM,#3;MOV SS,#1MOV DPTR,#MADJMOV A,#1CALL LCD_PRINTCALL SET_TIMEMOV DPTR,#MMENUMOV A,#1CALL LCD_PRINTJMP LOOPL1:JB K2,L2JNB K2,$;按键2按下:CALL BZMOV MM,#5MOV SS,#1CALL LED_BLJMP LOOPL2:JB K3,L3JNB K3,$;按键3按下:CALL BZCALL BZMOV MM,#10MOV SS,#1CALL LED_BLJMP LOOPL3:JB K4,L4JNB K4,$; 按键4按下:CALL BZCALL BZCALL BZMOV MM,#20MOV SS,#1CALL LED_BLJMP LOOPL4:JMP LOOP ;继续循环执行$INCLUDE (DSDS1.ASM)以下是在显示器上显示的时间消息:;-LMESS1: DB LCD LINE 1 .,0LMESS2: DB TIME ,0TITLE:DB DSDS.ASM 8051 DOWN COUNT WITH LCD+MUSIC;-以下是初始化控制变量INIT:MOV DEDA,#0 ;将所有时间计时清为0MOV SEC0,#0 MOV SEC,#0 MOV MIN,#0 MOV HOUR,#0;定义倒数时间: MOV MM,#5 MOV SS,#1 RET以下是初始化定时器接口,使用定时器0模式0计时INIT_TIMER: MOV TMOD,#00000000B MOV IE, #10000010BMOV TL0,#LOAMOV TH0,#HIASETB TR0RETT0_INT:JNB MUB,W0 ;T0计时中断程序每5ms中断一次,音乐演奏标志为0时则执行计时程序MOV TL0,LO ;对音乐的加载MOV TH0,HICPL SPKRETIW0:PUSH ACC ;对时间计数的初始化MOV TL0,#LOAMOV TH0,#HIAINC DEDA;判断是否为1SMOV A,DEDACJNE A,#CO,W1MOV DEDA, #0CPL WLEDINC SECMOV A,SECCJNE A,#60,W1; 判断是否1分到了INC MINMOV SEC,#0MOV A, MINCJNE A,#60,W1;判断是否1小时到了INC HOURMOV MIN,#0MOV A, HOURCJNE A,#24,W1MOV SEC,#0 ;清除时间变量为0MOV MIN,#0MOV HOUR,#0W1: POP ACC ;将累加器有堆栈取出RETI以下是使LCD第一行显示; A:DIG X: LCD X POS; SHOW ON LCD LINE1SHOW_DIG:MOV B,#10 DIV AB ADD A,#30H PUSH B MOV B,X CALL LCDP1 POP B MOV A,B ADD A,#30H INC X MOV B,X CALL LCDP1 RET以下是使LCD第二行显示; A:DIG X: LCD X POS; SHOW ON LCD LINE2SHOW_DIG2: MOV B,#10DIV AB ADD A,#30HPUSH BMOV B,XCALL LCDP2POP BMOV A,BADD A,#30H INC X MOV B,X CALL LCDP2 RET以下是LCD的控制程序设计:SET_LCD:CLR EN ;启动失效 CALL INIT_LCD ;初始化LCD MOV R5,#10CALL DELAYMOV DPTR,#LMESS1MOV A,#1 ;显示在第一行CALL LCD_PRINTMOV DPTR,#LMESS2MOV A,#2 ;显示在第二行CALL LCD_PRINTRETLCD控制指令初始化:INIT_LCD1:MOV A,#28HCALL WCOMMOV A,#0CHCALL WCOMMOV A,#0EHCALL WCOMMOV A,#01HCALL WCOMRET清除LCD的第一行字符:CLR_LINE1:MOV A,#80HCALL WCOMMOV R0,#24CLR1:MOV A,# CALL WDATADJNZ R0,CLR1RET在LCD的第一行或第二行显示字符:LCD_PRINT:CJNE A,#1,LINE2 ;判断是否为第一行LINE1:MOV A,#80HCALL WCOMCALL CLR_LINEMOV A,#80HCALL WCOMJMP FILLLINE2:MOV A,#0C0HCALL WCOMCALL CLR_LINEMOV A,#0C0HCALL WCOMFILL: ;填入字符CLR AMOVC A,A+DPTRCJNE A,#0,LC1RETLC1: ;写入数据CALL WDATAINC DPTRJMP FILLRETCLR_LINE: ;清除该行的LCD字符MOV R0,#24CL1: MOV A,# CALL WDATADJNZ R0,CL1RETDE:MOV R7, #5 ;短暂延时DJNZ R7,$RETEN1: ;短脉冲产生启用信号SETB ENCALL DECLR ENCALL DERETINIT_LCD: ;4位I/O控制LCD接口初始化MOV P0, #30HCALL EN1MOV P0, #30HCALL EN1MOV P0, #30HCALL EN1MOV P0, #20HCALL EN1CALL INIT_LCD1RETWCOM: ;以4位控制方式将命令写入LCD; 高4位数据的写入MOV P0, ACLR RS ;设置写入命令CALL EN1RLC ARLC ARLC ARLC A; 低4位数据的写入MOV P0, ACLR RSCALL EN1RETWDATA: ;以4位控制方式将数据写入LCD; 高4位数据的写入MOV P0, ASETB RS ;设置写入数据CALL EN1RLC ARLC ARLC ARLC A; 高4位数据的写入MOV P0, ASETB RSCALL EN1RET在LCD的第一行写入字符LCDP1:PUSH ACCMOV A,BADD A,#80HCALL WCOMPOP ACCCALL WDATARET在LCD的第二行写入字符LCDP2:PUSH ACCMOV A,BADD A,#0C0HCALL WCOMPOP ACCCALL WDATARET延迟子程序:总延迟时间为R5*10msDELAY:MOV R6,#50D1:MOV R7,#100DJNZ R7,$DJNZ R6,D1DJNZ R5,DELAYRETLED_BL: ;工作指示灯闪烁MOV R4,#4LE1:CPL WLEDMOV R5,#5CALL DELAYDJNZ R4, LE1RET以下是LCD显示的关于菜单和按键的消息MMENU:DB SET 5 10 20 MIN,0MADJ:DB UP DOWN OK,0MENU:MOV DPTR,#MMENUMOV A,#1CALL LCD_PRINTRET在LCD上显示倒数的时间在第二行:CONV1:MOV A,MM ;倒数的分钟数显示MOV X,#5CALL SHOW_DIG2INC XMOV A,#: ;显示:符号MOV B,XCALL LCDP2MOV A,SS ;倒数的秒数显示INC XCALL SHOW_DIG2RET以下为倒数的终止程序1:TIME_OUT1:SETB RY1 ;继电器ONI1:CALL LED_BLCALL BZJMP I1RET过了1S后则更新倒数时间并检查是否倒数终止:DOWN_TIME:MOV A,SEC ;加载现在时间MOV B,SEC0 ;加载旧时间CJNE A,B,DO1 ;是否过了1SRETDO1:MOV SEC0,SEC ;记录旧秒数DEC SSMOV A,SSCJNE A,#0,D2 ;判断秒数和分钟数是否为0MOV A,MMCJNE A,#0,D12CALL TIME_OUT ;当秒数和分钟数为0时则停止倒数计时RETD12:MOV SS,#59 ;秒数=59 分钟数减1DEC MMD2:CALL CONV1 ;更新显示倒数的时间RET设置倒数的时间,K2为加,K3为减,K4为设置成功:SET_TIME:CLR TR0MOV SS,#1CALL CONV1以下程序为扫描按下的为哪个键S0: JB K2,S1 ;未按下K2则继续扫描CALL BZ ;调整分钟数增加INC MMMOV A, MMCJNE A,#60,S11MOV MM,#0S11:CALL CONV1 ;显示倒数的时间MOV R5,#20CALL DELAYJMP S0S1:JB K3,S2 ;未按下K3则继续扫描; K2 KEYED ADJ DOWN MIN.CALL BZDEC MMMOV A, MMCJNE A,#0,S21MOV MM,#60S21:CALL CONV1 MOV R5,#20CALL DELAYJMP S0S2:JB K4,S0 ;为按下K4则继续扫描JNB K4,$ ;有按下则等待放开来CALL BZ ;设置完成压电喇叭发出声音,LED CALL BZ 闪动,定时器启动CALL LED_BLSETB TR0RETBZ: MOV R6,#0 ;压电喇叭发出声音B1:CALL DEXCPL SPKDJNZ R6,B1MOV R5,#10CALL DELAYRETDEX: MOV R7,#180 ;短暂延迟DE1: NOPDJNZ R7,DE1RETTIME_OUT:SETB RY1 ;倒数终了处理程序,继电器ONTI1:CALL LED_BLCALL BZSETB MUBCALL MUSIC ;设置音乐JMP TI1RETEND到此主程序完成可以实现本次设计中要求的主要功能。对于要喇叭发出音乐声,则需要下面的DSDS1.ASM程序的介入。主要为音乐程序。DSDS1.ASM的程序清单如下:MUSIC: ;音乐的设置 MOV TMOD,#00000000B MOV IE, #10000010BM0: CALL SOUND_ON ;喇叭打开 MOV R4,#1 ;发出“DO”一拍 MOV R3,#1 CALL PLAY CALL LED_BLMOV R4,#2 ;发出“RE”一拍 MOV R3,#1 CALL PLAY CALL LED_BL MOV R4,#3 ;发出“ME”一拍 MOV R3,#3 CALL PLAY CALL LED_BL CALL SOUND_OFF ;喇叭关闭没有声音 MOV R5,#50 ;静音0.5S CALL DELAY下面是一段旋律演奏的程序 CALL SOUND_ON CALL PLAY_SONG CALL SOUND_OFF JMP M0R4音阶指针,R3拍数PLAY:CALL LOAD_VALUE ;单音演奏PL:MOV R5,#10 CALL DELAY DJNZ R3, PL实现暂停: CALL SOUND_OFF MOV R5,#3 CALL DELAY CALL SOUND_ON ;喇叭开启 RET演奏一段旋律:PLAY_SONG: MOV TC,#0PP0: ;指向旋律音阶数据列表地址 MOV DPTR, #SONG MOV A,TC MOVC A,A+DPTR MOV R4,A CJNE A,#0FFH,PP1 RETPP1: ;指向旋律拍数数据列表地址 MOV DPTR, #LEN MOV A,TC MOVC A,A+DPTR MOV R3,A CALL PLAY INC TC JMP PP0 RETSOUND_ON: ;喇叭打开 SETB TR0 RETSOUND_OFF: ;喇叭关闭 CLR TR0 RET以查表法由音阶计数值来载入计数初值,R4表示音阶计数值LOAD_VALUE: MOV DPTR,#HI_LIST ;指向数据列表地址 MOV A,R4 MOVC A,A+DPTR MOV HI,A MOV DPTR,#LO_LIST MOV A,R4 MOVC A,A+DPTR MOV LO,A RET定时器的设置用来设置音乐声音:HI_LIST: ;音阶对应定时器0计数初值高字节数据列表 DB 0,226,229,232,233,236,238,240 DB 241,242,244,244,246,247,248LO_LIST: ;音阶对应定时器0计数初值低字节数据列表 DB 0,4,13,10,20,3,8,6 DB 2,23,5,26,1,4,3以下为旋律数据:SONG: DB 2,6,2,2,3,1,4,3,2,2,1,6,7,1,3,3,5,3,2,7,6,1,0FFHLEN: DB 2,1,1,2,1,1,1,2,1,1,1,2,1,1,2,1,1,1,2,1,1,1,0FFH四、 结论和展望本次设计比较复杂,而且设计的基础知识很多,也很重要,对我们未来的工作和学习有着一定的奠基作用,是对单片机、数电、模电等知识的总结很归纳。本次设计参考资料较多,而且由于没有设计完成电路制版,所以对设计的程序没有办法验证其正确性,只能说明理论上的程度可以实现。如何实现各方面的知识相结合,怎么样合理利用器件管脚,对于单片机汇编语言的掌握,以及各个指令相互之间的配合都是在这个课程设计中有所体现的,也是我以后需要加强的。在8051单片机本身须加上系统工作时钟,在此使用12MHz的石英振荡晶体,此与串行传输接口波特率时钟设计有关,在此利用RC线路产生RESET信号用于系统重置,另外接有手动开关按键,只要按下此按键就可以重新设计程序。如果是以ROM模拟器来测试程序,可以有模拟器送进高电平脉冲而达到程序下载时,系统自动重置而执行程序。在本电路中可以使用的I/O引脚数少,可是可以做很多的功能扩充。在本次设计的基础上还可以扩展:增加时钟及闹钟功能增加码表计数功能增加万年历显示“年月日”增加多组计时倒数功能五、 心得体会及建议我在设计期翻阅了大量参考书籍和论文,弄通了软件Protel 99 SE的功能及使用方法。在老师的指导和帮助下,首先熟悉了一些电子设计自动化软件的应用和软件间的互相配合作用,其次,复习了一些模拟电路知识,完成我的最后一次课程设计。在这段时间里,我学到了很多知识也有很多感受,不仅使我对模拟电子及其它专业知识有了更深刻的了解,而且我开始了独立的学习和实验查看相关资料和书籍,让自己头脑中模糊的概念逐渐清晰,每一次改进都是我学习的收获,同时使我将理论应用于实际。我不但回顾了以前所学的电路原理的基础知识,而且还学到了一些新知识。最重要的是我深刻体会到要做好一件完整的事情,要有系统的思维方式和逻辑方法,要耐心的面对所有问题、要善于用应用各种资源来充实和满足自己。大学生活即将结束,因此我特别珍惜这最后的时光和这次自己动手的机会,我会尽力的这次设计做到更好。虽然我的论文作品还不是很成熟,还有很多不足之处。但论文中的每一个字都是我用心写到电脑里,每一幅图片都是我翻阅大量书籍、请教很多老师并经过自己的思考画出来的。这次做设计的经历让我终生受益、我感受到做设计是要用心去做的一件事,没有学习就不可能有研究的能力,这次的经历能在以后的学习、工作中激励我继续进步。由于学生水平有限其中的缺点、错误望各位老师批评指正。六、 附录元件明细表 元件名器件个数单片机80511LCDHD44780A1电阻1k4电阻1001电阻10k9晶体振荡器12MHz1三极管C9452发光二极管LED2瓷片电容30pF2二极管IN40481电解电容10uF1压电喇叭1继电器1按键52接口13接口1七、参考文献1.陈明荧 8051单片机课程设计实训教材北京:清华大学出版社,20042.翁桂荣 邹丽新 单片微型计算机接口与技术苏州:苏州大学出版社,20023.周志德 单片机原理及应用北京:高等教育出版社,20014.陈小忠 黄宁 赵小侠 单片机接口技术实用子程序 北京:人民邮电出版社,20055.徐爱钧 智能化测量控制仪表原理与设计北京:北京航空航天大学出版社,2004第28页
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!