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

標題: 單片機如何實現長按按鍵喚醒掉電模式 附源程序 [打印本頁]

作者: lovexulu    時間: 2020-3-5 22:30
標題: 單片機如何實現長按按鍵喚醒掉電模式 附源程序
今天突然翻百度長按按鍵喚醒掉電模式,沒有發現有資料介紹,于是自己用STC15W408AS做了個實驗,用于長按按鍵喚醒。
構思如下,查數據手冊表示,掉電模式無系統時鐘,外部設備除掉電前開啟喚醒的外設一律停止工作,故想用系統執行任務判斷按下時間是不可能了,但注意到數據手冊中寫到,喚醒后執行下一條語句后轉向中斷服務程序,于是想在中斷服務程序中判斷按鍵按下時長,并作出處理,短按則再次進入掉電狀態,長按則喚醒。實驗代碼如下,基本實現了長按喚醒led發光,再次長按掉電led熄滅,正常狀態短按則改變led狀態。代碼如下:

單片機源程序如下:
#include "reg51.h"

#define uchar unsigned char
#define uint unsigned int
sbit led1=P1^2;
sbit k1  =P3^2;//STC15W408AS此腳為外部中斷0,在非掉電模式下做按鍵用,按一次led改變一次狀態。
uint num=0,kn=0;
uchar km;
void delay (uint yc)//僅在喚醒掉電時用
{
uint i,j;
for (i=yc;i>0;i--)
     for (j=100;j>0;j--);
}
void main()
{
TMOD=0x01;
TH0=(65536-1000)/256; //11.0592M晶振定時1ms數為1000
TL0=(65536-1000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
        {
        if(num==10) //如果到了10次,說明10ms秒時間
                {
                if(k1==0)
                        {
                        kn++;
                        if(kn>200)//長按標志
                                led1=1;
                        }
                if(k1==1)
                {
                        if(kn>0&&kn<100)//短按判定
                        {
                                led1=~led1;
                                kn=0;
                        }
                        if(kn>200)//長按判定
                        {
                                kn=0;
                                IT0 = 1;
                                EX0 = 1;
                                PCON = 0x02;
                                delay(10);//手冊中寫到,喚醒會執行中斷命令后一條語句之后轉向中斷服務程序,故在此設置一個喚醒執行語句。               
                        }
                }
                num=0;//重新計數
        }
        }
}
void T_time()interrupt 1
{
        TH0=(65536-1000)/256;
        TL0=(65536-1000)%256;
        num++;
}
void exint0() interrupt 0      
{   
        uint x=0;
        IT0=0;
        EX0=0;
        while(k1==0)
        {
                x++;
                delay(10);
                if(x>=1000)
                        led1=0;//喚醒標志
        }
        if(x<1000)
        {
                IT0=1;
                EX0=1;
                PCON=0x02;
                delay(10);
        }              
}



作者: 如癡百感生    時間: 2020-3-8 19:10
明天試試  嘗試看看是否可以  謝謝樓主

作者: 如癡百感生    時間: 2020-3-8 19:10
明天試試  嘗試看看是否可以  謝謝樓主

作者: xia20    時間: 2020-3-18 16:18
正在學習掉電模式
作者: chinarenxx    時間: 2020-3-24 15:23
樓主想請教你一個問題,我在寫個計時程序的時候,按鍵后會重新清零計時,可是不松手計時就不會重新開始,如何實現按下鍵清零,不松手還是會計時。還請指教。
作者: 張小不懂    時間: 2020-5-20 14:27
樓主掉電模式功耗多少??我設置成掉電模式還有1.6MA的電流
作者: 快樂眼淚    時間: 2020-7-7 21:26
感謝樓主分享,正在學習掉電模式
作者: lovexulu    時間: 2020-7-24 10:56
chinarenxx 發表于 2020-3-24 15:23
樓主想請教你一個問題,我在寫個計時程序的時候,按鍵后會重新清零計時,可是不松手計時就不會重新開始,如 ...

按鍵中斷吧,檢測下降沿。
作者: lovexulu    時間: 2020-7-24 10:57
張小不懂 發表于 2020-5-20 14:27
樓主掉電模式功耗多少??我設置成掉電模式還有1.6MA的電流

8051單片機內部上拉不可關斷,STC15以后的可以設置I/O口關閉上拉,試試看。




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