找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7516|回复: 14
收起左侧

一键多功能按键识别技术

  [复制链接]
ID:64693 发表于 2014-8-5 21:39 | 显示全部楼层 |阅读模式
有那位大神能帮我解释一下,一键多功能按键识别技术的程序代码吗?程序是我在论坛上下的,程序很简单,但是我感觉我把自己看的闹晕了
#include<AT89X51.H>
unsigned char ID;
void delay10ms(void)
{
unsigned char i,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}

void delay02s(void)
{
unsigned char i;
for(i=20;i>0;i--)
{delay10ms();
}
}

void main(void)
{ while(1)
{ if(P3_7==0)
{delay10ms();
if(P3_7==0)
{
ID++;
if(ID==4)
{
ID=0;
}
while(P3_7==0);
}
}
switch(ID)
{ case 0:
P1_0=~P1_0;       //p1_0作为输出口,一开始case 为0时,p1_0状态为什么是“1”,当再一次case为“0”时,p1_0状态为什么还是“1” ??????
delay02s();
break;
case 1:
P1_1=~P1_1;
delay02s();
break;
case 2:
P1_2=~P1_2;
delay02s();
break;
case 3:
P1_3=~P1_3;
delay02s();
break;
}
}
}

回复

使用道具 举报

ID:47760 发表于 2014-9-13 08:03 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

ID:51348 发表于 2014-9-14 02:10 | 显示全部楼层
很好  学习  谢谢
回复

使用道具 举报

ID:66338 发表于 2014-9-18 21:43 | 显示全部楼层
很好  学习  谢谢
回复

使用道具 举报

ID:69147 发表于 2014-11-20 23:18 来自触屏版 | 显示全部楼层
你厉害,订
回复

使用道具 举报

ID:69319 发表于 2014-11-23 21:12 | 显示全部楼层
给力啊楼主楼主加油
回复

使用道具 举报

ID:174969 发表于 2017-3-29 19:15 | 显示全部楼层
楼主说的P1.0 取反以后就是反的啊,按照你的电路,开关灯对应的是高电平还是低电平,是不是你自己想错了
回复

使用道具 举报

ID:183748 发表于 2017-3-29 19:57 | 显示全部楼层
楼主说的P1.0 取反以后就是反的啊,按照你的电路,开关灯对应的是高电平还是低电平,是不是你自己想错了
回复

使用道具 举报

ID:183748 发表于 2017-3-29 20:00 | 显示全部楼层
P1_0=~P1_0第一次输出,第二次自动取反输出
回复

使用道具 举报

ID:117161 发表于 2017-6-14 20:41 | 显示全部楼层
楼主  你的按键可以循环不  从第一状态到最后一个  再到第一个
回复

使用道具 举报

ID:211258 发表于 2017-6-14 22:49 | 显示全部楼层
谢谢分享,太好了正好需要
回复

使用道具 举报

ID:211388 发表于 2017-6-15 07:48 | 显示全部楼层
多谢,
回复

使用道具 举报

ID:68356 发表于 2017-6-15 19:21 | 显示全部楼层
是不是延时时间太短,端口状态发生多次翻转
回复

使用道具 举报

ID:208108 发表于 2017-6-15 21:22 | 显示全部楼层
每按一次ID自加,case执行的从P10到P13依次翻转,并没有把之前那一位翻转。
回复

使用道具 举报

ID:68356 发表于 2017-6-16 21:53 | 显示全部楼层
duranhuang 发表于 2017-6-15 21:22
每按一次ID自加,case执行的从P10到P13依次翻转,并没有把之前那一位翻转。

可能是ID值在执行端口翻转之后没有清零,每一次switch语句都执行一次翻转,实际上端口是在不停的翻转,只是速度太快看起来是一直亮着
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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