• 最好用的程序,曾经在国家比赛获得二等奖!
  • 就是先按轻触开关给系统供电,系统上电正常工作后通过一个引脚控制一个电子开关,代替轻触开关为系统供电,在单片机程序设计时定义一个变量,每次使用系统时清零该变量.没有使用系统时利用单片机的定时器自动累加此...
    设计思路很简单.就是先按轻触开关给系统供电,系统上电正常工作后通过一个引脚控制一个电子开关,代替轻触开关为系统供电,在单片机程序设计时定义一个变量,每次使用系统时清零该变量.没有使用系统时利用单片机的定时器自动累加此变量。到达一定值后该引脚输出翻转,控制电子开关关闭,系统自动断电。

        相关电路如附图所示。系统采用 9V 电池供电。所以要先用 7805 稳压。 Q1 为电子开关, Q2 及其周边元件为控制电路。 R1 和 R3 的阻值可以根据实际电路加以选择。电子开关受单片机的④脚控制。复位电路分为上电复位及按键复位,系典型应用。

        其工作过程为:按下 S1 键,电源通过 S1 向系统供电 , 单片机在 200ms 左右开始正常工作,在初始化时 P1 口为高电平, Q2 导通,使 Q1 的基极为低电平, Q1 导通,取代 S1 键给系统供电。

        程序如下:

    小型单片机系统延时关机程序及电路

    也可以将电源控制电路换为一个带有控制端的 LDO, 使产品的集成度及稳定性有很大的提高。大家可以根据实际需要选取。有的 LDO 还集成有看门狗一类的功能,可以进一步简化电路设计。

    小型单片机系统延时关机程序及电路

    展开全文
  • 单片机一键开关机电路,多种方案可供选择,有纯硬件的也有软硬结合的 一键开关机电路 方案一、 先上一个低功耗的一键开关机电路,这个电路的特点在于关机时所有三极管全部截止几乎不耗电。 原理很简单: 利用...

    单片机一键开关机电路,多种方案可供选择,有纯硬件的也有软硬结合的
     
     一键开关机电路

     方案一、

    先上一个低功耗的一键开关机电路,这个电路的特点在于关机时所有三极管全部截止几乎不耗电。


    原理很简单:

           利用Q10的输出与输入状态相反(非门)特性和电容的电流积累特性。刚上电时Q6和Q10的发射结均被10K电阻短路所以Q6和Q10均截止,此时实测电路耗电流仅为0.1uA,L_out输出高,H_out输出低。此时C3通过R22缓慢充电最终等于VCC电压,当按下S3后C3通过R26给Q10基极放电,Q10迅速饱和,Q6也因此饱和,H_out变为高电平,当C3放电到Q10be结压降0.7V左右时C3不再放电,此时若按键弹开C3将进一步放电到Q10的饱和压降0.3V左右,当再次按下S3,Q10即截止。
           这个电路可以完美解决按键抖动和长按按键跳档的问题,开关状态翻转只发生在按键接触的瞬间,之后即便按键存在抖动或长按按键的情况开关状态不会受到影响。这是因为R22的电阻很大(相对R23,R26,R25)当C3电容的电压稳定后,R22远不足以改变Q10的开关状态,R22要能改变Q10的状态必须要等S3弹开后C3将流过R22的小电流累积存储,之后再通过S3的瞬间接触快速大电流释放从而改变Q10的状态。

    非低功耗的三极管一键开关机电路:


           这个电路的原型来自互联网,参数有调整,原理和第一个低功耗电路相似在此不再赘述。以上两个电路都深入了解之后再看本帖的主题一键三档电路:


           这个电路实际就是本帖前两个电路的融合,可以实现低功耗待机和1档、2档、关机等3个档位。上电之初由于Q1,Q4,Q5的be结都并联了电阻,因此所有三极管都截止电路低功耗待机,C3开始充电到VCC电压。当按下S1后,Q5饱和,同时Q1也因此饱和,L_out1输出低电平Q4截止—>Q3截止、Q2饱和,C3放电为0.3V(Q5的饱和压降)左右。再次按下S1,Q5截止L_out1输出高电平—>Q2截止,Q4饱和L_out2输出低电平,由于R4和C1的延时作用Q3会延迟饱和,可以保证Q2完全截止后Q3基极才会为低电平,因此Q2,Q3都不会饱和。当再次按下S1,Q5由截止变为饱和L_out1再次输出低电平—>Q2饱和(同时Q4截止),Q3饱和延迟—>Q1截止,电路进入待机状态。

     

     方案二、

    其中用到的一键开关机电路分析如下:

    电路工作流程如下:

    A、 Key按下瞬间,Q2、Q1导通,7805输入电压在8.9V左右,7805工作,输出5V电压给单片机供电。

    B、单片机工作后,将最先进行IO口初始化,IO1设为输入状态,启用内部上拉;IO2设为输出状态,输出高电平。这时Q2、Q3导通,LED1发光,7805能够正常工作,单片机进入工作状态。

    C、当Key再次按下时,检测IO1电平为低,单片机可以通过使IO2输出低电平,Q2、Q3不导通,此时7805输入电压几乎为0,单片机不工作,系统关闭。

     方案三、

    电路如图

    原理很简单,Q1,Q2组成双稳态电路。由于C1的作用,上电的时候Q1先导通,Q2截止,如果没按下按键,电路将维持这个状态。Q3为P沟道增强型MOS管,因为Q2截止,Q3也截止,系统得不到电源。

      此时Q1的集电极为低电平0.3V左右,C1上的电压也为0.3V左右,当按下按键S1后,Q1基极被C1拉到0.3V,迅速截止。Q2开始导通,电路的状态发生翻转,Q2导通以后将Q3的门极拉到低电位,Q3导通,电源通过Q3给系统供电。

      Q2导通后,C1通过R1,R4充电,电压上升到1V左右,此时再次按下按键,C1的电压加到Q1基极,Q1导通,Q1集电极为低电平,通过R3强迫Q2截止,Q3也截止,系统关机。整个开关机的过程就是这样。

     如果要求这个电路的静态功耗低,可以全部采用MOS管,成本要高点,电路如下图,原理都是一样的,双稳态电路,就不分析了。

    方案四、

    电路图

    单键实现单片机开关机 


    1,控制流程,按下按键,Q1导通.单片机通电复位,进入工作. 
    2,检测 K-IN 是否低电平,否 不处理.是 单片机输出 K-OUT 为高电平,Q2导通,相当于按键长按.LED指示灯亮. 3,放开按键,K-IN 经过上拉电阻,为高电平.单片机可以正常工作. 
    4,在工作期间,按键按下,K-IN 为低电平,单片机检测到长按1秒,K-OUT 输出低电平,Q2截止.LED指示灯熄灭.放开按键,Q1截止,单片机断电. 
    5,通过软件处理,可以实现短按开机,长按关机. 
    单片机用PIC16F84A,通过简单的程序演示,证实此电路的可行性。
    这电路如果这样用,是体现不出它的优点,用到开关电源控制,控制光耦.可以做到完全关断电原,实现零功耗待机.有些打印机上就是用这种电路.

    方案四:下面是用CD4013 构建的电路

    CD4013电路关断时已经把后面电路切断了,而4013本身的电源不需关闭,COMS电路静态工作电流极少,1uA以下,可以忽略不计。
    用 4013 的电路对电源范围适用较广,3~18V都没问题,电路唯一需调整的就是根据电源电压和负载电流适当更改R1的值。
    开关管也可以用MOSFET,效果更佳。

     

     

     

    一、继电器方式:

    1、ON按下之前,电容C1充电电压到达5V,三极管Q1工作,Q2不工作,继电器也不工作,没有输出;

    2、ON按下,Q2开始工作,继电器工作,RL1线路切换,Power OUT输出电压,系统电源启动,启动后A输出高电平,D3灯常亮,A点电压高来维持Q1 ,Q2工作保证继电器一 直工作状态;

    3、OFF按下时,Q1不工作,Q2不工作,C1放电,继电器断开,树莓派强制断电;

    4、另一种情况,当Soft OFF按下,由于A一直输出高,所以B口检测到电平变化是由低变高,告诉系统要执行关机操作,系统关机后A输出低,Q1,Q2所需要的工作电平有C1来提供,等C1放电结束后,Q1,Q2不工作,继电器断开,系统断电。

     

    二、PMOS方式:

    1、K1按下之前,Q1断开,电源没有输出;

    2、K1按下,B点电压拉低,Q1导通,Power_out有电压输出,后面的系统来控制POWER_ON/PFF输出高电平,Q2导通,则B点为低,Q1一直导通工作;

    3、POWER_CHECK检测到电平一直是高电平,说明Q1一直是导通的,电源开关正常工作;

    4、当再次按下K1时,POWER_CHCK为低,系统检测到电平的变化后,只需将POWER_ON/OFF输出为低,则Q2关断;

    5、松开K1后,B点电压为高,Q1关断,系统断电。

     

    三、与非门加继电器方式:

    1、由于4管脚处接的是上拉电阻,所以4出为高电平;

    2、建设5处为低,则6输出高,Q1不工作,A、B断开,1、2管脚为高,则3为低一直保持5脚为低;

    3、K1按下,则5脚变成高,6脚位低,Q1工作,AB导通,1、2管脚为低,则3为高一直保持5脚位高,保证继电器一直工作;

    4、K1再次按下时,5脚变成低电平,6脚为高,Q1不工作,1、2脚为高,3脚为低;

    5、其中的R5、C2构成了按键的RC延时电路,时间为1/RC。

     

    四、双稳态电路:

    1、Q2,Q3组成双稳态电路。由于C1的作用,上电时给C1充电,所以Q2的基级(D点)会率先变成高,Q2先导通,Q3截止,Q1不导通,VCC_OUT输出0V;

    2、Q2导通此时集电级(C点)的电压为低电平大概0.3V左右,C1上的电压也为0.3V左右;

    3、当按下K1后,Q2的基级(D点)电压被C1拉到0.3V,Q2迅速截止,Q3开始导通,电路的状态反生翻转,Q3导通后Q1的门级(B点)拉到低电位,Q1导通,VCC_OUT输出5V;

    4、Q3导通后,C1通过R1,R3充电,电压上升到1V(0.3v+0.7v)左右即F点电压;

    5、此时再次按下K1,C1的电压加到Q2的基级(D点),Q2导通,Q2的集电级(C点)为低电平0.3V左右,通过R4强迫Q3截止,Q1也截止,系统关机。
     

    展开全文
  • 电子DIY、Arduino、51单片机、STM32单片机、FPGA…… 电子百科、开发技术、职业经验、趣味知识、科技头条、设备拆机…… 公众号首页发送“ 1014 ”,获取本篇课设全部设计资料。 原文:...

     

    点击链接关注公众号首页发送“ 1014 ”,获取本篇设计全部资料!

    https://mp.weixin.qq.com/s?__biz=MzU3OTczMzk5Mg==&mid=2247487584&idx=3&sn=9649d59012fa69d61344ea91d42822cf&chksm=fd60c0e7ca1749f1da7e8e2bc666c56d893c836127b17d8ab85682f199cf8253cc8b71031992&token=1005114409&lang=zh_CN#rd

    ——————————————————————————————————————————

     

    本介绍了一种基于单片机控制的数控开关电源,以89C51单片机作为控制核心,对开关变换电路进行脉宽调制,构成一个智能闭环控制系统。单片机控制的开关电源具备更加完善的功能,更人性化、智能化,便于实时监控。其功能主要包括对开关电源输出电压进行检测,并显示实时电压值;通过按键进行编程预置期望输出的电压;通过A/D转换器采样输出电压,根据PID算法计算控制量修改占空比,以得到期望的输出电压,并通过PID算法控制输出电压稳定在设定的电压值上;拥有可靠的过流保护功能以及辅助电源可同时作为电源输入和给单片机提供工作电压,并可以通过键盘不断改变PID参数,可以进行实时调整。

     

     

    假设基准电压为5v,由于电网波动导致输入电压减小,那么输出电压也将会减少,此时,所采样的电压将减小,假设为4.9v,误差为0.1v,经过比较放大后,脉冲调制电路根据这个误差,提高占空比使输出电压增大,同理,当由于电网波动导致输出电压增大时,脉冲调制电路降低占空比使输出电压减小,以此来控制输出电压的稳定。

     

     

    市电经过整流滤波后,一路电压经过7805稳压得到一个+5v电压,该电压作为单片机的工作电源,另外一路电压直接作为开关变换电路的输入电压。单片机根据键盘输入值和取样值之间的差值,修改脉冲占空比,并输出控制功率开关管,以便得到期望的输出电压值,并根据模/数转换器所采样的电压和键盘输入比较,根据差值调用PID算法再次修改脉宽使输出电压稳定。

     

    开关变换器采用磁铁心电感作为储能元件,在功率开关管导通时,电感储能,在开关管截止时,电感释放能量给负载。单片机定时采样输出端的电压,通过ADC0832送进单片机进行处理,单片机根据处理结果输出更新的控制信号,经过光电耦合器滤除干扰后输出控制信号控制功率开关管工作状态。

     

    在本系统中,用户可以根据需要从键盘输入期望的电压,单片机会根据键盘输入与采样电压的差值,更新脉宽,使电源输出相应电压,更新脉宽后,单片机会马上调用PID控制算法,对输出电压进行稳定控制。

     

    闭环时,电源自动进行脉宽调制,当系统读取到键盘预置的电压变化时,先将键盘输入值和从输出端的取样值相比较,假设当前键盘输入为10v,从输出端取样的值为6v,差值为4v,则系统会根据这个差值,更新脉宽使得输出端电压上升为10v;同样,当键盘输入为6v,输出端取样值为10v,差值为-4v,系统会根据算法,将占空比减小以使输出电压变小,这就是系统脉宽调制过程。

     

    同时,电源可以自动稳压,假定在某一正常状态下,输出为V0,反馈电压问Vf(Vf=V0),用户设定电压为Vs,当V0=Vs时,偏差为0,单片机不进行脉宽更新,当电网波动导致输出增加时,即V0>Vs时,单片机采样的电压也增加,单片机根据偏差修改占空比使导通时间变小,从而使电压下降,同样当电网波动使输出电压下降时,即V0<Vs时,单片机修改脉宽使导通时间变长,从而使输出电压上升,如此循环来进行稳压。

     

    1.整流滤波电路

     

    市电经过变压器降压后,变为12v,对该电压整流后一部分电压直接作为开关变换电路的输入电压,另外将其通过7805得到5v的电压,给开关电源控制电路部分的单片机提供工作电源。

     

    电路中采用发光二极管作为电源指示灯,交流220v降压后经过整流桥整流输出直流电压作为开关变换电路的输入电压,7805稳压输出5v给单片机提供电源。

     

     

    2.开关变换电路

     

    功率开关管采用达林顿管,由于它采用两个三极管进行级联,其放大倍数是两个管子放大倍数的乘积,因而具有很高的放大倍数,通过级联,可获取大的电流输出,对于提高电源的输出功率,有一定的作用。该开关管选择为PNP型,当控制脉冲的低电平时,开关导通,电感存储能量,开关把电路的输入电压变成高频脉冲,当控制脉冲为高电平时,开关截止,电感把所存储的能量释放给负载。为了确保电感电流能在开关转换过程中保持连续,选用肖特基二极管作为续流二极管选用,这种二极管具有较快的导通截止恢复时间,在开关导通变为截止时,能够很快的由截止转换到导通,所以能够确保电感电流连续。

     

     

    3.保护电路

     

    在电源输出端,设置负载电流检测电阻R0,通过R0将负载电流Io变成过流检测电压,三极管作为过流控制管,当开关电源负载电流时,过流控制三极管导通,电源输出电压由过流控制管集电极输出,触发晶闸管导通,将开关电源负载短路,实现保护。该电路有自锁功能,一旦负载电流增大的持续时间超过C1的充电时间,电路触发后,即使负载电流恢复正常,也不能解除保护状态,必须关断电源,排除过流因素,晶闸管才能复位。电路中Ro阻值的选择根据负载电流保护阈值而定,一般Ro取电阻值极小,在开关电源正常负载电流时其压降不足0.3v。R1和C1构成保护启动延时电路,以免开机瞬间负载电流冲击造成误动作。下图中,电感和输出端电容之间的部分是保护电路。

     

     

    4. 软件设计思想

     

    系统扫描键盘输入,当键盘有输入,系统立即会做出响应,根据采样电压与键盘输入之间的差值,更新脉宽,输出用户期望的电压,随后系统仍扫描键盘,当没有再次输入时,系统调用PID控制算法,控制输出电压稳定。电源额定电压为12v,初始化把设定值设为12.00v,系统扫描键盘时,若与该电压相等,系统调用PID算法,在系统每次调用PID控制算法前,若有键盘输入,系统优先响应键盘输入,更新脉宽。

     

    软件子程序包括:(1)键盘和数码管扫描子程序,(2)ADC0832转换子程序,(3)定时器0中断产生方波子程序,(4)PID控制子程序,(5)定时器1中断修改占空比、进行PID控制、数码显示子程序。

     

     

     

    展开全文
  • 51单片机精确延时

    2020-05-11 10:51:59
    关于51单片机精确延时的问题 时钟信号的作用及产生原理 在使用51单片机时,以前只会用...我们知道一个单片机要想正常运行程序就需要①电源电路,②复位电路,③时钟电路。对于电源电路,供电嘛,没什么可说的。复...

    简明理解从晶振原理到51单片机精确延时

    鄙人初学51,很多地方不是太懂,只是根据自己理解所写,大佬勿喷。图片来源网络,如有侵权,请联系删除。

    时钟信号的作用及产生原理

    在使用51单片机时,以前只会用while()等循环语句进行粗略的延时,但在很多时候这种方法不太nice。最近刚学习了51单片机的精确延时,来做一个笔记。好了,闲言少叙。

    要想实现精确延时,首先我们要有一个准确的振荡信号,即时钟源。我们知道一个单片机要想正常运行程序就需要①电源电路,②复位电路,③时钟电路。对于电源电路,供电嘛,没什么可说的。复位电路则可用于重置单片机,就像无线路由器后面的重置键一样。如果说我们的单片机收到外部干扰等一系列可怕的情况导致程序跑飞(错乱了),我们就可以通过复位电路重置单片机,使其重新从头运行程序。那么时钟电路又是干什么用的?

    其实时钟电路才是单片机的核心,它为单片机规定了时间基准。有的初学者可能会有疑问,为什么要规定时间基准?打个比方,我们知道单片机只能识别二进制,即0和1。0就代表关,1就代表开。这是一种最简单的逻辑。在电路中我们用高电压代表1,用低电压代表0。因此我们就可以用电压的高低来在电路中表示简单的逻辑。在这个前提下,如果我们要给计算机发送一串数据,如10101010,那很好实现,我们只需要检测电压的高低变化就可以。然而如果我们发送的数据是11110000,鬼知道你到底发了几个0和1?所以我们需要一个时钟步调去给它打一个拍子,隔一段相同的时间就去观察一下现在是高还是低。这就是为什么要引入时钟电路的原因。

    那具体怎么实现呢?先来科普一个小知识:(压电效应——某些电介质在沿一定方向上受到外力的作用而变形时,其内部会产生极化现象,同时在它的两个相对表面上出现正负相反的电荷。当外力去掉后,它又会恢复到.原来的状态。)简单来说,对于某些物质,你在它的两个面上施加压力,在这两个面上就会产生电压(就像打火机里面的打火装置一样)。反之,如果你在这两个面上施加一定的电压,它就会产生机械形变(有的玩具里面的喇叭,一个小片,叫做压电陶瓷)。

    压电效应
    压电效应
    压电陶瓷
    在这里插入图片描述
    我们在了解了压电效应以后,就不难想到,如果对于某些物质,给他一个电压使其发生弹性机械形变,然后它在其自身的弹性作用下就会恢复原来的状态,在它的形状回到原来状态的形变过程中,就会产生一个电压,等他回到原来的状态,则又接触到了我们最初施加给它的电压,它有会发生相同的弹性机械形变。如此周而复始。当然,这个过程是非常快的,而其在恢复自身原来状态过程中产生的电压信号,就形成了我们最初检测到的振荡信号。我们一般会利用石英来作为产生时钟信号的元件,这种元件我们叫做晶体振荡器,简称晶振。
    晶振
    在这里插入图片描述

    时钟信号怎么用?

    我们在了解了时钟信号的产生原理后,可能会有疑问,时钟信号怎么去利用?下面我们来讨论这一问题。首先我们要明确的是晶振的频率是特别高的,常用的有8M,11.0592M,12M等频率。我们要知道,对于一个单片机来说如果工作太快,就可能造成运行不稳定,如果一个时钟的频率太高,那么我们的单片机要与之同步,就会使单片机一直检测时钟信号而疲于奔命,所以我们为了追求单片机运行的稳定性以及准确性,我们引出了一个概念——分频。

    所谓分频即受外部晶振周期信号激励所产生的震荡,其频率恰为激励信号频率的纯分数,叫做分频,如果有一个晶振的频率是12MHz,其经过12分频后,那么其产生的时钟频率就是1MHz。即n分频就是晶振频率除以n后产生的时钟频率。像常用的国产STC89C52单片机,其利用的就是12分频。产生分频的电路成为分频器。其原理鄙人也没研究过。

    经过以上步骤,我们已经可以产生一个可供单片机直接使用的时钟信号。但是我们还有几个很重要的概念需要去理解:时钟周期,机器周期,指令周期。

    • 时钟周期
      时钟周期就是我们所说的晶振震荡信号的周期,其为时钟频率的倒数。时钟周期是计算机中最基本的、最小的时间单位。

    • 机器周期
      机器周期是指经过分频后的时钟周期,在一个机器周期内,单片机可以完成一个最基本的动作。

    • 指令周期
      指令周期,我们知道,在C语言编程时,我们需要先写好程序,再由计算机上的C语言编译器将我们的代码编译为汇编指令,在进一步处理。然而每一条C语言程序可能会编译出汇编指令的条数各不相同。(一条汇编指令就是一条基本操作,即占用一个机器周期)因此一条C语言代码编译出若干个汇编指令,即一条C语言指令运行的时间位机器周期的整数倍。

    触发器与寄存器

    了解了以上概念后,我们就可以对单片机进行精确延时了。首先,我们要知道什么是寄存器。不过首先我们先来看看什么叫触发器,我们应该都玩过5块钱一个的小激光笔,上面往往有2个开关,就像下面这幅图一样:
    在这里插入图片描述对于这种激光笔上的两个开关,一个是激光头的开关,我们需要一直按着这个开关,激光器才会一直发光,然而对于另一个开关,买过这种激光笔的小伙伴儿肯定知道,这种玩具激光笔上除了激光头,还有两个LED灯,另一个开关(应该是下面那一个)就是控制LED灯的。我们会惊讶地发现,如果你想打开LED灯,不需要一直按着开关,只需要按一下就松开,那么LED灯就会常亮。

    这就比较好玩儿了,对于这种 “一触即发” 的装置,我们称之为触发器。对于触发器的电路原理这里限于篇幅不再赘述。可以在《编码的奥秘》一书中的“反馈与触发器”一节中了解详细原理。那么所谓的触发器能干什么呢?我们会发现开关一按,它就能一直保持一个状态。所以我们是不是可以考虑利用他的这一特性,来为我们保存一些数据?

    一个触发器只能存储两种状态,不是开就是关。
    那么如果我们将8个触发器串起来,每一个都有2种情况,那么这个组合就可以存储2的8次方即256种情况即可存数字(0~255)。如下图。
    8位寄存器
    这下就不算很难了吧?这种我们可以把二进制值暂存进去的东西就叫做寄存器,图为一个8位寄存器。同理,如果把16个触发器串起来,我们就可以用来存储65536种情况,即数字(0~65535)。到这里是不是很多东西就明了了?

    定时器

    终于到了重点定时器了,好了,我现在告诉你,定时器就是一个寄存器,只不过是用作计数的,换了个名字而已。我们现在以STC89C52单片机为例,这款单片机上有定时器0和定时器1两个定时器。这两个定时器都是16位寄存器,但是分为高八位和低八位,例如定时器0 ,可分为高八位TH0和第八位TL0(HIGH和LOW而已,我英语这么LOW都看得懂😄)
    在这里插入图片描述
    我们以定时器TH0为例,如上图,将16位定时器0分为高八位和低八位。将其命名为TH0和TL0,由图易知:TH0和TL0所能表示的数据范围均为0xff。但两者虽然表面上被隔开,但是其仍为一个16位寄存器,所谓的隔开只是使我们可以分开观测高八位和低八位上分别存放的数据。它们就像十位和个位的关系。如果个位满了,就向十位进一。它们运行起来也是如此,如果低八位满了,就像高八位进一。

    我们由上图可得,低八位可以存储(2^ 0+2^ 1+2^ 2+2^ 3+2^ 4+2^ 5+2^ 6+2^ 7)即(0~255,共256中情况)同理高八位也可以存储256种情况,若高八位与低八位结合起来,可表示256*256=65536种情况(即0-65535)

    我们现在让定时器T0开始工作,它每过一个机器周期就会自动加1(先加在低八位上,若低八位溢出,则向高八位进位)如果我们使用的晶振是11.0592MHz,而STC89C52采用的是12分频,即一个机器周期是12/11.0592M秒。 现在假设我们想要延时1秒。我们先计算一下需要多少个机器周期n=1秒/(12/11.0592M)=921600,而这已经超过了整个16位定时器T0的允许范围。

    这可如何是好?我们可以先定个小目标,挣他一个亿(开个玩笑)。我们可以先定一个小的时间,比如1毫秒。我们算一下1毫秒需要多少机器周期n=1*10^-3/(12/11.0592M)=939,我们取一个整数即需要939个机器周期。我们16位定时器可以检测0-65535
    范围的机器周期,这里我们需要184个机器周期来实现我们需要的20毫秒延时。所以我们让定时器经过184个机器周期后检测溢出就可以了。因此我们对T0赋值,在这里我们对它的高八位和低八位分别赋值为TH0=0xff,TL0=0x47。如何?再经过184个机器周期是不是整个定时器T0就溢出了。到时我们只要监测T0的溢出就可以,不过这才延时了1ms,那如何延时1s呢?定义变量走循环不就得了?完美!!!
    下面以一份代码来封装1毫秒函数

    #include<reg52.h>
    sbit LED = P1^0;
    
    void delay(unsigned int ms)
    {
    	unsigned int cycle = 0;
    	TMOD = 0x01;	//设置定时器工作模式为高低八位合并为一个16位寄存器
    	TH0 = 0xfc;
    	TL0 = 0x67;  
    	TR0 = 1;
    	while(1)
    	{
    		if(TF0==1)	//检测定时器0是否溢出
    		{
    			TF0 = 0;	//若溢出,则重置检测位TF0
    			TH0 = 0xfc;
    			TL0 = 0x65;
    			cycle++;
    			if(cycle==ms)
    				break;
    		}
    	}
    }
    	
    
    void main()
    {
    	LED = 0;
    	
    	while(1)
    	{
    		delay(1000);
    		LED = ~LED;
    		
    	}
    }
    

    注:
    ①上述程序未考虑每一条代码的运行时间,勉强可以使用
    ②上述TMOD为另一个8位寄存器,定时器T1和T0都有4种工作模式通过TMOD(定时器模式选择寄存器)来控制定时器的工作模式。
    ③TF0的作用如下图:在这里插入图片描述鄙人没学过HTML,因此排版可能令人感到不适,谨此致歉。

    展开全文
  • 一键开关机电路 方案一、 先上一个低功耗的一键开关机电路,这个电路的特点在于关机时所有三极管全部截止几乎不耗电。 原理很简单: 利用Q10的输出与输入状态相反(非门)特性和电容的电流积累特性。...

     一键开关机电路

     方案一、

    先上一个低功耗的一键开关机电路,这个电路的特点在于关机时所有三极管全部截止几乎不耗电。


    原理很简单:

           利用Q10的输出与输入状态相反(非门)特性和电容的电流积累特性。刚上电时Q6和Q10的发射结均被10K电阻短路所以Q6和Q10均截止,此时实测电路耗电流仅为0.1uA,L_out输出高,H_out输出低。此时C3通过R22缓慢充电最终等于VCC电压,当按下S3后C3通过R26给Q10基极放电,Q10迅速饱和,Q6也因此饱和,H_out变为高电平,当C3放电到Q10be结压降0.7V左右时C3不再放电,此时若按键弹开C3将进一步放电到Q10的饱和压降0.3V左右,当再次按下S3,Q10即截止。
           这个电路可以完美解决按键抖动和长按按键跳档的问题,开关状态翻转只发生在按键接触的瞬间,之后即便按键存在抖动或长按按键的情况开关状态不会受到影响。这是因为R22的电阻很大(相对R23,R26,R25)当C3电容的电压稳定后,R22远不足以改变Q10的开关状态,R22要能改变Q10的状态必须要等S3弹开后C3将流过R22的小电流累积存储,之后再通过S3的瞬间接触快速大电流释放从而改变Q10的状态。

    非低功耗的三极管一键开关机电路:


           这个电路的原型来自互联网,参数有调整,原理和第一个低功耗电路相似在此不再赘述。以上两个电路都深入了解之后再看本帖的主题一键三档电路:


           这个电路实际就是本帖前两个电路的融合,可以实现低功耗待机和1档、2档、关机等3个档位。上电之初由于Q1,Q4,Q5的be结都并联了电阻,因此所有三极管都截止电路低功耗待机,C3开始充电到VCC电压。当按下S1后,Q5饱和,同时Q1也因此饱和,L_out1输出低电平Q4截止—>Q3截止、Q2饱和,C3放电为0.3V(Q5的饱和压降)左右。再次按下S1,Q5截止L_out1输出高电平—>Q2截止,Q4饱和L_out2输出低电平,由于R4和C1的延时作用Q3会延迟饱和,可以保证Q2完全截止后Q3基极才会为低电平,因此Q2,Q3都不会饱和。当再次按下S1,Q5由截止变为饱和L_out1再次输出低电平—>Q2饱和(同时Q4截止),Q3饱和延迟—>Q1截止,电路进入待机状态。

     

     方案二、

    其中用到的一键开关机电路分析如下:

    电路工作流程如下:

    A、 Key按下瞬间,Q2、Q1导通,7805输入电压在8.9V左右,7805工作,输出5V电压给单片机供电。

    B、单片机工作后,将最先进行IO口初始化,IO1设为输入状态,启用内部上拉;IO2设为输出状态,输出高电平。这时Q2、Q3导通,LED1发光,7805能够正常工作,单片机进入工作状态。

    C、当Key再次按下时,检测IO1电平为低,单片机可以通过使IO2输出低电平,Q2、Q3不导通,此时7805输入电压几乎为0,单片机不工作,系统关闭。

     方案三、

    电路如图

    原理很简单,Q1,Q2组成双稳态电路。由于C1的作用,上电的时候Q1先导通,Q2截止,如果没按下按键,电路将维持这个状态。Q3为P沟道增强型MOS管,因为Q2截止,Q3也截止,系统得不到电源。

      此时Q1的集电极为低电平0.3V左右,C1上的电压也为0.3V左右,当按下按键S1后,Q1基极被C1拉到0.3V,迅速截止。Q2开始导通,电路的状态发生翻转,Q2导通以后将Q3的门极拉到低电位,Q3导通,电源通过Q3给系统供电。

      Q2导通后,C1通过R1,R4充电,电压上升到1V左右,此时再次按下按键,C1的电压加到Q1基极,Q1导通,Q1集电极为低电平,通过R3强迫Q2截止,Q3也截止,系统关机。整个开关机的过程就是这样。

     如果要求这个电路的静态功耗低,可以全部采用MOS管,成本要高点,电路如下图,原理都是一样的,双稳态电路,就不分析了。

    方案四、

    电路图

    单键实现单片机开关机 


    1,控制流程,按下按键,Q1导通.单片机通电复位,进入工作. 
    2,检测 K-IN 是否低电平,否 不处理.是 单片机输出 K-OUT 为高电平,Q2导通,相当于按键长按.LED指示灯亮. 3,放开按键,K-IN 经过上拉电阻,为高电平.单片机可以正常工作. 
    4,在工作期间,按键按下,K-IN 为低电平,单片机检测到长按1秒,K-OUT 输出低电平,Q2截止.LED指示灯熄灭.放开按键,Q1截止,单片机断电. 
    5,通过软件处理,可以实现短按开机,长按关机. 
    单片机用PIC16F84A,通过简单的程序演示,证实此电路的可行性。
    这电路如果这样用,是体现不出它的优点,用到开关电源控制,控制光耦.可以做到完全关断电原,实现零功耗待机.有些打印机上就是用这种电路.

    方案四:下面是用CD4013 构建的电路

     

    CD4013电路关断时已经把后面电路切断了,而4013本身的电源不需关闭,COMS电路静态工作电流极少,1uA以下,可以忽略不计。
    用 4013 的电路对电源范围适用较广,3~18V都没问题,电路唯一需调整的就是根据电源电压和负载电流适当更改R1的值。
    开关管也可以用MOSFET,效果更佳。

     

     

     

    一、继电器方式:

     

    1、ON按下之前,电容C1充电电压到达5V,三极管Q1工作,Q2不工作,继电器也不工作,没有输出;

    2、ON按下,Q2开始工作,继电器工作,RL1线路切换,Power OUT输出电压,系统电源启动,启动后A输出高电平,D3灯常亮,A点电压高来维持Q1 ,Q2工作保证继电器一 直工作状态;

    3、OFF按下时,Q1不工作,Q2不工作,C1放电,继电器断开,树莓派强制断电;

    4、另一种情况,当Soft OFF按下,由于A一直输出高,所以B口检测到电平变化是由低变高,告诉系统要执行关机操作,系统关机后A输出低,Q1,Q2所需要的工作电平有C1来提供,等C1放电结束后,Q1,Q2不工作,继电器断开,系统断电。

     

    二、PMOS方式:

    1、K1按下之前,Q1断开,电源没有输出;

    2、K1按下,B点电压拉低,Q1导通,Power_out有电压输出,后面的系统来控制POWER_ON/PFF输出高电平,Q2导通,则B点为低,Q1一直导通工作;

    3、POWER_CHECK检测到电平一直是高电平,说明Q1一直是导通的,电源开关正常工作;

    4、当再次按下K1时,POWER_CHCK为低,系统检测到电平的变化后,只需将POWER_ON/OFF输出为低,则Q2关断;

    5、松开K1后,B点电压为高,Q1关断,系统断电。

     

    三、与非门加继电器方式:

    1、由于4管脚处接的是上拉电阻,所以4出为高电平;

    2、建设5处为低,则6输出高,Q1不工作,A、B断开,1、2管脚为高,则3为低一直保持5脚为低;

    3、K1按下,则5脚变成高,6脚位低,Q1工作,AB导通,1、2管脚为低,则3为高一直保持5脚位高,保证继电器一直工作;

    4、K1再次按下时,5脚变成低电平,6脚为高,Q1不工作,1、2脚为高,3脚为低;

    5、其中的R5、C2构成了按键的RC延时电路,时间为1/RC。

     

    四、双稳态电路:

     

    1、Q2,Q3组成双稳态电路。由于C1的作用,上电时给C1充电,所以Q2的基级(D点)会率先变成高,Q2先导通,Q3截止,Q1不导通,VCC_OUT输出0V;

    2、Q2导通此时集电级(C点)的电压为低电平大概0.3V左右,C1上的电压也为0.3V左右;

    3、当按下K1后,Q2的基级(D点)电压被C1拉到0.3V,Q2迅速截止,Q3开始导通,电路的状态反生翻转,Q3导通后Q1的门级(B点)拉到低电位,Q1导通,VCC_OUT输出5V;

    4、Q3导通后,C1通过R1,R3充电,电压上升到1V(0.3v+0.7v)左右即F点电压;

    5、此时再次按下K1,C1的电压加到Q2的基级(D点),Q2导通,Q2的集电级(C点)为低电平0.3V左右,通过R4强迫Q3截止,Q1也截止,系统关机。

     

     

     

     

    展开全文
  • 就是先按轻触开关给系统供电,系统上电正常工作后通过一个引脚控制一个电子开关,代替轻触开关为系统供电,在单片机程序设计时定义一个变量,每次使用系统时清零该变量.没有使用系统时利用单片机的定时器自动累加此...
  • 一键开关机电路 方案一、 先上一个低功耗的一键开关机电路,这个电路的特点在于关机时所有三极管全部截止几乎不耗电。 原理很简单: 利用Q10的输出与输入状态相反(非门)特性和电容的电流积累特性。...
  • 单片机应用系统中,常有用单片机的IO口来实现自关机(彻底关机)的功 能。一般用单片机的一个IO口控制一个电子开关来实现,因单片机关电后,失 去电源,所以在关机时,实现关机的IO口的电平必须用低电平。  但在...
  • 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢...
  • 《新概念51单片机C语言教程:入门、提高、开发、拓展全攻略》从实际应用入手,以实验过程和实验现象为主导,循序渐进地讲述51单片机C语言编程方法以及51单片机的硬件结构和功能应用。全书共分5篇,分别为入门篇、内...
  • 在PIC16F87X 单片机中,28引脚型号的单片机有3 个I/O端口,分别是RA、RB和RC;40引脚型号单片机有5个 I/O端口,分别是RA、RB、RC、RD和RE。其中RA有6条口线,RE有3条口线,其余都有 8条口线。 PIC16F87X端口口线...
  • 51单片机之独立按键

    2019-05-15 12:03:00
    按键介绍 按键种类繁多,功能有简有繁,极大的充斥着我们的生活。但是无论如何,所有的按键其实都有一个原型,来源于同一种原理,所有的按键无论多复杂,多...下图为一个典型的接触式按键(又称轻触开关)。 ...
  • 51单片机控制LCD1602模块视频播放:LCD1602视频(1)LCD1602概述先来看看LCD1602什么意思?Liquid Crystal Display(LCD)表示液晶显示,1602 表示一行可以显示16个字符,一共有两行。现在我们来看看如何使用简单的IO...
  • 关注【电子开发圈】微信公众号,一起学习吧!...电子DIY、Arduino、51单片机、STM32单片机、FPGA…… 电子百科、开发技术、职业经验、趣味知识、科技头条、设备拆机…… 点击链接,免费下载100G+电子设计学习资料! ...
  • c语言编写单片机技巧

    2020-07-13 23:30:39
    1. C语言和汇编语言在开发单片机时各有哪些优缺点? 答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU,其汇编语言...
  • 51 单片机设计跑马灯的程序用(c 语言)编写 P1 口接 8 个发光二极管共阳,烧入下面程序 #include unsigned char i; unsigned char temp; unsigned char a,b; void delay(void) { unsigned char m,n,s; for(m=20;m>0...
  • 如果使用机械式开关(2段拨动开关,自锁开关等)等直接接通和切断电源,不说机械部件的可靠性,至少自动关机(一般在长时间不操作、电池电量低时需要自动关机)功能就比较难实现。所以电池供电系统一般采用按钮开关...
  • 1.**设备开启时,**按下按键“KEY”,此时mos管导通,漏极变成5V,整个系统供电,MCU正常工作,并检查“KEY1”引脚电平,当为低电平时,可在程序中加入延时,而后再次判断该引脚电平,仍然为低...
1 2 3 4 5 ... 20
收藏数 957
精华内容 382