单片机课程设计-基于单片机音乐彩灯电子控制器设计.doc

上传人:沧海****B 文档编号:91491191 上传时间:2023-05-27 格式:DOC 页数:34 大小:289.50KB
返回 下载 相关 举报
单片机课程设计-基于单片机音乐彩灯电子控制器设计.doc_第1页
第1页 / 共34页
单片机课程设计-基于单片机音乐彩灯电子控制器设计.doc_第2页
第2页 / 共34页
点击查看更多>>
资源描述

《单片机课程设计-基于单片机音乐彩灯电子控制器设计.doc》由会员分享,可在线阅读,更多相关《单片机课程设计-基于单片机音乐彩灯电子控制器设计.doc(34页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、物理与电子工程学院2014级本科课程设计提供全套毕业论文,各专业都有物理与电子工程学院单片机课程设计报告书 设计题目: 基于单片机音乐彩灯电子控制器设计 专 业: 自动化 班 级: 14接本 学生姓名: 学 号: 20140343112 指导教师: 2014年 11 月16 日 物理与电子工程学院课程设计任务书专业: 自动化 班级: 2014接本 学生姓名李智瑶学号20140343112课程名称单片机原理及接口技术设计题目基于单片机音乐彩灯电子控制器设计设计目的、主要内容(参数、方法)及要求设计任务与要求要求将音乐分成四个不同的频段,将彩灯分为四组,各组彩灯颜色不同,每组彩灯包含两个颜色相同的

2、彩灯。(1) 实现音乐彩灯同步控制;(2) 当音乐处于高频段20004000Hz时第一组彩灯根据音乐节拍长短不同决定灯亮的个数;(3) 当音乐处于中频段5001200Hz时第二组彩灯根据音乐节拍长短不同决定灯亮的个数;(4) 当音乐处于低频段50250Hz时第三组彩灯根据音乐节拍长短不同决定灯亮的个数;(5) 当音乐在这些频段之外,要求所有彩灯按照1Hz频率节奏性的闪烁;工作量2周时间,每天3学时,共计42学时进度安排l 第1天:查阅资料,整理资料l 第2-3天:整理报告,确定初稿l 第4-14天:完成程序,整理交稿主要参考资料1 杨国志,王立峰,杨东光,王辉林编著.实用电子制作实例M.福建科

3、学技术出版社,2000.10.2 张仁.单片机音乐彩灯同步控制器的设计J.成都气象学院院报,1995.5.(165168).3 王连涛主编.音乐喷泉的单片机控制J.电子世界,2005.(2122).4 康华光,陈大钦编著.电子技术基础(模拟部分第四版)M.高等教育出版社,2002.3.5 潘永雄,沙河编著,电子线路CAD实用教程(第三版)M.西安电子科技大学出版社,2010.2.指导教师签字教研室主任签字摘 要随着人们生活环境的不断改善和美化,在许多场合可以看到彩色霓虹灯。LED彩灯由于其丰富的灯光色彩,低廉的造价以及控制简单等特点而得到了广泛的应用。本篇设计为基于单片机的音乐彩灯控制器,它是

4、指彩灯能随着音乐信号地变化而变化的一种控制电路。本文详细论述了音乐彩灯控制器的硬件原理电路,包括振荡、时钟、复位等模块电路。以及如何在硬件电路的基础上通过单片机进行软件编程最终实现音乐彩灯的同步控制。关键词:音乐;彩灯;同步控制目 录1 引言42.1 设计任务与要求52.2 方案的论证和选取53 硬件电路的设计73.1 单片机系统设计框图73.2 单片机外围电路83.3 时钟电路93.5 按键电路113.6 ISP下载口电路113.7LED彩灯显示电路123.8 12864液晶电路123.9 音乐播放电路143.10 直流稳压电源电路154 系统软件设计164.1 单片机系统设计主程序流程图1

5、64.2 音乐产生程序204.3 定时器子程序设计序214.4 液晶显示子程序29参考文献321 引言目前,基于彩灯控制器的设计的方法很多,有利用单片机控制的、有利用传感器控制的,还有利用EDA控制的等等。在简化设计步骤和节约实验器材的情况下,为了简化硬件电路,也可采用PLC S7-20CN控制的,虽然硬件电路比较简便,但是实验程序更复杂,实验步奏更繁琐;对于编写程序是个比较困难的问题。通常采用单片机控制的方法,即利用单片机的端口来控制彩灯以及音乐播放,在程序编写上更容易编写,程序的可编译性更强。本设计利用AT89S52单片机来实现基于单片机的音乐彩灯控制的设计。用一恒流源供电,当按下“开始”

6、按键时单片机开始输出,彩灯开始闪烁和音乐播放开始同步播放;当按下“停止”按钮时音乐播放停止,彩灯停止闪烁,LCD显示停止。当再次按下“开始”按钮时彩灯开始闪烁和音乐播放开始同步播放。单片机系统通过对采用数据进行扫描,控制D/A转换器转换,并根据按键控制端口输出。此方案思路清楚,电路简单,便于操作1。2 设计方案的比较与选择2.1 设计任务与要求要求将音乐分成四个不同的频段,将彩灯分为四组,各组彩灯颜色不同,每组彩灯包含两个颜色相同的彩灯。(1) 实现音乐彩灯同步控制;(2) 当音乐处于高频段20004000Hz时第一组彩灯根据音乐节拍长短不同决定灯亮的个数;(3) 当音乐处于中频段500120

7、0Hz时第二组彩灯根据音乐节拍长短不同决定灯亮的个数;(4) 当音乐处于低频段50250Hz时第三组彩灯根据音乐节拍长短不同决定灯亮的个数;(5) 当音乐在这些频段之外,要求所有彩灯按照1Hz频率节奏性的闪烁;2.2 方案的论证和选取单片机系统振荡电路按键及下载口电路12864液晶显示电路音乐播放电路彩灯显示电路精密恒流源方案一: 基于单片机的音乐彩灯控制器的设计,是利用单片机编程产生频率分为1.2MHz12MHz的方波,根据实际情况,本设计采用12MHz作为系统的外部晶振,电容值取30pF。经过发射驱动电路放大,使LED灯闪烁,同时音乐同步播放并通过12864液晶屏显示频率2。其系统框图如图

8、1所示。图1 基于单片机的音乐彩灯控制器的设计的系统框图这种以单片机为核心的基于单片机的音乐彩灯控制器的设计;利用振荡电路产生12MHz的时钟信号,在通过单片机输出,单片机系统通过对采用数据进行扫描,控制D/A转换器转换,并根据按键控制端口输出,此方案思路清楚。利用单片机、按键控制音乐彩灯,控制灵敏度高,而且单片机控制方便,操作简单。许多音乐彩灯控制器的设计都采用这种设计方法。方案二:这种测距系统采用CPLD(Complex Programmable Logic Device)器件,运用VHDL编写程序,使用MAX+plusII软件进行软硬件设计的仿真和调试,最终实现测距功能。CPLD器件内部

9、的宏单元是其最基本的模块,能独立地编程为D触发器、T触发器、RS触发器或JK触发器工作方式或组合逻辑工作方式。它的这种特性非常适用于本系统。可将本系统所需要的分频功能、计数功能、振荡器、七段码显示全部由MAX来实现,而只需在外部配上适当的超声波传感器、接收和发送电路,即可组成一个性能稳定、响应速度快且具有显示功能的彩灯控制器。本设计首先进行系统模块的划分,规定每一个模块的功能以及各模块之间的借口,最终将设计分为三大模块:四分频器,四选一控制器,8样彩灯控制器。本设计充分利用VHDL“自顶向下”的设计优点以及层次化的设计概念,从简单的单元入手,逐渐构成复杂的系统。配合使用MAX+plusII开发

10、软件,可集设计输入、设计处理、设计校验和器件编程于一体,集成度高,开发周期短。其系统框图如图2所示。音频控制器显示控制器四分频器12864液晶显示彩灯显示音乐播放四选一控制器音频发生器图2 基于CPLD的音乐彩灯控制器系统框图综合考虑前两种方案,方案一操作方便,控制性更好,功耗低,模块简单,稳定性高,成本低的特点,方案二具有灵敏度高,但结构复杂、功耗比较和高控制不简便的缺点。综合各自的优劣点我们选择方案一。3 硬件电路的设计3.1 单片机系统设计框图本文所设计的基于单片机的音乐彩灯控制器的设计主要由AT89S52单片机、时钟电路、复位电路、按键控制电路、下载口电路、喇叭声音电路、显示电路、直流

11、稳压电源等硬件电路部分以及相应的软件部分构成。首先由单片机驱动产生12MHz晶振,在单片机片内有一个高增益的反相放大器,反相放大器的输入端为XTAL1,输出端为XTAL2,由该放大器构成的振荡电路和时钟电路一起构成了单片机的时钟方式。由单片机驱动后把结果输出到LED彩灯、小喇叭和12864液晶屏上。由编程可以实现音符频率表、音名以及半音频率表的确定和分配。可以将声音分为高音(2KHz4KHz)、中音(500Hz1.2KHz)以及低音(50Hz250Hz)三等,故可以分配彩灯在不同的频率段实现闪烁;同时当在划定频率外时实现彩灯以1Hz的频率节奏闪烁;从而可以满足设计的要求,达到设计的标准3。根据

12、要求并综合以上各方面因素,采用AT89S52单片机作为主控制器,采用按键来控制音乐以及彩灯的开始、暂停和停止。基于单片机的音乐彩灯控制器的单片机最小系统如下图3所示:图3 基于单片机的彩灯控制器的设计的设计框图3.2 单片机外围电路当使用单片机的内部时钟电路时,单片机的XATL1和XATL2用来接石英晶体和微调电容,晶体一般可以选择1.2MHz12MHz,电容选择30pF左右。我们选择晶振为12MHz,电容30pF。在系统上电的瞬间,RST与电源电压同电位,随着电容的电压逐渐上升,RST电位下降,于是在RST形成一个正脉冲。只要该脉冲足够宽就可以实现复位,即=RC20ms。一般取R1K,C22

13、uF。当人按下按钮S1时,使电容C5通过R1迅速放电,待S1弹起后,C再次充电,实现手动复位。R1一般取10K。我们通过P2.0来启动控制,程序中通过查询P2.0的电平来检测是否按键被按下,当按下按键时P2.0为低电平,单片机通过查询到低电平开始音乐输出和彩灯,当松开按键,P2.0即为高电平,在软件中通过软件延时来消除按键的机械抖动。图4 单片机外围电路3.3 时钟电路(1) 在单片机片内有一个高增益的反相放大器,反相放大器的输入端为XTAL1,输出端为XTAL2,由该放大器构成的振荡电路和时钟电路一起构成了单片机的时钟方式。根据硬件电路的不同,单片机的时钟连接方式可分为内部时钟方式和外部时钟

14、方式。我们采用内部时钟方式,如图4所示:图5 晶振电路(2) 在内部方式时钟电路中,必须在XTAL1和XTAL2引脚两端跨接石英晶体振荡器和两个微调电容构成振荡电路,C6和C7取31pF左右,晶振的频率取值1.2MHz12MHz。根据实际情况,本设计采用12MHz作为系统的外部晶振,电容值取30pF4。3.4 复位电路我们在用按键控制时,为了避免单片机程序错误而导致的错误输出,从而加入复位电路,对任意的情况都能够通过复位按键使电路复位。单片机复位是使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作。无论是单片机刚开始接上电源时,还是断电后或者发生故障后都要复位。所以,

15、必须弄清楚单片机复位的条件、复位电路和复位后的状态。单片机复位的条件是,必须使RST引脚(9脚)加上持续两个机器周期(即24个振荡周期)的高电平。例如,若时钟频率为12MHz,每机器周期为1us,则只需2us以上时间的高电平。在RST引脚出现高电平后的第二个周期执行复位。单片机常见的复位电路有上电复位电路和按键复位电路。为了方便系统的硬件初始化,我们采用按键复位电路。如图6所示:图6 复位电路3.5 按键电路由于要达到设计要求,同时也为了提高设计的课操作性;选用按键来控制输入从而可以手动的对音乐彩灯进行控制。按键S2与单片机P2.0端口连接是“开始”按键;按键S3与单片机P2.1端口连接是“暂

16、停”按键;按键S3与单片机P2.2端口连接是“停止”按键。如图7所示。图7 按键电路3.6 ISP下载口电路下载口电路采用了ISP下载口,能快速下载和更换单片机中的程序,从而满足和达到实验的要求下载口的1脚与单片机的P1.5相连接,下载口的2脚与VCC相连接,下载口的3脚与单片机的相连接,下载口的5脚与单片机的相连接,下载口的7脚与单片机的P1.7相连接,下载口的9脚与单片机的P1.6相连接,下载口的4、6和8脚与GND相连接。下载电路采用DIP10插座;其插座的管脚如图8示,DIP10管脚功能如表1所示5。图8 按键下载口电路表1 DIP10管脚使用说明AT89ISP引脚CPU端说明AT89

17、ISP引脚CPU端说明1SCK时钟信号5RST复位端2VCC电源9MOSI输出信号3MISO输入信号10GND地线4GND地线3.7 LED彩灯显示电路LED数码显示管有两种,一种是共阳极数码管,另一种是共阴极数码管,其内部是由八个阳极或阴极相连接的发光二极管组成,二者原理不同但功能相同。共阴极LED数码显示块的发光二极管阴极连接在一起,形成该模块的公共端(通常称为位选端),因此称为共阴极LED数码显示器,8个数码管的另一端通常称为段选端,当显示器的公共端接低电平,某个发光二极管的阳极接高电平时,该发光二极管被点亮;而共阳极LED数码显示管则形成共阳极LED数码显示块的公共端,该公共端必须接高

18、电平,同理在共阳极LED数码显示块中如某个发光二极管的阴极为低电平时,该发光二极管被点亮7。AT89S52是采用12MHZ晶振获得稳定的时钟频率。采用12MHz高精度的晶振,以获得较稳定的时钟频率,从而使输出的频率更为稳定。显示电路采用简单实用的8位共阳LED数码管。单片机系统显示电路如图9所示。图9 LED显示电路3.8 12864液晶电路3.8.1 12864液晶简介12864是128*64点阵液晶模块的点阵数简称。该点阵的屏显成本相对较低,适用于各类仪器。液晶模组的驱动应遵照规定的额定指标,避免故障及永久损坏。液晶显示屏焊接温度:280C+10C 焊接时间3-4秒6。液晶的电气特性如表2

19、所示。表2 12864液晶的电气特性 项目符号最小典型最大单位电源电压VDD-VSS4.755.05.25V液晶驱动电压VDD-VADJTa=0-11.0-11.5-12.0Ta=25-10.5-11.0-11.5Ta=50-10.0-10.5-11.0 液晶的背光驱动电流ILED-6080液晶驱动电流IEE-1.0-3.8.2 12864液晶显示屏管脚号及作用液晶的1脚VSS接电源,为液晶提供电流;17脚为复位端,与单片机的27脚连接,通过单片机程序来控制液晶显示的复位;液晶20脚接地线;714脚与排阻的29脚连接。如表3所示。 表3 12864液晶显示屏的管脚号及作用管脚号管脚名称电平管脚

20、功能描述1VSS+5V电源地2VCC3.0+5V电源正3V0-对比度(亮度)调整4RS(CS)H/LRS=“H”,表示DB7DB0为显示数据RS=“L”,表示DB7DB0为显示指令数据5R/W(SID)H/LR/W=“H”,E=“H”,R/W=“L”,E=“HL”, 6E(SCLK)H/L使能信号7DB0H/L三态数据线8DB1H/L三态数据线9DB2H/L三态数据线10DB3H/L三态数据线11DB4H/L三态数据线12DB5H/L三态数据线13DB6H/L三态数据线14DB7H/L三态数据线15PSBH/LH:8位或4位并口方式,L:串口方式16NC-空脚17/RESETH/L复位端,低电

21、平有效续表 12864液晶显示屏的管脚号及作用管脚号管脚名称电平管脚功能描述18VOUT-LCD驱动电压输出端19AVDD背光源正端(+5V)20KVSS背光源负端在这个设计中由于采用的是并行,故直接将PSB连接高电平;VSS与LED_K端接地。液晶的数据位DB0DB7分别接在排阻U2的A0A7上;复位端17脚和单片机的复位端连接。12864液晶屏显示部分电图如图10所示。图10 12864液晶屏显示电路3.9 音乐播放电路为了提高声音电路的功率并保持稳定在喇叭电路中增加了一个8550三极管,并增加了一个阻值比较大的电阻来增加电路的电流。音乐播放电路如图11所示。图11 喇叭电路3.10 直流

22、稳压电源电路电源电路采用普通可调电源供电,电源由外接端口连接5V电压参考源,可满足本系统单片机、彩灯和小喇叭的供电要求。其中采用两个电容并联,达到滤波的作用,以便得到稳定的电流。如下图12。图12 稳压电源电路4 系统软件设计硬件电路一旦确定,大体的功能框架也形成了。这时我们需要在硬件平台上编写软件程序,完成各部分硬件的控制和协调。系统功能是由软硬件共同实现的,由于软件的可伸缩性,最终实现的系统功能可强可弱,差别可能很大。因此,软件是本系统的灵魂。音乐彩灯控制器的软件设计主要是为了实现彩灯与音乐同步控制。基于单片机的音乐彩灯控制器的设计的软件设计主要由主程序、复位程序、音频及半音程序、按键中断

23、程序及显示子程序组成。下面分别对主程序、音频及半音程序、按键中断程序和显示程序逐一作介绍7。4.1 单片机系统设计主程序流程图本设计选用AT89S52的单片机来控制歌曲播放和歌词显示。采用直流电源为其提供基准电压+5V,采用12864LCD显示,小喇叭播放音乐8。通过软件程序与按键输入来控制输入与输出。当电源接通时,程序开始初始化。当开始键按下时单片机的21脚输入低电平,程序启动;音乐开始播放彩灯交替移动点亮;随即进入通过频率变化范围中断若在整体频率范围内则继续程序;若不在整体频率范围内则所有彩灯1Hz闪烁。当程序进入高频判定时,若在高频段内则使高频段灯亮,液晶显示当前频率的大概值;若不在高频

24、段范围内则进入中频判定,判定结果同高频;当程序进入低频判定时,若满足频率判定要求则低频段灯亮,液晶显示当前频率的大概值;若不满足判定要求则程序结束。图13为主要程序流程图。开始初始化按键按下?播放音乐Y在高频段内?在中频段内?高频段灯亮并且液晶显示当前频率大概值Y中频段灯亮并且液晶显示当前频率大概值Y在低频段内?低频段灯亮并且液晶显示当前频率大概值Y所有彩灯1Hz闪烁结束NNNN图13主程序流程图音乐彩灯控制器的主程序如下。#include #include #pragma ot(0)#define uint unsigned int#define uchar unsigned char#de

25、fine io_LCD12864_DATAPORT P0;#define SET_DATA io_LCD12864_RS = 1 ;#define SET_INC io_LCD12864_RS = 0 ;#define SET_READ io_LCD12864_RW = 1 ;#define SET_WRITE io_LCD12864_RW = 0 ;#define SET_EN io_LCD12864_EN = 1 ;#define CLR_EN io_LCD12864_EN = 0 ;#define OSFREQ 11059200 /所使用的晶振频率sbit io_LCD12864_RS

26、= P23 ;sbit io_LCD12864_RW = P24 ;sbit io_LCD12864_EN = P25 ;sbit BEEP_PWR=P27;sbit P3.0=P30;sbit P3.1=P31;sbit P3.2=P32;sbit P3.3=P33;sbit P3.4=P34;sbit P3.5=P35;sbit P3.6=P36;sbit P3.7=P37;sbit P2.0=P20;uchar FreqSandH,FreqSandL; /*产生方波的定时器的初值*/uchar timer1cnt; /*定时器延时计数 */uchar timer1cntflg; /*定时

27、器定时完成标志 */uchar g_PL=0, g_Pai=0;uchar gp_Freq16=当前频率值: ;uint g_Freq=0;/*音符频率表*/uint code notefreq= 523, 587, 659, 698, 784, 880, 988, 1047,1175,1319,1396,1568,1760,1976, 2093,2349,2637,2793,3136,3520,3961;/*音名*/uchar code notename=c,d,e,f,g,a,b, 1,2,3,4,5,6,7, C,D,E,F,G,A,B,0;/*半音频率表*/uint code half

28、notefreq= 554, 622, 740, 831, 933, 1109,1245,1480,1161,1865, 2218,2489,2960,3322,3729;/*音名*/uchar code halfnotename=c,d,f,g,a, 1,2,4,5,6, C,D,F,G,A,0;/*声明*/void Dis_PL(uchar *p,unit i);void v_Lcd12864CheckBusy_f( void );void v_Lcd12864SendCmd_f( unsigned char byCmd );void v_Lcd12864SendData_f( unsig

29、ned char byData );void v_DelayMs_f( unsigned int nDelay );void v_Lcd12864Init_f( void );void v_Lcd12864PutString_f( unsigned char x, unsigned char y, unsigned char *pData );4.2 音乐程序主要利用单片机的频率发生器产生方波,来产生不同频率的音乐。10,具体程序如下。void main(void) uint i; TMOD=0x11; ET1=1; ET0=1; EA=1; v_Lcd12864Init_f() ;while

30、(1)if(P1.0=0)if(i=1)i=0; /启动关闭按键if(i=0)i=1;if(i=1)/Play(1_1_5_5_6_6_54_4_3_3_2_2_15_5_4_4_3_3_2 5_5_4_4_3_3_21_1_5_5_6_6_5 4_4_3_3_2_2_1); /满天都是小星星v_Lcd12864PutString_f( 0,0, 曲目:两只老虎) ;Play(1_2_3_1_1_2_3_1_3_4_5 3_4_55=6=5=4=3_1_ 5=6=5=4=3_1_ 2_g_12_g_1); /两只老虎/Play(a-a1-a2-a-b1b13-2a-a-a-33-12-a-b1

31、b13-21-1-5-55432-a-b1-12123-3- 1-1_1_1235-4-32-b3-2a-a- a-66565-4-34-56543-3-1-1_1_1235-4-32-b3-2a-a-); /山楂树v_Lcd12864PutString_f( 0,0, 学习雷锋好榜样) ;Play(5._3=2_1_5-12_3_g-5.3_23_5_1a_3_2-356.5_352._3=2_1_a32_21_a1g05.3_6562_3_50); /学习雷锋好榜样/Play(C-53.2_1530C-53.2_1650 5_C6_5_C05_C6_5_6_0_3_C.6_53C.6_C0

32、C53_6_5_3_2.1_30_5_C56_C_6_5_33_1_6-60C._C=5_5_2._3=5_5_6.5_6DC6_5_C6_5_33_5_C-);/ Play(3- 2_3_4_3 3- 2_3_4_3 3- 4- 3_4_5_4 4- 3-2- 3- 2_3_4_3 3- 2_3_4_3 3-4- 3_4_5_4 4- 3-2);/许巍星空前奏v_Lcd12864PutString_f( 0,0, 许巍 时光) ;Play(543 3_2_1_2_30 g53 3_2_1_2_30 a65 4_3_2_3_4 1 b a g);/许巍-时光 SoundOff(); /*音符频

33、率表*/uint code notefreq= 523, 587, 659, 698, 784, 880, 988,1047,1175,1319,1396,1568,1760,1976,2093,2349,2637,2793,3136,3520,3961;/*音名*/uchar code notename=c,d,e,f,g,a,b, 1,2,3,4,5,6,7, C,D,E,F,G,A,B,0;/*半音频率表*/uint code halfnotefreq= 554, 622, 740, 831, 933, 1109,1245,1480,1161,1865, 2218,2489,2960,3

34、322,3729;/*音名*/uchar code halfnotename=c,d,f,g,a, 1,2,4,5,6, C,D,F,G,A,0;4.3 定时器子程序设计序4.3.1 定时器工作原理当定时器设置为定时方式时,计数器对内部机器周期计数,每过一个机器周期,计数器加1,直至计满溢出。定时器的定时时间与系统的振荡频率紧密相关,实验单片机系统采用12MHz晶振,计数周期为1s,适当选择定时器的初值可获取各种定时时间。4.3.2 定时器特殊功能寄存器定时器的初始化是通过定时器的方式寄存器TMOD和控制寄存器TCON完成的。(1) 定时器的方式寄存器TMODTMOD为定时器0、定时器1的工作

35、方式寄存器,其格式如表4所示。表4 定时器工作方式寄存器GATEC/T M1 M0 GATE C/T M1 M0 TMOD的低四位为定时器0的方式字段,高四位为定时器1的方式字段,它们的含义完全相同。各位的意义如下。 M1M0:工作方式选择位,设最大计数值为M。具体功能如表5所示。表5 M1M0工作功能描述M1M0工作方式功能描述最大计数值00方式013位定时器/计数器M=213=819201方式116位定时器/计数器M=216=6553610方式2常数自动重装的8位定时器/计数器M=28=25611方式3仅适用于T0,分为两个8位定时器/计数器。定时器0分成两个8位计数器,所以两个定时器的M

36、值均为256。 C/T:定时器/计数器的选择位。C/T =0工作于定时方式,C/T =1 工作于计数方式。 GATE:门控位。当GATE=0时,只要有TRi=1,定时器/计数器就开始工作,称为软启动。当GATE=1时,只有INTi引脚和TRi引脚同时为1时,定时器/计数器才开始工作,主要用于测量INT引脚上高电平脉冲的宽度,称为硬启动。(2) 定时器控制寄存器TCONTCON的作用是控制定时器/计数器的启动、停止,标志定时器的溢出和中断情况,其格式如表6所示。表6 定时器控制寄存器TR0TR1TF0TF1TR0TR1TF0TF1 TF1(TF0):定时器/计数器T1(T0)的溢出标志。当T1(

37、T0)被允许计数后,T1(T0)从初始值开始加1计数,最高位产生溢出时,该位由内部硬件置位,并向CPU请求申请中断。当CPU响应,由硬件清零。 TR1(TR0):定时器/计数器T1(T0)的运行控制位。由软件置1或清零来启动或关闭定时器/计数器。本程序通过单片机的T2产生中断,来调用歌词显示程序和彩灯程序,达到一种同步的效果。按下复位键后,将从头开始。软件分为两部分,主程序和中断服务程序,主程序完成初始化工作、进入定时中断程序。定时中断服务子程序完成对彩灯和音乐的控制,外部中断服务子程序主要完成时间值的读取、程序的运算、结果的输出等工作9。定时中断与外部中断流程图分别如图14、15所示。定时中

38、断入口NY显示同步定时器初始化返回按键输入音乐同步图14 定时中断服务子程序流图关外部中断外部中断入口读取输入程序运算结果输出开外部中断返回图15 外部中断服务子程序流图4.3.3 定时器子程序首先我们定义寄存器TMOD=0X01,选择定时器0,定时方式,方式1。本设计采用的12MHz的晶振,所以计数周期为1s。方式1最大计数时间为65536s,这里我们选择定时50ms。所以初值就可以计算:初值 X=65536-50000=15536=3CB0H (公式1)TH0=3CHTL0=B0H (公式2)由于本设计需要使彩灯1Hz的频率闪烁,即需要定时时间为500ms,所以,没完成一次定时,定义一个c

39、ount自加一次,当count计数到10时,使所以彩灯取反。定义好初值以后则打开总开关EA=1和允许中断开关ET0=1,最后启动定时器0,TR1=1。定时器程序如下:/*定时器0用来产生方波*/void timer0int () interrupt 1 TH0=FreqSandH; TL0=FreqSandL; BEEP_PWR=!BEEP_PWR;/*定时器用来进行比较准确的延时*/void timer1int() interrupt 3 TH1=0xe0; TL1=0x00; timer1cnt+; if(timer1cnt=(OSFREQ/1500000l) timer1cntflg=1

40、; TR1=0;void delay(uchar time) uchar i; uint j; for(i=0;itime;i+) for(j=0;j0x900;j+);/* uchar i; for(i=0;itime;i+) timer1cnt=0; timer1cntflg=0; TR1=1; while(!timer1cntflg); */4.4 彩灯显示子程序当检测到不同的音乐频率是彩灯的闪烁样式和个数就会发生变化。高频段时高频段的灯亮,当为1个节拍时3个彩灯全部点亮,当为半拍时2个彩灯点亮,当为1/4拍时1个彩灯点亮。低频段时和中频段时亮灯个数与原理同高频。没有在设定频率范围内时所有彩灯以1Hz的频率闪烁。彩灯子程序如下。/函数名称:led_dis/函数说明:用于显示音乐的led灯 主要是根据频率和节拍来显示不同的效果/输入参数:uint pl,uchar pai/输出参数:无void led_dis(uint pl,uchar pai)uchar i;if(pl500&pl2000&pl4000)i=3;elsei=0;switch

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com