找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 26143|回復(fù): 18
打印 上一主題 下一主題
收起左側(cè)

求STC89C52單片機(jī) 獨(dú)立按鍵的代碼,要求只需要用一個(gè)按鍵控制一個(gè)led燈

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:73449 發(fā)表于 2015-4-11 16:31 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
求STC89C52單片機(jī) 獨(dú)立按鍵的代碼,要求只需要用一個(gè)按鍵控制一個(gè)led燈,第一次按下,燈亮,再按,燈滅,依此類推
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:74245 發(fā)表于 2015-4-11 22:55 | 只看該作者
入門問題,這個(gè)只能靠自己了
回復(fù)

使用道具 舉報(bào)

板凳
ID:76471 發(fā)表于 2015-4-12 08:41 | 只看該作者
/***********************************************************************************************************************************************
按一下燈亮,按一下燈滅
***********************************************************************************************************************************************/

#include<reg52.h>

sbit S1=P1^4;                                                                //將S1位定義為P1^4,檢測(cè)獨(dú)立按鍵
sbit led0=P1^0;                                                        //將led0定義為P1.0口的LED

/***********************************************************************************************************************************************
延時(shí)函數(shù)
***********************************************************************************************************************************************/
void delay(void)
{
        unsigned int i;
        for(i=5000;i>0;i--)
        ;
}
/***********************************************************************************************************************************************
主函數(shù)
***********************************************************************************************************************************************/
void main(void)
{
while(1)
{
        if(S1==0)                                                                //判斷是否有鍵按下
        {
                delay();                                                        //有鍵按下,延時(shí)去抖,真正應(yīng)用時(shí)要少用這種延時(shí),占用時(shí)間,用定時(shí)器延時(shí)或一個(gè)寄存器循環(huán)檢測(cè)10多次按鍵

                if(F0==0)                                                        //用F0標(biāo)志位判斷鍵按下是否已經(jīng)處理,因剛學(xué)C語言沒多久,
                                                                                        //不知道怎么定義RAM能位尋址的寄存器,先用F0,按鍵多的話,一個(gè)F0不夠用
                {
                        F0=1;                                                         //F0置1,表示這次按鍵按下已處理
                        led0=~led0;                                                //將LED亮滅狀態(tài)取反
                }
        }

        else                                                                         //S1=1說明按鍵釋放
        {
                F0=0;                                                                //F0清零,清按鍵已處理標(biāo)志
        }
}
}


此程序自己編寫,經(jīng)測(cè)試OK

評(píng)分

參與人數(shù) 1黑幣 +40 收起 理由
admin + 40 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

地板
ID:76471 發(fā)表于 2015-4-12 09:50 | 只看該作者
/****************************************************************************
按一下燈亮,按一下燈滅
*****************************************************************************/

#include<reg52.h>

sbit S1=P1^4;                                        //將S1位定義為P1^4,檢測(cè)獨(dú)立按鍵
sbit led0=P1^0;                                //將led0定義為P1.0口的LED

/************************************************************************
延時(shí)函數(shù)
***************************************************************************/
void delay(void)
{
        unsigned int i;
        for(i=5000;i>0;i--)
        ;
}
/**************************************************************************
主函數(shù)
****************************************************************************/
void main(void)
{
while(1)
{
        if(S1==0)                                                //判斷是否有鍵按下
        {
                delay();                                        //有鍵按下,延時(shí)去抖,真正應(yīng)用時(shí)要少用這種延時(shí),占用時(shí)間,用定時(shí)器延時(shí)或一個(gè)寄存器循環(huán)檢測(cè)10多次按鍵

                if(S1==0)
                {
                        if(F0==0)                                //用F0標(biāo)志位判斷鍵按下是否已經(jīng)處理,因剛學(xué)C語言沒多久,不知道怎么定義RAM能位尋址的寄存器,先用F0,按鍵多的話,一個(gè)F0不夠用
                        {
                                F0=1;                                 //F0置1,表示這次按鍵按下已處理
                                led0=~led0;                        //將LED亮滅狀態(tài)取反
                        }
                }
        }

        else                                                         //S1=1說明按鍵釋放
        {
                F0=0;                                                //F0清零,清按鍵已處理標(biāo)志
        }
}
}


上面程序漏了一個(gè)if語句,要不延時(shí)去抖沒作用,汗
回復(fù)

使用道具 舉報(bào)

5#
ID:76471 發(fā)表于 2015-4-12 10:12 | 只看該作者
/****************************************************************************
按一下燈亮,按一下燈滅
*****************************************************************************/

#include<reg52.h>

sbit S1=P1^4;                                        //將S1位定義為P1^4,檢測(cè)獨(dú)立按鍵
sbit led0=P1^0;                                //將led0定義為P1.0口的LED

/************************************************************************
延時(shí)函數(shù)
***************************************************************************/
void delay(void)
{
        unsigned int i;
        for(i=5000;i>0;i--)
        ;
}
/**************************************************************************
主函數(shù)
****************************************************************************/
void main(void)
{
while(1)
{
        if(S1==0)                                                //判斷是否有鍵按下
        {
                delay();                                        //有鍵按下,延時(shí)去抖,真正應(yīng)用時(shí)要少用這種延時(shí),占用時(shí)間,用定時(shí)器延時(shí)或一個(gè)寄存器循環(huán)檢測(cè)10多次按鍵

                if(S1==0)
                {
                        if(F0==0)                                //用F0標(biāo)志位判斷鍵按下是否已經(jīng)處理,因剛學(xué)C語言沒多久,不知道怎么定義RAM能位尋址的寄存器,先用F0,按鍵多的話,一個(gè)F0不夠用
                        {
                                F0=1;                                 //F0置1,表示這次按鍵按下已處理
                                led0=~led0;                        //將LED亮滅狀態(tài)取反
                        }
                }
        }

        else                                                         //S1=1說明按鍵釋放
        {
                F0=0;                                                //F0清零,清按鍵已處理標(biāo)志
        }
}
}


上面程序漏了一個(gè)if語句,要不延時(shí)去抖沒作用,汗

評(píng)分

參與人數(shù) 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

6#
ID:73156 發(fā)表于 2015-4-12 10:23 | 只看該作者
入門問題,這個(gè)只能靠自己,看郭天祥視頻

評(píng)分

參與人數(shù) 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

7#
ID:73449 發(fā)表于 2015-4-13 14:46 | 只看該作者
panzishi123456 發(fā)表于 2015-4-12 10:12
/****************************************************************************
按一下燈亮,按一下燈 ...

非常感謝
回復(fù)

使用道具 舉報(bào)

8#
ID:73449 發(fā)表于 2015-4-13 15:17 | 只看該作者
panzishi123456 發(fā)表于 2015-4-12 10:12
/****************************************************************************
按一下燈亮,按一下燈 ...

F0的標(biāo)志位不需要提前先定義麼?
回復(fù)

使用道具 舉報(bào)

9#
ID:76471 發(fā)表于 2015-4-13 18:16 | 只看該作者
lucyhyr 發(fā)表于 2015-4-13 15:17
F0的標(biāo)志位不需要提前先定義麼?

F0是PSW的,頭文件已經(jīng)定義了
回復(fù)

使用道具 舉報(bào)

10#
ID:73449 發(fā)表于 2015-4-13 20:13 | 只看該作者
panzishi123456 發(fā)表于 2015-4-13 18:16
F0是PSW的,頭文件已經(jīng)定義了

哦哦,謝謝
回復(fù)

使用道具 舉報(bào)

11#
ID:76471 發(fā)表于 2015-4-13 21:32 | 只看該作者

不客氣,以前我也試過學(xué)習(xí)時(shí)有一些問題卡住,難以解決的痛苦,有人知道提示一下能少走很多彎路

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

12#
ID:112693 發(fā)表于 2016-4-18 13:27 | 只看該作者
哪位大師能寫個(gè),四按鍵四LED的,多謝,在線等
回復(fù)

使用道具 舉報(bào)

13#
ID:114869 發(fā)表于 2016-4-18 14:42 | 只看該作者
這個(gè)靠自己來理解了
回復(fù)

使用道具 舉報(bào)

14#
ID:114960 發(fā)表于 2016-4-18 15:44 | 只看該作者
百度啊
回復(fù)

使用道具 舉報(bào)

15#
ID:112693 發(fā)表于 2016-4-18 23:47 | 只看該作者
百度沒有
回復(fù)

使用道具 舉報(bào)

16#
ID:161556 發(fā)表于 2017-1-13 07:19 | 只看該作者
dragon19790000 發(fā)表于 2016-4-18 13:27
哪位大師能寫個(gè),四按鍵四LED的,多謝,在線等

我也是初學(xué)者,我認(rèn)為,你把他復(fù)制4份,改一下端口,融合在一起就行
回復(fù)

使用道具 舉報(bào)

17#
ID:161488 發(fā)表于 2017-1-15 18:16 | 只看該作者
有沒有匯編程序
回復(fù)

使用道具 舉報(bào)

18#
ID:161909 發(fā)表于 2017-1-15 19:00 | 只看該作者
百度找找,我是來湊數(shù)子的。。。。
回復(fù)

使用道具 舉報(bào)

19#
ID:248171 發(fā)表于 2017-11-10 20:40 | 只看該作者
#include <reg52.h> sbit led1=P2^0; sbit led2=P2^1; sbit led3=P2^2; sbit led4=P2^3; sbit k1=P3^1; sbit k2=P3^0; sbit k3=P3^2; sbit k4=P3^3; void delay(int i) {     while(i--); } void key() {     if(k1==0)         {            delay(100);            if(k1==0)            {                led1=~led1;            }            while(!k1);         }         if(k2==0)         {            delay(100);            if(k2==0)            {                led2=~led2;            }            while(!k2);         }         if(k3==0)         {            delay(100);            if(k3==0)            {                led3=~led3;            }            while(!k3);         }         if(k4==0)         {            delay(100);            if(k4==0)            {                led4=~led4;            }            while(!k4);         } } void main() {     while(1)         {         key();         } }
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表