久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8173|回復: 8
打印 上一主題 下一主題
收起左側

單片機如何實現長按按鍵喚醒掉電模式 附源程序

  [復制鏈接]
跳轉到指定樓層
樓主
ID:687694 發表于 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);
        }              
}


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏7 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:586438 發表于 2020-3-8 19:10 | 只看該作者
明天試試  嘗試看看是否可以  謝謝樓主
回復

使用道具 舉報

板凳
ID:586438 發表于 2020-3-8 19:10 | 只看該作者
明天試試  嘗試看看是否可以  謝謝樓主
回復

使用道具 舉報

地板
ID:198189 發表于 2020-3-18 16:18 | 只看該作者
正在學習掉電模式
回復

使用道具 舉報

5#
ID:214276 發表于 2020-3-24 15:23 | 只看該作者
樓主想請教你一個問題,我在寫個計時程序的時候,按鍵后會重新清零計時,可是不松手計時就不會重新開始,如何實現按下鍵清零,不松手還是會計時。還請指教。
回復

使用道具 舉報

6#
ID:675145 發表于 2020-5-20 14:27 | 只看該作者
樓主掉電模式功耗多少??我設置成掉電模式還有1.6MA的電流
回復

使用道具 舉報

7#
ID:399179 發表于 2020-7-7 21:26 來自手機 | 只看該作者
感謝樓主分享,正在學習掉電模式
回復

使用道具 舉報

8#
ID:687694 發表于 2020-7-24 10:56 | 只看該作者
chinarenxx 發表于 2020-3-24 15:23
樓主想請教你一個問題,我在寫個計時程序的時候,按鍵后會重新清零計時,可是不松手計時就不會重新開始,如 ...

按鍵中斷吧,檢測下降沿。
回復

使用道具 舉報

9#
ID:687694 發表于 2020-7-24 10:57 | 只看該作者
張小不懂 發表于 2020-5-20 14:27
樓主掉電模式功耗多少??我設置成掉電模式還有1.6MA的電流

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91久久国产综合久久 | 天堂网中文字幕在线观看 | 久久久久久女 | 欧美午夜一区 | 99re视频在线免费观看 | 国产免费一区二区三区免费视频 | 欧美精品一区二区三区蜜桃视频 | 国产精品夜夜春夜夜爽久久电影 | 国产剧情一区 | 在线观看国产视频 | 99久久精品国产一区二区三区 | 国产a区 | 91色视频在线 | 成人在线视频观看 | 欧美日韩国产综合在线 | 欧美福利在线 | 日韩精品久久久 | 国产精品亚洲精品 | 日韩在线观看中文字幕 | 亚洲精品一区二区在线 | 日韩成人免费视频 | 91秦先生艺校小琴 | 羞羞视频一区二区 | 亚洲精品一二三 | 一本一道久久a久久精品蜜桃 | 国产精品视频网 | 91日韩| 免费黄色a级毛片 | 日韩欧美中文字幕在线观看 | 瑞克和莫蒂第五季在线观看 | 天天干在线播放 | 男女精品久久 | 日韩在线观看一区二区三区 | 免费在线观看黄视频 | 91一区二区三区 | 久久综合久久自在自线精品自 | 黄色大片免费网站 | 成人国产精品一级毛片视频毛片 | 成年免费在线观看 | 日韩一区二区三区在线观看视频 | 国产精品成人国产乱一区 |