欢迎来到沃文网! | 帮助中心 分享知识,传播智慧!
沃文网
全部分类
  • 教学课件>
  • 医学资料>
  • 技术资料>
  • 学术论文>
  • 资格考试>
  • 建筑施工>
  • 实用文档>
  • 其他资料>
  • ImageVerifierCode 换一换
    首页 沃文网 > 资源分类 > DOC文档下载
    分享到微信 分享到微博 分享到QQ空间

    基于51单片机的电子闹钟设计.doc

    • 资源ID:841436       资源大小:1.32MB        全文页数:26页
    • 资源格式: DOC        下载积分:20积分
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: QQ登录 微博登录
    二维码
    微信扫一扫登录
    下载资源需要20积分
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,下载更划算!
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于51单片机的电子闹钟设计.doc

    1、 摘要这个设计时基于AT89C2051设计的电子时钟,通过对硬件资源和软件的编写,初步了解设计的思路以及实现过程。电子闹钟是采用电子电路实现对时、分、秒进行数字显示的装置,广泛应用于个人家庭、医院、车站、码头、办公室等公共场所,成为人们日常生活中不可缺少的必需品。本设计基于单片机技术原理,以AT89SC2051作为核心控制器,通过硬件电路的制作及软件程序的编制,设计制作了一种利用四位LED数码管动态扫描显示时间的电子闹钟系统。整个电子闹钟系统主要由时间显示模块、时间设置、闹铃模块、闹钟响应模块。可实现时间显示、时间调整、闹钟设置和整点闹铃功能,具有制作简单、调整方便、稳定性好、便于扩展等特点。

    2、电子时钟还通过对比实际的数字电子时钟,来校正和调整,从而找出误差的来源,尽可能的减少误差,是系统可以达到实际数字电子时钟允许的误差范围内。关键词:单片机AT89SC2051、电子闹钟、LED动态显示I目录摘要I1.引 言12 系统设计12.1 设计要求12.2总设计方案12.2.1 系统实现13系统硬件电路设计23.1时钟电路设计33.2显示模块的设计43.3按键模块的设计53.4复位电路设计53.5闹铃的设计63.6 发光二极管闪烁电路设计64 软件设计74.1 程序流程74.1.1主程序84.1.2 时钟走时模块94.1.3时间设置模块104.1.4闹钟设置模块114.1.5 奏乐模块14

    3、5 系统测试155.1硬件调试155.2 软件调试156 结论15附录16附录1 器件清单16附录2 调试仪器16附录3 原理图和PCB图17附录4 实物18附录5 程序清单18241. 引 言本文主要介绍用单片机内部的定时/计数器来实现电子闹钟的方法,本设计由单片机AT89C2051芯片和LED数码管为核心,辅以必要的电路,构成了一个单片机电子闹钟。实现以24小时制,同时可以设置多个闹钟,闹钟到的时候,会播放音乐,由于课程设计要求,这个设计的秒没有用数码管显示,用LED灯一秒闪烁一次以替代,分和时在数码管显示。单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用

    4、很广、发展很快。单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面。单片机就是在半导体硅片上集成了CPU、存储器和各种接口,这样一块集成电路芯片具有一台计算机的属性,主要应用于测控领域。电子闹钟是现代电子技术在时钟领域的具体实现方式。如今,高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校,数字式电子钟用集成电路计时时,译码代替机械式

    5、传动,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行校对,片灵活性好。12 系统设计2.1 设计要求 本系统设计是基于单片机的电子闹钟。1 能实现走时功能,24小时制。 2能设定闹铃时间,至少能设置两个或者以上的闹铃,即预设定时间,到该时间,电子钟能闹铃唱出歌曲。3用四位共阳极LED数码管来显示时间。4二个发光二极管作为秒表,1S闪烁一次。5. 多段时钟提醒闹铃。2.2总设计方案本系统的功能设计目标应该包括以下几个方面:时间走时模块、时间设置模块、闹钟设置模块、闹钟响应(奏乐)模块和按键功能模块及数码管动态显示模块。电子时钟主要有单片机最

    6、小系统,按键,显示电路等。2.2.1 系统实现 本设计使用单片机AT89C2051作为核心控制器,LED数码管显示时间,按键输入修改值再加上相应的软件设计可实现上电复位、切换模块、调整时间和调整状态等要求及调整相应闹钟。3系统硬件电路设计AT89C2051简介 AT89C2051是一个低电压,高性能CMOS 8位单片机,片内含2k bytes的可反复擦写的只读Flash程序存储器和128 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大AT89C2051单片机可为

    7、您提供许多高性价比的应用场合。AT89C2051是一个功能强大的单片机,但它只有20个引脚,15个双向输入/输出(I/O)端口,其中P1是一个完整的8位双向I/O口,两个外中断口,两个16位可编程定时计数器,两个全双向串行通信口,一个模拟比较放大器。 同时AT89C2051的时钟频率可以为零,即具备可用软件设置的睡眠省电功能,系统的唤醒方式有RAM、定时/计数器、串行口和外中断口,系统唤醒后即进入继续工作状态。省电模式中,片内RAM将被冻结,时钟停止振荡,所有功能停止工作,直至系统被硬件复位方可继续运行。 主要功能特性: 兼容MCS51指令系统 2k可反复擦写(1000次)Flash ROM

    8、15个双向I/O口 6个中断源 两个16位可编程定时/计数器 2.7-6.V的宽工作电压范围 时钟频率0-24MHz 128x8bit内部RAM 两个外部中断源 两个串行中断 可直接驱动LED 两级加密位 低功耗睡眠功能 内置一个模拟比较放大器 可编程UARL通道 软件设置睡眠和唤醒功能 AT89C2051引脚图如下:图3-0 AT89SC2051引脚图3.1时钟电路设计 振荡器和时钟电路用于产生单片机正常工作时所需要的时钟信号。AT89C2051单片机采用CMOS工艺,内部包含一个振荡器,可以用于CPU 的时钟源;也允许采用外部振荡器,由外部振荡器产生的时钟信号来供内部CPU运行使用。3本设

    9、计采用内部时钟模式,需在XTAL1和XTAL2端口加晶振电路,单片机工作速度也是由晶振电路决定的。在晶振电路中,电路中电容C1和C2对振荡频率有微调作用,通常的取值范围3010pF;石英晶体选择12MHz。电路如下图:图3-2 晶振电路设计3.2显示模块的设计LED显示有静态扫描和动态扫描两种,由于本系统要显示四位LED,所以选择的动态扫描方式。所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度足够快,字符才不闪烁。显示器的亮度既与导通电流有关,也与点亮时间和间隔时间的比例有关。调整参数可以实现较高稳

    10、定度的显示。动态显示节省了I/O口,降低了能耗。由于AT89C2051单片机的I/O口的带载能力不强,故本系统选用共阳型的八段LED数码管。P1口传送的是显示段码,P3.2P3.5口传送的是显示位码。P3.0用于控制两个LED灯的选亮。动态扫描周期的确定,所谓动态驱动实际就是分时点亮不同位置的数码管,由于人眼的惰性,当亮度熄灭的时间小于1/25秒时,给人们感觉是亮度没变。每段LED正常显示是的电流为2mA20mA,此处每段LED接330的电阻,则每段LED的电流为数码管的电流为(5-1.8)/470=6.8mA,满足要求。5 电路如图3-5所示:图3-4 数码管显示电路3.3按键模块的设计 独

    11、立式按键是最简单的键盘输入设计,每个键盘单独占用一个I/O口,当按下和释放按键时,输入到I/O口的电平是不一样的。按照端口电平的不同判断是否有按键按下,并执行相应的程序段。6本设计中将4个按键分别接P3.1和P3.2P3.5口。设计中按键解释:SW1:功能按键,在设置闹钟时是确定键,按下即返回时钟走时模块;SW2:数码管闪烁按键,在设置时间时配合SW1返回时钟走时模块;SW3:赋值键,按下一次加一;Sw4:闹钟设置按键,依次按下则显示不同的闹钟时间;电路如下图: 图3-5 按键部分原理图3.4复位电路设计在理论上复位电路的实质是一阶充放电电路,系统上电时该电路提供有效的复位信号RST(高电平)

    12、直至系统电源稳定后撤销复位信号(低电平)。7理论上说,AT89C2051单片机复位引脚只要外加2个机器周期的有效信号即可复位,即只要保证tRC2M(机器周期)。由于本系统所用的晶振为12M,则单片机的一个机器周期为1uS,所以可选电解电容为104,点电阻为10K。则高电平时间为左右,满足要求。单片机运行期间,还可以利用按键完成复位。由于设计的是时钟,故没有设置按键复位,即上电时,时钟就会自动上电复位,其复位电路如下图所示:图3-6 按键上电复位电路 3.5闹铃的设计本块实验板,是通过无源蜂鸣器其基本工资原理: 无源蜂鸣器是靠压电效应的原理来发声的,压电材料,一般常见的是各种压电陶瓷. 这种材料

    13、的特别之处在于,当电压作用于压电材料时,就会随电压和频率的变化产生机械变形.另一方面,当振动压电陶瓷时,则会产生电荷.就是说这种材料能把机械变形和电荷相互转化,压电式蜂鸣器里面的起振片,就是一种压电陶瓷.如上所述,要让它振动,除了压电陶瓷本身,还需要适当大小和频率变化的电压作用于压电陶瓷.压电式(有源)蜂鸣器内部带有多谐振荡器,可以产生 1.52.5kHZ 的电压信号. 由此压电式蜂鸣器才能发声。电路原理图如下: 图3-7 闹铃电路3.6 发光二极管闪烁电路设计 本系统当时间为走时时间时,两个发光二极管闪烁。在一秒钟闪烁一次,(亮暗一次)代表时钟的秒表;电路如下:图3-8 发光二极管闪烁电路4

    14、 软件设计设计并实现基于AT89C2051单片机的电子闹钟,软件实现的功能有: 上电时,LED数码管显示7120一秒尔后所有数码管显示00:00,发光二极管LED开始1S闪烁1次,并且开始走时。 根据需要设置现在的时间:k0为功能键和确认键,按下k0键,发光二极管LED停止闪烁,表明进入时间设置的状态或者确认设置的时间。k2键分别为增加键即是赋值键,按下键可以相应时间的加1。k3为调整键和关闭闹钟键,当按下k3时可以跳到相应的小时、分钟之间的相互转换或者是关闭闹钟。K1是数码管闪烁标志位(flh)的设置位,当要对数码管赋值送显时,要根据(flh)的闪烁位,对应对该位赋值,当闹钟时间和走时时间相

    15、同时,蜂鸣器奏乐40秒。 当走时时间正常走时时,蜂鸣器没有奏乐,相应的LED灯一秒闪烁一次。 当有设置闹钟,并将闹钟设置完后,按下确定键(flh=5且k2按下),则开启闹钟,当走时时间等于闹钟时间时,则蜂鸣器播放音乐。 设置闹钟时,时钟继续走时,按下k0键则返回时钟走时模块,设置当前时间时,LED不闪烁,当设置完成时,同时按下k0和k1则从设置的时间开始走时。 定时器t0来实现关闭闹钟和读取节拍、音频的功能。4.1 程序流程4.1.1主程序 主程序主要完成系统的初始化和按键的捕获,在键没有按下时调用显示子程序。程序流程图如图4-1所示。图4-1 系统主流程图4.1.2 时钟走时模块 本设计在空

    16、闲模块时电子闹钟的数码管显示走时间,LED发光二极管以每0.5s闪烁。当走时时间与设置的闹钟时间相同、走时时间为整点、走时时间为设置的提醒时间时,扬声器奏乐。 空闲模块的程序流程图如下:4.1.3时间设置模块 每次上电时,数码管显示00:00:00,然后开始走时。若要设置为当前时间,需经过一系列的按键调整设置。在时间设置状态下,LED发光二极管不闪烁。时间设置模块的程序流程图如下:图4-3时间设置模块流程图4.1.4闹钟设置模块 在时钟正常走时状态下,按下K3,LED发光二极管不闪烁。则跳转到闹钟设置模块,第一次按下K3,对第一个闹钟进行设置,再次按下,对第二个闹钟进行设置,设置好闹钟响应的时

    17、间时,按下K1,另数码管的闪烁值等于5即,数码管不闪烁后,按下K2,开启闹钟。尔后,按下K0,返回时钟走时模块,等到现在时间和闹钟设置时间一样时,蜂鸣器奏乐。闹钟设置模块的程序流程图如下所示:图4-4 闹铃时间设置流程图4.1.5 奏乐模块单片机奏乐原理单片机演奏一个音符,是通过引脚,周期性的输出一个特定频率的方波。 这就需要单片机,在半个周期内输出低电平、另外半个周期输出高电平,周而复始。 周期为频率的倒数,可以通过音符的频率 计算出半周期。 演奏时,要根据音符频率的不同,把对应的、半个周期的定时时间初始值,送入 定时器,再由定时器按时输出高低电平。 有两个数据表, 其中存放了事先算好的、

    18、各种音符频率所对应的、 半周期的定时时间初始值。 有了这些数据,单片机就可以演奏从低音、中音、高音和超高音,四个八度共 28 个音符。 演奏乐曲时,就根据音符的不同数值,从半周期数据表中找到定时时间初始值, 送入定时器即可控制发音的音调。 比如把表中的 0xF2 和 0x42 送到定时器,定时器按照这个初始值来产生中断,输 出的方波,人们听起来,这就是低音 1。 乐曲的数据,也要写个数据表,程序中以 code unsigned char sszymmh 命名。 这个表中每三个数字,说明了一个音符,它们分别代表: 第一个数字是音符的数值 1234567 之一,代表多来咪发.; 第二个数字是 01

    19、23 之一,代表低音、中音、高音、超高音; 第三个数字是时间长度,以半拍为单位。 乐曲数据表的结尾是三个 0。 程序如下: #include sbit speaker = P37; unsigned char timer0h, timer0l, time; 单片机晶振采用 12MHz / 频率-半周期数据表 高八位 本软件共保存了四个八度的 28 个频率数据。如下,对世上只有妈妈好的数据表加以解释。单片机晶振采用12MHz频率-半周期数据表高八位,本软件共保存了四个八度的28个频率数据code uchar FREQH = 0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7,

    20、0xF8, /低音1234567 0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC,/1,2,3,4,5,6,7,i 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE, /高音 234567 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF; /超高音 1234567 频率-半周期数据表 低八位code uchar FREQL = 0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6, /低音1234567 0x21, 0xE1, 0x8C, 0xD8, 0x68, 0x

    21、E9, 0x5B, 0x8F, /1,2,3,4,5,6,7,i 0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D, /高音 234567 0x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16; /超高音 1234567/*世上只有妈妈好code uchar sszymmh = 6, 2, 3, 5, 2, 1, 3, 2, 2, 5, 2, 2, 1, 3, 2, 6, 2, 1, 5, 2, 1,6, 2, 4, 3, 2, 2, 5, 2, 1, 6, 2, 1, 5, 2, 2, 3, 2, 2, 1, 2, 1,6, 1, 1, 5,

    22、2, 1, 3, 2, 1, 2, 2, 4, 2, 2, 3, 3, 2, 1, 5, 2, 2,5, 2, 1, 6, 2, 1, 3, 2, 2, 2, 2, 2, 1, 2, 4, 5, 2, 3, 3, 2, 1,2, 2, 1, 1, 2, 1, 6, 1, 1, 1, 2, 1, 5, 1, 6, 0, 0, 0;其中表格是定义存储在ROM里面,不用去占用RAM的资源,每个表中的数据以三个为一组,如6,2,3 其中6为“啦”2代表中音,3代表半拍的个数,为1.5拍,表格以三个0代表结尾。单片机产生不同频率脉冲信号的原理:(1)要产生音频脉冲,只要算出某一音频的脉冲(1/频率),然

    23、后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期的时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期的时间再对I/O反相,就可以在I/O脚上得到此频率的脉冲。10(2)利用AT89S52的内部定时器T1使其工作在定时方式1下,改变定时值TH1及TL1以产生不同频率的方法如下:例如,频率为523Hz,其周期T=1/523 S=1912uS,因此只要令计数器计时956uS/1us=956,在每计数956次时就将I/O反接,就可得到中音DO(532Hz)。计数脉冲值与频率的关系公式如下:N=Fi/2/Fr (N:计数值,Fi:内部计时一次为1uS,故其频率为1MHz,Fr:

    24、要产生的频率 )(3)其计数值的求法如下:T=65536-N=65536-Fi/2/Fr(4)C调个音符频率与计数值T的对照表如下表所示:表3-1 C调各音符频率与计数值T的对照表音 符 频率(Hz) 简谱码(T值) 音 符 频率(Hz) 简谱码(T值)低1DO 262 63628 #4FA# 740 64860#1DO# 277 63731 中5SO 784 64898低2RE 294 63835 #5SO# 831 64923#2RE# 311 63928 中6LA 880 64968低3M 330 64103 #6 932 64994低4FA 349 64103 中7SI 988 650

    25、30#4FA# 370 64260 高1DO 1046 65058低5SO 392 64260 #1DO# 1109 65085#5SO# 415 64331 高2RE 1175 65110低6LA 440 64400 #2RE# 1245 65124#6LA# 466 64463 高3M 1318 65157低7SI 494 64524 高4FA 1397 65178中1DO 523 64580 #4FA# 1480 65198(5)每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,下表为节拍码的对照。若1拍为1秒,则1/4拍是0.25秒。表3-2 1/4节拍对应编码

    26、节拍数节拍码节拍数节拍码节拍数节拍码11/4拍61又1/2拍 B 2又3/4拍22/4拍71又3/4拍C3拍33/4拍82拍D3又1/4拍4 1拍9 2又1/4拍E 3又1/2拍51又1/4拍A2又1/2拍 F3又3/4拍表3-3 各调节拍的时间设定表1/4节拍1/8节拍曲调值延时曲调值延时调4/4125毫秒调4/462毫秒调3/4187毫秒调3/494毫秒调2/4250毫秒调2/4125毫秒程序流程图如下:图4-6 奏乐模块流程图5 系统测试5.1硬件调试硬件调试的方法有静态调试和动态调试2种。静态调试是在不通电的情况下,用直观的办法和使用万用表电阻挡检查有无断线、脱焊、短路、接触不良,检查

    27、绝缘情况、核对元器件的型号、规格、安装,特别要检查电源系统,防止电源短路和极性错误等。动态调试是电路在检查无误后,给电路和仿真器加上电源进行联机仿真调试。 5.2 软件调试软件的调试是通过程序的汇编、连接、执行来发现程序中的语法错误与逻辑错误并加以纠正的过程。对于本系统而言,软件程序所实现的功能比较多,所以软件程序的调试显得相当的烦琐。整个程序是使用c语言。 总结调试,在供电的情况下主要实现24小时的走时、闹铃和整点报时的功能。6 结论本系统以单片机AT89S52芯片为核心部件,利用单片机技术、数码管动态扫描原理,设计了电子闹钟。此设计具有电路简单、功能齐全、制作成本低、性能价格比高等特点,只

    28、需单电源供电,适合使用于家庭、办公室等场所。 经实际使用,该电子时钟计时准确、显示直观、使用方便。附录附录1 器件清单序号名称型号及规格数量1单片机AT89C205112共阳极数码管LED43晶振12M14发光二极管LED25蜂鸣器16三极管901268按键49电阻4.7k510电阻470711电阻1K112电阻10K113电容10pf214电容1042由附录2 调试仪器序号名称、型号、规格数量备注1TOP200012学生电源15V3万用表1-4Keil C51单片机编译软件美国Keil Software公司附录3原理图和PCB图PCB 附录4 实物图如下: 附录5程序清单主程序:#inclu

    29、de#include#include#includedefine.h #includekeyscan.h#includedisplay.h#includeclock.h#includetime_set.h#includeclock_set.h#includeclock_ring.hvoid initial(); /初始化函数void main()/主函数initial();while(1)while(!TF1);TF1=0;TH1=(65536-4000)/256;/4ms初值重赋TL1=(65536-4000)%256;keyscan();display();switch(sta)case

    30、0:clock(); break; /时钟模块case 1:time_set();break; /时间设置模块 case 2:clock_set();break; /闹钟设置模块 case 3:clock_ring();break; /闹钟响应模块default:sta=0;break;/冗余跳回时钟模块 /*初始化函数*/void initial()LED=0;sta=0;cnt=0;TMOD=0x11;ET0 = 1; EA = 1; TH1=(65536-4000)/256; TL1=(65536-4000)%256;m1:TR1=1;while(!TF1);TF1=0;TH1=0xf0

    31、;TL1=0x60; display();buf0=student0%10; /显示学号1sbuf1=student0/10;buf2=student1%10;buf3=student1/10;if(cnt+!=250)goto m1;cnt=0;buf0=0;buf1=0;buf2=0;buf3=0;定义模块程序:#define uint unsigned int#define uchar unsigned charuchar form4; /闹钟时间寄数组uchar num_miao,num_fen,num_shi; /时间寄存变量分别为秒,分,时uchar flh=5; /闪烁数码管闪转

    32、变量uchar oclk; /闹钟个数寄存器uchar sta; /模块状态值 uchar f300=0; /数码管开关延时变量uint cnt,cnt1=1; /延时变量uchar ktmr; /键去抖延时器uchar buf0,buf1,buf2,buf3;/数码管数字显示变量bit LEDflag=0; /led灯闪烁标志位bit SMGflag=0;/数码管开关控制位bit oclk1_run,oclk2_run/*,oclk3_run,oclk4_run*/; /1为启动相应的第几个闹钟uchar bdata lastkey1/*,lastkey2*/;/键状态字sbit lk0=l

    33、astkey15; /K0键sbit lk1=lastkey14; /K1键sbit lk2=lastkey13; /K2键sbit lk3=lastkey12; /K3键uchar bdata KEY1/*,KEY2*/; /键前沿字sbit k0=KEY15; /K0键前沿sbit k1=KEY14; /K1键前沿sbit k2=KEY13; /K2键前沿sbit k3=KEY12; /K3键前沿/-常数定义-const uchar student0=20;const uchar student1=71;/*对蜂鸣器发出音乐的定义*/ /-sbit speaker = P37;/蜂鸣器控制

    34、位uchar timer0h, timer0l;/音调寄存变量uchar part; /节拍寄存变量/-/单片机晶振采用12MHz/ 频率-半周期数据表高八位,本软件共保存了四个八度的28个频率数据code uchar FREQH = 0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8, /低音1234567 0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC,/1,2,3,4,5,6,7,i 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE, /高音 234567 0xFE, 0xFE, 0xFE,

    35、0xFE, 0xFE, 0xFE, 0xFF; /超高音 1234567/ 频率-半周期数据表 低八位code uchar FREQL = 0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6, /低音1234567 0x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F, /1,2,3,4,5,6,7,i 0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D, /高音 234567 0x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16; /超高音 1234567/-/世上只有妈妈好数

    36、据表,要想演奏不同的乐曲, 只需要修改这个数据表code uchar sszymmh = 6, 2, 3, 5, 2, 1, 3, 2, 2, 5, 2, 2, 1, 3, 2, 6, 2, 1, 5, 2, 1,6, 2, 4, 3, 2, 2, 5, 2, 1, 6, 2, 1, 5, 2, 2, 3, 2, 2, 1, 2, 1,6, 1, 1, 5, 2, 1, 3, 2, 1, 2, 2, 4, 2, 2, 3, 3, 2, 1, 5, 2, 2,5, 2, 1, 6, 2, 1, 3, 2, 2, 2, 2, 2, 1, 2, 4, 5, 2, 3, 3, 2, 1,2, 2, 1

    37、, 1, 2, 1, 6, 1, 1, 1, 2, 1, 5, 1, 6, 0, 0, 0;/*AT89C2051相关硬件资源定义*uchar code table=/段码表0x81, 0xED, 0x43, 0x49, 0x2D, 0x19, 0x11, 0xCD, 0x01, 0x09;sbit LED=P30;sbit cs0=P32; /个位位选sbit cs1=P33; /十位位选sbit cs2=P34;/百位位选sbit cs3=P35;/千位位选sbit ROW=P31;/sw14键列选择时间走时模块函数:/*时钟模块*/-void H_BCD(uchar a,uchar b)

    38、;/时间送缓函数void time_run();/时钟走时函数void alarm_Y_N();/判断闹钟函数void clock()time_run(); /时钟走时H_BCD(num_fen,num_shi); /将时间送显缓if(k1)sta=1;cnt=0;LEDflag=0;SMGflag=0;flh=5;LED=0;else if(k3)sta=2;SMGflag=0;flh=5;if(num_miao=0)alarm_Y_N(); /*时钟走时函数*/void time_run()if(cnt+=125)/500mS到了没有?cnt=0;LEDflag=LEDflag;/LED灯

    39、闪烁标志位取反(1S钟亮暗一次)if(LEDflag=1)LED=0;num_miao+;/led灯每秒闪一次 elseLED=1;if(num_miao=60) num_miao=0;num_fen+;if(num_fen=60)num_fen=0;num_shi+;if(num_shi=25)num_shi=0;/-/*时间送显缓*/void H_BCD(uchar a,uchar b)buf0=a%10;buf1=a/10;buf2=b%10;buf3=b/10;时间设置模块函数:/*时间设置模块*/-void setting();void time_set()setting();if(k0&k1) /k0按下返回时钟模块num_miao=0;sta=0;LEDflag=0;SMGflag=0;f300=0;num_fen=buf1*10+buf0;/从设置的时间开始走时 num_shi=buf3*10+buf2;/-/*时间赋值函数*/void setting()if(k1)flh-;if(flh=0)flh=5;else if(f300+=75)/300ms数码管开或关一次SMGflag=SMGflag;f300=0; /开关控制位flag1switch(flh) case 1:/个位数码管赋


    注意事项

    本文(基于51单片机的电子闹钟设计.doc)为本站会员(精***)主动上传,沃文网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知沃文网(点击联系客服),我们立即给予删除!




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服点击这里,给沃文网发消息,QQ:2622162128 - 联系我们

    版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

    Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1

    陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922