標(biāo)題: 51單片機(jī)P1口輸入輸出 [打印本頁]

作者: highffff    時(shí)間: 2014-8-15 21:51
標(biāo)題: 51單片機(jī)P1口輸入輸出
#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燈會(huì)閃爍,想不明白啊


作者: 明白    時(shí)間: 2014-8-15 21:53
延時(shí)時(shí)間多長了
作者: admin    時(shí)間: 2014-8-15 23:57
DELAY();加哪里的

作者: XUSHENG    時(shí)間: 2014-8-16 00:07
這延時(shí),不知你加哪了
作者: liaolinhui    時(shí)間: 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)//所以這里你是想通過延時(shí)一段時(shí)間后判斷按鍵是否松開,對(duì)吧,但是單片機(jī)執(zhí)行指令是很快的,延時(shí)完了你沒及時(shí)松開,程序就直接判斷k_temo==k,所以執(zhí)行L4=0,而如果你延時(shí)程序沒延時(shí)完及時(shí)松開了,那么程序就判斷k_temp不等于k,而執(zhí)行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++);
        }
}
作者: highffff    時(shí)間: 2014-8-16 16:52
liaolinhui 發(fā)表于 2014-8-16 00:14
覺得你這程序很不合邏輯
#include
#include

對(duì),基本想法如你所說,延時(shí)主要想取消按鍵抖動(dòng)影響�?墒窍氩幻靼准尤胙訒r(shí)之后LED燈亮度變暗,不停閃爍。當(dāng)我把DELAY();取消后LED燈就不閃爍了O O
作者: highffff    時(shí)間: 2014-8-16 16:53
XUSHENG 發(fā)表于 2014-8-16 00:07
這延時(shí),不知你加哪了

sorry,下次加注釋,這次忘了~~
unsigned char k;
        unsigned char k_temp;
        k = P1;
        if (k == 0xFE)
        {
                DELAY();  //延時(shí)
                k_temp = P1;
作者: highffff    時(shí)間: 2014-8-16 16:58
admin 發(fā)表于 2014-8-15 23:57
DELAY();加哪里的

sorry,下次加注釋,這次忘了~~
unsigned char k;
        unsigned char k_temp;
        k = P1;
        if (k == 0xFE)
        {
                DELAY();  //延時(shí)
                k_temp = P1;
作者: highffff    時(shí)間: 2014-8-16 16:58
明白 發(fā)表于 2014-8-15 21:53
延時(shí)時(shí)間多長了

12M晶振,10MS吧

作者: hkccd    時(shí)間: 2014-8-16 19:02
用的軟件放縱一下就知道時(shí)間了
作者: hkccd    時(shí)間: 2014-8-16 19:02
軟件仿真
作者: XUSHENG    時(shí)間: 2014-8-18 13:06
highffff 發(fā)表于 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();  //延時(shí)
              if(k == 0xFE)//再次確認(rèn)K是否OXFE//
                {k_temp = P1;}
作者: highffff    時(shí)間: 2014-8-19 13:13
XUSHENG 發(fā)表于 2014-8-18 13:06
unsigned char k;
        unsigned char k_temp;
        k = P1;

你的意思是去掉中間轉(zhuǎn)換的變量k_temp,直接去判斷兩次k==0xFE?,這樣做和原來區(qū)別在哪里呀?
作者: highffff    時(shí)間: 2014-8-19 19:04
XUSHENG 發(fā)表于 2014-8-18 13:06
unsigned char k;
        unsigned char k_temp;
        k = P1;

我知道原因了,想明白了~~
作者: highffff    時(shí)間: 2014-8-19 19:04
liaolinhui 發(fā)表于 2014-8-16 00:14
覺得你這程序很不合邏輯
#include
#include

我知道原因了~~
作者: heise    時(shí)間: 2014-8-19 20:27
找到就好 我也想知道原因  能不能說一下
作者: highffff    時(shí)間: 2014-8-19 21:42
heise 發(fā)表于 2014-8-19 20:27
找到就好 我也想知道原因  能不能說一下

在P1口輸出時(shí)我用的是P1^4,但是在掃描輸入時(shí)我用的是P1全口定義,在P1^4= 0后,k==0xFE已經(jīng)是判斷不成立了,所以會(huì)把P1^4= 1,如此反復(fù)循環(huán),LED就亮滅閃爍~~還有我的else函數(shù)寫錯(cuò)地方了~~
作者: heise    時(shí)間: 2014-8-19 22:15
共同學(xué)習(xí) 學(xué)習(xí)
作者: 飛翔的耗子    時(shí)間: 2015-8-7 09:09
學(xué)學(xué)!
作者: yangganglone    時(shí)間: 2015-8-7 12:35
這種程序太爛了,沒有一點(diǎn)移植性




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1