白不分
发表于 2018-11-22 07:04:23
wgsd 发表于 2018-11-21 22:55
CD4066的导通电阻近百欧到两百多欧,AD584内部的分压电阻几K到十几K,最好先试验一下对输出电压有没有影 ...
先试试看,不行加继电器。
yangsen
发表于 2018-11-22 13:47:31
按你的电路图随手写了一个,公司电脑上没装keil 51环境,逻辑应该没问题
#include “reg52.h”
#define uint8_tunsigned char
#define uint16_tunsigned short
#define Key P3.3
#define CD4066_A P3.2
#define CD4066_B P3.1
#define CD4066_C P3.0
void dlyms(uint16_t val);
void main(void)
{
uint8_t ucStatu=0;
bit bFlagKeyPress=0;
if(Key==0){
dlyms(20);
if(Key==0&&bFlagKeyPress==0){
ucStatu++; //改变状态
ucStatu=ucStatu%4;
bFlagKeyPress=1;
}
}
else{
bFlagKeyPress=0;
}
switch(ucStatu){
case 0:
CD4066_A=1;
CD4066_B=1;
CD4066_C=1;
break;
case 1:
CD4066_A=0;
CD4066_B=1;
CD4066_C=1;
break;
case 2:
CD4066_A=1;
CD4066_B=0;
CD4066_C=1;
break;
case 3:
CD4066_A=1;
CD4066_B=1;
CD4066_C=0;
break;
default:
CD4066_A=1;
CD4066_B=1;
CD4066_C=1;
break;
}
}
void dlyms(uint16_t val)
{
uint16_t i=1000;
for(;val!=0;val--)
{
while(i--);
}
}
白不分
发表于 2018-11-22 16:07:40
yangsen 发表于 2018-11-22 13:47
按你的电路图随手写了一个,公司电脑上没装keil 51环境,逻辑应该没问题
#include “reg52.h”
#define uin ...
谢谢,非常感谢。
光速飞行
发表于 2018-11-22 17:07:12
yangsen 发表于 2018-11-22 13:47
按你的电路图随手写了一个,公司电脑上没装keil 51环境,逻辑应该没问题
#include “reg52.h”
#define uin ...
这段代码,写得不错啊,上机验证过更好。
白不分
发表于 2018-11-22 18:50:45
yangsen 发表于 2018-11-22 13:47
按你的电路图随手写了一个,公司电脑上没装keil 51环境,逻辑应该没问题
#include “reg52.h”
#define uin ...
编绎没有通过,不知道啥回事。
wgsd
发表于 2018-11-22 19:44:55
白不分 发表于 2018-11-22 18:50
编绎没有通过,不知道啥回事。
楼主使用单片机值得学习,使用方便还是用CD4017产生循环脉冲简便。另外如果手中有CD4066可以先手动控制看看,可能最好的情况下导通电阻在十几欧,多则上百欧,总之使用CD4066可能得从新标定一下。给你几张不同电阻对基准的影响仿真图,但并不能代表CD4066在电路时的真实情况,因CD4066的导通电阻和负载电阻、电压等因素有关。
wgsd
发表于 2018-11-22 20:24:17
白不分
发表于 2018-11-22 20:36:24
wgsd 发表于 2018-11-22 19:44
楼主使用单片机值得学习,使用方便还是用CD4017产生循环脉冲简便。另外如果手中有CD4066可以先手动控制看 ...
嘿嘿谢谢提醒,用4066仿真了下还真得不行。
wgsd
发表于 2018-11-22 20:46:25
白不分 发表于 2018-11-22 20:36
嘿嘿谢谢提醒,用4066仿真了下还真得不行。
不客气,共同探讨。另外AD584工作电压较高,如用CD4066它的电压应与AD584相同,不能与单片机5V同样,不然不会起到开关作用。
光速飞行
发表于 2018-11-23 00:06:45
白不分 发表于 2018-11-22 18:50
编绎没有通过,不知道啥回事。
有时间我也编绎,长时间不玩,容易忘记。