分享
分销 收藏 举报 申诉 / 30
播放页_导航下方通栏广告

类型基于单片机音乐倒数定时器的设计.doc

  • 上传人:天****
  • 文档编号:2449006
  • 上传时间:2024-05-30
  • 格式:DOC
  • 页数:30
  • 大小:133.50KB
  • 下载积分:12 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    基于 单片机 音乐 倒数 定时器 设计
    资源描述:
    目录 一、设计要求……………………………………………1 二、设计目的……………………………………………1 三、设计的具体实现……………………………………2 1系统概述…………………………………………2 2单元电路设计……………………………………3 3软件程设计和调试…………………………………7 四、结论和展望…………………………………………24 五、心得体会及建议……………………………………25 六、附录…………………………………………………26 七、参考文献……………………………………………27 基于单片机音乐倒数定时器的设计报告 一、 设计要求 利用单片机结合LCD显示器设计一个倒数计时器,可以放在家中使用,例如煮方便面、煮开水或小睡片刻等,做一小段时间计时。当倒数计时为0时,则发出一段音乐,通知倒数终了,该做重要的事情了。 具体要求: ①文字型LCD(16*2)显示目前倒数的时间;显示格式为“TIME 分分:秒秒”;具有4个按键操作来设置现在想要倒数的时间;一旦按键后则开始倒数计时,当计时为零则发出一阵音乐声响,②程序执行后工作指示灯LED山东,表示程序开始执行,七段显示器显示“0500”,按下操作键K1~K4动作如下:操作键K1,可调整倒数时间1min~60min;操作键K2,设置倒数计时时间为5min,显示“0500”;操作键K3,设置倒数计时时间为10min,显示“1000”;操作键K4,设置倒数计时时间为20min,显示“2000”, ③RESET后按下K1显示如下: UP DOWN OK TIME 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:倒数计时时间为5MIN K3:倒数计时时间为10MIN K4:倒数计时时间为20MIN Y N 图1 设计流程图 2.单元电路设计 2.1控制电路 倒数计数器的控制电路可以见附图,其中主要分为以下几部分 ⑴单片机8051 8051 基本资料如下: 图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亮度调整控制引脚。D0~D7双向的数据总线。必须在有亮度照明的地方,才能看见时间,若使用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, #50 D1: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次此子程序,则延时时间约为100ms 3.2工作方式设计 本次设计中采用的定时器模式0来设计,在此方式中T0、T0可以进行13位的计时,其值保存在两个8位的定时寄存器中。 对于其中任一定时器,工作时钟可以由内部或是外部来提供,由C/T位来决定做定时器还是计数器。定时器的时钟为系统工作时钟除以12.此次试验中采用12MHz石英震荡器则产生1us的计数时间脉冲宽度。本次实验的定时器计时时间为5ms,因此定时器0需计数5000次,其定时器初值的加载可以计算如下: TL0=(8192-5000).MOD.32 TL1=(8192-5000)/32 执行后的结果为,产生的脉冲宽度为 T=5ms 3.3有定时器产生各种频率的声音 我们可以设定发音的频率来改变声音产生音乐,计时时间长短也是按照发音的频率而定的。由频率值推得定时器计数初值由下关系式得到: T=1/f(us) ;方波宽度 Co=(int)t/2 ;定时器所得计数的次数 Lo=(8192-co)%32 ;计数初值低字节 Hi=(8192-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:DOWN K4:OK ; K2: 5 MIN K3:10 MIN K4:20 MIN ;---------------------------------------------- ; 5 mS isr ; MOV TL0,#(8192-5000).MOD.32 ; MOV TH0,#(8192-5000)/32 以下是开始对各个变量的具体定义,加载字节,确定时间常数,时间变量的存放,倒数的分钟秒钟的存放地址,各变量的含义。 LOA EQU 24 HIA EQU 99 CO EQU 200 ;5ms中断计数时间常数,计数200次表示1s MUB EQU 20H.0 HOUR EQU 30H MIN EQU 31H SEC EQU 32H DEDA EQU 33H ; 5 mS计数值 SEC0 EQU 34H ;存放旧的秒数 X EQU 35H ;LCD 显示的地址 MM EQU 36H ; 倒数时间分钟数 SS EQU 37H ; 倒数时间秒钟数 LO EQU 38H HI EQU 39H TC EQU 3AH 以下是对四个按键的定义 K1 EQU P2.4 K2 EQU P2.5 K3 EQU P2.6 K4 EQU P2.7 以下是对LCD、继电器、喇叭、灯的定义 RS EQU P0.0 EN EQU P0.1 RY1 EQU P3.5 RY2 EQU P3.6 SPK EQU P3.4 WLED EQU P3.7 程序开始,代码由地址0开始执行,使用的是定时器0中断 ORG 0H JMP START ORG 0BH ;T0中断 JMP T0_INT START: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 MENU LOOP:CALL DOWN_TIME JB K1,L1 ;对按键进行检测 JNB K1,$ ; 按键1按下: ; MOV MM,#3 ; MOV SS,#1 MOV DPTR,#MADJ MOV A,#1 CALL LCD_PRINT CALL SET_TIME MOV DPTR,#MMENU MOV A,#1 CALL LCD_PRINT JMP LOOP L1: JB K2,L2 JNB K2,$ ;按键2按下: CALL BZ MOV MM,#5 MOV SS,#1 CALL LED_BL JMP LOOP L2: JB K3,L3 JNB K3,$ ;按键3按下: CALL BZ CALL BZ MOV MM,#10 MOV SS,#1 CALL LED_BL JMP LOOP L3: JB K4,L4 JNB K4,$ ; 按键4按下: CALL BZ CALL BZ CALL BZ MOV MM,#20 MOV SS,#1 CALL LED_BL JMP LOOP L4:JMP LOOP ;继续循环执行 $INCLUDE (DSDS1.ASM) 以下是在显示器上显示的时间消息: ;-------------------------------------------- LMESS1: DB "LCD LINE 1 .....",0 LMESS2: DB "TIME ",0 TITLE: DB "DSDS.ASM 8051 DOWN COUNT WITH LCD+MUSIC" ;-------------------------------------------- 以下是初始化控制变量 INIT:MOV DEDA,#0 ;将所有时间计时清为0 MOV 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, #10000010B MOV TL0,#LOA MOV TH0,#HIA SETB TR0 RET T0_INT:JNB MUB,W0 ;T0计时中断程序每5ms中断一次,音乐演奏标志为0时则执行计时程序 MOV TL0,LO ;对音乐的加载 MOV TH0,HI CPL SPK RETI W0:PUSH ACC ;对时间计数的初始化 MOV TL0,#LOA MOV TH0,#HIA INC DEDA ;判断是否为1S MOV A,DEDA CJNE A,#CO,W1 MOV DEDA, #0 CPL WLED INC SEC MOV A,SEC CJNE A,#60,W1 ; 判断是否1分到了 INC MIN MOV SEC,#0 MOV A, MIN CJNE A,#60,W1 ;判断是否1小时到了 INC HOUR MOV MIN,#0 MOV A, HOUR CJNE A,#24,W1 MOV SEC,#0 ;清除时间变量为0 MOV MIN,#0 MOV HOUR,#0 W1: POP ACC ;将累加器有堆栈取出 RETI 以下是使LCD第一行显示 ; A:DIG X: LCD X POS ; SHOW ON LCD LINE1 SHOW_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 LINE2 SHOW_DIG2: MOV B,#10 DIV AB ADD A,#30H PUSH B MOV B,X CALL LCDP2 POP B MOV A,B ADD A,#30H INC X MOV B,X CALL LCDP2 RET 以下是LCD的控制程序设计: SET_LCD:CLR EN ;启动失效 CALL INIT_LCD ;初始化LCD MOV R5,#10 CALL DELAY MOV DPTR,#LMESS1 MOV A,#1 ;显示在第一行 CALL LCD_PRINT MOV DPTR,#LMESS2 MOV A,#2 ;显示在第二行 CALL LCD_PRINT RET LCD控制指令初始化: INIT_LCD1: MOV A,#28H CALL WCOM MOV A,#0CH CALL WCOM MOV A,#0EH CALL WCOM MOV A,#01H CALL WCOM RET 清除LCD的第一行字符: CLR_LINE1: MOV A,#80H CALL WCOM MOV R0,#24 CLR1: MOV A,#' ' CALL WDATA DJNZ R0,CLR1 RET 在LCD的第一行或第二行显示字符: LCD_PRINT: CJNE A,#1,LINE2 ;判断是否为第一行 LINE1: MOV A,#80H CALL WCOM CALL CLR_LINE MOV A,#80H CALL WCOM JMP FILL LINE2: MOV A,#0C0H CALL WCOM CALL CLR_LINE MOV A,#0C0H CALL WCOM FILL: ;填入字符 CLR A MOVC A,@A+DPTR CJNE A,#0,LC1 RET LC1: ;写入数据 CALL WDATA INC DPTR JMP FILL RET CLR_LINE: ;清除该行的LCD字符 MOV R0,#24 CL1: MOV A,#' ' CALL WDATA DJNZ R0,CL1 RET DE: MOV R7, #5 ;短暂延时 DJNZ R7,$ RET EN1: ;短脉冲产生启用信号 SETB EN CALL DE CLR EN CALL DE RET INIT_LCD: ;4位I/O控制LCD接口初始化 MOV P0, #30H CALL EN1 MOV P0, #30H CALL EN1 MOV P0, #30H CALL EN1 MOV P0, #20H CALL EN1 CALL INIT_LCD1 RET WCOM: ;以4位控制方式将命令写入LCD ; 高4位数据的写入 MOV P0, A CLR RS ;设置写入命令 CALL EN1 RLC A RLC A RLC A RLC A ; 低4位数据的写入 MOV P0, A CLR RS CALL EN1 RET WDATA: ;以4位控制方式将数据写入LCD ; 高4位数据的写入 MOV P0, A SETB RS ;设置写入数据 CALL EN1 RLC A RLC A RLC A RLC A ; 高4位数据的写入 MOV P0, A SETB RS CALL EN1 RET 在LCD的第一行写入字符 LCDP1: PUSH ACC MOV A,B ADD A,#80H CALL WCOM POP ACC CALL WDATA RET 在LCD的第二行写入字符 LCDP2: PUSH ACC MOV A,B ADD A,#0C0H CALL WCOM POP ACC CALL WDATA RET 延迟子程序:总延迟时间为R5*10ms DELAY: MOV R6,#50 D1: MOV R7,#100 DJNZ R7,$ DJNZ R6,D1 DJNZ R5,DELAY RET LED_BL: ;工作指示灯闪烁 MOV R4,#4 LE1: CPL WLED MOV R5,#5 CALL DELAY DJNZ R4, LE1 RET 以下是LCD显示的关于菜单和按键的消息 MMENU: DB "SET 5 10 20 MIN",0 MADJ: DB " UP DOWN OK",0 MENU: MOV DPTR,#MMENU MOV A,#1 CALL LCD_PRINT RET 在LCD上显示倒数的时间在第二行: CONV1: MOV A,MM ;倒数的分钟数显示 MOV X,#5 CALL SHOW_DIG2 INC X MOV A,#':' ;显示’:’符号 MOV B,X CALL LCDP2 MOV A,SS ;倒数的秒数显示 INC X CALL SHOW_DIG2 RET 以下为倒数的终止程序1: TIME_OUT1: SETB RY1 ;继电器ON I1: CALL LED_BL CALL BZ JMP I1 RET 过了1S后则更新倒数时间并检查是否倒数终止: DOWN_TIME: MOV A,SEC ;加载现在时间 MOV B,SEC0 ;加载旧时间 CJNE A,B,DO1 ;是否过了1S RET DO1: MOV SEC0,SEC ;记录旧秒数 DEC SS MOV A,SS CJNE A,#0,D2 ;判断秒数和分钟数是否为0 MOV A,MM CJNE A,#0,D12 CALL TIME_OUT ;当秒数和分钟数为0时则停止倒数计时 RET D12: MOV SS,#59 ;秒数=59 分钟数减1 DEC MM D2: CALL CONV1 ;更新显示倒数的时间 RET 设置倒数的时间,K2为加,K3为减,K4为设置成功: SET_TIME: CLR TR0 MOV SS,#1 CALL CONV1 以下程序为扫描按下的为哪个键 S0: JB K2,S1 ;未按下K2则继续扫描 CALL BZ ;调整分钟数增加 INC MM MOV A, MM CJNE A,#60,S11 MOV MM,#0 S11: CALL CONV1 ;显示倒数的时间 MOV R5,#20 CALL DELAY JMP S0 S1: JB K3,S2 ;未按下K3则继续扫描 ; K2 KEYED ADJ DOWN MIN. CALL BZ DEC MM MOV A, MM CJNE A,#0,S21 MOV MM,#60 S21: CALL CONV1 MOV R5,#20 CALL DELAY JMP S0 S2: JB K4,S0 ;为按下K4则继续扫描 JNB K4,$ ;有按下则等待放开来 CALL BZ ;设置完成压电喇叭发出声音,LED CALL BZ 闪动,定时器启动 CALL LED_BL SETB TR0 RET BZ: MOV R6,#0 ;压电喇叭发出声音 B1: CALL DEX CPL SPK DJNZ R6,B1 MOV R5,#10 CALL DELAY RET DEX: MOV R7,#180 ;短暂延迟 DE1: NOP DJNZ R7,DE1 RET TIME_OUT:SETB RY1 ;倒数终了处理程序,继电器ON TI1:CALL LED_BL CALL BZ SETB MUB CALL MUSIC ;设置音乐 JMP TI1 RET END 到此主程序完成可以实现本次设计中要求的主要功能。对于要喇叭发出音乐声,则需要下面的DSDS1.ASM程序的介入。主要为音乐程序。 DSDS1.ASM的程序清单如下: MUSIC: ;音乐的设置 MOV TMOD,#00000000B MOV IE, #10000010B M0: CALL SOUND_ON ;喇叭打开 MOV R4,#1 ;发出“DO”一拍 MOV R3,#1 CALL PLAY CALL LED_BL MOV 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 M0 R4音阶指针,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,#0 PP0: ;指向旋律音阶数据列表地址 MOV DPTR, #SONG MOV A,TC MOVC A,@A+DPTR MOV R4,A CJNE A,#0FFH,PP1 RET PP1: ;指向旋律拍数数据列表地址 MOV DPTR, #LEN MOV A,TC MOVC A,@A+DPTR MOV R3,A CALL PLAY INC TC JMP PP0 RET SOUND_ON: ;喇叭打开 SETB TR0 RET SOUND_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 2
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:基于单片机音乐倒数定时器的设计.doc
    链接地址:https://www.zixin.com.cn/doc/2449006.html
    页脚通栏广告

    Copyright ©2010-2026   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork