白不分 发表于 2018-11-21 22:02:34

求师傅帮忙写个程序,谢谢了。

想用STC15F104W给AD584做个电压切换。省得老是切换跳帽。
用CD4066来切换。啥都准备好了,就差程序了。

#include "C:\Keil\C51\INC\STC\STC15F104E.H"

void mian()
{
   IT1=0;                         //外部中断1为低电平触发
   EX1=1; EA=1;
   while(1);
}

void K1 () interrupt 2
{
   if(flg==3) flg=0;
   flg++;
      switch(flg)
      {
      case1: P3&=0xF8; P3|=0x04;break;
      case2: P3&=0xF8; P3|=0x02;break;
      case3: P3&=0xF8; P3|=0x01;break;
                default : break;
       }
}

写的这个代码运行不了。

无极 发表于 2018-11-21 22:09:19

51单片机,真正的垃圾。:D
刚写好arm m0单片机和ds1620通信的程序:D

白不分 发表于 2018-11-21 22:15:00

无极 发表于 2018-11-21 22:09
51单片机,真正的垃圾。
刚写好arm m0单片机和ds1620通信的程序

有空帮帮忙啊,谢谢了。

白不分 发表于 2018-11-21 22:16:27

无极 发表于 2018-11-21 22:09
51单片机,真正的垃圾。
刚写好arm m0单片机和ds1620通信的程序

都放弃学这个了,书读少太难的理解不了。

wgsd 发表于 2018-11-21 22:55:33

白不分 发表于 2018-11-21 22:16
都放弃学这个了,书读少太难的理解不了。

CD4066的导通电阻近百欧到两百多欧,AD584内部的分压电阻几K到十几K,最好先试验一下对输出电压有没有影响再做自动切换,或仿真一下,估计会有影响。

veteran 发表于 2018-11-21 23:42:48

本帖最后由 veteran 于 2018-11-27 15:56 编辑

      基准电压切换大多数AD584土基准基本都是用跳线帽来改变输出电压,使用起来很不方便,按如下的电路使用一个按键K就可以顺序切换基准的输出电压,比用跳线帽要来的便捷。

光速飞行 发表于 2018-11-22 00:46:57

的确有些意,有时间也玩玩这个。

光速飞行 发表于 2018-11-22 01:13:49

本帖最后由 光速飞行 于 2018-11-22 01:21 编辑

我这有个仿真图,还没得式过真电路呢,也就是上面的电路,我仿真好久了,就没得做真电路。

工程包



白不分 发表于 2018-11-22 07:03:08

光速飞行 发表于 2018-11-22 01:13
我这有个仿真图,还没得式过真电路呢,也就是上面的电路,我仿真好久了,就没得做真电路。

工程包


有空我去试试,谢谢了。

白不分 发表于 2018-11-22 07:03:38

veteran 发表于 2018-11-21 23:42
基准电压切换大多数AD584土基准基本都是用跳线帽来改变输出电压,使用起来很不方便,按如下的电路使 ...

谢谢啦。有空试试。

白不分 发表于 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
编绎没有通过,不知道啥回事。
有时间我也编绎,长时间不玩,容易忘记。
页: [1] 2
查看完整版本: 求师傅帮忙写个程序,谢谢了。