1、 第1章 绪论1.1 引言人们对工作环境生活环境的空气质量的要求随着人们生活水平提高也水涨船高,对空气质量监测及控制也开始关注起来。智能化的排气系统的产生是科技智能化自动化趋势的必然产物。一款款低耗智能的排气扇控制器针对传统的电气开关控制器太耗人力、开关产生电火花、浪费现象严重等缺点应运而生。智能排气扇控制器针对用户的需求达到了对空气质量监测和控制的目的。本设计基于AT89C51单片机,有按键控制以及可视化的用户操作端设计,能实现定时控制循环运行的排气扇控制效果。实乃居家办公必备。1.2 排气扇控制器的研究背景排气装置的使用可谓历史悠久,即便在没有现代先进设备的古代也讲究房屋的通风透气。电动机
2、出现后排气扇的使用就很普遍了,而对排气扇控制由人工电器开关到现在的各种智能化控制,一直是紧紧跟随着科技发展的脚步的。在控制器设计趋于自动智能化的今天,老式的电气开关已不能满足广大人民的需求。很多的环境对空气的质量都要求比较高,大到医院、化工厂房、储物仓库、大型的工厂厂房,小至厨房油烟问题、厕所、电脑机箱等,如果是简单的电气开关,如何满足对大规模的排气装置控制,未免太耗人力,同时也会造成许多不必要的能源浪费。又比如在某些特殊的环境里,排气扇电气开关产生的电火花可能会引起安全事故,极为不便。在当今科技飞速发展的时代,电子技术、传感器技术等多种有利于工业生产和日常生活的技术的日趋成熟,也就为实现排气
3、扇控制器的电子化、信息化、科学化提供了可能。目前市场上已经出现了各种形式的排气扇控制器,大致分为排气换气、排气散热两大类作用。控制器的设计方向也趋于微型、智能自动、电子化发展。1.3 排气扇控制器的发展前景随着形形色色的传感器的发明和与其相应配套的应用技术日趋成熟,现今的排气装置也与传感器挂上了钩,排气装置在装有不同传感器的控制器控制下能在各色各样的环境中出色的完成对空气质量监控和控制的任务。温度传感器可应用于对环境空气温度的监测和控制上,小举一例,如电脑风箱,如果电脑主板过热则会导致电脑运行速度减慢出现死机卡机的现象严重会烧坏元件,在温度传感器监测下,当温度超过预警值时候则会发出信号给排气控
4、制系统启动排气扇达到散热降温的效果。又如烟雾传感器,厕所里如果装有烟雾传感器控制系统的排气扇,则可以在第一时间把在吸烟者在厕所的制造出来的烟雾排除厕所,使公共场所的环境卫生能有效的保持洁净。总而言之排气扇控制器的发展不会局限于单项单线,而是会应各种社会需求多向发展。基于单片机的排气扇控制器总体方案AT89C2051芯片控制的排气扇控制系统较传统电气开关控制能有节能、智能自动、方面的优势,延长了排气装置的使用寿命。本设计有硬件设计和软件设计两个部分。2.1排气扇控制系统的总体方案设计基于单片机的控制器主要是利用按键扫描将采集到的按键信息处理后进行程序的参数注入,完成用户对芯片中存储的中断程序的修
5、改,达到用户能通过按键调试设置程序的效果,在操作的同时CPU芯片同步将用户操作信息通过显示程序显示到显示屏上,让用户有清晰明快的人机对话,其系统框图如图:、XTAL1XTAL2RST P1P2口P3口(AT89C51)P3口P1口用户操作的指令和当前时间LED显示排气扇控制电路控制命令通过键盘电路晶振复位等基本电路温度传感器(扩充设计)图2.1 排气扇控制器的总体框图所示:按键信息是用户操作设定的一些参数,通过非编码键盘能形成特定的指令被传送到处理器中,完成对排气扇的定时开关机设定。而显示部分则是一组LED数码管显示器,把用户的操作显示出来,能让用户有一个良好的人机对话平台。完成一系列的设定后
6、,CPU芯片生成一段符合用户需求的程序并循环运行,在用户指定的时间段发出指令开关电机。2.2 排气扇控制器的功能(1)通过一个四个键的非编码独立式键盘做用户操作端,能对排气扇当前工作时间精确设定或校准,也可以对排气扇定时操作,设定其开关机时间;(2)LED数码管显示能清晰显示系统工作时间和用户操作指令,有清晰的人机对话;(3)单片机能实现对排气扇的定时操作和循环运行设定的工作指令;(4)能应付突发的状况进行紧急的开关机。2.3方案论证任何的电子产品都要根据其功用和生产成本两条不可或缺的因素来进行设计才能有一个让客户满意的性价比,也只有把生产成本和产品功用紧密联系在一起做出来的产品才能让生产者赢
7、利。在此本人根据主要需求,本人根据所学设计了两种不同的电路,具体的电路图如下图2.2和图2.3。图2.2电路方案设计1图2.3电路方案设计2显示部分可以采用液晶屏幕显示和LED数码管显示,液晶显示相对来言功耗较小,但价格较LED数码管而言要高许多。液晶显示器显示相对数码管要复杂的多技术难度较大,当然显示的信息也可以更加精准,可视化效果比数码管要好的很多。权衡了性价比,两个设计中都采用了LED数码管做显示元件。驱动电路两个电路设计都采用相同的模块,都是用光耦加继电器来实现对排气扇电机的开关控制。驱动电机的原理是定时刻对驱动信号I/O口电平取反输出,而单片机工作的时候会产生电平的抖动,这种抖动会对
8、使继电器开关产生瞬间开闭合的现象,这种瞬间通电现象会影响电机的使用寿命,而光耦能有效避免这种电平抖动现象产生的负作用,这就是计中采用光耦的主要原因。在设计图2.2中使用的是译码芯片来实现显示器数据,在程序上要方便很多,74HC4511芯片能将单片机发出的四组二进制数据译成在LED数码管上显示的8位二进制数。在充分利用软件资源的情况下,在图2.3的设计中该芯片被省略掉,直接用程序实现数码管显示以减少硬件材耗。图2.2中使用了P0口做I/O口,因为该口不是准双向通信I/O口,单片机内部电路中该口没有保护电阻,故在外部需上拉电阻。在图2.3的电路设计中避免了使用该端口做I/O口,较图2.2减少了一个
9、排阻的硬件材耗,减少了成本。键盘电路上,二者都是采用一个四键的独立式键盘,按键功能也都一样。键盘虽然比较简单,但已足够实现本课题所需的功能。为解决掉电后数据的恢复以及实现多组的定时时间存储,图2.2采用了片外的非易失性存储芯片24C08B。而在图2.3中没有采用片外存储芯片,用户设定的两组电机唤醒数据用4个变量存储,能定下2组时间点,用户能让排气扇在第一个时间点内开启到下一设定的时间点关闭来实现排气系统的定时工作,定额工作。图2.3排气扇定时功能已经实现而且较图2.2材耗较少。综合了各个电路部分的描述和比较,我最终选了图2.3做为本次设计的电路原理图。第3章 排气扇控制系统的硬件设计3.1硬件
10、组成及结构框图本定时循环排气控制系统在加电后即可进入正常计时状态,用户可以随时校准时间并设定排气扇的开关时间,以便控制器能够在设定的开关时刻通过单片机的输出端口控制输出电平产生继电动作,开启排气扇电机进行排气。该系统的硬件原理图可见。本系统的核心单片机AT89C51为20脚300MIL封装,是一种带有2kb flash rom 的单片机。该单片机除了少了两个并口外,能兼容mcs51系列单片机的所有功能,并且具备体积小,功能强,运行速度较快等优点。该电路可通过单片机的P2口连接一个键盘电路来实现对参数的自由设定,同时可通过P1口连接液晶显示器分别以显示小时,分钟,和秒。系统定时启动是通过P3.0
11、口完成的。程序开始时此该I/O口的输出状态都是低电平,AT89C51通过程序查询P3.0口输出开和关的状态预设时间是否到达,到达预定时间则唤醒电机工作进行排气。下图3.1为硬件设计总体框图:CPU芯片(AT89C51)LED显示器键盘电路四键独立式键盘电机驱动模块(光电耦合,放大电路,继电器等组成)基本电路图3.1硬件组成总体框图3.2 LED显示电路液晶显示器种类繁多,按照输出方式有图案,数码,点阵等。本次选用点阵液晶显示。液晶驱动方式和数码管的驱动是不同的,液晶比数码管需要的工作电压更低,但扫描方式也比较复杂。在充分利用软件资源优势的情况下,本着物美价廉原则,设计中选用型号7SEG_MPX
12、8_BLUE的8段共阴极数码管显示器,下图3.2为元件图形。图3.2数码管3.3电机驱动电路驱动这块主要是控制单片机发出的电平高低来控制电机,而电路工作时候电压的抖动对控制会造成影响,驱动电路中用到了光耦,光耦,即光电耦合器,一般为4脚的光耦,输入端跨接的是一只LED,输出端跨接的是一只光敏三级管,LED和光敏三级管是被密封在一个封装中的。其工作原理:当在输入端加一正向导通电压,LED发光,光敏三级管受光照,发射结导通,三级管相当于开关。此“开关”的通断由输入端决定。光耦使用有效隔断输入端(控制电路)与输出端(被控制电路),避免被控制电路在工作时电压的抖动对控制端造成影响。图3.3电机驱动模块
13、单片机对电机的驱动控制输出是通过P3.5完成的。当程序开始时,这I/O口的输出状态都是高电平,AT89C51通过程序查询该路路输出的开、关状态预置时间是否到达,以判断如何对外部电路的控制处理。当单片机判定时间计数到用户设置的时间标记时候,P3.5口输出低电平,此时光耦动作,(二极管发光引起光敏电阻导通),通过限流电阻R11后给Q1导通电流,经过放大后,电流要求放大200倍左右,工作在饱和状态,在这种状态下,管耗比较小,继电开关通电工作,此时红色LED指示灯亮,排气扇电机开始工作。当单片机检测到下一个时间标记时候,此时对P3.5的输出电平取反,光耦不工作,继电器开关掉电,此时电机不工作,绿色LE
14、D指示灯亮。具体的电路如上图图3.3所示。3.4按键调置电路键盘分为编码键盘和非编码键盘。编码键盘是靠硬件电路对每个键位进行编码,当有键按下时,输出固定的数码,并用来判断键位。常见的编码键盘如我们的电脑键盘,计算器键盘等;非编码键盘是指键盘不是靠固定的编码来实现对键位识别的,而是靠一定的算法来对键位进行扫描,矩阵键盘就是常见的一种非编码键盘。编码键盘一般需要较多的硬件电路,所以成本较高,单片机系统尽量都采用非编码键盘,目的就是利用单片机的软件编辑优势节约成本。举例四行四列矩阵式非编码键盘电路如图3.4:图3.4四行四列键盘电路本设计中使用的是一个独立式四键键盘,电路如图3.5:图3.5四键独立
15、式键盘其中模式按键实现了各种程序模块之间的切换,而加减时按键作用是用来时间数据输入的,接于P3.4口的紧急开/关按键则是用来紧急开停机用。机械按键过程中,难免会产生抖动,抖动会造成系统判断困难,因此采用消除抖动是一个不可或缺的过程。消除抖动的方法有以下常见的两种:其一是用硬件的RS锁存器进行消除抖动,将复杂跳变的信号变成稳定的信号。再者就是用软件算法实现对抖动的排除,灵活性大,较常用,本设计就采用在抖动发生的时间段(一般为数毫秒)设定延时的方法来消除抖动。对于键盘的扫描常用的有逐行扫描与线反转法。前者是利用列线做输入,行线做输出。首先使用四根列线的某一根置零,当在此列的某一行有按键按下时,该行
16、线为低电平,其他为高电平,这样这个键就被编码;然后再使另一列线置零,检测下一列是否有按键按,如此循环达到对整个键盘进行逐列扫描。以上是行扫描法,而线反转法则是,把列线当做线,所以对其中的某条先置低电平,其余则为高电平,然后去读行线的状态,那么线的状态就是当前按下的键的键值。比较而言线反转法比逐行扫描要简便的多,故所以本设计中采用的是线反转法扫描方式。第4章 排气扇控制系统的软件设计4.1排气扇控制系统的软件总体设计方案本系统的软件部分功能模块主要有,初始化模块、定时器模块、液晶显示模块、键盘扫描模块、键盘识别模块、常用调用子程序模块。对不同的模块进行合理的调度可以使单品机的资源得到充分利用。本
17、系统定时器模块是属于中断模块,独立于任何模块;液晶显示模块、键盘扫描模块、键盘识别模块,等都是同步的模块。初始化模块和子程序模块都是调用和被调用的模块,不用考虑到同步关系中来。软件设计原理总体框图如下图4.1:初始化模块LED显示模块计时模块键盘扫描模块定时器模块键位识别模块延时子程序、驱动子程序等子程序调用模块50ms1S图4.1 软件设计原理总体框图4.2模块说明初始化模块:(1)定时器模块初始化:定时器1的初始化:定时器1工作在方式1,定时时间为1s。(2)液晶显示模块、显示模块初始化,给定初始化数据0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f。当开机启
18、动时,初始化欢迎界面显示左移。(3)标志变量初始化,系统变量初始化,状态变量初始化,以及I/O口的定义。定时器模块:键盘执行标志变量置位,计时器执行计数标志变量置位,电机唤醒检测模块执行标志变量置位LED显示模块:反复对字符数据组进行扫描显示、键盘扫描模块:利用线反转法进行扫描,调用keyprc()子程序。计时器模块:主要包括电机唤醒检测,电机开/关信号输出,加减校时系统模块。键位识别模块:当检测到有按键按下时,读取返回键的编码,利用if语句进行分支判断,利用各个键的索引进行判断,分别调用不同的子程序模块。常用的子程序有:延时子程序,键盘扫描子程序,清屏子程序,显示子程序,驱动子程序等。延时子
19、程序:void DelayX1ms(unsigned char count)unsigned char i,j; for(i=0;icount;i+) for(j=0;j240;j+) ;该延迟函数,参数为毫秒数,用于按键消抖调用。4.3程序流程图单片机中运行程序的大致流程如下,主函数流程图4.2,其中串行口发送驱动信号子程序,硬件连接的是单片机的P3.0口,具体实现是程序判定是否到达中断时间点以及启动相应的中断服务,具体流程图如4.3。欢迎界面判断有无按键准备译码显示程序、消抖程序结束计时程序主函数LED液晶显示设定时间设定定时点判断是否有断点电机唤醒程序开始Y (模式键按下)YNY key
20、4按下图4.2主函数流程图显示子程序实现用户操作数据显示和当下时间显示,其流程图如图4.4开始屏显初始化检测按键输入显示当下时间返回校时显示驱动时间点设置显示NKEY137次输入12次输入图4.3显示部分流程图开始变量中定时唤醒时间点的设定和存储判断是否到达中断点P3.0电平输出取反结束返回NY图4.4电机唤醒功能流程图第5章 基于传感器扩充设计5.1温度传感器温度传感器是指能感受温度并转换成可用输出信号的传感器。热电阻的测温原理是基于导体或半导体的电阻值大小随着温度的变化而变化的特点。热电阻大都是有纯金属材料制成,目前应用最多的是铂和铜金属,现在开始用镍、锰和铑等材料制造热电阻。热电阻通常需
21、要把电阻信号通过引线传递到计算机控制装置或者仪表上。对中低温区的反应比较突出,测量精度高,性能稳定。本设计中采用热电阻电路做温度传感电路,通过放大电路和D/A转化电路把外界温度转换成电信号。5.2需求分析和总体设计方案设计5.2.1需求分析基于温度传感器技术,在此扩充设计一个能实现对环境温度监控并通过排换气降温的排气扇控制器。设定需求为监测0以上120以下的温度并控制温度在80以下,当环境温度超过80时排气扇运作,达到排气降温的效果。5.2.2基于温度传感器的排气扇控制器总体设计方案基于温度传感器的排气扇控制器总体设计方案框图如图5.1所示,温度传感器TC输出信号经差动放大到05V,放大器输出
22、送ADC0831进行A/D转换,A/D转换结果送单片机进行处理,最后将所测的温度在LED数码管上显示。当监控的温度值超过要求时驱动电路部分工作,继电器作用启动排气扇电机。温度传感器A/D转换单片机LED显示电机驱动电路图5.1总体方案设计框图5.3基于温度传感控制的排气扇控制器硬件设计5.3.1温度传感电路模块本设计中温度传感器部分的外围电路,R1,R2是限流电路,热电阻的电流经过比较器后输送电信号到A/D转换模块。如图5.2: 图5.2温度传感利用温敏电阻感应温度变化经过如下电路后,完成对温度变化到电流变化的转换,即A/D转换过程。5.3.2LED显示电路模块7SEG-MPX4-CA、RES
23、PACK-8、AT89C51、共阳四位一体数码管,数码管与单片机串行口P0口相连,因为P0口不是准I/O口,故加上上拉电阻。片选信号接P2口。如图5.3所示:图5.3 液晶显示电路模块5.3.3电机驱动模块电机驱动模块是光电耦合、放大电路、继电电路组成。单片机发出的电平信号能控制光电耦合器里的发光二极管亮与灭,经由放大电路放大信号后控制继电开关的闭合。如下图5.4所示:图5.4 排气扇电机驱动模块5.3.4A/D转换电路A/D转换目标是将模拟量转化成数字量,在本例中,选用ADC0831串行A/D转换芯片作为温度测试系统的A/D转换,设计电路如图5.5所示: 图5.5A/D转换模块图由于设计误差
24、要求为1C,1C对应的输入电压为(1/120)5=0.04167V,8位A/D转换芯片的分辩率为1/285=0019531V,从而说明选用8位的A/D转换器测量误差要小于1C。另外之所以选用串行的,理由是串行的电路设计简便,能在性能上符合要求第6章 仿真和测试本设计采用的编译仿真软件是keil和PROTUS,Keil 是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil 生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。
25、Proteus是世界上著名的仿真工具软件,从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。本设计中应用到keil的编译功能,在keil中编译生成hex文件后加载到PROTUS中的虚拟
26、芯片中,完成对软件和硬件的仿真和测试。基于单片机的排气扇定时循环控制器电路仿真电路图如下图6.1:图6.1运行中仿真图按键说明:A:模式按键;B: +;C:;D:紧急开/关。在点击模式按键一下进入校时,在protuse中仿真如图6.2图6.2设定小时图在点击模式按键2次时进入了分钟校准,仿真如图6.3图6.3设定分钟图在点击模式按键第三次时,程序进入定时设置模块,仿真如图6.4图6.4进入电机定时设定仿真图为了应付突发情况,本设计中有紧急排气按键,当该键按下时,在休眠状态的排气扇电机被人工唤醒,直到有停机指令的发出。同样,如需紧急停止排气的需要,设计中安排了紧急停机按键。该键作用时仿真如下图6
27、.5,由图可以清楚看到几点开关跳跃的过程。图6.5电机定时时间到开关跳跃过程图在Proteus中运行:当到达设定时间时候,电机运转如下图6.6图6.6电机开启图当到定时完成,电机完成了定额的工作量后,进入待机状态如图6.7。图6.7电机进入待机状态图基于温度传感器单片机排气扇控制器设计在Proteus中运行,改变温度传感器的设置值,观察到LED显示的数据随着变化,图6.8为系统仿真结果。图6.8温度低于80运行状态图在温度超过80时候,单片机发出信号驱动电路作用,继电器使电机上电开始工作,如图6.9图6.9超过80后电机工作图总 结本次设计中遇到的问题和相关解决方法首先在编写程序时候存在困难,
28、对C语言编程的结构及具体语言都比较模糊,经过对以前的C语言识复习,现在勉强能在同学的帮助下,完成软件测试。其次定时唤醒排气扇工作的设置最先总是出现可以设定第二组电机唤醒时刻却并能保存在相应的变量中,但到了时刻却没有出现预期的电机唤醒,通过软件调试,不断修改循环体,最终解决了不响应中断的问题。心得体会:经过本次排气扇控制器设计,加强了我的动手能力和实践相结合的能力,并培养了团队精神,遇到了难题的时候,可以集思广益一起商讨解决问题的办法。在编程和软件测试这一块上,要有细心和耐心,细心则可避免一些编译上的小错误,而遇到软件测试不能达到预期效果时候就要耐心的去跟进循环,一遍一遍的分析程序的运行过程,查
29、找出程序体的不足并修改它。在做有温度传感器的控制器的时候,又联系到其他的传感器,如化学气体浓度传感器、红外线传感器、湿度传感器等。如果基于形形色色的传感器研发一些控制器,那么可以在一些工人不适合处得太久的化工环境里装上有化学浓度传感器控制器控制的排气装置,在有人活动就需排气运作的场所安装有红外线传感器控制器的排气装置,在对湿度有控制需求的场所,如花房等地方加上有湿度传感器控制器的排气装置,最终实现智能自动对环境的检测和控制。做这个设计的最大是发散思维,把对一个排气扇电机的控制器设计扩大到用单片机控制外设上这个层次的思维上去,其中监控手段则可以通过传感装置,充分利用软件资源,减少硬件的材耗。参考
30、文献1 张靖武,周灵彬.单片机系统的PROTEUS设计与仿真.电子工业出版社,2007年4月2 周澜景,张丽娜.基于PROTEUS的电路及单片机系统设计与仿真.北京航空航天大学出版社,2006年5月3 张友德.单片微型计算机原理、应用与实验.复旦大学出版社,2003年5月。4 潘永雄.新编单片机原理与应用.西安电子科技大学出版社,2003年。5 何立民.单片机高级教程(应用与设计)M.北京航空航天大学出版社,2000年8月6 李建忠.单片机原理及应用M.西安电子科技大学出版社,2002年2月7 谢运袢.电力电子单片机控制技术.机械工业出版社,2007年3月8 周明德.单片机原理与技术.人民邮电
31、出版社,2008年4月9 赵星寒,刘小波.从0开从始教你用单片机. 北京航空航天大学出版社,2009年01月10 邹久朋.80C51单片机实用技术.北京航空航天大学出版社,2008年04月11 周润景 袁伟亭基于PROTEUS的ARM虚拟开发技术北京航空航天大学出版社,20070112 林志琦,郎建军,李会杰,佟大鹏.基于Proteus的单片机可视化软硬件仿真.北京航空航天大学出版社,2006年09月 13魏小龙.MSP430系列单片机接口技术及系统设计实例M.北京:北京航空航天大学出版社,2002.5-6014方佩敏,新编传感器原理与应用M.北京:电子工业出版社,1994.154致 谢本课题
32、在选题及进行过程中得到胡湘娟老师的悉心指导。论文行文过程中,胡老师多次帮助我分析思路,开拓视角,在我遇到困难想放弃的时候给予我最大的支持和鼓励。胡老师严谨求实的治学态度,踏实坚韧的工作精神,将使我终生受益。再多华丽的言语也显苍白。在此,谨向胡老师致以诚挚的谢意和崇高的敬意感谢我的大学的朋友们,尤其是我的室友们,我们一起经历过的努力和成功的过程,一起走过的每一段路,我一生都不会忘记。友情的无私为我们的大学时光重重地写下了灿烂的一笔。附录1图2.3电路的源程序#include unsigned char led12=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0
33、x7f,0x6f,0x40,0x00; /用一维数组定义0-9、横杠、全灭unsigned char num10=2,0,1,1,5,2,0,3,0,4 ;/欢迎界面2011年5月20号学号304制作unsigned char a8; unsigned char second=11,minute=0,hour=0;unsigned char minute1=0,hour1=0,minute2=0,hour2=0;unsigned char b8=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/扫描unsigned char k=0;unsigned int t
34、emp; / 记录1000毫秒为1秒的变量unsigned char M,S_flag;/M是模式,更新时间的4种模式加上正常模式S_flag闪烁标志sbit K1=P30;sbit K2=P31;sbit K3=P32;sbit RUN=P33;void delay(unsigned n) /0.2毫秒 int x,y; for(x=0;xn;x+) for(y=0;y24;y+); void init() M=0; S_flag=0; /闪烁标志位 TMOD=0x10; /定时器1以方式1定时 TH1=0xfc; TL1=0x18; EA=1; /打开总中断 ET1=1; /允许定时器1中
35、断 TR1=1; /开启定时器1 (开始定时计数)void display_led()int x;char l,a,m;for(a=0;a26;a+)x=a-8;for(l=0;l50;l+)for(m=0;m=0&x10) P1=lednumx;else P1=led11;delay(10);x+;x-=8;void time1() interrupt 3 /定时器1中断函数 TH1=0xfc; /定时1ms TL1=0x18; temp+; if(temp=1000) /配合定时器定时1s temp=0; second+; if(second=59) second=0; if(minute
36、59) minute+; else minute=0; hour+; hour%=24; if(temp%250=0) /每250ms S_flag=!S_flag; /闪烁标志位取反 if(k=8) k=0; P1=ak; P2=bk+; delay(1); P2=0xff; void display()switch(M)case 0:a0=ledhour/10;a1=ledhour%10;a2=led10;a3=ledminute/10;a4=ledminute%10;a5=led10;a6=ledsecond/10;a7=ledsecond%10;break;case 1:if(S_fl
37、ag=1)a0=ledhour/10;a1=ledhour%10;elsea0=led11;a1=led11;a2=led10;a3=ledminute/10;a4=ledminute%10;a5=led10;a6=ledsecond/10;a7=ledsecond%10;break;case 2:a0=ledhour/10;a1=ledhour%10;a2=led10;if(S_flag=1)a3=ledminute/10;a4=ledminute%10;elsea3=led11;a4=led11;a5=led10;a6=led11;a7=led11;break;case 3:if(S_fl
38、ag=1)a0=ledhour1/10;a1=ledhour1%10;elsea0=led11;a1=led11;a2=led10;a3=ledminute1/10;a4=ledminute1%10;a5=led10;a6=led11;a7=led11;break;case 4:a0=ledhour1/10;a1=ledhour1%10;a2=led10;if(S_flag=1)a3=ledminute1/10;a4=ledminute1%10;elsea3=led11;a4=led11;a5=led10;a6=led11;a7=led11;break; case 5:if(S_flag=1)
39、a0=ledhour2/10;a1=ledhour2%10;elsea0=led11;a1=led11;a2=led10;a3=ledminute2/10;a4=ledminute2%10;a5=led10;a6=led11;a7=led11;break;case 6:a0=ledhour2/10;a1=ledhour2%10;a2=led10;if(S_flag=1)a3=ledminute2/10;a4=ledminute2%10;elsea3=led11;a4=led11;a5=led10;a6=led11;a7=led11; void key_prc() if(K1=0) delay(10);/延时去抖 if(K1=0) /按K1进行模式切换 M+;if(M=7) M=0;while(!K1);/等待按键释放 if(M!=0) switch(M) case 1: /模式1调时