欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 按按鍵1持續停止一秒,按按鍵2持續停止2秒 小白求助,各位大神幫一下咯 [打印本頁]

作者: 1582143078    時間: 2017-6-26 12:56
標題: 按按鍵1持續停止一秒,按按鍵2持續停止2秒 小白求助,各位大神幫一下咯
按按鍵1持續停止一秒,按按鍵2持續停止2秒,按按鍵3持續停止3秒,按按鍵4持續停止4秒

作者: wulin    時間: 2017-6-26 17:41
你的電路加電初始是什么狀態?負載是電機或其他?不說清楚幫不了。
作者: qwaqq    時間: 2017-6-26 19:34
源碼發來看看
作者: 1582143078    時間: 2017-6-26 19:40
wulin 發表于 2017-6-26 17:41
你的電路加電初始是什么狀態?負載是電機或其他?不說清楚幫不了。

負載是LED,初始狀態是全亮
作者: 1582143078    時間: 2017-6-26 19:45
wulin 發表于 2017-6-26 17:41
你的電路加電初始是什么狀態?負載是電機或其他?不說清楚幫不了。

然后這應該是一個簡單的延時程序,初始狀態是全亮,然后按按鍵1LED滅一秒再亮,按按鍵2燈滅2秒再亮......
作者: 1582143078    時間: 2017-6-26 20:32
qwaqq 發表于 2017-6-26 19:34
源碼發來看看

需要的就是程序
作者: 1582143078    時間: 2017-6-27 08:46
wulin 發表于 2017-6-26 17:41
你的電路加電初始是什么狀態?負載是電機或其他?不說清楚幫不了。

大神,你看你能幫忙編寫一下這個程序,還有電路圖嘛,謝謝啦
作者: wulin    時間: 2017-6-27 10:25
1582143078 發表于 2017-6-26 19:45
然后這應該是一個簡單的延時程序,初始狀態是全亮,然后按按鍵1LED滅一秒再亮,按按鍵2燈滅2秒再亮......

/***********************************************************************
這是可以用于實戰的獨立按鍵程序,有詳細注釋,你看懂就進入中級階段了。
加電LED1~LED4全亮,key1~key4分別控制LED1~LED4熄滅1~4秒,各通路獨立控
制互不影響,延時期間重復按鍵無效。摒棄嚴重影響運行效率的Delay軟件延時。
按鍵和LED端口定義可根據實際電路自行更改
************************************************************************/
#include <reg51.h>
#define uint unsigned int                 //宏定義無符號整型數據
#define uchar unsigned char         //宏定義無符號字符型數據
sbit key1=P3^4;                                        //按鍵端口定義
sbit key2=P3^5;       
sbit key3=P3^6;       
sbit key4=P3^7;       
sbit LED1=P1^0;                                        //LED端口定義
sbit LED2=P1^1;       
sbit LED3=P1^2;       
sbit LED4=P1^3;       
void key_scan();                                //按鍵掃描程序聲明
void Timer0Init();                                //初始化定時器程序聲明
bit key1_sign=0,key2_sign=0,key3_sign=0,key4_sign=0;//按鍵自鎖標志
uint sec5ms1=0,sec5ms2=0,sec5ms3=0,sec5ms4=0;//5ms中斷變量
/*******************
        主程序
********************/
void main()
{
        LED1=0;                                                //初始化LED
        LED2=0;
        LED3=0;
        LED4=0;
        Timer0Init();                                //初始化定時器程序
        while(1)
        {
                key_scan();                                //按鍵掃描程序
        }
}
/**************************************************
        按鍵掃描程序
**************************************************/
void key_scan()                                        //鍵掃描程序
{
        static uchar count1=0,count2=0,count3=0,count4=0;//消抖計數變量                       

        if(key1==0)                                        //按鍵1按下
        {
                count1++;                                //消抖計數1自+1
                if(count1>=100)                        //100次檢測按鍵如果為0
                {                       
                        count1=100;                        //防止溢出
                        if(key1_sign==0)        //按鍵1自鎖標志為0
                        {
                                key1_sign=1;        //按鍵1自鎖標志置1
                                LED1=1;                        //LED1熄滅
                        }
                }
        }
        else count1=0;                                //按鍵1抬起計數1清0

        if(key2==0)                                        //按鍵2按下
        {
                count2++;                                //消抖計數2自+1
                if(count2>=100)                        //100次檢測按鍵如果為0
                {                       
                        count2=100;                        //防止溢出
                        if(key2_sign==0)        //按鍵2自鎖標志為0
                        {
                                key2_sign=1;        //按鍵2自鎖標志置1
                                LED2=1;                        //LED2熄滅
                        }
                }
        }
        else count2=0;                                //按鍵2抬起計數2清0

        if(key3==0)                                        //按鍵3按下
        {
                count3++;                                //消抖計數3自+1
                if(count3>=100)                        //100次檢測按鍵如果為0
                {                       
                        count3=100;                        //防止溢出
                        if(key3_sign==0)        //按鍵3自鎖標志為0
                        {
                                key3_sign=1;        //按鍵3自鎖標志置1
                                LED3=1;                        //LED3熄滅
                        }
                }
        }
        else count3=0;                                //按鍵3抬起計數3清0
       
        if(key4==0)                                        //按鍵4按下
        {
                count4++;                                //消抖計數4自+1
                if(count4>=100)                        //100次檢測按鍵如果為0
                {                       
                        count4=100;                        //防止溢出
                        if(key4_sign==0)        //按鍵4自鎖標志為0
                        {
                                key4_sign=1;        //按鍵4自鎖標志置1
                                LED4=1;                        //LED4熄滅
                        }
                }
        }
        else count4=0;                                 //按鍵4抬起計數4清0
}
/**************************************************
        初始化定時器程序  12T 5毫秒@12.000MHz
**************************************************/
void Timer0Init(void)                //5毫秒@12.000MHz
{
        TMOD = 0x01;                        //設置定時器模式
        TL0 = 0x78;                                //設置定時初值
        TH0 = 0xEC;                                //設置定時初值
        TF0 = 0;                                //清除TF0標志
        TR0 = 1;                                //定時器0開始計時
        EA=1;                                        //開總中斷
        ET0=1;                                        //開定時器0中斷       
}
/**************************************************
        定時器0中斷服務程序
**************************************************/
void timer0() interrupt 1        //定時器0中斷服務程序
{
        TL0 = 0x78;                                //設置定時重載值
        TH0 = 0xEC;                                //設置定時重載值
        if(key1_sign==1)                //允許1秒延時計時
        {
                sec5ms1++;                        //sec5ms1自+1
                if(sec5ms1>=200)        //1秒
                {
                        sec5ms1=0;                //sec5ms1清0
                        key1_sign=0;        //按鍵1自鎖標志清0
                        LED1=0;                        //LED1亮
                }
        }
        if(key2_sign==1)                //允許2秒延時計時
        {
                sec5ms2++;                        //sec5ms2自+1
                if(sec5ms2>=400)        //2秒
                {
                        sec5ms2=0;                //sec5ms2清0
                        key2_sign=0;        //按鍵2自鎖標志清0
                        LED2=0;                        //LED2亮
                }
        }
        if(key3_sign==1)                //允許3秒延時計時
        {
                sec5ms3++;                        //sec5ms3自+1
                if(sec5ms3>=600)        //3秒
                {
                        sec5ms3=0;                //sec5ms3清0
                        key3_sign=0;        //按鍵3自鎖標志清0
                        LED3=0;                        //LED3亮
                }
        }
        if(key4_sign==1)                //允許4秒延時計時
        {
                sec5ms4++;                        //sec5ms4自+1
                if(sec5ms4>=800)        //4秒
                {
                        sec5ms4=0;                //sec5ms4清0
                        key4_sign=0;        //按鍵4自鎖標志清0
                        LED4=0;                        //LED4亮
                }
        }
}

作者: 1582143078    時間: 2017-6-27 11:24
謝謝老鐵了
作者: 754663818    時間: 2017-6-28 10:07
只要寫一延時程序就可以了




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