標(biāo)題: 怎么讓單片機(jī)開發(fā)板一直按住K1鍵然后LED就亮著,松開后LED就滅 [打印本頁(yè)]

作者: 汪巖    時(shí)間: 2018-12-28 00:50
標(biāo)題: 怎么讓單片機(jī)開發(fā)板一直按住K1鍵然后LED就亮著,松開后LED就滅

#include "reg52.h"               

typedef unsigned int u16;
typedef unsigned char u8;

sbit k1=P3^1;
sbit led=P2^0;
void delay(u16 i)
{
        while(i--);       
void keypros()
{
        if(k1==0)       
        {       
                delay(1000);
                if(k1==0)
                {

                        led=~led;
                }
                while(!k1)
        }               
}
void main()
{       
        while(1)
        {       
                keypros();
        }               
}
這代碼是按一次就亮 再按一次就滅了,我想知道在哪個(gè)地方可以改,就達(dá)到我想要的那個(gè)長(zhǎng)按就亮松開就滅


作者: fang880413    時(shí)間: 2018-12-28 07:10
#include "reg52.h"               

sbit k1=P3^1;
sbit led=P2^0;

void main()
{        
              led=k1;     
}
你試試這個(gè)
作者: fang880413    時(shí)間: 2018-12-28 07:14
#include "reg52.h"

sbit k1=P3^1;
sbit led=P2^0;

void main()
{        
         led=k1;              
}

你試試這個(gè)

作者: HC6800-ES-V2.0    時(shí)間: 2018-12-28 07:55
很簡(jiǎn)單的。
       if(k1==0)        
        {        
                delay(1000);
                if(k1==0)
                {

                        led=0;
                }
                else
                {
                        led=1;
                 }
                while(!k1)
        }   
作者: HC6800-ES-V2.0    時(shí)間: 2018-12-28 07:59
你的程序還有兩個(gè)錯(cuò)誤。
修改后就是你要的樣子:
#include "reg52.h"               

typedef unsigned int u16;
typedef unsigned char u8;

sbit k1=P3^1;
sbit led=P2^0;
void delay(u16 i)
{
        while(i--);
}
        
void keypros()
{
                if(k1==0)
                {

                        led=0;
                }
                                else
                                {
                                        led=1;
                                }
}
void main()
{        
        while(1)
        {        
                keypros();
        }               
}
作者: mosqu    時(shí)間: 2018-12-28 08:04
led=~led;這里改一下
改為 led = 0;
然后在while里面加一句
led = 1;
作者: jll586    時(shí)間: 2018-12-28 08:21
led直接賦值0/1就行了
作者: 天風(fēng)情    時(shí)間: 2018-12-28 09:15
按鍵檢測(cè)函數(shù),判斷條件當(dāng)K1==0時(shí),LED=0(假設(shè)低電平亮),當(dāng)K1!=0時(shí)LED=1。
作者: ssk7793    時(shí)間: 2018-12-28 09:37
一定要開發(fā)板?面包板要實(shí)現(xiàn)這個(gè)功能,都不需要代碼,就vcc接按鍵,按鍵接1k阻再接led正極,led負(fù)極接end就能實(shí)現(xiàn)
作者: 周超然    時(shí)間: 2018-12-28 10:42
HC6800-ES-V2.0 發(fā)表于 2018-12-28 07:55
很簡(jiǎn)單的。
       if(k1==0)        
        {        

就是你這個(gè),按鍵代碼。網(wǎng)上還有個(gè)好的案件代碼,不用延時(shí)的,還可以判斷單擊還是連擊的。
whiel(1)那個(gè)判斷延時(shí)要放在代碼處理最后,不能放在前面,會(huì)有問題,昨晚就是抄別人代碼,沒注意,反而出問題更浪費(fèi)時(shí)間
作者: justloong    時(shí)間: 2018-12-28 10:46
void keypros()
{
   
if(k1==0)        
        {        
                delay(1000);
                if(k1==0)
                {

                        led=0;
                }
                else
                {
                        led=1;
                 }
        
        }
}   
作者: 汪巖    時(shí)間: 2018-12-28 11:18
HC6800-ES-V2.0 發(fā)表于 2018-12-28 07:59
你的程序還有兩個(gè)錯(cuò)誤。
修改后就是你要的樣子:
#include "reg52.h"               

謝謝 我做出來(lái)了,就是再刪掉那個(gè)void delay那部分,就可以實(shí)現(xiàn)出來(lái)我想要的結(jié)果了。
作者: 汪巖    時(shí)間: 2018-12-28 11:20
謝謝各位大家 ,我買來(lái)開發(fā)板,由于好奇心,想改一下那種長(zhǎng)按,結(jié)果不行,我才知道是缺少了那個(gè)if和else,,結(jié)果就弄了2天最后找不出來(lái)。
作者: Arvin0011    時(shí)間: 2018-12-28 11:30
其實(shí)就是一個(gè)檢測(cè)按鍵的程序
作者: yzwzfyz    時(shí)間: 2018-12-28 12:34
改學(xué)CEO吧




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