设为首页
收藏本站
家园
博客
课程平台
教材专区
主站
开启辅助访问
切换到窄版
登录
|
加入因仑
请
登录
后使用快捷导航
没有帐号?
加入因仑
搜索
搜索
热搜:
活动
交友
discuz
本版
用户
论坛
BBS
全部帖子汇总
全部技术帖
非技术帖汇总
大赛专区
因仑云商城
产品服务
因仑项目小组
快捷导航
因仑“3+1”工程特种兵精英论坛
»
论坛
›
单片机
›
51单片机
›
按键点动互锁程序
返回列表
查看:
1206
|
回复:
0
按键点动互锁程序
[复制链接]
张衍波
张衍波
当前离线
积分
8235
电梯直达
沙发
发表于 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=0
1=0XFE;while(!KEY1);CNT1++;}}
if(KEY2==0){delay(i);if(KEY2==0){CNT1=0;CNT3=0;CNT4=0;CNT5=0
1=0XFD;while(!KEY2);CNT2++;}}
if(KEY3==0){delay(i);if(KEY3==0){CNT1=0;CNT2=0;CNT4=0;CNT5=0
1=0XFB;while(!KEY3);CNT3++;}}
if(KEY4==0){delay(i);if(KEY4==0){CNT1=0;CNT2=0;CNT3=0;CNT5=0
1=0XF7;while(!KEY4);CNT4++;}}
if(KEY5==0){delay(i);if(KEY5==0){CNT1=0;CNT2=0;CNT3=0;CNT4=0
1=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
收藏
0
分享
支持
0
反对
0
回复
使用道具
举报
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
加入因仑
本版积分规则
发表回复
回帖后跳转到最后一页
快速回复
返回顶部
返回列表