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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

[復制鏈接]
跳轉到指定樓層
樓主
高手看一下什么問題,負極要斷電兩下才能換擋,程序思路就是按下的時候就是斷電的時候進低功耗ua模式,接通count加1,3.2高阻模式

單片機源程序如下:
#include "STC8G.H"

#include<intrins.h>
#define MAIN_Fosc                12000000L
typedef unsigned char uchar;
typedef unsigned int uint;
sbit LED=P5^4;
//sbit LED2=P5^5;
sbit EN=P5^5;
sbit key=P3^2;
sbit INT0=P3^2;
uchar count=0,count1=0;
uint num=0;
bit i=0,j=0;
/**************中斷服務程序*****************/
void delay(uint a)
{
        uint i,j;
        for(i=0; i<a; i++)
                for(j=0; j<500; j++);
}
void INT0_Isr() interrupt 0
{
        EX0=0;
        PCON=0x00;
       count=count+1;
        if(count>2)count=0;
}
void Timer0Init()        //500微秒@12.000MHz
{
        TMOD |= 0x01;                //設置定時器模式
        TL0 = 0x0C;                //設置定時初值
        TH0 = 0xFE;                //設置定時初值
        TR0 = 1;                //定時器0開始計時
        EA = 1;
        ET0 = 1;
}
void Shutdown()//掉電模式函數
{
        
                //關閉所有在用硬件,減小能耗
                                    IT0 = 1;                //INT0 下降沿中斷               
                        IE0 = 0;                //清除外中斷0標志位
                        _nop_();
                        _nop_();
                        EX0 = 1;                //INT0 允許中斷
                        _nop_();
                        _nop_();
                        PCON |= 0x02;        //Sleep
                        _nop_();
                        _nop_();
                        _nop_();
                                                                              EX0 = 0;
                                                  //恢復LED顯示=0;                //清0
        
}
void main()
{
        //P3M0 = 0x00;
       // P3M1 = 0x04;
       // P3M0 = 0x00; P3M1 = 0x00;
            P3M0 = 0x00; P3M1 = 0x04; //3.2高阻模式
       //P3口設置為準雙向口
        P5M0 = 0x00;
        P5M1 = 0x00;
        //LED2=1;
        Timer0Init();
        IT0 = 1;                //INT0 下降沿中斷
        while(1)
        {
                                       
                                        if (P32==0)
                                                Shutdown();
           if(count==0)
                {
                        LED=0;
                        EN=1;
                                                                        
                }
              if(count==1)
                {
                        LED=1;
                        EN=0;
                                                                        
                }
              if(count==2)
                {
                        EN=1;
                     
                }
        }
}

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

使用道具 舉報

沙發
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. }
復制代碼

回復

使用道具 舉報

板凳
ID:1062408 發表于 2023-8-4 07:26 | 只看該作者

這個是510k當成開關了,不對我要的是負極當開關斷一次電換一個檔,使用時開關時接通的,斷一次換一個檔,注意點是開關斷開時要進入低功耗ua模式,斷開時3.2是低電平,接通是高電平
回復

使用道具 舉報

地板
ID:1062408 發表于 2023-8-4 07:28 | 只看該作者

把圖片改了下


回復

使用道具 舉報

5#
ID:123289 發表于 2023-8-4 09:31 | 只看該作者
改成將芯片GND斷開,它還能工作么?
回復

使用道具 舉報

6#
ID:213173 發表于 2023-8-4 09:50 | 只看該作者
咯上 發表于 2023-8-4 07:26
這個是510k當成開關了,不對我要的是負極當開關斷一次電換一個檔,使用時開關時接通的,斷一次換一個檔, ...

開關接負極,斷開就沒有電源哪來什么低功耗ua模式,完全無功耗了。想要用電源開關換檔就要利用低壓中斷,EEPROM保存當前狀態,下次得電,先讀EEPROM,再換擋。
回復

使用道具 舉報

7#
ID:1062408 發表于 2023-8-4 09:57 | 只看該作者
yzwzfyz 發表于 2023-8-4 09:31
改成將芯片GND斷開,它還能工作么?

斷開進入低功耗模式,耗電ua級別,芯片靠電容維持,二極管是防止led用電容里的電,接通高電平喚醒再換擋
回復

使用道具 舉報

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

你都把電源都截止了,還低功耗個啥?
回復

使用道具 舉報

9#
ID:161164 發表于 2023-8-4 11:19 | 只看該作者
咯上 發表于 2023-8-4 09:57
斷開進入低功耗模式,耗電ua級別,芯片靠電容維持,二極管是防止led用電容里的電,接通高電平喚醒再換擋

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


回復

使用道具 舉報

10#
ID:1062408 發表于 2023-8-4 11:24 | 只看該作者
lkc8210 發表于 2023-8-4 11:19
根本不用啥電容,低功耗模式

沒電容開關斷開時電就放光了
回復

使用道具 舉報

11#
ID:161164 發表于 2023-8-4 11:34 | 只看該作者
咯上 發表于 2023-8-4 11:24
沒電容開關斷開時電就放光了

開關都斷開了,沒回路去電源負極,何來電流?
回復

使用道具 舉報

12#
ID:1062408 發表于 2023-8-4 11:39 | 只看該作者
lkc8210 發表于 2023-8-4 11:19
根本不用啥電容,低功耗模式

這個對壽命有影響,不會吧換一次檔就存一次?
回復

使用道具 舉報

13#
ID:1062408 發表于 2023-8-4 11:42 | 只看該作者
lkc8210 發表于 2023-8-4 11:34
開關都斷開了,沒回路去電源負極,何來電流?

芯片不耗電嗎,我要斷開1秒或幾秒
回復

使用道具 舉報

14#
ID:161164 發表于 2023-8-4 11:47 | 只看該作者
咯上 發表于 2023-8-4 11:39
這個對壽命有影響,不會吧換一次檔就存一次?

要用循環寫入算法
每次寫在新地址
1k EEProm = 1024Byte x 100000 = 102400000
你每秒按一下,要按102400000/3600/24/365 = 3.25年才可能有影響
回復

使用道具 舉報

15#
ID:1062408 發表于 2023-8-4 11:49 | 只看該作者
反正有的驅動就是斷開時低功耗模式,然后關機后電容沒放光就一直帶記憶,需要并一個電阻放電讓他關電后只記憶幾秒
回復

使用道具 舉報

16#
ID:1062408 發表于 2023-8-4 11:51 | 只看該作者
就不能用斷電低功耗模式寫嗎
回復

使用道具 舉報

17#
ID:1062408 發表于 2023-8-4 11:53 | 只看該作者
不過有的手電驅動最便宜的那種三個腳的確實沒有二極管和電容不知道怎么實現斷電換檔的
回復

使用道具 舉報

18#
ID:1062408 發表于 2023-8-4 12:13 | 只看該作者
eeprom那我不需要記憶,只需要斷電幾秒記憶,那怎么做
回復

使用道具 舉報

19#
ID:1062408 發表于 2023-8-4 12:21 | 只看該作者
https://tieba.baidu.com/p/7528586913
參考下這個帖子他的是匯編,看不懂
回復

使用道具 舉報

20#
ID:1062408 發表于 2023-8-4 12:23 | 只看該作者

1) 原理分析:上圖原理圖中,(+)圓圈接LED正極,(-)圓圈接LED負極;二極管D1與電容C1組成單片機MCU電源,其作用是用于電筒斷電后,能給單片機提供幾秒的連續應急電源,D1于用斷電后防止MCU電源上的電反向流出;C1調節斷電維持時間,增大C1,可以延長手電筒斷電換檔時間,不會復位!MCU中1腳是IC電源正極,8腳是負極,4腳用于斷電檢測,R1是其下拉電阻,6腳控制LED(實際是通過恒流IC-AMC7135的電源正極來控制LED功能);Q1是三個恒流IC-AM7135并聯,每個恒流IC通過電流大約是350mA。
2) 電路工作過程:當K1開關接通時,4腳為高電位,MCU正常工作在第一檔功能,在K1快速斷開,接通時,MCU的4腳在開關斷開時,檢測到低電位,(由于C1上的電被D1二極管反向截止,通過R1下拉電阻到負極);當4腳為低電位,單片機MCU關閉輸出,LED不亮,同時進入睡眠模式(睡眠模式時,單片機的工作電流很小,幾個uA),這樣可以延長C1工作時間,也就是開關K斷電時間!當開關K接通時,MCU的4腳被單片機內部上拉電阻接通到電池正極,為高電位,MCU被喚醒,通過MCU程序被執行下一檔功能(對6腳進行控制);再按開關,MCU如此循環工作!此手電筒為5檔功能(強光,中光,弱光,爆閃,SOS閃),當然也可以自行編程其功能!
3)如果要把MCU腳位全部利用起來,可以增加檔位選擇功能,如把2腳接負極,則手電筒只有2檔,如3腳接負極,則手電筒有3檔功能,7腳接負極,手電筒為4檔,所有3個腳不接負極,為默認5檔功能,有的在PCB板上把此三腳畫成五角星。
4)注意:此貼能火的話,再附PCB圖紙,程序!
-- 覺得好的話,麻煩回個貼哦!
---為滿足手電愛好者的動手興趣,特附上PCB圖,可直接打印1:1大小,另再附上原程序,供單片機愛好者參考!
---程序是義隆單片機,型號是EM78P153K
---本人不是專業手電制作者,只是一位有點喜好者,舊電筒線路板壞了,工作之余,特為止重新制作了,包PCB,程序;呵呵。。以上資料大家業余學習參考!
**********怎么不可以傳送附件?只能傳圖片格式!版主有方法嗎?****************
*****************原程序供大家參考****************************
;EM78P153K
;P63--KEY(低電位有效)對應P61--LED
;看門狗喚醒
CONT==0X01
IOCB==0X0B
PORT6==0X06
TCC==0X01
STATUS==0X03
IOCF==0X0F
IOCE==0X0E
RF==0X0F
TURN==0X11
DLY1==0X12
DLY2==0X13
FLAG==0X14
LMF==FLAG.0 ;中斷中亮滅燈標志
BSF==FLAG.1 ;爆閃標志
SOF==FLAG.2 ;SOS標志
SSF==FLAG.3 ;SOS中快慢標志
SST==FLAG.4 ;SOS中滅燈標志
SKK==FLAG.5 ;SOS中第二次快閃
NUMK==0X16
NUM==0X17
PAR==0X18
ORG 0X00
JMP START
ORG 0X08
JMP TCC_INT
;=====================調光
TCC_INT:
JBC SOF ;SOS
JMP IN_SOS
JBC BSF
JMP IN_BS ;爆閃
JBC LMF
JMP MD
BS PORT6,1
DJZ PAR
JMP OUT
BS LMF ;亮滅標志
COMA NUM
MOV PAR,A
JMP OUT
MD:
BC PORT6,1
DJZ PAR
JMP OUT
BC LMF
MOV A,NUM
MOV PAR,A
JMP OUT
OUT:
MOV A,@250
MOV TCC,A
BC RF,0
RETI
;---------------------爆閃
IN_BS:
DJZ PAR
JMP OUT1
MOV A,@0B00000010
XOR PORT6,A
MOV A,@20
MOV PAR,A
OUT1:
MOV A,@200
MOV TCC,A
BC RF,0
RETI
;--------------------SOS
IN_SOS:
JBC SST
JMP STT ;滅燈
JBC SKK
JMP KK2
DJZ PAR
JMP OUT2
MOV A,@0B00000010
XOR PORT6,A
JBC SSF ;快慢標志
JMP SOK ;慢閃部分
SOM: ;快閃部分
MOV A,@80
MOV PAR,A
DJZ NUM
JMP OUT2
MOV A,@6
MOV NUM,A
BS SSF ;開快閃標志
JMP OUT2
SOK: ;慢閃部分
MOV A,@200
MOV PAR,A
DJZ NUM
JMP OUT2
MOV A,@6
MOV NUM,A
MOV A,@80
MOV PAR,A
BC SSF
BS SKK ;第二次快
BC PORT6,1
JMP OUT2
OUT2:
MOV A,@1
MOV TCC,A
BC RF,0
RETI
;-------------------------
KK2:
DJZ PAR
JMP OUT2
MOV A,@0B00000010
XOR PORT6,A
;----------------------- ;快閃部分
MOV A,@80
MOV PAR,A
DJZ NUM
JMP OUT2
MOV A,@4
MOV NUM,A
BS SST ;開滅燈
JMP OUT2
;------------------------
STT: ;滅燈部分
BC PORT6,0
DJZ PAR
JMP OUT2
MOV A,@200
MOV PAR,A
DJZ NUM
JMP OUT2
BC SST ;關滅燈
BC SSF ;開慢閃
BC SKK
BC PORT6,1
MOV A,@6
MOV NUM,A
JMP OUT2
;===================
;===================
START:
MOV A,@0B11111101 ;P61輸出
IOW PORT6
MOV A,@0B11111101 ;P61下拉
IOW IOCB
MOV A,@0X00
MOV PORT6,A
IOW IOCE
MOV A,@10
MOV TURN,A
;-----------------------------
BEG:
MOV A,@0X00
MOV PORT6,A
MOV FLAG,A
IOW IOCE
MOV A,@6
MOV NUMK,A
;------------------功能1 強光
G1:
MOV A,@6
SUB A,NUMK
JBS STATUS,0
JMP G2
MOV A,@0X00
IOW IOCF
BS PORT6,1
JMP KEY

;------------------功能2 中光
G2:
MOV A,@5
SUB A,NUMK
JBS STATUS,0
JMP G3
MOV A,@0B00000000
CONTW
MOV A,@170
MOV NUM,A
MOV PAR,A
MOV A,@0B00000001
IOW IOCF
MOV A,@250
MOV TCC,A
ENI
JMP KEY
;------------------功能3 弱光
G3:
MOV A,@4
SUB A,NUMK
JBS STATUS,0
JMP G4
MOV A,@85
MOV NUM,A
MOV PAR,A
MOV A,@0B00000000
CONTW
MOV A,@0X01
IOW IOCF
MOV A,@250
MOV TCC,A
ENI
JMP KEY
;-----------------功能4 爆閃
G4:
MOV A,@3
SUB A,NUMK
JBS STATUS,0
JMP G5
BS BSF ;爆閃標志
MOV A,@0B00000101
CONTW
MOV A,@20
MOV PAR,A
MOV A,@200
MOV TCC,A
MOV A,@0X01
IOW IOCF
ENI
JMP KEY
;-----------------功能5 SOS
G5:
MOV A,@2
SUB A,NUMK
JBS STATUS,0
JMP BEG
BC BSF ;關爆閃標志
BS SOF ;開SOS標志
MOV A,@0B00000100
CONTW
BS PORT6,1
MOV A,@5
MOV NUM,A ;閃次數
MOV A,@80
MOV PAR,A
MOV A,@1
MOV TCC,A
MOV A,@0X01
IOW IOCF
ENI
JMP KEY
;===============開關檢測
KEY:
JBC PORT6,3
JMP KEY
CALL DELAY1
JBC PORT6,3
JMP KEY
DISI
MOV A,@0X00
IOW IOCF ;關所有中斷
MOV PORT6,A ;關開關時,要關輸出
;------------------
SL:
WDTC ;清除WDT和預分頻器
CLR TCC ;清TCC
MOV A,@0B00011110 ;設置WDT分頻比,大于1:1
CONTW
MOV A,@0X00 ;禁止WDT
IOW IOCE
MOV PORT6,PORT6
DISI
MOV A,@0B00000010 ;設置喚醒功能
IOW IOCF
SLEP
NOP
WDTC
CLRA
IOW IOCE ;禁止WDT
IOW IOCF ;禁止喚醒
;===========================
K1:
JBS PORT6,3
JMP K1
CALL DELAY2
JBS PORT6,3
JMP K1
DEC NUMK
JMP G1

;================
DELAY1:
MOV A,@15
MOV DLY1,A
D1: MOV A,@10
MOV DLY2,A
D2: DJZ DLY2
JMP D2
DJZ DLY1
JMP D1
RET
;---------------
DELAY2:
MOV A,@40
MOV DLY1,A
E1: MOV A,@50
MOV DLY2,A
E2: DJZ DLY2
JMP E2
DJZ DLY1
JMP E1
RET
回復

使用道具 舉報

21#
ID:213173 發表于 2023-8-5 06:50 | 只看該作者
咯上 發表于 2023-8-4 12:21
https://tieba.baidu.com/p/7528586913
參考下這個帖子他的是匯編,看不懂

你繞了這么大圈子,直接說是為了改裝成品手電筒不就得了。利用電源開關做觸發信號換擋。無需EEPROM。低功耗模式可有可無,在于操作時間間隔需求和蓄能電容大小;究梢园戳魉疅舫绦驅。
回復

使用道具 舉報

22#
ID:1062408 發表于 2023-8-5 08:36 | 只看該作者
wulin 發表于 2023-8-5 06:50
你繞了這么大圈子,直接說是為了改裝成品手電筒不就得了。利用電源開關做觸發信號換擋。無需EEPROM。低功 ...

關斷一般1s或幾s還是要的,所以說低功耗必須要的,電容一般就幾uf撐不了多久,我要的是換擋要換io口的,他這個用了pwm只用一個io口這種驅動我也有好幾個,我想做沒有pwm完全恒流的驅動,能不能按照我發帖的要寫一個程序
回復

使用道具 舉報

23#
ID:1062408 發表于 2023-8-5 08:39 | 只看該作者
聲明下我不是用于傷腰用途,網上也能買到不值錢就是郵費貴點舍不得買,還有程序比較靈活能隨便改
回復

使用道具 舉報

24#
ID:1090753 發表于 2023-8-5 08:40 | 只看該作者

不是,你把按鍵復位改一下
回復

使用道具 舉報

25#
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. }


復制代碼

回復

使用道具 舉報

26#
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;
                }
        }
}
回復

使用道具 舉報

27#
ID:1062408 發表于 2023-8-5 23:22 | 只看該作者
wulin 發表于 2023-8-5 10:49
程序基本構架很簡單,可能在調試中需要略做修改。芯片不同,510K電阻未必恰當。

現在試這代碼又可以了,之前在負極到電容負串了1k電阻用了測量斷電時電流是否是ua級別,可能就是串了這個電阻就失敗了,現在取消掉了就可以了,不過電容要大點的要大于47uf不然3.6v以下無法換擋,還有510k要并103電容,不并換擋一會行一會又玄學不行搞不懂,我用的是3.2高阻,搞這個一會行一會不行調了好久真的有點玄學
回復

使用道具 舉報

28#
ID:60656 發表于 2023-8-13 22:04 | 只看該作者
咯上 發表于 2023-8-5 23:22
現在試這代碼又可以了,之前在負極到電容負串了1k電阻用了測量斷電時電流是否是ua級別,可能就是串了這個 ...

如果有lvd 檢測 檢測到低于一定電壓直接睡眠 上電后模式加 能實現你的斷電換擋嗎可以試試, 電容維持不復位可以 選低頻低功耗的mcu
回復

使用道具 舉報

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

最近我也在做手電,做的差不多了
交流一下?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 四虎最新地址 | 欧美99 | 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 国产成人精品一区二三区在线观看 | 美女黄色在线观看 | 一级毛片黄片 | 中文字幕在线视频免费视频 | 青青草亚洲| 日本三级网址 | 久久成人综合 | 欧美午夜精品久久久久久浪潮 | 精品国产乱码久久久久久牛牛 | 婷婷开心激情综合五月天 | 久热精品在线观看视频 | 午夜免费福利片 | 成人免费网站视频 | 欧美日韩精品久久久免费观看 | 国产丝袜一区二区三区免费视频 | 91在线色视频 | 欧美精品在线一区 | 成人福利片 | 欧美视频一级 | 一区二区三区视频在线 | 精品99在线| 亚洲精品成人 | 欧美激情99 | 美女爽到呻吟久久久久 | 男人的天堂久久 | 日韩一区二区三区在线 | 亚洲a毛片 | 日韩欧美精品在线播放 | 欧美成人精品在线观看 | 成年免费大片黄在线观看一级 | 亚洲国产精品久久久久久 | 中文视频在线 | 中文字幕 欧美 日韩 | 国产精品成人久久久久a级 久久蜜桃av一区二区天堂 | 久久精品成人 | 日韩精品1区2区3区 成人黄页在线观看 | 精品综合久久久 | 国产精品免费高清 |