用PIC10F202单片机制作两路开关源程序

2019-11-08来源: 51hei关键字:PIC10F202  单片机  两路开关

//=======================================用户配置区,供用户修改===========================================


#define TIME2  1000            //长按键时间设置,单位ms ,1000 = 1s  范围:1~10s


//=========================================================================================================










//************************************  以下为代码区,请勿改动!  *****************************************

//************************************  以下为代码区,请勿改动!  *****************************************

//************************************  以下为代码区,请勿改动!  *****************************************

//************************************  以下为代码区,请勿改动!  *****************************************

//************************************  以下为代码区,请勿改动!  *****************************************

//************************************  以下为代码区,请勿改动!  *****************************************

//************************************  以下为代码区,请勿改动!  *****************************************


//=============================================硬件连接示意===============================================

//

//    ___短 _      长   _______ 

//       |_| |_________|    PIC10F200/202

//                          +---------+

//         KEY 长/短按键 ---|GP0   GP3|---

//                          |         |

//                          |GND   VDD|

//                          |         |                    __      ___ 

//        长按键翻转输出 ---|GP1   GP2|---短按键翻转输出 _|  |____|   |____

//                          +---------+

//      __________             _____________ 

//    _|          |___________|             |____

//

//--------------------------------------------------------------------------------------------------------

/*

               

                             长/短按键IO口电平翻转程序



  说明:1.该程序通过检测GP0管脚的有效按键长短,循环翻转GP2和GP1管脚的输出电平高低。

          每检测到一个短按键,则对GP2管脚输出电平进行一次翻转,每检测到一个长按键,

          则对GP1管脚输出电平进行一次翻转。 


        2.按键是带有状态机的键盘扫描程序,可有效对按键消抖,抗干扰能力极强。


        3.长按键的时间可通过程序顶端的参数进行方便的设置,以满足现场需求。

     

        4.GP1、GP2在单片机默认状态和复位后输出电平为低。


        5.待机功耗为400uA(@5V),长按键功耗为500uA(@5V)。


        6.已启用内部弱上拉,按键可以不加上拉电阻,如果要保证信号可靠,可以加上拉电阻,

          建议选择>=100K的电阻,以降低长时间按下按键在电阻上的功耗。



       日期:2014/09/04        版本:V2.0

  

*/


//=========================================================================================================




#include      //本代码可支持单片机型号:PIC10F200/202


#define Key_Read_T 25 //等间隔读取键值,单位ms


#define KEY_IO                GP0         //按键信号输入

#define Short_Out         GP1                //短按按键响应数出口


bit short_out;                                //记录Short_Out当前状态

bit short_IF;                                //短按响应标志


#define Long_Out         GP2                //长按按键响应数出口


bit long_out;                                //记录Long_Out当前状态

bit long_IF;                                //长按响应标志


unsigned char KEY_State=0;        /*按键的状态变量*/



#define NOKEY     0

#define PUSH_KEY  1

#define LONG_PUSH 2


#define INITIAL_25MS 161         //相对于本系统与定时器时钟,本数据为固定值。定时器增计数,计数周期为256us,计97个数约为25mS。256-97+2=161


/****************************************************************************

* 名    称:Key_ScanIO()

* 功    能:扫描键盘IO口并判断按键事件

* 入口参数:Ticklong:长按键有效时长,单位ms

* 出口参数:无

* 说    明: 该函数需要每隔25(Key_Read_T)ms,调用一次。最好放在定时中断内执行。

            如果中断间隔太长,可能丢键;间隔太短不能消除抖动。

****************************************************************************/

void Key_ScanIO(int Ticklong)

  static unsigned int KeyTimerS;

  

//===============================按键========================================    

  if(KEY_State==PUSH_KEY)  KeyTimerS++;    /*定时器,时间间隔25ms*/

  else                     KeyTimerS=0;

  

  switch(KEY_State)                  //根据按键的状态决定程序分支

  {

     case NOKEY:         //------------------在未按键状态下--------------------------

       {                              //若键被按下,按键状态变为"短按状态"。

          if(KEY_IO==0) KEY_State=PUSH_KEY;

          break;

       }

     case PUSH_KEY:        //-------------按键处于"短按状态"时------------------------

       {

          if(KEY_IO!=0)              //若键被释放,认为是一次短按键

            {

              KEY_State=NOKEY;       //并回到"未按下状态" 

                          short_IF  = 0; 

                          long_IF  = 0;              

            }

          else if(KeyTimerS>Ticklong) //若按键时间超过Ticks毫秒,认为是一次长按键,

            {

              KEY_State=LONG_PUSH;           // 按键状态变为"长按状态"          

            }      

          break;          

       }

     case LONG_PUSH: //------------按键处于"长按状态"时--------------------

       {

          if(KEY_IO!=0)                //若键被释放,回到未按键状态

            {

              KEY_State=NOKEY;

                          short_IF  = 0; 

                          long_IF  = 0; 

            }     

          break;            

       }

  }    

}


/****************************************************************************

* 名    称:Key_Answer()

* 功    能:根据按键状态作出响应,控制IO管脚输出电平翻转

* 入口参数:Ticklong:长按键有效时长,单位ms

* 出口参数:无

****************************************************************************/

void Key_Answer(void)

{

  if((KEY_State==PUSH_KEY)&&(short_IF == 0))  

  {

        short_out = ~short_out;

    Short_Out =  short_out;

        short_IF  = 1;        

  }

if((KEY_State==

[1] [2]
关键字:PIC10F202  单片机  两路开关 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic479378.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:学习pic单片机经验
下一篇:LCD+PIC单片机12864串行显示程序

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

PIC16F1937-PC通讯协议
;                  *//* 主控芯片:PIC16F1937                                                   
发表于 2019-11-14
PIC16F684 对输入脉冲进行计数和脉冲宽度测量
。是否我的设计架构方案不对。#include <pic.h>__CONFIG(0x3004);//(0X30C4);#define T0_40MS 100    // 定义 TMR0 延时10MS 的时间常数 #define T1_100MS 40536#define        DN                        RA5        //Motor rise  
发表于 2019-11-13
PIC12F675两通道的AD转换的汇编程序
;程序功能:上电开机:PIN5为高电平,绿灯亮;PIN2,PIN3为低电平,红灯灭;;        轮流检测PIN6,PIN7脚电平,欠压3.9V,10V,红灯亮,绿灯灭,过压5.9V,15.9V;        红灯亮,绿灯灭,alram为TTL高电平,过压锁死  LIST P=12F675INCLUDE <P12F675.INC> __CONFIG(B'11000101110100');Highest band gap voltage,0,0,Data memory is not protected
发表于 2019-11-12
PIC16F873A单片机的照度测量项目原理图与源代码
基于PIC16F873A的照度测量C语言代码。可以使用Labview以RS232接口和PC通信,并获取实时数据 单片机源程序如下:#include <pic.h>           //调用PIC16F87XA单片机的头文件__CONFIG(HS&WDTDIS&LVPDIS);#define U5A  RC0           //4位数码管单元的U5(74HC138)的A脚接在RB0口上#define U5B  RC1      
发表于 2019-11-12
PIC16F873A单片机的照度测量项目原理图与源代码
电池容量测试仪电路与源码(PIC16F1938单片机+AD623实现)
分享一个由PIC16F1938单片机芯片和AD623构成的电池容量测试仪.电路原理图如下:电池容量测试仪的pic单片机源码:#include    "main.h" //------------------------32MHZ---------------------------------------------- __CONFIG(FOSC_INTOSC & CLKOUTEN_OFF & BOREN_ON & PWRTE_ON & CPD_OFF          &CP_ON
发表于 2019-11-11
电池容量测试仪电路与源码(PIC16F1938单片机+AD623实现)
用PIC18F4520与发电机上的电表实现MUDBUS通信
说明:在了解了Modbus协议之后,开始编写Modbus-RTU通信函数。本系统所用的PIC18F4520单片机最小系统只有RS232通信接口,电力仪表提供的是串行异步半双工的RS485通信接口,故需用RS232转RS485转接器实现通信。本模块用USART来编写通信函数,且必须将其设置为串行异步半双工的通信方式,相关USART初始化函数如下://USART模块初始化void USARTinit(void){        TXSTAbits.SYNC=0;   //选择异步通信方式    TXSTAbits.TX9=0;   
发表于 2019-11-11
用PIC18F4520与发电机上的电表实现MUDBUS通信
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved