小坤
发表于 2024-11-16 08:35:16
vb2002 发表于 2024-11-15 12:04
这个是完整的电路图.
贴出完整版的电路,包括你的开关怎么控制的 电源
vb2002
发表于 2024-11-16 10:48:46
小坤 发表于 2024-11-16 08:35
贴出完整版的电路,包括你的开关怎么控制的 电源
22楼,有电路图,
23楼有代码,
麻烦你了
小坤
发表于 2024-11-16 13:08:51
这样的吗?
vb2002
发表于 2024-11-16 13:13:26
小坤 发表于 2024-11-16 13:08
这样的吗?
对,是的,
是机械开关.
通过开关通断的时间. 判定P32高低电平
然后通过P32高低电平选择不同的操作
vb2002
发表于 2024-11-16 14:30:07
晓飛飛 发表于 2024-11-14 21:09
单片机上电时判断电容有电就换下一挡,没电就认为是冷开机,调用恢复关机前存储的状态,是这个想法吧,我 ...
我加了肖特基二极管了
电压也正常了
但是io口读不到高低电平了
通过开关电源 能看到电压的变化.4.98v至0.3v
但就是读不到高低电平
小坤
发表于 2024-11-16 14:40:55
vb2002 发表于 2024-11-16 14:30
我加了肖特基二极管了
电压也正常了
但是io口读不到高低电平了
试试
vb2002
发表于 2024-11-16 14:52:16
小坤 发表于 2024-11-16 14:40
试试
试了
P32读出了一直是高电平
我用万用表测了电压,IO和gnd的电压 0.3--4,95变化
vb2002
发表于 2024-11-16 14:54:22
小坤 发表于 2024-11-16 14:40
试试
有点懂了.
万用表测出来.电压必须接近0.00v才能低电平
但是串联电阻和电容...电压到不了0.00v
只能到0.3v
小坤
发表于 2024-11-16 14:55:57
我验证了可以检测到高低电平 时间大概2秒
#include <STC32G.H>
void sys_init(void);
int main(void)
{
static long n = 0;
sys_init();
while(1)
{
if(P16 == 0) //检测到的初始电平为低高阻检测
{
P20 = 0;
P1M0 = 0XFF;
P1M1 = 0X00; //推挽 充电
while(!P16);
P21 = 0; //满;
}
else //检测到的初始电平为高
{
P20 = 1;
n++;
if(n>1000000) //定时把电容充满 下次做准备
{
n= 0;
P1M0 = 0XFF;
P1M1 = 0X00;
while(!P16);
P21 = 0;
}
}
}
}
void sys_init(void)
{
P3M0 = P3M1 = 0X00;
P2M0 = P2M1 = 0X00;
P35 = 0;
}
vb2002
发表于 2024-11-16 14:59:26
小坤 发表于 2024-11-16 14:55
我验证了可以检测到高低电平 时间大概2秒
超过两秒 ,判断为 低电平
没超过两秒,判断为高电平吗?