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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STC15單片機掉電模式請教

[復制鏈接]
跳轉到指定樓層
樓主
ID:28752 發表于 2021-10-21 16:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
想用stc15單片機做一個類似手電控制程序,單按鍵,循環顯示不同閃爍頻率,功能是實現了,但是因要用電池供電,工作電流7mA太大了,查了下stc只有掉電模式下才省電,下面代碼,有以下疑問想咨詢下各位大神,麻煩各位有時間時不吝賜教,謝謝!!!1,我的想法是外部中斷口INT0/P3.2上接個開關到地,既做外部中斷喚醒,又做按鍵計數,以實現按鍵循環功能,這樣能行嗎?
2,如果上面1條能行,我的按鍵掃描和功能執行程序要放在哪,int0的中斷入口出么?即主程序直接進入掉電模式循環,中斷喚醒后,執行所有按鍵循環1--2--3--跳出.??
3,有類似程序的能不能給我個參考...
  1. /*---------------------------------------------------------------------*/
  2. /* --- STC MCU Limited ------------------------------------------------*/
  3. /* --- STC15F4K60S4 系列 INT0喚醒掉電模式舉例--------------------------*/
  4. /*---------------------------------------------------------------------*/
  5. //本示例在Keil開發環境下請選擇Intel的8058芯片型號進行編譯
  6. //假定測試芯片的工作頻率為18.432MHz


  7. #include "reg51.h"

  8. #include "intrins.h"

  9. bit FLAG;                       //1:上升沿中斷 0:下降沿中斷

  10. sbit P10 = P1^0;
  11. //中斷服務程序
  12. void exint0() interrupt 0       //INT0中斷入口
  13. {
  14.     P10 = !P10;                 //將測試口取反
  15.     FLAG = INT0;                //保存INT0口的狀態, INT0=0(下降沿); INT0=1(上升沿)
  16. }
  17. //-----------------------------------------------
  18. void main()
  19. {
  20.     IT0 = 0;                    //設置INT0的中斷類型為上升沿和下降沿,上升沿和下降沿均可喚醒
  21. //  IT0 = 1;                    //設置INT0的中斷類型為僅下降沿,下降沿喚醒

  22.     EX0 = 1;                    //使能INT0中斷
  23.     EA = 1;
  24.     while (1)
  25.     {
  26.         PCON = 0x02;            //MCU進入掉電模式
  27.         _nop_();                //掉電模式被喚醒后,首先執行此語句,然后再進入中斷服務程序
  28.         _nop_();
  29.     }
  30. }
復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:624769 發表于 2021-10-21 19:53 | 只看該作者
去年正好做過一個小東西,正好也是外部中斷喚醒,外部中斷執行,你可以參考一下,代碼只有幾行。

電子門鈴STC15W100.rar (1.12 MB, 下載次數: 68)


回復

使用道具 舉報

板凳
ID:28752 發表于 2021-10-21 20:44 | 只看該作者
188610329 發表于 2021-10-21 19:53
去年正好做過一個小東西,正好也是外部中斷喚醒,外部中斷執行,你可以參考一下,代碼只有幾行。

謝謝,我下下來研究下能不能看明白...
回復

使用道具 舉報

地板
ID:213173 發表于 2021-10-21 21:50 | 只看該作者
//適合STC15W系列
#include "reg51.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
//-----------------------------------------------
sbit key  = P3^2;

sbit LED1  = P1^0;

uchar i;

void delayms(uint k)//1T
{
        uint i,j;
        for(i=k;i>0;i--)
                for(j=829;j>0;j--);
}

void main()
{
        IT0 = 1;//設置INT0的中斷類型為下降沿喚醒
        EX0 = 1;//使能INT0中斷
        EA  = 1;//開總中斷                                                        
        while (1)
        {
                if(i==0)
                {
                        while(!key)       
                        {
                                LED1=~LED1;
                                delayms(100);
                        }
                }
                if(i==1)
                {
                        while(!key)       
                        {
                                LED1=~LED1;
                                delayms(400);
                        }
                }
                if(i==2)
                {
                        while(!key)       
                        {
                                LED1=~LED1;
                                delayms(1600);
                        }
                }
                LED1=1;
                PCON = 0x02;//MCU進入掉電模式
                _nop_();    //掉電模式被喚醒后,首先執行此語句,然后再進入中斷服務程序
                _nop_();    //中斷服務程序執行完再接著此句繼續執行
        }
}

//-----------------------------------------
//中斷服務程序
void exint0() interrupt 0       //INT0中斷入口
{
        i=++i%3;
}
回復

使用道具 舉報

5#
ID:401564 發表于 2021-10-21 22:57 | 只看該作者
思路:
1,P3.2按鍵喚醒或者關機,可以是雙擊或者長按,單擊功能切換
2,每按下就進入中斷,在中斷中處理,先檢測是不是掉電模式,或者是要不要喚醒
主程序給你參考一下
void main(void)
{
        Mcu_Rst();          //單片機復位
        Mcu_Awaken(); //單片機喚醒操作
        Stc8g_Adc_int();//stc8gadc初始化
        Tap6130_Start();  //耳放啟動
//———————————————————————————————————————————————————————————————————          
        while(1)
        {                         
         if((USB==1)||(ON==1)) Battry_Voltage_Disp(ADC_VCC);        //電池電壓處理
         if((USB==0)&&(ON==1))        Key_Disp();                                         //按鍵處理                 
         if((TWO_PRE==1)||(LONG_PRE==1))
                {                                       
                        ON=!ON;                                                                                //長按/雙擊有效
                        TWO_PRE=0;
                        LONG_PRE=0;
                        Mcu_Up=0;                                                                                //清除按鍵喚醒標志位
                        if(ON==1)                                                                          
                          {                                                       
                                        Delay_ms(300);                                                                //延時一定時間開機,沒有為什么,就是達到某個效果而已,可有可無
                                        Tap6130_Start();                                                         //如果是按鍵開機,就啟動耳放和藍牙
                                        Stc8g_Adc_int();                                                        //stc8gadc初始化                        
                                }                               
                }
                else if(ONE_PRE==1)
                                {
                                   ONE_PRE=0;                                                                  //單擊有效
                                   Mcu_Up=0;
                                   if(ON==1)Play();                                                                         //播放/暫停/接聽/掛斷                                  
                                }                          
                        else if((USB==0)&&(ON==0)&&(Mcu_Up==0))                //UBS在插著,就不關機
                                        {                               
                                                Delay_ms(300);                                                                //延時0.3秒關機
                                                Mcu_Sleep();                                                                //單片機進入掉電模式
                                                PCON=0x02;                                                                        //進入掉電模式
                                                _nop_();                               
                                                _nop_();
                                                _nop_();
                                                _nop_();
                                                _nop_();
                                                Mcu_Awaken();                                                                  //單片機喚醒
                                                if(USB==1)Stc8g_Adc_int();                                        //如果USB高電平,就表示是USB播放,stc8gadc初始化               
                                        }                                                               
        }                          
//———————————————————————————————————————————————————                               
}
回復

使用道具 舉報

6#
ID:956872 發表于 2021-10-22 00:40 來自手機 | 只看該作者
喚醒時首先關閉中斷,按鍵就成普通按鍵了。進入掉電模式前打開外部中斷,按鍵就能喚醒單片機了
回復

使用道具 舉報

7#
ID:28752 發表于 2021-10-22 11:07 | 只看該作者
wulin 發表于 2021-10-21 21:50
//適合STC15W系列
#include "reg51.h"
#include "intrins.h"

感謝回復,我試了下,這代碼必須保持P3.2一直低才能完成功能...,不過也有啟發了...
回復

使用道具 舉報

8#
ID:28752 發表于 2021-10-22 11:08 | 只看該作者
Y_G_G 發表于 2021-10-21 22:57
思路:
1,P3.2按鍵喚醒或者關機,可以是雙擊或者長按,單擊功能切換
2,每按下就進入中斷,在中斷中處理,先檢 ...

感謝回復,我仔細研究研究...
回復

使用道具 舉報

9#
ID:28752 發表于 2021-10-22 11:08 | 只看該作者
PEB188 發表于 2021-10-22 00:40
喚醒時首先關閉中斷,按鍵就成普通按鍵了。進入掉電模式前打開外部中斷,按鍵就能喚醒單片機了

多謝回復,我試著改改看看...
回復

使用道具 舉報

10#
ID:213173 發表于 2021-10-22 21:10 | 只看該作者
grb7906 發表于 2021-10-22 11:07
感謝回復,我試了下,這代碼必須保持P3.2一直低才能完成功能...,不過也有啟發了...

把死循環while(!key)改for循環即可解決松手問題。

評分

參與人數 1黑幣 +10 收起 理由
ax6808 + 10

查看全部評分

回復

使用道具 舉報

11#
ID:28752 發表于 2021-10-22 21:54 | 只看該作者
wulin 發表于 2021-10-22 21:10
把死循環while(!key)改for循環即可解決松手問題。

麻煩有時間的話,能不能給一組循環的代碼,我進死胡同了...,初學階段...
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产成人精品在线 | 欧美激情欧美激情在线五月 | 国产成人精品一区二区三区在线 | av一区二区三区四区 | 国产一区二区在线视频 | 国产精品日韩一区 | 丁香色婷婷 | 天天综合永久入口 | 亚洲一区二区免费电影 | 欧美日韩国产中文 | 日韩成人在线一区 | 国产一区二区三区 | 中文字幕亚洲专区 | 黄色免费在线观看网站 | 美国a级毛片免费视频 | 国产成人免费 | 国产婷婷色一区二区三区 | 久久国产精品偷 | 欧美视频一区 | 欧美自拍网站 | 国产精品久久久久久亚洲调教 | 色综合久久天天综合网 | 国产精品免费一区二区三区四区 | 九久久| 国产视频精品在线观看 | 亚洲三区在线 | www.一区二区 | 中文字幕在线第一页 | 日本韩国欧美在线观看 | 久久久久久亚洲精品 | 欧美一区二区三区 | 色狠狠一区 | 九九久久国产 | 日本免费在线 | 久久九精品 | 欧美视频一区 | 福利片在线观看 | 成年人视频在线免费观看 | 玖玖免费| 亚洲成人综合社区 | 成人综合一区二区 |