找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4059|回复: 19
打印 上一主题 下一主题
收起左侧

51单片机P1口输入输出

[复制链接]
跳转到指定楼层
楼主
ID:64810 发表于 2014-8-15 21:51 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
#include <reg52.h>
#include <stdio.h>

sbit L4 = P1^4;

void DELAY();


void main()
{
        unsigned char k;
        unsigned char k_temp;
        k = P1;
        if (k == 0xFE)
        {
                DELAY();
                k_temp = P1;
                if(k_temp == k)
                {
                //P2 = 0xFE;
                L4 = 0;
                }
                else
                {
                        L4 = 1;
                }
        }

}

void DELAY()
{
        int i,j;
        for (i = 0;i < 1000;i++)
        {
                for (j = 0;j < 10;j++);
        }
}

为什么加了DELAY();后LED灯会闪烁,想不明白啊

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:64810 发表于 2014-8-16 16:52 | 显示全部楼层
liaolinhui 发表于 2014-8-16 00:14
觉得你这程序很不合逻辑
#include
#include

对,基本想法如你所说,延时主要想取消按键抖动影响。可是想不明白加入延时之后LED灯亮度变暗,不停闪烁。当我把DELAY();取消后LED灯就不闪烁了O O
回复

使用道具 举报

板凳
ID:64810 发表于 2014-8-16 16:53 | 显示全部楼层
XUSHENG 发表于 2014-8-16 00:07
这延时,不知你加哪了

sorry,下次加注释,这次忘了~~
unsigned char k;
        unsigned char k_temp;
        k = P1;
        if (k == 0xFE)
        {
                DELAY();  //延时
                k_temp = P1;
回复

使用道具 举报

地板
ID:64810 发表于 2014-8-16 16:58 | 显示全部楼层
admin 发表于 2014-8-15 23:57
DELAY();加哪里的

sorry,下次加注释,这次忘了~~
unsigned char k;
        unsigned char k_temp;
        k = P1;
        if (k == 0xFE)
        {
                DELAY();  //延时
                k_temp = P1;
回复

使用道具 举报

5#
ID:64810 发表于 2014-8-16 16:58 | 显示全部楼层
明白 发表于 2014-8-15 21:53
延时时间多长了

12M晶振,10MS吧
回复

使用道具 举报

6#
ID:64810 发表于 2014-8-19 13:13 | 显示全部楼层
XUSHENG 发表于 2014-8-18 13:06
unsigned char k;
        unsigned char k_temp;
        k = P1;

你的意思是去掉中间转换的变量k_temp,直接去判断两次k==0xFE?,这样做和原来区别在哪里呀?
回复

使用道具 举报

7#
ID:64810 发表于 2014-8-19 19:04 | 显示全部楼层
XUSHENG 发表于 2014-8-18 13:06
unsigned char k;
        unsigned char k_temp;
        k = P1;

我知道原因了,想明白了~~
回复

使用道具 举报

8#
ID:64810 发表于 2014-8-19 19:04 | 显示全部楼层
liaolinhui 发表于 2014-8-16 00:14
觉得你这程序很不合逻辑
#include
#include

我知道原因了~~
回复

使用道具 举报

9#
ID:64810 发表于 2014-8-19 21:42 | 显示全部楼层
heise 发表于 2014-8-19 20:27
找到就好 我也想知道原因  能不能说一下

在P1口输出时我用的是P1^4,但是在扫描输入时我用的是P1全口定义,在P1^4= 0后,k==0xFE已经是判断不成立了,所以会把P1^4= 1,如此反复循环,LED就亮灭闪烁~~还有我的else函数写错地方了~~

评分

参与人数 1威望 +5 黑币 +5 收起 理由
heise + 5 + 5 赞一个!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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