利用Proteus模拟并实现的作息时间控制器.docx
HEFEI UNIVERSITY计算机控制系统综合实践设计报告题 目:作息控制系统的设计系 别:电子信息与电气工程系专业(班级):姓名(学号):导师姓名:储忠胡晨曦完成时间:设计题目作息时间控制系统的设计设计类型工程设计 类导师姓名储忠胡晨曦主 要 内 容 及 目 标设计一个时钟控制器,该时钟控制器有4位LED数码显示器,具有基本时 钟功能,通过外扩继电器,光电耦合器或固体继电器可实现多点多路电气设备 的控制,并且能够进行声光提示和用LED显示被控对象的序号数。具 有 的 设 计 条 件PC机一台,AT89S52最小系统版等计 划 学 生 数 及 任 务学生数:3人(1):明确课题对程序功能。(2):把复杂问题分解为若干模块,确定各模块处理方法,画出流程图。(3):编制程序,根据流程图精心选择合适的指令和寻址方式来编制源程序(4):对程序进行汇编,调试和修改,直到程序运行结果正确为止。提交设计报告书(应包括设计思想、硬件设计电路图、软件设计流程、设计 心得,并附设计软件)计 划 设 计 进 程(按课程设计周计算)第一周设计任务:(1):明确课题对程序功能,运算精度等方面的要求及硬件条件(2):把复杂 问题分解为若干模块,确定各模块处理方法,画出流程图。第二周设计任务:(3):编制程序,根据流程图精心选择合适的指令和寻址方式来编制源程序(4):对程序进行汇编,调试和修改,直到程序运行结果正确为止。参考文献1李玉梅基于MCS-51系列单片机原理的应用设计国防工业出版社顾林赵伟军王泰单片机计算机原理开发应用高等教育出版社3 张洪润蓝清华单片机应用技术教程清华大学出版社4 于海生计算机控制技术机械工业出版社摘要本设计是作息时间控制器,由单片机最小系统、按键模块、数码管显示模块、 闹钟模块组成。采用单片机AT89S52与12MHZ晶振相连;通过按键K1、K2、 K3、K4控制时间的校正、闹钟时间设定;数码管显示模块用来显示时间,显示 格式为“时分”,并能够根据需要显示年、月、日,由数码管小数点闪动作为秒 计数;闹钟模块进行到时提醒并作出相应动作:发光二极管闪亮,同时播放音乐。本设计中,利用单片机定时器设计时间计时处理,采用单片机内部的T0定 时器溢出中断来实现,工作在T1方式下,定时50微妙,则连续中断20次即为 一秒,得到了我们所需时间的最小单位秒,60秒为一分,60分为一小时,24小 时为一天,1、3、5、7、8、10、12月为31天,4、6、9、11月为30天,闰年 二月为29天,非闰年二月为28天,12个月为一年。采用这种时间设计思想来 进行时间设置。在整个系统的设计中,单片机的P0 口输出显示信号,P2.4P2.7 口按键输 入控制、P2.0P2.3 口用来扫描,为动态显示,P3 口闹钟模块,P1 口为状态显 示模块,显示工作状态序号。该设计用C51编写程序,由于汇编语言的移植性比较差,而C语言则比较 灵活。许多子函数都可以直接移植过去。关键词:最小系统 作息控制系统数码管闹钟仿真目录1概述11.1 51单片机简介11.2设计要求及功能11.3 本设计实现的功能12系统总体方案及硬件设计22.1系统总体方案框图22.2按键控制模块32.3时间显示模块42.4 闹钟模块53软件设计63.1系统软件设计思想63.2 系统主程序63.3中断子程序73.4按键扫描子程序94 Proteus软件仿真与系统测试104.1 Proteus 软件简介104.2 Proteus 软件仿真114.3系统测试145课程设计体会15参考文献:15附1:源程序代码16附2:系统原理图26附3:系统实物图271概述1.1 51单片机简介单片微型计算机简称单片机,即把组成微型计算机的各个功能部件,如中央 处理器、随机存储器、只读存储器、I/O接口电路、定时器/计数器以及串行通信 接口等集成在一块芯片上,构成一个完整的微型计算机。由于单片机主要面对的是测控对象,突出的是控制功能,所以它从功能和形 态上来说都是应测控功能领域应用的要求而诞生的。随着单片机技术的发展,它 在芯片内集成了许多面对测控对象的接口电路,如ADC、DAC、高速I/O 口、 脉冲宽度调制器、监视定时器等,这些接口电路已经突破了微型计算机传统的体 系结构,所以单片机也成为微型控制。51单片机是对目前所有兼容Intel 8031指令系统的单片机的统称。该系列单 片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片 机取得了长足的进展,成为目前应用最广泛的8位单片机之一,其代表型号是 ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。目前很多公司都 有51系列的兼容机型推出,在目前乃至今后很长的一段时间内将占有大量市场。1.2设计要求及功能本设计是作息时间控制器,其设计实现的功能主要有:4位七段数码管始 终显示当前的时间。当继电器不工作时,黄色LED灯亮,一位七段数码管显示 数字序号“1”;继电器吸合时,一位七段数码管显示序号“2”,显示格式为“时 分”,由LED闪动作为秒计数表示。可以设定作息时间,并进行到时提示,能够 根据预先设定好的作息时间表自动启停控制电路,完成对外部设备的实时控制。1.3本设计实现的功能本设计实现的功能为:使用七段显示器显示时间,显示格式为“时分”,并 可显示日期,显示格式为“月日”,年份单独显示。可以设定作息时间,进行到 时提示,并作出相应动作:发光二极管闪亮,同时播放音乐。2系统总体方案及硬件设计2.1系统总体方案框图按键控制模块单片机最小系统数码管显示模块闹钟模块图2-1系统方框图本次设计实现的功能主要有:使用4位七段显示器来显示现在的时间,显示 格式为“时分”,由LED小数点闪动作为秒计数表示。可以设定作息时间,并进 行到时提示。能够根据预先设定好的作息时间表自动启停控制电路,完成对外部 设备的实时控制。由按键输入控制设置年月日以及当前时间、并可设置闹钟定时,时间到由蜂 鸣器发出响声并作出相应动作:二极管闪亮,同时播放音乐。2.2按键控制模块加一 -CO设定闹神I.P2.6OO O *减一 C P%7图2-2按键控制模块按键控制模块主要有由四个按键组成:K1、K2、K3、K4,分别代表设置 加时,设定闹钟,减时功能。其中K1的功能是模式切换键;K2的作用是加一;K3的作用是闹钟使能;K4的作用是减一。当需要设定时间或是校正时间,即可按下模式切换键来进行。校正时间:按 第一次K1键,进入小时校正状态,通过按K2、K4键进行小时校正,按一下 K2键则加一,按一下K3键则减一;按第二次K1键,进入分校正状态,通过按 K2、K4键进行分钟校正;按第三次K1键,进入小时设定状态,此时若不需要 设置则不操作;按下第四次K1键,进入分钟设定状态,若此时不需要设置则不 操作;按下第五次K1键进入月份校正状态,通过按K2、K4键进行月份校正; 按下第六次K1键,进入日校正状态,通过按K2、K4键进行日校正;按下第七 次K1键进入年份校正状态,通过按K2、K4键来进行年份校正;校正完毕后, 再按一次K1键,则退出时间校正状态,并显示当前校正后的准确时间。设定时 间:按第一次K1键进入小时校正状态,此时若不需要设置,则不操作;以此类推, 到第三次按下K1键,进入小时设定状态,通过按K2、K4键进行小时设定;按 下第四次K1键,进入分钟设定状态,通过按K2、K4键进行分钟设定,设定完 毕后,按一下K3键(闹钟使能);继续按K1键,若不需要设置,则不操作,以 此类推,到按最后一次K1键则退出时间设定状态并显示当前时间,当时间与我 们设定的时间一致时,通过闹钟电路响声提示,若要关闭闹钟,此时再按一次 K3键即可停止响声。2.3时间显示模块图2-3显示模块时间显示模块主要由四位数码管来显示,配合按键控制模块的校正与设定时 间,相应的显示。时间正常显示时,LED每闪动60次,分钟自动加一;每六十 分钟小时自动加一;每24小时天自动加一。D1i 口 m .<TEXT>. NPN . . TEXT> ILS1i-ZI /SPEAKER <TEXT>'2.4闹钟模块R2R1 很I |叮巨 200 'EXT>- 图2-4闹钟音乐模块闹钟模块快的主要功能:闹铃。当设定时间与当前时间一致时,则闹钟自动 闹铃进行提示,同时二极管闪亮一分钟后,自动退出响铃状态,若按K3键,闹 钟退出响铃状态。3软件设计3.1系统软件设计思想本系软件设计中,利用单片机定时器设计时间计时处理,采用单片机内部的 T0定时器溢出中断来实现,工作在T1方式下,定时50微妙,则连续中断20次 即为一秒,得到了我们所需时间的最小单位该设计用C51编写程序,由于汇编语言的移植性比较差,而C语言则比较 灵活。许多子函数都可以直接移植过去。在程序中除了有主函数外还包含许多子 函数,如延时函数、按键扫描函数、初始化函数、时间显示函数、设定闹钟显示 函数、设定日期显示函数、设定年份显示函数、月份选择函数、年份显示辅助函 数。3.2系统主程序在主控程序循环中主要工作为扫描是否有按键,若有按健则做相应的功能处 理,同时也扫描显示器显示时间数据,并检查所设置的时间是否到了。时间计时 处理程序是等过了 1S后,则更新时间数据,将最新的时、分的数据转换为数字 数据并显示在七段显示器上。3.3中断子程序中断子程序的主要功能:提供时间基准。当连续中断20次时,即为一秒, 此时秒加一;当秒值为60时,分钟加一,同时秒清零;当分钟值为60时,小时 加一,同时分钟值清零;当小时为24时,天值加一,同时小时清零;由于每月 天数不定,1、3、5、7、8、10、12月为31天,当计数到此类月份时,天值为 32时,月值加一,同时天值为1; 4、6、9、11月为30天,当计数到此类月份 时,天值为31时,月值加一,同时天值为1;如果是闰年,则2月为29天,当 计数到此类月份时,天值为30时,月值加一,同时天值为一;如果不是闰年, 则2月为28天,当计数此类月份时,天值为29时,月值加一,同时天值为一; 当月值为13时,则年值加一,同时月值为一。一一 N是否到24小时? 图3-3定时器中断函数A返回主函数£3.4按键扫描子程序按键扫描子程序是程序计中相当重要的一部分。按键扫描子程序的功能是: 扫描是否有按键按下,若有键按下,则执行相应功能。1模式按键切换处理1响应设定变量加一瞄r,闹钟使能+相应设定变量减一图3-4按键扫描子程序4 Proteus软件仿真与系统测试4.1 Proteus软件简介Proteus软件是来自英国Labcenter electronics公司的EDA工具软件,Proteus 软件有近20年的历史,在全球广泛使用,除了其具有和其它EDA工具一样的原 理布图、PCB自动或人工布线及电路仿真的功能外,其革命性的功能是,他的 电路仿真是互动的,针对微处理器的应用,还可以直接在基于原理图的虚拟原型 上编程,并实现软件源码级的实时调试,如有显示及输出,还能看到运行后输入 输出的效果,配合系统配置的虚拟仪器如示波器、逻辑分析仪等,Proteus能够 很容易的为用户建立了完备的电子设计开发环境。Proteus产品系列也包含了革 命性的VSM技术,用户可以对基于微控制器的设计连同所有的周围电子器件一 起仿真。不愧为一款非常优秀的单片机仿真软件。Proteus组合了高级原理布图、混合模式SPICE仿真,PCB设计以及自动布线 来实现一个完整的电子设计系统。此系统受益于15年来的持续开发,被电子世 界在其对PCB设计系统的比较文章中评为最好产品一“ The Route to PCB CAD”。Proteus产品系列也包含了我们革命性的VSM技术,用户可以对基于微控 制器的设计连同所有的周围电子器件一起仿真。用户甚至可以实时采用诸如 LED/LCD、键盘、RS232终端等动态外设模型来对设计进行交互仿真。其功能模块:一个易用而又功能强大的ISIS原理布图工具;PROSPICE混合 模型SPICE仿真;ARES PCB设计.PROSPICE仿真器的一个扩展PROTEUS VSM: 便于包括所有相关的器件的基于微处理器设计的协同仿真。此外,还可以结合微 控制器软件使用动态的键盘,开关,按钮,LEDs甚至LCD显示CPU模型.支持许多通用的微控制器,如PIC,*R,HC11以及8051.交互的装置模型包括:LED和LCD显示,RS232终端,通用键盘,强大的调试工具,包括寄存器和存储器,断点和单步模式IAR C-SPY和Keil uVision2等开发工具的源层调试应用特殊模型的DLL界面-提供有关元件库的全部文件Proteus与其它单片机仿真软件不同的是,它不仅能仿真单片机CPU的工作 情况,也能仿真单片机外围电路或没有单片机参与的其它电路的工作情况。因此 在仿真和程序调试时,关心的不再是某些语句执行时单片机寄存器和存储器内容 的改变,而是从工程的角度直接看程序运行和电路工作的过程和结果。对于这样 的仿真实验,从某种意义上讲,是弥补了实验和工程应用间脱节的矛盾和现象。4.2 Proteus软件仿真初始界面:启动Proteus进行仿真时显示的初始化时间。初始界面仿真图如图4-2-1所 示。SQH1图4-2-1时间显示仿真图时间校正:当我们需要正确的显示时间即可进行时间校正,按一下K1即进 入小时校正状态,通过K2加一或K4减一来进行小时校正,再按一次K1键即 可进行分钟校正,校正原理同小时校正相同,校正时数字属于闪烁状态。其仿真 图如图4-2-2所示。?0H5图4-2-2时间校正仿真图闹钟设定:当我们需要闹钟提醒时即可使用此功能,连续按三下K1键即可 进入闹钟小时设定状态,通过K2键加一或K4键减一,进行小时设定,再按一 次K1键即可进行分钟设定,其设定原理与小时设定原理相同,按一下K3键, 则时间设定完毕,到时会自动响铃。其仿真图如图4-2-3所示。XCF1E3+日期校正:当我们需要与当前日期保持一致时,则可以使用日期校正功能, 连续按动五次K1键,则进入月份校正状态,通过K2加一键或K4减一键进行 校正月份,再按一次K1键,则可进行日期校正,校正原理同月份校正原理相同。 其仿真图如图4-2-4所示。图4-2-4日期显示仿真图年份校正:当我们需要保持年份与当前年份一一致时,则可以进行年份校正。 连续按动七次K1键,即进入年份校正状态,通过K2加一键或K4减一键进行 校正。其仿真图如图4-2-5所示。IJ1DIX LS1uT&mP2.+ : TB-:n:-Q3MPM:TE:-:7P .BPEfi.KBi.:Tb-:,T:-. . h'1LED-REn 1;3TF'1-25"55"TVs->CrAL1pan-ADnPD.VAD1pna'ADZyTfi I 7P0AD3PD.ADl-PDS'h.de;Pnfi'H.DhHSTPRTAOTPZD'hEPZ.Ii'hBFZAIOPSEMh.LEPZ.+i'H.IZ声PZJ&A1 PZ.TWISp 1 fVT7PlfVRXDp 1Pl imiDF 1NPUPT TIHT1F 1 .pm */rnP1fP35H-!P1.SP3.&TiTnrP1.7Pl.T/KFRR1. REE: RACKS:TE:<T-02UEp-YEUljqiAl=TE:rrtR4 filD F?L2.sv.FEE图4-2-5年份显示仿真图闹钟响铃:当我们设定的时间与当前时间一致时,继电器吸合,则闹钟就会 自动响铃提示,与此同时发光二极管闪亮,黄色LED灯熄灭。一分钟后响铃停止,发光二极管熄灭,若在此期间按下闹钟使能键K3同样能使响铃停止,发光 二极管熄灭。其仿真图如图4-2-6所示。1D1LS1.NFI.=TE:-:T-RP1R. EE: RAC ItB02lEATELLQ 飒RL2SV.TEE .EQH81b-XTALIPDn'.H.DDPD.1WD1PDADZXTAL2POLADSPD.S'h.DSpid'-heP2.1i'hSpsi'Ainpza'H.nALEPZ.h.12PZJ9AUPZ.TWISP1.1iT3E:P3.1ITXDP12P1JpiaiirnP1.*P3.*nriP15P3ST1P1.6Pl.SViJRP1.Tpi.Ti-inr 3* 7H32£FZ.4 ZhPZ£'Z7PZ.61PZ.T 1 IDthTizTRF'lg 17LED-RED an .=TE:T:-4K-SPEKKBl图4-2-6闹钟音乐播放仿真图4.3 系统测试本次系统设计的完成主要依赖于proteus仿真软件和keil c (uv3)编程软件, 大部分的调试基本上都在这两个软件上实现。当在仿真中取得了较为满意的结果 后才开始动手实际的焊制电路板,这样焊制的时候思路清晰而且效率高。焊制成 功后也经过了几天的调试,主要是因为光电耦合器与继电器、音乐播放功能的实 现有点问题,经过努力基本解决。所有的测试过程并不复杂,所用到器件最多的 也就是万用表,也没有具体的数据。如果真正做的系统比较大,测试的过程是非 常多也是非常重要的。5课程设计体会此次课程设计为期两个多星期,我们从中获益匪浅。本课程设计是计算机控制技术 与单片机原理与应用技术的综合训练。从选题、确定方案、设计原理图、仿真、焊接的 过程中,我们学到了很多,这对我们来说是一次将课本所学知识应用到具体实践中的一次考 验。虽然在这个过程中我们遇到了很多困难,编写程序需要一步一步并认真的调试,一个小 小的错误都可导致整个程序的不可用;硬件仿真需要考虑硬件与软件的连调,才能保证硬件 与软件协同工作,同时在硬件设计中,为了增加实验器材的灵敏性,我们选用了光耦,利用 光耦6N137去控制继电器,初期由于未买到合适器件,采用的是6N135,后来发现影响实 验结果,就换成了 6N137。我们通过查阅资料、同学的帮助,最终基本解决这些问题,从而 基本完成了课程设计的要求。在这个过程中我们学会了发现问题、分析问题并最终解决问题, 为我们以后的工作和学习打下了一定的基础。此次课程设计,也使我们发现了自己的缺点,课本所学知识与实践是有一定距离的,就 拿音乐播放器而言,我们了解的只是皮毛而已,只知其一不知其二,所以不仅要学好科学文 化知识,更要积极的参与实践学习,真样才能有更大的收获,真正学到知识,要把理论与实 际相结合,从而成为真正有用的人。参考文献:【1】余发山王福忠 徐州:中国矿业大学出版社2008年【2】彭为,黄科,雷道仲.单片机典型系统设计实例讲解.2006年【3】何立民.单片机应用技术选编.北京航空航天大学出版社,2004.【4】杨刚,周群.电子系统设计与实践.北京:电子工业出版社,2004.附1:源程序代码#include<REG52.H> #define uint unsigned int#define uchar unsigned charuchar code a10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;“/*“ 个个个个个个个sbit K1=P2A4;sbit K2=P2A5;sbit K3=P2A6;sbit K4=P2A7;sbit kg=P3A0;sbit sd=P3A6;sbit BEEP=P3A7;uchar m=45,h=20,sec=58,cnt=0,x,y,qian,bai,shi,ge;uchar set_h=20;uchar set_m=6;uchar month=6;uchar day=14;uchar th0_f;uchar tl0_f;uint year=2012;void jidianqi(void);void delay(uchar t);/延 时函数void scankey(void);/ 按键扫描函数void init(void); /初始化函数void display(void);/显示函数void set_time(void);/设定时间显示辅助函数void set_day(void); 设定日期显示辅助函数void m_choose(void); /月份选择函数void bianhuan(void); /年份显示辅助函数void bianhuan1(void);/时间显示辅助函数changedata(uchar *song,uchar *diao,uchar *jie); /音乐符号串解释函数 void play(uchar *songdata);/奏 乐函数/世上只有妈妈好uchar code mamahao=”6.5_35I'16_5_6-I35_6_53_2_I1_,6_5_3_2-I” 吃.3_55_6_1321-15.3_2_1_,6_1_1,5-” ; uchar code freq36*2=0xA9,0xEF,/00220HZ ,1 /0 0x93,0xF0,/00233HZ ,1# 0x73,0xF1,/00247HZ ,2 0x49,0xF2,/00262HZ ,2# 0x07,0xF3,/00277HZ ,3 0xC8,0xF3,/00294HZ ,4 0x73,0xF4,/00311HZ ,4#0x1E,0xF5,/00330HZ ,5 0xB6,0xF5,/00349HZ ,5# 0x4C,0xF6,/00370HZ ,6 0xD7,0xF6,/00392HZ ,6#0x5A,0xF7,/00415HZ ,70xD8,0xF7,/00440HZ 1/120x4D,0xF8,/00466HZ 1#/130xBD,0xF8,/00494HZ 2/140x24,0xF9,/00523HZ 2#/150x87,0xF9,/00554HZ 3/160xE4,0xF9,/00587HZ 4/170x3D,0xFA,/00622HZ 4#/180x90,0xFA,/00659HZ 5/190xDE,0xFA,/00698HZ 5#/200x29,0xFB,/00740HZ 6/210x6F,0xFB,/00784HZ 6#/220xB1,0xFB,/00831HZ 7/230xEF,0xFB,/00880HZ '1 0x2A,0xFC,/00932HZ '1# 0x62,0xFC,/00988HZ '2 0x95,0xFC,/01046HZ '2# 0xC7,0xFC,/01109HZ '30xF6,0xFC,/01175HZ '40x22,0xFD,/01244HZ '4# 0x4B,0xFD,/01318HZ '5 0x73,0xFD,/01397HZ '5# 0x98,0xFD,/01480HZ '6 0xBB,0xFD,/01568HZ '6#0xDC,0xFD,/01661HZ '7/35;void main(void)init();kg=1;P1=0x06;显示 1while(1)display();scankey();if(y=1&&(set_h=h&&set_m=m) jidianqi();else BEEP=0;void jidianqi(void)P1=0x5b;显示 2kg=0;play(mamahao);kg=1;P1=0x06;“/* /音乐符号串解释函数 changedata(uchar diao=*song;for(i=0,i1=0;)gaodi=0;banyin=0;yinchang=4;song,uchar *diao,uchar *jie)uchar i,i1,j;char gaodi;uchar banyin;uchar yinchang;/?Ouchar code jie78=0,12,14,16,17,19,21,23;if(*(song+i)=T) II (*(song+i)=' ') i+;switch(*(song+i)case ',': gaodi=-12;i+;break;case '、': gaodi=12;i+;break;if(*(song+i)=0)*(diao+i1)=0;*(jie+i1)=0;return;j=*(song+i)-0x30; i+;j=jie7j+gaodi;yinc: switch(*(song+i)case '#':i+;j+;goto yinc;case '-':yinchang+=4;i+;goto yinc;case '_':yinchang/=2;i+;goto yinc;case '.':yinchang=yinchang+yinchang/2;i+;goto yinc;*(diao+i1)=j;*(jie+i1)=yinchang;i1+;“/* /奏乐函数 void play(uchar *songdata)uchar i,c,j=0;uint n;uchar diaodata40;uchar jiedata40;changedata(songdata,diaodata,jiedata);TR1=1;for(i=0;diaodatai!=0;i+) tl0_f=freqdiaodatai*2;th0_f=freqdiaodatai*2+1;for(c=0;c<jiedatai;c+)for(n=0;n<24;n+)scankey();if(y=0)TR1=0;return;display();TR1=0;for(n=0;n<500;n+);TR1=1;TR1=0;void time0(void) interrupt 1TH0=0x3c;TL0=0xb0;cnt+;if(y=1&&(set_h=h&&set_m=m)sd=sd;else sd=1;if(cnt=20)sec+;cnt=0;if(sec=60)sec=0;m+;if(m=60)m=0;h+;if(h=24)h=0;day+;switch(month)case 1:if(day=32)month+;day=1;break;case 2:if(year%4=0)if(day=30)month+;day=1; elseif(day=29)month+;day=1;break;case 3:if(day=32)month+;day=1;break;case 4:if(day=31)month+;day=1;break;case 5:if(day=32)month+;day=1;break;case 6:if(day=31)month+;day=1;break;case 7:if(day=32)month+;day=1;break;case 8:if(day=32)month+;day=1;break;case 9:if(day=31)month+;day=1;break;case 10:if(day=32)month+;day=1;break;case 11:if(day=31)month+;day=1;break;case 12:if(day=32)month+;day=1;break;if(month=13)month=1;year+;if(x=0)bianhuan1();timer1() interrupt 3TL1=tl0_f;TH1=th0_f; 调入预定值BEEP=BEEP;取反音乐输出IO void init(void)BEEP=0;TMOD=0x11;TH0=0x3c;TL0=0xb0;ET0=1;TR0=1;ET1=1;TR1=0;EA=1;void display(void)P2=0xfe;P0=aqian;if(x%2=1&&cnt>=10)P0&=0x00;delay(20);P2=0xfd;P0=abai;if(x%2=1&&cnt>=10)P0&=0x00;else if(x=0&&cnt>=10)P0l=0x80;delay(20);P2=0xfb;P0=ashi;if(x%2=0&&x!=0)llx=7)&&cnt>=10)P0&=0x00;delay(20);P2=0xf7;P0=age;if(x%2=0&&x!=0)|x=7)&&cnt>=10)P0&=0x00;delay(20); void m_choose(void)switch(month)case 1:if(day=32)day=1;else if(day=0)day=31;break;case 2:if(year%4=0)if(day=30)day=1;else if(day=0)day=29; elseif(day=29)day=1;else if(day=0)day=28;break;case 3:if(day=32)day=1;else if(day=0)day=31;break;case 4:if(day=31)day=1;else if(day=0)day=30;break;case 5:if(day=32)day=1;else if(day=0)day=31;break;case 6:if(day=31)day=1;else if(day=0)day=30;break;case 7:if(day=32)day=1;else if(day=0)day=31;break;case 8:if(day=32)day=1;else if(day=0)day=31;break;case 9:if(day=31)day=1;else if(day=0)day=30;break;case 10:if(day=32)day=1;else if(day=0)day=31;break;case 11:if(day=31)day=1;else if(day=0)day=30;break;case 12:if(day=32)day=1;else if(day=0)day=31;break;void set_time(void)qian=set_h/10;bai=set_h%10;shi=set_m/10;ge=set_m%10; void set_day(void)qian=month/10;bai=month%10;shi=day/10;ge=day%10;void bianhuan(void)qian=year/1000;bai=year%1000/100;shi=year%100/10;ge=year%10;void bianhuan1(void)qian=h/10;bai=h%10;shi=m/10;ge=m%10;void scankey(void)if(K1=0)