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

標(biāo)題: STC15單片機(jī)掉電模式請教 [打印本頁]

作者: grb7906    時(shí)間: 2021-10-21 16:42
標(biāo)題: STC15單片機(jī)掉電模式請教
想用stc15單片機(jī)做一個(gè)類似手電控制程序,單按鍵,循環(huán)顯示不同閃爍頻率,功能是實(shí)現(xiàn)了,但是因要用電池供電,工作電流7mA太大了,查了下stc只有掉電模式下才省電,下面代碼,有以下疑問想咨詢下各位大神,麻煩各位有時(shí)間時(shí)不吝賜教,謝謝!!!1,我的想法是外部中斷口INT0/P3.2上接個(gè)開關(guān)到地,既做外部中斷喚醒,又做按鍵計(jì)數(shù),以實(shí)現(xiàn)按鍵循環(huán)功能,這樣能行嗎?
2,如果上面1條能行,我的按鍵掃描和功能執(zhí)行程序要放在哪,int0的中斷入口出么?即主程序直接進(jìn)入掉電模式循環(huán),中斷喚醒后,執(zhí)行所有按鍵循環(huán)1--2--3--跳出.??
3,有類似程序的能不能給我個(gè)參考...
  1. /*---------------------------------------------------------------------*/
  2. /* --- STC MCU Limited ------------------------------------------------*/
  3. /* --- STC15F4K60S4 系列 INT0喚醒掉電模式舉例--------------------------*/
  4. /*---------------------------------------------------------------------*/
  5. //本示例在Keil開發(fā)環(huán)境下請選擇Intel的8058芯片型號進(jìn)行編譯
  6. //假定測試芯片的工作頻率為18.432MHz


  7. #include "reg51.h"

  8. #include "intrins.h"

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

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

  22.     EX0 = 1;                    //使能INT0中斷
  23.     EA = 1;
  24.     while (1)
  25.     {
  26.         PCON = 0x02;            //MCU進(jìn)入掉電模式
  27.         _nop_();                //掉電模式被喚醒后,首先執(zhí)行此語句,然后再進(jìn)入中斷服務(wù)程序
  28.         _nop_();
  29.     }
  30. }
復(fù)制代碼

作者: 188610329    時(shí)間: 2021-10-21 19:53
去年正好做過一個(gè)小東西,正好也是外部中斷喚醒,外部中斷執(zhí)行,你可以參考一下,代碼只有幾行。

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



作者: grb7906    時(shí)間: 2021-10-21 20:44
188610329 發(fā)表于 2021-10-21 19:53
去年正好做過一個(gè)小東西,正好也是外部中斷喚醒,外部中斷執(zhí)行,你可以參考一下,代碼只有幾行。

謝謝,我下下來研究下能不能看明白...
作者: wulin    時(shí)間: 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;//設(shè)置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進(jìn)入掉電模式
                _nop_();    //掉電模式被喚醒后,首先執(zhí)行此語句,然后再進(jìn)入中斷服務(wù)程序
                _nop_();    //中斷服務(wù)程序執(zhí)行完再接著此句繼續(xù)執(zhí)行
        }
}

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

作者: Y_G_G    時(shí)間: 2021-10-21 22:57
思路:
1,P3.2按鍵喚醒或者關(guān)機(jī),可以是雙擊或者長按,單擊功能切換
2,每按下就進(jìn)入中斷,在中斷中處理,先檢測是不是掉電模式,或者是要不要喚醒
主程序給你參考一下
void main(void)
{
        Mcu_Rst();          //單片機(jī)復(fù)位
        Mcu_Awaken(); //單片機(jī)喚醒操作
        Stc8g_Adc_int();//stc8gadc初始化
        Tap6130_Start();  //耳放啟動(dòng)
//———————————————————————————————————————————————————————————————————          
        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;                                                                                //清除按鍵喚醒標(biāo)志位
                        if(ON==1)                                                                          
                          {                                                       
                                        Delay_ms(300);                                                                //延時(shí)一定時(shí)間開機(jī),沒有為什么,就是達(dá)到某個(gè)效果而已,可有可無
                                        Tap6130_Start();                                                         //如果是按鍵開機(jī),就啟動(dòng)耳放和藍(lán)牙
                                        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在插著,就不關(guān)機(jī)
                                        {                               
                                                Delay_ms(300);                                                                //延時(shí)0.3秒關(guān)機(jī)
                                                Mcu_Sleep();                                                                //單片機(jī)進(jìn)入掉電模式
                                                PCON=0x02;                                                                        //進(jìn)入掉電模式
                                                _nop_();                               
                                                _nop_();
                                                _nop_();
                                                _nop_();
                                                _nop_();
                                                Mcu_Awaken();                                                                  //單片機(jī)喚醒
                                                if(USB==1)Stc8g_Adc_int();                                        //如果USB高電平,就表示是USB播放,stc8gadc初始化               
                                        }                                                               
        }                          
//———————————————————————————————————————————————————                               
}
作者: PEB188    時(shí)間: 2021-10-22 00:40
喚醒時(shí)首先關(guān)閉中斷,按鍵就成普通按鍵了。進(jìn)入掉電模式前打開外部中斷,按鍵就能喚醒單片機(jī)了
作者: grb7906    時(shí)間: 2021-10-22 11:07
wulin 發(fā)表于 2021-10-21 21:50
//適合STC15W系列
#include "reg51.h"
#include "intrins.h"

感謝回復(fù),我試了下,這代碼必須保持P3.2一直低才能完成功能...,不過也有啟發(fā)了...
作者: grb7906    時(shí)間: 2021-10-22 11:08
Y_G_G 發(fā)表于 2021-10-21 22:57
思路:
1,P3.2按鍵喚醒或者關(guān)機(jī),可以是雙擊或者長按,單擊功能切換
2,每按下就進(jìn)入中斷,在中斷中處理,先檢 ...

感謝回復(fù),我仔細(xì)研究研究...
作者: grb7906    時(shí)間: 2021-10-22 11:08
PEB188 發(fā)表于 2021-10-22 00:40
喚醒時(shí)首先關(guān)閉中斷,按鍵就成普通按鍵了。進(jìn)入掉電模式前打開外部中斷,按鍵就能喚醒單片機(jī)了

多謝回復(fù),我試著改改看看...
作者: wulin    時(shí)間: 2021-10-22 21:10
grb7906 發(fā)表于 2021-10-22 11:07
感謝回復(fù),我試了下,這代碼必須保持P3.2一直低才能完成功能...,不過也有啟發(fā)了...

把死循環(huán)while(!key)改for循環(huán)即可解決松手問題。
作者: grb7906    時(shí)間: 2021-10-22 21:54
wulin 發(fā)表于 2021-10-22 21:10
把死循環(huán)while(!key)改for循環(huán)即可解決松手問題。

麻煩有時(shí)間的話,能不能給一組循環(huán)的代碼,我進(jìn)死胡同了...,初學(xué)階段...




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