单片机控制电路开关程序完整程序
- 格式:doc
- 大小:50.28 KB
- 文档页数:5
51单片机按键控制电路设计内容总结一、引言在现代电子产品中,按键控制是一种常见的操作方式。
通过按下不同的按键,可以实现不同的功能。
而在电子设备的控制电路中,需要一种可靠的方式来检测按键的状态,并根据按键的状态来进行相应的操作。
本文将介绍基于51单片机的按键控制电路设计。
二、按键控制电路的基本原理按键控制电路的基本原理是通过检测按键的状态来确定按键是否被按下。
当按键被按下时,按键的状态会发生改变,通过检测这种状态的改变,可以触发相应的操作。
在51单片机中,可以通过外部中断来实现对按键状态的检测。
当按键被按下时,会触发外部中断,从而通知单片机按键的状态发生了改变。
三、按键控制电路的设计步骤1. 硬件设计在按键控制电路的硬件设计中,需要确定使用的按键数量,并选择合适的按键类型。
常见的按键类型有机械按键和触摸按键。
根据实际需求,选择合适的按键类型,并将其连接到51单片机的外部中断引脚上。
2. 软件设计在按键控制电路的软件设计中,需要编写相应的程序来实现对按键状态的检测和相应操作的执行。
在51单片机中,可以通过中断服务程序来实现对外部中断的响应。
当外部中断触发时,中断服务程序会被执行,并根据按键的状态来执行相应的操作。
四、案例分析下面以一个简单的案例来说明按键控制电路的设计。
假设我们需要设计一个LED灯的开关控制电路,通过按下按键可以控制LED灯的开关状态。
1. 硬件设计选择一个机械按键作为控制按键,并将其连接到51单片机的外部中断引脚上。
同时,将一个LED灯连接到51单片机的IO口上。
2. 软件设计编写相应的程序来实现按键状态的检测和LED灯开关状态的控制。
当按键被按下时,外部中断触发,中断服务程序被执行。
在中断服务程序中,通过读取按键的状态来确定按键是否被按下,并根据按键的状态来控制LED灯的开关状态。
五、总结通过本文的介绍,我们了解了按键控制电路的基本原理和设计步骤。
在51单片机中,可以通过外部中断来实现对按键状态的检测。
用单片机控制的LED流水灯设计<电路、程序全部给出)开关电源设计制作学习园地»。
您尚未登录注册 | 社区服务 | 勋章中心 | 帮助 | 首页 | 无图版社区服务银行朋友圈开关电源设计制作学习园地 -> 好好学习-天天向上 -> 用单片机控制的LED流水灯设计<电路、程序全部给出) XML RSS2.0 WAP--> 本页主题: 用单片机控制的LED流水灯设计<电路、程序全部给出)加为IE收藏 | 收藏主题 | 上一主题 | 下一主题pwmdy级别: 电源-1级工程师精华: 0发帖: 212威望: 126 点金钱: 212 RMB贡献值: 0 点注册时间:2009-05-21最后登录:2009-11-22用单片机控制的LED流水灯设计<电路、程序全部给出)1.引言当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。
单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。
目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。
学习单片机的最有效方法就是理论与实践并重,本文笔者用AT89C51单片机自制了一款简易的流水灯,重点介绍了其软件编程方法,以期给单片机初学者以启发,更快地成为单片机领域的优秀人才。
2.硬件组成按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等。
AT89C51单片机是美国ATMEL公司生产的低电压、高性能CMOS 8位单片机,具有丰富的内部资源:4kB闪存、128BRAM、32根I/O口线、2个16位定时/计数器、5个向量两级中断结构、2个全双工的串行口,具有4.25~5.50V的电压工作范围和0~24MHz工作频率,使用AT89C51单片机时无须外扩存储器。
单片机如何通过IO口实现断电自关机单片机通过IO口实现断电自关机功能是相当重要的,这可以确保系统在遇到特定条件时能够自动关闭以避免电路损坏或数据丢失。
下面将详细介绍如何通过IO口实现断电自关机功能。
要实现断电自关机功能,首先需要了解单片机的工作原理。
单片机通过IO口与外部设备进行通信,控制和感知。
通过设置IO口的电平状态,可以实现开关的控制和输入/输出的读取。
利用这种特性,可以通过IO口控制继电器或MOSFET等控制器件,来断电自关机。
实现断电自关机功能所需的硬件包括单片机、电源管理模块(如继电器或MOSFET)、电源输入和电源输出等。
断开电源需要将电源输入与电源输出之间的电源线路断开。
下面是详细步骤:1.设计电源管理模块:电源管理模块是用来控制电源开关的关键组件。
可以选择继电器或MOSFET等不同的电源管理模块。
其中,继电器通常需要较高的控制电压,而MOSFET则仅需较低的控制电压。
2.连接电源管理模块和单片机:将单片机的IO口与电源管理模块的控制引脚(如继电器的控制引脚或MOSFET的栅极)连接起来。
通过设置IO口的电平状态,可以控制电源管理模块的开关状态。
3.编写控制程序:在单片机上编写控制程序,实现断电自关机的逻辑。
在程序中注意以下几点:-设置IO口为输出模式:在程序中,需要将IO口设置为输出模式,以便能够控制电源管理模块。
-设置IO口状态:通过设置IO口的电平状态,可以控制电源管理模块的开关状态。
通常,高电平表示开启,低电平表示关闭。
-判断断电条件:在控制程序中,需要设置相应的条件来判断是否需要进行断电自关机。
例如,当检测到电压超过一些阈值或温度过高时,需要触发断电自关机功能。
-触发断电操作:当满足断电条件时,通过设置IO口状态,触发电源管理模块的关闭操作。
这样,单片机将断开电源线路,实现自动断电。
4.调试和测试:编写完控制程序后,通过连接开发板或测试环境进行调试和测试。
确保程序能够准确判断断电条件,并通过设置IO口状态触发断电操作。
基于89C51的开关电源课程设计报告(附程序)XX大学模拟电路课程设计报告课题名称:基于STC12系列单片机的串联型开关电源设计与实现学院计算机与电子信息学院专业班级学号姓名摘要:本模拟电路课程设计要求制作开关电源的模拟电路部分,在掌握原理的基础上将其与单片机相结合,完成开关电源的设计。
本报告旨在详述开关电源的原理分析、计算、仿真波形、相关控制方法以及程序展示。
一、开关电源原理分析本课程设计采用单片机控制与模拟电路相结合的方法来实现开关电源。
单片机所采用的芯片为STC12C5A60S2,该芯片在拥有8051内核的基础上加入了10为AD和PWM发生器。
通过程序,即可控制单片机产生一定占空比的PWM脉冲,将此脉冲输入到模拟电路部分,在模拟电路的输出端即可产生一定的输出电压,可比较容易的通过程序来实现对输出电压的控制。
但上述的开环控制是无法达到精确的调节电压,因此需要采用闭环控制来精确调制。
即,对输出电压进行AD采样,将其输入回单片机中进行数据处理。
单片机根据处理的结果来对输出电压做出修正,经过这样的逐步调节即可达到闭环的精密输出。
由此原理,可以将整个过程分成一下模块:MCU控制模块,PWM波形输出模块,模拟电路模块,AD转换模块,数码管显示模块,键盘输入模块。
原理图如下:二、本设计的特色经过几次完善,本课程设计的程序改掉了之前的独立按键而换用了矩阵键盘,同时,矩阵键盘与数据的对应形式与手机键盘相同,操作方便。
对于显示函数进行了一定的修改,废弃了应用Delay函数的原始办法,改用中断进行显示,这样的效果更佳。
同时,对于闭环控制也进行了一定的更改,由原来的简单的对占空比进行操作变成了在一定时刻后对占空比进行10000次叠加取均值,这样使显示更加的稳定准确。
将每次输入数据都要复位的缺点进行看修改,只需先按独立按键就可进入重复键入数据的模式,使得程序更加实用。
同时程序中也加入了对输入数据进行修改和按键音的功能,使得整个设计更加人性化。
单片机驱动h桥电路
H桥电路是一种常见的电路结构,用于驱动电机或执行器等设备。
它由四个开关元件组成,可以实现正反转控制。
单片机作为控制器,可以通过控制这四个开关元件的通断,来实现对电机的驱动控制。
在H桥电路中,有两对开关元件,分别是S1和S2,以及S3和S4。
当S1和S4闭合,S2和S3断开时,电流从电源正极流过电机,使电机正转。
当S2和S3闭合,S1和S4断开时,电流从电源负极流过电机,使电机反转。
通过控制这四个开关元件的状态,可以实现电机的正反转控制。
单片机通过输出高低电平控制H桥电路中的开关元件。
当输出高电平时,对应的开关元件闭合;当输出低电平时,对应的开关元件断开。
通过不同的输出组合,可以实现不同的控制功能。
除了正反转控制外,H桥电路还可以通过控制开关元件的通断时间,实现PWM调速功能。
PWM调速是通过改变开关元件通断时间的占空比,来控制电机的平均电压值,从而控制电机的转速。
通过单片机的定时器模块,可以轻松实现对PWM调速的控制。
需要注意的是,在控制H桥电路时,要注意避免出现开关元件同时闭合的情况,以免损坏电路或电机。
因此,在单片机程序设计中,需要合理设计控制逻辑,保证开关元件的状态互斥。
单片机驱动H桥电路是一种常见的控制方式,可以实现对电机的正
反转控制和PWM调速控制。
通过合理设计单片机程序,可以灵活控制H桥电路,满足不同应用场景的需求。
一.单片机概述单片机是单片微型计算机SCMC(Single Chip MicroComputer)的译名简称,在国内常简称为“单片微机”或“单片机”。
单片机就是把组成微型机算计的各功能部件:包括中央处理器CPU、随机存储器RAM、只读存储器ROM/EPROM、中断系统、定时器/计数器、并行及串行口输入输出I/O接口电路等等部件集成在一块半导体芯片上,所构成的一个完整的微型机算机。
即是一个不带外围设备的单芯片微型计算机的电路系统。
随着大规模集成电路的发展,单片机内还可包含A/D、D/A转换器、高速输入/输出部件、DMA通道、浮点运算等特殊功能部件。
由于单片机的结构和指令功能都是按工业控制要求设计的,特别适合于工业控制及与控制有关的数据处理场合,国外称其为微控制器(Mirocontroller)。
除了工业控制领域,单片微机在家用电器、电子玩具、通信、高级音响、图形处理、语言设备、机器人、计算机等各个领域迅速发展。
目前单片微机的世界年产量已达100亿片,而在中国大陆地区单片微机的年应用量已达6亿片左右,截止2001年4月,由中国大陆地区自行设计和生产的单片微机也已达到2000万片。
综观二十多年的发展过程,单片微机正朝多功能、多选择、高速度、低功耗、低价格、扩大存储容量和加强I/O功能及结构兼容方向发展。
单片机是典性的嵌入式系统,单片机系统的体系结构和指令系统结构,是按照嵌入式控制应用而设计的。
作为嵌入式应用时,即嵌入到对象环境、结构、体系中作为其中的一个智能化控制单元,如洗衣机、电视机、VCD、DVD等家用电器,打印机、复印机、通讯设备、智能仪表、现场控制单元等。
构成各种嵌入式的应用电路,统称为单片机应用系统。
二.DJ-598KC实验系统相关知识1.认识DJ-598KC+单片机开发系统的结构2.系统主要特点(1)系统自动识别CPU:40芯扁平电缆RS232PC机仿真DJ-598K1单片机开发系电源598KC是集51、96、8088三大系列CPU于一体的三合一实验系统,内置51/96单片机仿真器和8088实验系统。
51单片机智能小车全速前进程序源代码、电路原理图、电路器件表智能小车电路板分为核心板和驱动板。
核心板上的处理器的芯片型号是:STC15W4K56S4,这是一款51单片机。
驱动板上有电源电路、电机驱动电路以及一些功能模块接口。
智能小车全速前进只要控制智能小车的四个轮子以全速向前转动就可以了。
智能小车的四个轮子由四个直流减速电机驱动。
直流减速电机驱动芯片采用L293D,一片电机驱动芯片L293D可以驱动两个直流减速电机,智能小车用到4个直流减速电机,需要用到两片L293D 电机驱动芯片。
在本文主要提供了智能小车全速前进的完整的程序原代码、电路原理图以及电路器件表。
下面是智能小车前进实验的程序流程图:智能小车核心板原理图STC15W4K56S4智能小车核心板器件(BOM)表实物图060306030603PIN插针PIN2x1406030603直插LQFP7x7-48 STC15W4K56S4智能小车核心板正面STC15W4K56S4智能小车核心板背面智能小车驱动板原理图51单片机(STC15W4K56S4)智能小车驱动板器件(BOM)表实物图直插直插直插直插直插直插直插直插直插直插PIN与PIN之间的间隔2.54mm插电池盒PIN与PIN间隔2.54mm,插电机3PIN插针,针与针间隔2.54mm插舵机红色插针和黑色插针3.3V红色插针、GND黑色插针PIN红色插针和黑色插针5V PIN红色插针和黑色插针VINPIN与PIN之间的间隔2.54mm 插MQ2模块针与针间隔2.54mm插GP2Y1014AU模块针与针间隔2.54mm语音播报实验时,串口4插语音播报模块针与针间隔2.54mmIO扩展用,没有必要不要焊接针与针间隔2.54mm插DHT11模块用4PIN插针,针与针间隔2.54mm用杜邦线连接超声波模块针与针间隔2.54mm插蓝牙模块(要原厂原装的)用8PIN插针,针与针间隔2.54mm杜邦线连接红外循迹避障模块用4PIN插针,针与针间隔2.54mm用杜邦线连接测速模块针与针间隔2.54mm插5V的LCD1602液晶MPU6050不要焊接。
单片机驱动h桥电路H桥电路是一种常用的电路结构,用于驱动电机或其他负载。
它由四个开关管组成,可以实现正反转和制动等功能。
在本文中,我们将探讨如何使用单片机来驱动H桥电路,从而实现对电机的精确控制。
我们需要了解H桥电路的基本原理。
H桥电路由四个开关管组成,分别命名为Q1、Q2、Q3和Q4。
通过控制这四个开关管的导通和截止状态,可以实现电机的正转、反转和制动功能。
具体来说,当Q1和Q4导通,Q2和Q3截止时,电机正转;当Q2和Q3导通,Q1和Q4截止时,电机反转;当Q1和Q2导通,Q3和Q4截止时,电机制动。
为了实现对H桥电路的控制,我们可以使用单片机来输出控制信号。
单片机具有多个IO口,可以通过设置IO口的高低电平来控制开关管的导通和截止状态。
以控制电机正转为例,我们可以将Q1和Q4的控制信号分别连接到单片机的两个IO口,通过设置IO口的输出状态来控制开关管的导通和截止。
在控制电机正转的过程中,我们需要注意以下几点。
首先,为了避免电机过载,我们需要在单片机程序中添加电流保护功能。
当电机电流超过一定阈值时,单片机会自动切断开关管的导通,以保护电机和电路。
其次,为了确保电机正转的平稳性,我们需要在单片机程序中添加软启动和软停止功能。
软启动可以逐渐增加电机的转速,避免电机突然启动时的冲击力;软停止可以逐渐降低电机的转速,避免电机突然停止时的反冲力。
除了控制电机正转,我们还可以通过类似的方式实现电机的反转和制动功能。
通过设置单片机的IO口状态,我们可以实现对H桥电路的精确控制,从而实现对电机的精确控制。
总结一下,使用单片机驱动H桥电路可以实现对电机的正转、反转和制动功能。
通过设置单片机的IO口状态,我们可以控制开关管的导通和截止,从而实现对H桥电路的精确控制。
在编写单片机程序时,我们需要考虑电流保护、软启动和软停止等因素,以确保电机的安全性和平稳性。
这种方法不仅简单有效,而且可以实现对电机的精确控制,非常适合工业控制和自动化领域的应用。
单片机继电器代码
单片机继电器代码是指在单片机程序设计中使用继电器控制外部设备的代码。
继电器是一种电气控制元件,它可以将小电流控制大电流,用于控制各种电器设备的开关。
在单片机程序设计中,需要通过控制继电器的开关状态来实现对外部设备的控制。
具体实现方法是通过单片机的IO口输出高低电平信号,来驱动继电器的开关,从而实现对外部设备的控制。
例如,当需要控制一个灯的开关时,可以连接一个继电器模块到单片机的IO口上,通过编写相应的代码控制继电器的开关状态,进而控制灯的开关。
下面是一个简单的单片机继电器控制代码的例子:
#include <reg52.h> // 引入单片机头文件
sbit relay = P2^0; // 定义继电器控制引脚
void main()
{
while(1) // 无限循环
{
relay = 1; // 控制继电器闭合,开启外部设备
delay(1000); // 延时1秒
relay = 0; // 控制继电器断开,关闭外部设备
delay(1000); // 延时1秒
}
}
在上述代码中,首先通过sbit关键字定义了继电器控制引脚,然后在主函数中通过控制该引脚的高低电平信号来控制继电器的开关状态,从而控制外部设备的开关。
在while循环中,通过delay函数实现了简单的时间延迟,以便观察继电器控制的效果。
需要注意的是,实际控制外部设备时,还需要根据具体设备的电气特性来选择合适的继电器型号,并注意继电器的额定电流和控制电压等参数。
同时,还需保证单片机和外部设备的电源供电一致,以免引起电路故障。
基于51单片机控制的开关电源设计一、引言开关电源是一种将交流电转换为直流电的电子设备,广泛应用于各个领域。
本文将以基于51单片机控制的开关电源设计为题,介绍设计的原理和实现过程。
二、设计原理开关电源的设计主要包括输入电路、滤波电路、变压器、整流电路、滤波电路、稳压电路以及控制电路。
其中,控制电路起到控制和调节输出电压的作用。
在本设计中,我们采用了51单片机作为控制电路的核心,通过编程控制电路的开关状态,实现对输出电压的精准调节。
三、设计过程1. 输入电路的设计:输入电路主要用于将交流电转换为直流电,并对电压进行稳压处理。
我们选择了整流桥和滤波电容作为输入电路的核心元件,通过整流和滤波,将交流电转换为平稳的直流电。
2. 变压器的设计:变压器是开关电源的重要组成部分,用于提高或降低输入电压的大小。
我们根据实际需求选择合适的变压器,使得输出电压与输入电压之间满足所需的关系。
3. 整流电路的设计:整流电路用于将输入电压转换为脉冲电压,我们选择了二极管桥整流电路,通过将输入电压进行整流,得到脉冲电压。
4. 控制电路的设计:控制电路是整个开关电源设计中最关键的部分,我们选择了51单片机作为控制电路的核心。
通过编程,我们可以控制开关管的开关状态,从而实现对输出电压的调节和稳定。
5. 输出电路的设计:输出电路主要用于输出稳定的直流电压。
我们选择了稳压电路和滤波电容作为输出电路的核心元件,通过稳压和滤波,得到稳定的输出电压。
四、实现效果通过以上的设计过程,我们成功实现了基于51单片机控制的开关电源。
通过编程控制,我们可以实现对输出电压的精确调节和稳定控制。
该开关电源具有输出电压稳定、效率高、响应速度快等特点,适用于各种电子设备的供电需求。
五、总结本文以基于51单片机控制的开关电源设计为题,介绍了设计的原理和实现过程。
通过该设计,我们可以实现对输出电压的精确调节和稳定控制,满足各种电子设备的供电需求。
希望本文能为读者提供有关开关电源设计的参考和借鉴,同时也希望读者能够通过自己的努力和创新,设计出更加高效和稳定的开关电源。
1 附录2 主程序 #include #define uchar unsigned char #define uint unsigned int sbit KEYON =P2^0; // 开始键 sbit KEYOFF=P2^1; // 关闭键 sbit KEYSET=P2^2; // 预约键 sbit KEYINC=P2^3; //加1键 sbit KEYDEC=P2^4; // 减1键 sbit KEYFREE=P2^5; //预留键 sbit POWER=P3^6; //电源开关指示灯 sbit LED=P3^3 ; //按键指示灯 uchar code dispcode[]={0x3f,0x06,0x05b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //0-9的字型码 uchar data disbuf[]={0,0,0,0}; //显示缓冲区 uchar hour,min ; //小时、分变量 bit Onflag,flag; uchar Setflag; void delay(uchar); //延时子函数 void init(void); //定时器初始化子函数 uchar GetKeyNum(); //求按键号 void Keyprocess(uchar); //按键处理子函数 void calculate(); //计时子函数 void display(); //显示子函数 //--------------------主函数------------------------- void main(void) { init(); P1=0x00; while(1) display(); } //-------------定时器TO、T1初始化,外部中断0初始化子函数-----
void init() { TMOD=0x11; //TO、T1作定时器、工作方式1 TH0=(65536-50000)/256 ; //定时50ms TL0=(65536-50000)%256; TH1=(65536-50000)/256; TL1=(65536-50000)%256; IT0=1; //选择外部中断0为下降沿触发方式 EX0=1; //开外部中断0 ET1=1; //开定时器1 ET0=1; //开定时器0 EA =1; //开总中断 TR0=1; } //----------显示子函数-------------------------- void display() { uchar i,j=0x08; if((Setflag==0)&&!(min|hour)) //数码管显示“- - - -” 2
{ for(i=0;i<4;i++) disbuf[i]=dispcode[10]; } else // 正常显示时间 { disbuf[0] = dispcode[min%10]; //分个位 disbuf[1] = dispcode[min/10]; //分十位 disbuf[2] = dispcode[hour%10]+0x80; //小时个位 disbuf[3] = dispcode[hour/10]; //小时十位 } if((Setflag!=0)&flag) //如果调时,数码管闪烁显示 { for(i=0;i<4;i++) { if((disbuf[i]==0x3f)&&(i>2)) //不显示前面的0 P0=0; else P0=disbuf[i]; if(Setflag==1) P1=j&0xfc; //调时,关断前两位位码 else P1=j & 0xf3; //调分,关断后两位位码 delay(5); //延时2.5ms P1=0x00; j=j>>1; } } else //数码管正常显示
{ for(i=0;i<4;i++) { if((disbuf[i]==0x3f)&&(i>2)) P0=0; //不显示前面的0 else P0=disbuf[i]; P1=j; //位选通 delay(5); //延时2.5ms P1=0X00; j=j>>1; } } } //--------------外部中断0中断函数--------------------------------- void int0()interrupt 0 using 0 { uchar keynum; display(); //动态显示程序作为去抖动 if(INT0==0) //判断是否有按键按下 { keynum=GetKeyNum(); //有效键,获取键值 while(INT0==0); //等待按键释放 Keyprocess(keynum); //按键处理 } } //-----------------定时器0中断子函数---------------------------- void time0() interrupt 1 //处理调时、显示器闪烁 { static uchar ledcnt,num; //设置静态变量 TH0=(65536-50000)/256; //定时50ms 3
TL0=(65536-50000)%256; if((Onflag && ((hour | min)!=0)) |! Onflag) //指示灯每隔0.5s闪烁 { ledcnt++; if(ledcnt==10) // 10 X 50mS=0.5S { ledcnt=0; LED=~LED; } } if(Setflag!=0) //调时闪烁 { num++; if(num==5) { num=0; flag=~flag; } } } //-------------定时器1中断子函数------------------- void time1() interrupt 3 { TH1=(65536-50000)/256; TL1=(65536-50000)%256; calculate(); //计时 } //-----------------求按键号------------------------------- uchar GetKeyNum() { uchar temp; if(KEYON==0) temp=1; if(KEYOFF==0) temp=2; if(KEYSET==0) temp=3; if(KEYINC==0) temp=4; if(KEYDEC==0) temp=5; if(KEYFREE==0) temp=6; return(temp); } //--------------------按键处理函数---------------------------- void Keyprocess (uchar x) { switch(x) { case 1: //KEYON处理函数 Onflag=1; //开Onflag标志 Setflag=0; //关(Setflag)调时标志 if((!Setflag)&&!(hour | min)) //没有调时且未处于预约,继电器通 { POWER=0; LED=0; } else TR1=1; //定时器1运行、执行计时程序 break; case 2 : //KEYOFF,关处理,标志清0 4
Onflag=0; Setflag=0; hour=0; min=0; POWER=1; LED=1; break; case 3: //预约调时/调分键,处理调时标志 if(Onflag==0) { Setflag++; if(Setflag==3) Setflag=1; } break; case 4: //加1键 if(Setflag==1) //调时键,最大只能调到11 { hour++; if(hour==12) hour=0; } if(Setflag==2) //调分键,最大只能调到59 { min++; if(min==60) min=0; } break; case 5: //减1键 if(Setflag==1) //调时键,减小时处理,最小0 { hour-- ; if(hour==-1) hour=12; } if(Setflag==2) //调分键,减分处理,最小0 { min--; if(min==-1) min=59; } break; } } //---------------------计算时间--------------------------------- void caculate() { static uint tcount; //tcount为定时次数 if((hour | min)!=0) { tcount++; //1次50ms到,改变定时次数 if(tcount==1200) //1200*50ms=1分钟 { tcount=0; //初始化定时次数 if(min==0) {