音乐报时电子时钟.doc_第1页
音乐报时电子时钟.doc_第2页
音乐报时电子时钟.doc_第3页
音乐报时电子时钟.doc_第4页
音乐报时电子时钟.doc_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

四川师范大学成都学院电子工程系课程设计报告前言本文的电子钟系统是以单片机(AT89C52)为核心,时钟芯片DS1302、数码管显示驱动芯片MAX7219等元器件组成。具体介绍应用Proteus的ISIS软件进行单片机系统的电子钟设计与仿真的实现方法。该方法既能准确验证所设计的系统是否满足技术要求,又能提高系统设计的效率和质量,降低开发成本,具有推广价值。随着半导体技术的飞速发展,以及移动通信、网络技术、多媒体技术在嵌入式系统设计中的应用,单片机从4位、8位、16位到32位,其发展历程一直受到广大电子爱好者的极大关注。单片机功能越来越强大,价格却不断下降的优势无疑成为嵌入式系统方案设计的首选,同时单片机应用领域的扩大也使得更多人加入到基于单片机系统的开发行列中,推动着单片机技术的创新进步。时钟自从被发明出来以后,就被人们信任及使用,成为人们生活中不可缺少的部分。时钟也在不断的完善提高,越来越精准越来越多样化。随着社会的发展,科学技术的创新,时钟也在一代又一代的改进。各种各样的时钟出现在我们的社会中。因为石英技术有精度高,稳定性好,使用方便等特点,所以大多都使用了石英晶体振荡器。音乐报时时钟在我们的生活中越来越重要,是我们生活正常工作的基础。时钟电路在计算机系统中也起到非常重要的作用。时钟电路是保证计算机系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:DS1302,DS12887,X1203等都可以满足高精度的要求。1.总体设计方案1.1电路原理框图1.1.1电子时钟电路组成框图利用单片机AT89C52作为本系统的中控模块。单片机可把时钟芯片DS1302、数码管显示驱动芯片MAX7219读出来的数据利用软件来进行处理,从而把数据传输到显示模块,把单片机传来的数据显示出来,并且可以实现音乐报时的功能。设计总体框图如图1所示:复位电路时钟电路STC89C52控制电路显示电路蜂鸣器电路键盘电路图1 总体框图1.1.2各部分的作用及要求键盘电路:按键电路键盘是人与单片机打交道的主要设备,按键的读取容易引起误动作。可采用软件去抖动的方法处理,软件的触点在闭合和断开的时候会产生抖动,这时触点的逻辑电平是不稳定的,如不采取妥善处理的话,将引起按键命令错误或重复执行,这个电路的工作原理是采用程序扫描的方式检测某个按键状态在这里采用软件延时的方法来避开抖动,延时时间为10ms 。复位电路:使单片机程序计数器清零。蜂鸣器:发声。 时钟电路:为单片机提供时钟。 显示电路:显示时间。 单片机:控制整个电路。1.2 电子时钟的电路原理图该系统的语音模块电路原理图是语音采用简单的单片录放音电路,录放周期8分钟。其音频信号输送到单片机电路的音频信号输入口径放大耦合到扬声器。电路原理图如图2所示:图2 电路原理图数字时钟一般由走时、显示和调整时间3项基本功能组成,这些功能在单片机时钟里主要由软件设计体现出来,其中,走时部分利用单片机的定时器/计数器产生的中断。本设计设置定时器T0工作在模式1状态下,设置每隔50ms中断一次,中断20次正好是1s。中断服务程序里记载这中断的次数,中断20次为1s,60s为1分,60分为1小时,24小时为1天。用单片机定时器T1按时输出高低电平,因为单片机演奏一个音符,是通过引脚周期性的输出一个特定频率的方波。这就需要单片机在半个周期内输出低电平、另外半个周期输出高电平,周而复始。周期是频率的倒数,可以通过音符的频率计算出周期,演奏时,要根据音符的不同,把对应的半个周期的定时时间初始值,送入定时器T1,再由定时器按时输出高低电平。另外,音乐的节拍是由延时实现的。在用单片机音乐演奏程序中,包括了两个数据表,其中存放了事先算好的各种音符频率所对应的半周期的定时时间初始值。有了这些数据,单片机就可以演奏低音、中音、高音,三个八度共21个音符。演奏乐曲时,就根据音符的不同数值,从表中找到定时时间初始值,送入定时器即可控制音调。通过调用延迟来实现节拍数。 时钟的显示是使用2个四位一体LED数码管来显示时、分、秒,其软件设计原理是:由中断产生的秒、分、小时数据,经过转换子程序转换成适应LED数码管显示的数据,并通过单片机的输出功能输入到数码管显示器,在通过显示器扫描程序,显示出时钟的走时时间。调整时钟时间是利用了单片机的输入功能,把按键开关作为单片机的输入信号,通过检测被按下的按键,从而执行赋予该开关调整时间功能。单片机的最小系统电路包括时钟电路和复位电路,所设计系统中,时钟电路采用内 部振荡方式,所得的时钟信号比较稳定,复位电路作用是使单片机 的片内电路初始化,使单片机从一种确定的状态开始运行。复位电路采用2种基本形式:上 电复位、开关复位。2单元模块设计2.1 MCS51单片机控制电路本数字电子钟设计采用STC89C52单片机芯片作为中央控制器,实现信号的输出、LED的显示及相关的控制功能。如图3所示:图3 单片机最小系统STC89C52具有以下标准功能:8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,2个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,STC89C52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。引脚结构:VCC:电源;GND:地。P0 口:P0口是一个8位漏极开路的双向I/O口。作为输出口时,每1位最多可以驱动8个TTL的输入端口。当向P0端口的每1位写“1”时,则P0口可作为输入端口。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0具有内部上拉电阻。在Flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,作为输出口时,每1位最多可以驱动4个TTL的输入端口。当向P1端口的每1位写“1”时,P1口的8个位电平被内部上拉电阻拉高,此时可以作为输入口使用。P2 口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,作为输出口时,每1位最多可以驱动4个TTL的输入端口。当向P2端口的每1位写“1”时,P1口的8个位电平被内部上拉电阻拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在访问外部程序存储器或用16位地址读取外部数据存储器时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用8位地址访问外部数据存储器时,P2口输出P2锁存器的内容。在Flash编程和校验时,P2口也接收高8位地址字节和一些控制信号整时钟时间是利用了单片机的输入功能,把按键开关作为单片机的输入信号,通过检测被按下的按键,从而执行赋予该开关调整时间功能。表1 P3口的所有功能脚引脚号第二功能P3.0RXD(串行输入)P3.1TXD(串行输出)P3.2INT0( 外部中断0)P3.3INT1( 外部中断1)P3.4T0(定时器0 外部输入)P3.5T1(定时器1 外部输入)P3.6WR(外部数据存储器写选通)P3.7RD( 外部数据存储器写选通)P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,作为输出口时,每1位最多可以驱动4个TTL的输入端口。当向P2端口的每1位写“1”时,P1口的8个位电平被内部上拉电阻拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。P3口亦作为STC89C52特殊功能(第二功能)使用,如表1所示。在flash编程和校验时,P3口也接收一些控制信号。如表1所示。RST: 复位输入。晶振工作时,RST脚持续2 个机器周期高电平将使单片机复位。看门狗计时完成后,RST 脚输出96 个晶振周期的高电平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。ALE/PROG:地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8 位地址的输出脉冲。在Flash编程时,此引脚(PROG)也用作编程输入脉冲。在一般情况下,ALE 以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过如果需要,通过将地址为8EH的SFR的第0位置 “1”,ALE操作将无效。这一位置 “1”,ALE 仅在执行MOVX 或MOVC指令时有效。否则,ALE 将被微弱拉高。这个ALE 使能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。PSEN:外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。当STC89C52从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。EA/VPP:访问外部程序存储器控制信号。为使能从0000H 到FFFFH的外部程序存储器读取指令,EA必须接GND。为了执行内部程序指令,EA应该接VCC。在flash编程期间,EA也接收12伏VPP电压。XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。XTAL2:振荡器反相放大器的输出端。2.2 电源电路 系统的芯片需要+5V的工作电压,所需输出的电流比较大,而电脑USB可以提供额定功率为5V/500mA的稳定电源供USB设备使用。采用普通的USB线连接微型计算机作为系统电源,虽然功率上稍大于系统需要,但不需要更换电源,并且比直流稳压电源更轻便,可随时使用、调试系统。电源电路如图4所示:图4 电源电路2.3 按键电路键盘是人与单片机打交道的主要设备,按键的读取容易引起误动作。单片机组成的小系统中,有的需要人机交互功能,按键是最常见的输入方式。最常见的按键电路大致有,一对一的直接连接和动态扫描的矩阵式连接两种。一对一的直接连接就是一个按键直接对应一个CPU的输入口左右两个电路作用一样,区别是左边CPU的输入端常态为高电位,按下按键时为低电位;右边的常态为低电位,按下按键是高电位。 这样的电路简单直接,一个按键独占一个端口,在按键数量较少端口数量富裕时可以直接使用。但很多场合需要的按键数比较多,要尽量少地占用端口就必须使用矩阵式的按键链接可采用软件去抖动的方法处理,软件的触点在闭合和断开的时候会产生抖动,这时触点的逻辑电平是不稳定的,如不采取妥善处理的话,将引起按键命令错误或重复执行,在这里采用软件延时的方法来避开抖动,延时时间为10ms 。当按下复位按键时,RST端产生高电平,使单片机复位。复位后,其片内各寄存器状态改变,片内RAM内容不变。由于单片机内部的各个功能部件均受特殊功能寄存器控制,程序运行直接受程序计数器PC指挥。各寄存器复位时的状态决定了单片机内有关功能部件的初始状态。图5 按键电路本设计采用独立式键盘,独立式按键是直接用I/O口线构成的单个按键电路,如图5所示,其特点是每个按键单独占用一根I/O口线,每个按键的工作不会影响其它I/O口线的状态。但当所需按键数量多,会占用过多的I/O口线。键盘接到单片机的P1口上,当键按下时,在其相应的口线上产生低电平信号,键松开时仍为高电平信号。如图5所示。2.4 时钟电路时钟的显示是使用2个四位一体LED数码管来显示时、分、秒,其软件设计原理是:由中断产生的秒、分、小时数据,经过转换子程序转换成适应LED数码管显示的数据,并通过单片机的输出功能输入到数码管显示器,在通过显示器扫描程序,显示出时钟的走时时间。 STC系列单片机的时钟具有丰富的时钟源,内部从0M到80M的时钟源,可以通过编程熔丝位来选择,外接晶振电路如图6所示,由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器并产生振荡时钟脉冲。本设计采用的是内部振荡方式,为了获得精确的计时,晶体振荡器选用11.0592MHz的型号,两个30pf的C1,C2电容起到辅助振荡作用。时钟电路一般由晶体震荡器、晶震控制芯片和电容组成,采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。采用普通32.768kHz晶振。 本设计中定时方式为工作方式1,即最小定时时间为1us,最大定时时间约为65.5ms。如图6所示:图6 单片机时钟电路2.5 复位电路 复位是单片机的硬件初始化操作。经复位操作后,单片机系统才能开始正常工作。当STC系列单片机的复位引脚RST(全称RESET)出现大于最小脉冲的低电平时,单片机就执行复位操作。如果RST持续为低电平,单片机就处于循环复位状态。在电路中,使用电阻给电容充电,使电容的电压缓慢上升一直到VCC,在还没有到VCC时,芯片复位脚近似低电平,但是芯片复位,接近VCC时,芯片复位脚近高电平,导致芯片停止复位,此时复位完成,整个电路循环运行.这个电路就叫做复位电路。它主要为了能保证微型机系统得到稳定可靠的工作。 根据应用的要求,复位操作通常有两种基本形式:上电复位和开关复位。上电复位要求接通电源后,自动实现复位操作。复位电路如图7所示。电阻R1、R2和C1构成复位电路,按下复位键可实现手动复位。单片机的复位操作使单片机进入初始化状态,其中包括使程序计数器PC0000H,这表明程序从0000H地址单元开始执行。单片机冷启动后,片内RAM为随机值,运行中的复位操作不改变片内RAM区中的内容,32个通用寄存器复位后的状态为确定值。如图7所示:图7 复位电路2.6 数码管显示电路数码管显示电路是本设计最核心的部分。四位一体数码管的内部结构,四位一体数码管用于动态扫描,即把数码管显示数据的段控码分时送到其对应的段控端。当一个段控码被送到段控端时,显示此段控码数据的数码管,它的位控端置有效电平,数码管点亮;而其他数码管的位控端送无效电平,数码管不亮。持续点亮一段时间,再送其它的段控码,依次把显示段控码的数码管,使其位控端为有效电平,其他数码管的位控端为无效电平,就这样数码管依次被点亮。利用动态扫描显示使我们看到一幅稳定画面的实质是利用了人眼的暂留效应和发光二极管发光时间的长短, 发光的亮度等因素.通过实验发现, 当扫描刷新频率(发光二极管的停闪频率) 为50Hz, 发光二极管导通时间1m s 时, 显示亮度较好, 无闪烁感。 四位一体数码管共十二个引脚,从数码管的正面看,它以第一脚为起点,逆时针排列的。断电存储数据的功能:当时钟在运行时,它会实时将当前时间存入一个AT24C02存储器中,在每次启动时它会首先从该存储器中读取数据,晶采用显示容量为2行16个字的1602液晶,1602采用标准的16脚接口,内部的字符发 生存储器(CGROM)已经存储了160个不同的点阵字符图形,每一个字符都有一个固定的这样将保证时钟在断电后数据不会丢失。再接通电源时,数据就不会丢失。显示电路由两个5461BS四位一体共阳数码管和S9012 PNP三极管组成。如图8所示:图8 数码管显示电路2.7 蜂鸣器电路采用蜂鸣器闹铃,当到设定时间时,单片机向蜂鸣器送出低电平,蜂鸣器响铃。采用蜂鸣器闹铃结构简单,只需要单路信号控制,发出的闹铃声音可以根据响和不响的不同的软件延时时间来控制,当然也能发出音乐声音。蜂鸣器电路由一个1k限流电阻、一个PNP三极管S9012组成。STC89C52单片机内有2个16位定时器/计数器T0、T1,它们的工作方式、定时时间、启动方式等均可以通过程序来设置和改变。当定时器/计数器设置为定时工作方式时,计数器对内部机器周期计数,计数脉冲输入信号由内部时钟提供,每过一个机器周期,计数器增1,直至计满溢出。定时器的定时时间与系统的振荡频率紧密相关,单片机的一个机器周期由12个振荡脉冲组成,因此,计数器的计数频率为振荡器频率的1/12。其定时时间由计数初值和所选择的计数器的长度来确定由89C52的P3.7口控制蜂鸣器电路,定时时间到, P3.7输出一定频率脉冲时,蜂鸣器将发出响声;一分钟后停止。电路如图9所示:图9 蜂鸣器电路3软件设计3.1 主程序流程框图在进行微机控制系统设计时,除了系统硬件设计外,大量的工作就是如何根据每个生产对象的实际需要设计应用程序。因此,软件设计在微机控制系统设计中占重要地位。对于本系统,软件更为重要。在单片机控制系统中,大体上可分为数据处理、过程控制两个基本类型。数据处理包括:数据的采集、BCD转换等。过程控制程序主要是使单片机按一定的方法进行计算,然后再输出,以便控制生产。单片机的软件软件设计通常要考虑以下几点:(1)根据软件功能要求,将软件划分为若干个相对独立的部分,设计出合理的总体结构,使软件开发清晰、简洁、流程合理;(2)培养良好的编程风格,考虑结构化程序设计、实行模块化、子程序化。这样不仅便于调试、链接,又易于移植和修改;(3)建立正确的数学模型,并通过仿真提高性能,以选取合适的参数;(4)绘制程序流程图;(5)为程序加入注视,提高可读性;(6)注意软件的抗干扰设计,提高体统可靠性。本系统软件采用模块化结构,由主程序显示子程序、延时子程序按键扫描子程序按键处理子程序、定时器T0中断服务程序构成进入正常走时。主程序流程框图如图10所示:YN开始初始化部分中断初始化开启定时器0调按键处理子程序按键扫描是否有键按下?调显示子程序图10 主程序流程框图3.2 中断服务程序流程框图中断服务程序流程图如图11所示:Y是否满24h?显示缓冲单元清0返回NY是否满60m?小时加1分值加1N计数器重新加载循环次数加1是否满1s?是否满60s?秒值加1N开始图11 中断服务程序流程图3.3 显示子程序流程图显示子程序流程图如下图图12所示:开始读数据,分离高位和低位置段码偏移量和位选码查表并送出显示延时1ms,并指向下一个偏移量8个数码管显示完?YESNO图12 显示子程序流程图3.4 按键扫描子程序流程图按键扫描子程序流程图如图13所示:开始延迟10ms闭合状态?结束调按键处理子程序序有按键按下?NONOYESYES 图13 键扫子程序流程图3.5 按键处理子程序流程图按键处理程序流程图如图14所示:开始开关1按下?模式值加1开关4按下?开关3按下?开关2按下?模式3模式2指示灯开关闹铃开关模式4模式1小时加1分钟加1秒钟加1闹铃时加1闹铃分加1小时减1分钟减1秒钟减1模式3模式2模式4模式1闹铃时减1闹铃分减1模式5模式5结束图14 按键处理程序流程图4.系统功能(1)用四个电位按键来实现对电子时钟的调试工作,当按第一下总控键时进入调时状态,时位闪烁,可以用加一键和减一键对时进行调整,在调整时秒正常运行;当按第二下总控键时时钟进入调分设置,分位闪烁,可以用加一键和减一键对分进行调整,另外有一个时钟控键来实现闹钟是否开启;当按第三下总控键时时钟进入秒设置,秒位闪烁,以用加一键和减一键对秒进行调整;当按第四下总控键时,时钟进入闹钟调整模式,闹钟时位闪烁,可对其进行加减;当按第五下总控键时,闹钟分位闪烁,可对其进行加减;当按第六下总控键时,时钟退出调整模式,进入正常走时。(2)用两个四位数码管来实现设计的显示部分,其演示模式是: 时时-分分-秒秒。该数码管组合的功能管脚是八个位选择连接芯片的P2引脚,八个显示管位并联再接入到芯片P0引脚。从而在功能上区分开,实现数码管的显示功能。(3)用一个LED灯和电阻组成的简易电路结合设计来实现闹钟状态的指示功能,闹钟开时,LED灯亮,而闹钟关时,LED灯灭。(4)用一个蜂鸣器和三极管等配件组成一个闹钟电路,再与芯片的P3.7引脚连接。当时钟到设定的报时点时便会发出音乐来实现闹钟功能。(5)用一个按键和其他部件组成的复位电路与芯片连接来实现整个程序及硬件的重新复位功能。5.设计总结程设计是培养学生综合运用所学知识发现提出分析和解决实际问题锻炼实践能力的重要环节是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异。 经过两个星期的课程设计,让我真正的懂得了要设计一个成功的电路,必须要有专业知识的了解,同时要有坚持不懈的努力。在遇到问题时要学会思考和寻求解决的办法,我们设计的产品除了在老师的要求上完成,我们还特别加了一些东西,这些功能是我们对实际生活观察得出的。 通过这次课程设计,加强了我动手、思考和解决问题的能力.现在设计已经做好了,但是控制器控制信号灯不是很好。虽然花了很多的时间,但学到了很多东西。做课程设计的时候,自己把整个书本都看了几遍,增强了自己对知识的理解,很多以前不是很懂的问题现在都已经一一解决了。在课程设计的过程中,我想了很多种方案,对同一个问题(像计数器的接法)都想了很多种不同的接法,运用不同的芯片进行了比较,最后还是采取了上面的方法进行连接,通过这次毕业设计,使我深刻地认识到学好专业知识的重要性,也理解了理论联系实际的含义,并且检验了大二那年的学习成果。6参考文献1 孙慧琴.单片机项目设计教程M.北京: 电子工业出版社,2009.6.23-1432 李萍.AT89S51单片机原理开发与应用M.上海:中国电力出版社,2008.7.34-673 江志红.51单片机技术与应用系统开发案例精选M.北京:清华大学出版社,2008.12.123-1564 曾峰.印刷电路板(PCB)设计与制作M.北京:电子工业出版社,2005.8.234-2565 姜尚坤.单片机综合应用M.上海:上海科技出版社,2007.7.123-1536 崔华.单片机实用技术M.北京:清华大学出版社,2006.7.112-1427 高吉祥.全国大学生电子设计竞赛培训系列教程M.北京:电子工业出版社,2007.5.252-287附录附录1 所需元件列表表2 所需元件列表名称型号数量备注单片机STC89S521块含插座,双列直插式三极管S90129个电阻4708个电阻1k4个电阻10k1个上拉排阻10K1片数码管5461BS2块含两个插座电容30pF2个电解电容22F1个发光二极管2个带锁按钮1个蜂鸣器1个插针38个晶振12MHz1个不带锁按钮5个电解电容10uF1个附录2 PCB图图15 pcb图附录3 程序清单/*课程设计题目: 基于单片机的音乐报时电子时钟设计 设计日期: 2012.12*/#include #define uchar unsigned char#define uint unsigned intuchar code segcode12=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff;/0,1,2,3,4,5,6,7,8,9,-,熄灭uchar code dispbit8=0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe;/数码管位选位uchar buffer8=0,0,0,0,0,0,0,0; /时钟缓存uint hour,min,sec;uint ringhour,ringmin; uint hidhour,hidmin,hidsec,hidringhour,hidringmin;/闪烁显示uint status=0;/模式值sbit music=P36;/闹铃sbit ringled=P37;/闹钟指示灯bit ringoff=1;/闹铃停止uint count=0;/定时器计数uchar keyinput;uchar buf=0xff;/用来存放按键值bit keyrelease=1;uint shansuo=0;uchar timer1h,timer1l,time;/time为节拍(延迟时间),timer1l、timer1h为计数器1初值uchar code freqh=0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC, /低音17 第一个八度 0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,/中音 17 第二个八度 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF;/高音 17 第三个八度uchar code freql = 0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B, /低音1234567 0x8F,0xEE,0x44,0x6B,0xB4,0xF4,0x2D, /中音 1234567 0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16; /高音 1234567uchar code song=5,3,2,3,3,1,4,3,1,5,3,2,3,3,1,4,3,1,5,3,1,5,2,1,6,2,1,7,2,1,1,3,1,2,3,1,3,3,1,4,3,1,3,3,2,1,3,1,2,3,1,3,3,2,3,2,1,4,2,1,5,2,1,6,2,1,5,2,1,4,2,1,5,2,1,3,2,1,4,2,1,5,2,1,4,2,2,6,2,1,5,2,1,4,2,2,3,2,1,2,2,1,3,2,1,2,2,1,1,2,1,2,2,1,3,2,1,4,2,1,5,2,1,6,2,1,4,2,2,6,2,1,5,2,1,6,2,2,7,2,1,1,3,1,5,2,1,6,2,1,7,2,1,1,3,1,2,3,1,3,3,1,4,3,1,5,3,1,3,3,2,1,3,1,2,3,1,3,3,2,2,3,1,1,3,1,2,3,1,7,2,1,1,3,1,2,3,1,3,3,1,2,3,1,1,3,1,7,2,1,1,3,2,6,2,1,7,2,1,1,3,2,1,2,1,2,2,1,3,2,1,4,2,1,3,2,1,2,2,1,3,2,1,1,3,1,7,2,1,1,3,1,6,2,2,1,3,2,7,2,1,6,2,2,5,2,1,4,2,1,5,2,1,4,2,1,3,2,1,4,2,1,5,2,1,6,2,1,7,2,1,1,2,1,6,2,2,1,3,1,7,2,1,1,3,2,7,2,1,6,2,1,7,2,1,1,3,1,2,3,1,1,3,1,7,2,1,1,3,1,6,2,1,7,2,1,0,0,0;/一个音符有三个数字。前为音节、中为第几个八度、后为时长(以半拍为单位)。/*延时函数*/ void delayMS(uint t) uint i; while(t-)for(i=0;i=6) status = 0;shansuo=0; break; case 0xd0:switch(status) /按下加1键,5种模式下加1 case 0x01:if(hour23) hour+; /时加1 else hour=0; break; case 0x02:if(min59) min+; /分加1 else min=0; break; case 0x03:if(sec59) sec+; /秒加1 else sec=0; break; case 0x04:if(ringhour23) ringhour+;/闹钟时加1 else ringhour=0; break; case 0x05:if(ringmin0) hour-; /时减1 else hour=23; break; case 0x02:if(min0) min-; /分减1 else min=59; break; case 0x03:if(sec0) sec-; /秒减1 else sec=59; break; case 0x04:if(ringhour0) ringhour-; /闹钟时减1 else ringhour=23; break; case 0x05:if(ringmin0) ringmin-;/ 闹钟分减1 else ringmin=59; break; break; case 0x70: ringoff=ringoff; /闹钟的开和关 ringled=ringled; /闹钟指示灯开关 break; default:break; /*数码管显示函数*/void display() uchar i,j; if (status=4|status=5) /闹钟调时、调分状态 if(hidringhour4) buffer0=ringhour/10;/ 显示时的十位 buffer1=ringhour%10; / 显示时的个位else buffer0=11; /不显示,即闪烁! buffer1=11;if(hidringmin4) buffer3=ringmin/10; / 显示分的十位 buffer4=ringmin%10; / 显示分的个位else buffer3=11; buffer4=11; for(i=0;i8;i+) P

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论