查看: 1206|回复: 0
打印 上一主题 下一主题

按键点动互锁程序

[复制链接]
跳转到指定楼层
沙发
发表于 2015-4-20 16:03:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

#include<reg52.h>   

/*****************************************************************
                 宏定义字符型和整型
*****************************************************************/
#define uchar unsigned char
#define uint  unsigned int
/*****************************************************************
                           按键定义
*****************************************************************/
uchar CNT1=0;//判断按键次数
uchar CNT2=0;//判断按键次数
uchar CNT3=0;//判断按键次数
uchar CNT4=0;//判断按键次数
uchar CNT5=0;//判断按键次数

sbit KEY1=P2^0;         //按键1
sbit KEY2=P2^1;         //按键2
sbit KEY3=P2^2;         //按键3
sbit KEY4=P2^3;         //按键4
sbit KEY5=P2^4;         //按键5

/********************************************************************
                            延时函数
*********************************************************************/
void delay(uchar t)
{
  uchar i,j;
   for(i=0;i<t;i++)
   {
            for(j=13;j>0;j--);
         { ;
         }
   }
}

/********************************************************************
                            按键扫描函数
*********************************************************************/
void KEY() //按键扫描程序
{
uchar i;
i=20;

if((CNT1==2)||(CNT2==2)||(CNT3==2)||(CNT4==2)||(CNT5==2)) {P1=0XFF;CNT1=0;CNT2=0;CNT3=0;CNT4=0;CNT5=0;}
if(KEY1==0){delay(i);if(KEY1==0){CNT2=0;CNT3=0;CNT4=0;CNT5=01=0XFE;while(!KEY1);CNT1++;}}
if(KEY2==0){delay(i);if(KEY2==0){CNT1=0;CNT3=0;CNT4=0;CNT5=01=0XFD;while(!KEY2);CNT2++;}}
if(KEY3==0){delay(i);if(KEY3==0){CNT1=0;CNT2=0;CNT4=0;CNT5=01=0XFB;while(!KEY3);CNT3++;}}
if(KEY4==0){delay(i);if(KEY4==0){CNT1=0;CNT2=0;CNT3=0;CNT5=01=0XF7;while(!KEY4);CNT4++;}}
if(KEY5==0){delay(i);if(KEY5==0){CNT1=0;CNT2=0;CNT3=0;CNT4=01=0XEF;while(!KEY5);CNT5++;}}

}       
/********************************************************************
                            按下次数判断函数
*********************************************************************/
/*void jianzhi()
{
switch(keycnt) //按下次数判断
                        {
                        case 0: OUT=1;break; //输出解锁
                        case 1: OUT=0;break; //输出自锁
                        case 2: OUT1=1;break; //输出解锁
                        case 3: OUT1=0;break; //输出自锁
                        }
}
/********************************************************************
                            定时中断服务函数
*********************************************************************/
/*void t0(void) interrupt 1 using 0 //定时中断服务函数
{
        TH0=0x06; //对TH0 TL0 赋值
        TL0=0x06;
        tcnt++; //每过250ust tcnt 加一
        if(tcnt==400) //计满400 次(1/10 秒)时
        {
                tcnt=0; //重新再计
                sec++;
                if(sec==20) //定时2 秒,在从零开始计时
                {
                t=1;
                //sec=0;          
                //t++;
            //keycnt=t%2;
            //if(t==100)t=0;
                }
        }
}
/********************************************************************
                            主函数
*********************************************************************/
void main()

{
        while(1)
        {
        KEY();
        }
}
/********************************************************************
                              结束
*********************************************************************/



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?加入因仑

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

快速回复 返回顶部 返回列表