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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

單片機做的手電斷電換擋代碼遇到問題 要按兩下才行?

查看數: 3802 | 評論數: 28 | 收藏 3
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2023-8-3 13:07

正文摘要:

高手看一下什么問題,負極要斷電兩下才能換擋,程序思路就是按下的時候就是斷電的時候進低功耗ua模式,接通count加1,3.2高阻模式 單片機源程序如下: #include "STC8G.H" #include<intrins.h> #de ...

回復

ID:1130333 發表于 2024-11-18 01:38
咯上 發表于 2023-8-4 11:49
反正有的驅動就是斷開時低功耗模式,然后關機后電容沒放光就一直帶記憶,需要并一個電阻放電讓他關電后只記 ...

最近我也在做手電,做的差不多了
交流一下?
ID:60656 發表于 2023-8-13 22:04
咯上 發表于 2023-8-5 23:22
現在試這代碼又可以了,之前在負極到電容負串了1k電阻用了測量斷電時電流是否是ua級別,可能就是串了這個 ...

如果有lvd 檢測 檢測到低于一定電壓直接睡眠 上電后模式加 能實現你的斷電換擋嗎可以試試, 電容維持不復位可以 選低頻低功耗的mcu
ID:1062408 發表于 2023-8-5 23:22
wulin 發表于 2023-8-5 10:49
程序基本構架很簡單,可能在調試中需要略做修改。芯片不同,510K電阻未必恰當。

現在試這代碼又可以了,之前在負極到電容負串了1k電阻用了測量斷電時電流是否是ua級別,可能就是串了這個電阻就失敗了,現在取消掉了就可以了,不過電容要大點的要大于47uf不然3.6v以下無法換擋,還有510k要并103電容,不并換擋一會行一會又玄學不行搞不懂,我用的是3.2高阻,搞這個一會行一會不行調了好久真的有點玄學
ID:1062408 發表于 2023-8-5 14:44
wulin 發表于 2023-8-5 10:49
程序基本構架很簡單,可能在調試中需要略做修改。芯片不同,510K電阻未必恰當。

睡眠代碼要寫成這樣才能斷電睡眠
IT0 = 1;                //INT0 下降沿中斷               
                        IE0 = 0;                //清除外中斷0標志位
                        _nop_();
                        _nop_();
                        EX0 = 1;                //INT0 允許中斷
                        _nop_();
                        _nop_();
                        PCON |= 0x02;        //Sleep
                        _nop_();
                        _nop_();
                        _nop_();

還有510k并了個103電容才成功,不然就出現按幾下才換檔現象,還有3.2是高阻模式,如果不并103改代碼能成功嗎?下面放出我并103成功的代碼

#include "STC8G.H"
#include<intrins.h>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit LED=P5^4;
sbit EN =P5^5;
sbit key=P3^2;

uchar count=0;
bit allow;

void Shutdown()//掉電模式函數
{
        
                IT0 = 1;                //INT0 下降沿中斷               
                        IE0 = 0;                //清除外中斷0標志位
                        _nop_();
                        _nop_();
                        EX0 = 1;                //INT0 允許中斷
                        _nop_();
                        _nop_();
                        PCON |= 0x02;        //Sleep
                        _nop_();
                        _nop_();
                        _nop_();
            
}

void INT0_Isr() interrupt 0
{
            EX0=0;
     PCON=0x00;
    if(key)                //判斷上升沿換擋
    {
        count=++count%3;
    }
   
}


void main()
{
//P3、P5口都設置為準雙向口
            P3M0 = 0x00; P3M1 = 0x04;

        P5M0 = 0x00;
        P5M1 = 0x00;
        IT0 = 0;   //使能INT0上升沿和下降沿中斷
        EX0 = 1;   //使能INT0中斷
        EA = 1;    //開總中斷
        while(1)
        {
                                        if(key==0)
                Shutdown();

                if(count==0)
                {
                        LED=0;
                        EN=1;
                }
                if(count==1)
                {
                        LED=1;
                        EN=0;
                }
                if(count==2)
                {
                        EN=1;
                }
        }
}
ID:213173 發表于 2023-8-5 10:49
咯上 發表于 2023-8-5 08:36
關斷一般1s或幾s還是要的,所以說低功耗必須要的,電容一般就幾uf撐不了多久,我要的是換擋要換io口的, ...

程序基本構架很簡單,可能在調試中需要略做修改。芯片不同,510K電阻未必恰當。
  1. #include "STC8G.H"
  2. #include<intrins.h>
  3. typedef unsigned char uchar;
  4. typedef unsigned int uint;
  5. sbit LED=P5^4;
  6. sbit EN =P5^5;
  7. sbit key=P3^2;

  8. uchar count=0;
  9. bit allow;

  10. void Shutdown()//掉電模式函數
  11. {
  12.         if(allow)
  13.         {
  14.                 LED=1;
  15.                 EN=1;
  16.                 _nop_();
  17.                 _nop_();
  18.                 PCON = 0x02; //MCU進入掉電模式
  19.                 _nop_();
  20.                 _nop_();
  21.                 _nop_();
  22.                 _nop_();
  23.                 allow=0;
  24.         }
  25. }

  26. void INT0_Isr() interrupt 0
  27. {
  28.     if(key)                //判斷上升沿換擋
  29.     {
  30.         count=++count%3;
  31.     }
  32.     else                   //判斷下降沿休眠
  33.     {
  34.                         allow=1;
  35.     }
  36. }


  37. void main()
  38. {
  39. //P3、P5口都設置為準雙向口
  40.         P3M0 = 0x00;
  41.         P3M1 = 0x00;
  42.         P5M0 = 0x00;
  43.         P5M1 = 0x00;
  44.         IT0 = 0;   //使能INT0上升沿和下降沿中斷
  45.         EX0 = 1;   //使能INT0中斷
  46.         EA = 1;    //開總中斷
  47.         while(1)
  48.         {
  49.                 Shutdown();

  50.                 if(count==0)
  51.                 {
  52.                         LED=0;
  53.                         EN=1;
  54.                 }
  55.                 if(count==1)
  56.                 {
  57.                         LED=1;
  58.                         EN=0;
  59.                 }
  60.                 if(count==2)
  61.                 {
  62.                         EN=1;
  63.                 }
  64.         }
  65. }


復制代碼

ID:1090753 發表于 2023-8-5 08:40

不是,你把按鍵復位改一下
ID:1062408 發表于 2023-8-5 08:39
聲明下我不是用于傷腰用途,網上也能買到不值錢就是郵費貴點舍不得買,還有程序比較靈活能隨便改
ID:1062408 發表于 2023-8-5 08:36
wulin 發表于 2023-8-5 06:50
你繞了這么大圈子,直接說是為了改裝成品手電筒不就得了。利用電源開關做觸發信號換擋。無需EEPROM。低功 ...

關斷一般1s或幾s還是要的,所以說低功耗必須要的,電容一般就幾uf撐不了多久,我要的是換擋要換io口的,他這個用了pwm只用一個io口這種驅動我也有好幾個,我想做沒有pwm完全恒流的驅動,能不能按照我發帖的要寫一個程序
ID:213173 發表于 2023-8-5 06:50
咯上 發表于 2023-8-4 12:21
https://tieba.baidu.com/p/7528586913
參考下這個帖子他的是匯編,看不懂

你繞了這么大圈子,直接說是為了改裝成品手電筒不就得了。利用電源開關做觸發信號換擋。無需EEPROM。低功耗模式可有可無,在于操作時間間隔需求和蓄能電容大小;究梢园戳魉疅舫绦驅。
ID:1062408 發表于 2023-8-4 12:21
https://tieba.baidu.com/p/7528586913
參考下這個帖子他的是匯編,看不懂
ID:1062408 發表于 2023-8-4 12:13
eeprom那我不需要記憶,只需要斷電幾秒記憶,那怎么做
ID:1062408 發表于 2023-8-4 11:53
不過有的手電驅動最便宜的那種三個腳的確實沒有二極管和電容不知道怎么實現斷電換檔的
ID:1062408 發表于 2023-8-4 11:51
就不能用斷電低功耗模式寫嗎
ID:1062408 發表于 2023-8-4 11:49
反正有的驅動就是斷開時低功耗模式,然后關機后電容沒放光就一直帶記憶,需要并一個電阻放電讓他關電后只記憶幾秒
ID:161164 發表于 2023-8-4 11:47
咯上 發表于 2023-8-4 11:39
這個對壽命有影響,不會吧換一次檔就存一次?

要用循環寫入算法
每次寫在新地址
1k EEProm = 1024Byte x 100000 = 102400000
你每秒按一下,要按102400000/3600/24/365 = 3.25年才可能有影響
ID:1062408 發表于 2023-8-4 11:42
lkc8210 發表于 2023-8-4 11:34
開關都斷開了,沒回路去電源負極,何來電流?

芯片不耗電嗎,我要斷開1秒或幾秒
ID:1062408 發表于 2023-8-4 11:39
lkc8210 發表于 2023-8-4 11:19
根本不用啥電容,低功耗模式

這個對壽命有影響,不會吧換一次檔就存一次?
ID:161164 發表于 2023-8-4 11:34
咯上 發表于 2023-8-4 11:24
沒電容開關斷開時電就放光了

開關都斷開了,沒回路去電源負極,何來電流?
ID:1062408 發表于 2023-8-4 11:24
lkc8210 發表于 2023-8-4 11:19
根本不用啥電容,低功耗模式

沒電容開關斷開時電就放光了
ID:161164 發表于 2023-8-4 11:19
咯上 發表于 2023-8-4 09:57
斷開進入低功耗模式,耗電ua級別,芯片靠電容維持,二極管是防止led用電容里的電,接通高電平喚醒再換擋

根本不用啥電容,低功耗模式


ID:161164 發表于 2023-8-4 11:12
咯上 發表于 2023-8-4 07:26
這個是510k當成開關了,不對我要的是負極當開關斷一次電換一個檔,使用時開關時接通的,斷一次換一個檔, ...

你都把電源都截止了,還低功耗個啥?
ID:1062408 發表于 2023-8-4 09:57
yzwzfyz 發表于 2023-8-4 09:31
改成將芯片GND斷開,它還能工作么?

斷開進入低功耗模式,耗電ua級別,芯片靠電容維持,二極管是防止led用電容里的電,接通高電平喚醒再換擋
ID:213173 發表于 2023-8-4 09:50
咯上 發表于 2023-8-4 07:26
這個是510k當成開關了,不對我要的是負極當開關斷一次電換一個檔,使用時開關時接通的,斷一次換一個檔, ...

開關接負極,斷開就沒有電源哪來什么低功耗ua模式,完全無功耗了。想要用電源開關換檔就要利用低壓中斷,EEPROM保存當前狀態,下次得電,先讀EEPROM,再換擋。
ID:123289 發表于 2023-8-4 09:31
改成將芯片GND斷開,它還能工作么?
ID:1062408 發表于 2023-8-4 07:26

這個是510k當成開關了,不對我要的是負極當開關斷一次電換一個檔,使用時開關時接通的,斷一次換一個檔,注意點是開關斷開時要進入低功耗ua模式,斷開時3.2是低電平,接通是高電平
ID:213173 發表于 2023-8-3 18:00
本帖最后由 wulin 于 2023-8-4 09:26 編輯
  1. //適合STC15/STC8系列
  2. #include <STC8G.H>
  3. #include "intrins.h"
  4. #define uchar unsigned char
  5. #define uint unsigned int

  6. sbit key  = P3^2;//外接1K電阻和104電容硬件消抖可以去掉Delay函數
  7. sbit LED1 = P5^4;
  8. sbit EN   = P5^5;

  9. uchar Key_value; //鍵值
  10. uint  count;     //消抖計數
  11. bit   sign=0;    //狀態標志
  12. bit   allow;     //允許關機標志

  13. void Delay20ms() //@11.0592MHz
  14. {
  15.         unsigned char i, j, k;
  16.        
  17.         i = 2;
  18.         j = 32;
  19.         k = 60;
  20.         do
  21.         {
  22.                 do
  23.                 {
  24.                         while (--k);
  25.                 } while (--j);
  26.         } while (--i);
  27. }

  28. void key_scan()    //按鍵掃描函數
  29. {
  30.         if(!key)
  31.         {
  32.                 if(++count>=2000 && sign==0)
  33.                 {
  34.                         sign=1;
  35.                         Key_value++;
  36.                 }
  37.         }
  38.         else
  39.         {
  40.                 count=0;        //按鍵松手count清0
  41.                 sign=0;         //狀態標志清0
  42.         }
  43. }

  44. void key_service()//按鍵服務函數
  45. {
  46.         if(Key_value==0){LED1=0;EN=1;}
  47.         if(Key_value==1){LED1=1;EN=0;}
  48.         if(Key_value==2 )allow=1;//允許休眠
  49. }

  50. void Shutdown()//掉電模式函數
  51. {
  52.         if(allow)
  53.         {
  54.                 //關閉所有在用硬件,減小能耗
  55.                 LED1=1;     //關閉LED
  56.                 EN=1;       //關閉EN
  57.                 Key_value=0;//鍵值清0
  58.                 while(!key);//等待按鍵松手
  59.                 Delay20ms();//消抖防止誤動作
  60.                 EX0 = 1;    //打開中斷
  61.                 PCON = 0x02;//MCU進入掉電模式
  62.         /**********************************************************/
  63.                 _nop_();    //掉電模式被喚醒后,首先執行此語句,然后再進入中斷服務程序
  64.                 _nop_();    //中斷服務程序執行完再接著此句繼續執行       
  65.                 while(!key);//等待按鍵松手,防止按鍵掃描程序誤讀
  66.                 Delay20ms();//消抖防止誤動作
  67.                 allow=0;    //清0
  68.         }
  69. }

  70. void main()
  71. {
  72. //        P1M0 = 0x00;
  73. //        P1M1 = 0x00;
  74.         P3M0 = 0x00;
  75.         P3M1 = 0x00;
  76.         P5M0 = 0x00;
  77.         P5M1 = 0x00;

  78.         IT0 = 1;//設置INT0的中斷類型為下降沿喚醒
  79.         EA  = 1;//開總中斷        
  80.        
  81.         while (1)
  82.         {
  83.                 key_scan();    //按鍵掃描函數
  84.                 key_service(); //按鍵服務函數
  85.                 Shutdown();    //掉電模式函數
  86.         }
  87. }
  88. //INT0中斷服務程序
  89. void exint0() interrupt 0
  90. {
  91.         EX0 = 0;                //關閉外部中斷
  92. }
復制代碼

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美影院 | 国产免费一二三区 | 91精品免费| 黄色片av | 国产一区二区三区免费 | 91 在线| 亚洲乱码一区二区三区在线观看 | 日本涩涩网| 日韩中文字幕一区 | 亚洲成人一区二区 | 久久亚洲欧美日韩精品专区 | 精品久久久久久久久久久院品网 | 日韩一区精品 | 久久噜| 免费能直接在线观看黄的视频 | www国产亚洲精品久久网站 | 日韩不卡在线观看 | 毛片视频网站 | 欧美一级片在线 | 亚洲综合一区二区三区 | 成人免费视频在线观看 | 国产精品完整版 | 激情五月激情综合网 | 91精品国产一二三 | 午夜性色a√在线视频观看9 | a天堂在线| 国产成人在线播放 | a级在线免费观看 | 国产一区二区三区久久 | 91色站 | 国产精品国产三级国产aⅴ无密码 | 国产伦一区二区三区 | 久久不射网 | 色婷婷综合久久久中文字幕 | 国产一级视屏 | 日韩国产在线 | 中文字幕在线一区 | 中文字幕在线视频免费观看 | 欧美一区二区免费 | 国产精品99一区二区 | 日韩在线小视频 |