找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4025|回复: 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:19715 发表于 2014-8-15 21:53 | 只看该作者
延时时间多长了
回复

使用道具 举报

板凳
ID:1 发表于 2014-8-15 23:57 | 只看该作者
DELAY();加哪里的
回复

使用道具 举报

地板
ID:63752 发表于 2014-8-16 00:07 来自手机 | 只看该作者
这延时,不知你加哪了
回复

使用道具 举报

5#
ID:58502 发表于 2014-8-16 00:14 | 只看该作者
本帖最后由 liaolinhui 于 2014-8-16 12:20 编辑

觉得你这程序很不合逻辑
#include <reg52.h>
#include <stdio.h>

sbit L4 = P1^4;

void DELAY();


void main()
{
        unsigned char k;
        unsigned char k_temp;
        k = P1; //这里你让k=P1,
        if (k == 0xFE)
        {
                DELAY();
                k_temp = P1;//这里你又让k_temp=P1
                if(k_temp == k)//所以这里你是想通过延时一段时间后判断按键是否松开,对吧,但是单片机执行指令是很快的,延时完了你没及时松开,程序就直接判断k_temo==k,所以执行L4=0,而如果你延时程序没延时完及时松开了,那么程序就判断k_temp不等于k,而执行L4=1,
                {
                //P2 = 0xFE;
                L4 = 0;
                }
                else
                {
                        L4 = 1;
                }
        }

}

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

评分

参与人数 1威望 +15 黑币 +20 收起 理由
admin + 15 + 20 很给力!

查看全部评分

回复

使用道具 举报

6#
ID:64810 发表于 2014-8-16 16:52 | 只看该作者
liaolinhui 发表于 2014-8-16 00:14
觉得你这程序很不合逻辑
#include
#include

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

使用道具 举报

7#
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;
回复

使用道具 举报

8#
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;
回复

使用道具 举报

9#
ID:64810 发表于 2014-8-16 16:58 | 只看该作者
明白 发表于 2014-8-15 21:53
延时时间多长了

12M晶振,10MS吧
回复

使用道具 举报

10#
ID:2318 发表于 2014-8-16 19:02 来自手机 | 只看该作者
用的软件放纵一下就知道时间了
回复

使用道具 举报

11#
ID:2318 发表于 2014-8-16 19:02 来自手机 | 只看该作者
软件仿真
回复

使用道具 举报

12#
ID:63752 发表于 2014-8-18 13:06 | 只看该作者
highffff 发表于 2014-8-16 16:53
sorry,下次加注释,这次忘了~~
unsigned char k;
        unsigned char k_temp;

unsigned char k;
        unsigned char k_temp;
        k = P1;
        if (k == 0xFE)//K是否OXFE//
        {
                DELAY();  //延时
              if(k == 0xFE)//再次确认K是否OXFE//
                {k_temp = P1;}
回复

使用道具 举报

13#
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?,这样做和原来区别在哪里呀?
回复

使用道具 举报

14#
ID:64810 发表于 2014-8-19 19:04 | 只看该作者
XUSHENG 发表于 2014-8-18 13:06
unsigned char k;
        unsigned char k_temp;
        k = P1;

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

使用道具 举报

15#
ID:64810 发表于 2014-8-19 19:04 | 只看该作者
liaolinhui 发表于 2014-8-16 00:14
觉得你这程序很不合逻辑
#include
#include

我知道原因了~~
回复

使用道具 举报

16#
ID:60266 发表于 2014-8-19 20:27 | 只看该作者
找到就好 我也想知道原因  能不能说一下
回复

使用道具 举报

17#
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 赞一个!

查看全部评分

回复

使用道具 举报

18#
ID:60266 发表于 2014-8-19 22:15 | 只看该作者
共同学习 学习
回复

使用道具 举报

19#
ID:87800 发表于 2015-8-7 09:09 | 只看该作者
学学!
回复

使用道具 举报

20#
ID:87823 发表于 2015-8-7 12:35 | 只看该作者
这种程序太烂了,没有一点移植性
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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