电工吧 关注:555,315贴子:8,319,876

回复:求分析一个电路图:最右边或非电路中间那个接口应该接什么啊

只看楼主收藏回复


+1


IP属地:浙江16楼2012-10-07 21:44
回复
    给你一个我以前写的测试程序吧,是ADC0809的,这个程序只是我临时实验用的,所以不保证没有任何问题,只供你参考下吧
    #include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int
    sbit RS=P3^0;//数据/指令选择 0指令 1数据sbit RW=P3^1;//读/写选择 0写 1读sbit E=P3^2;//使能sbit BF=P2^7;//忙标志 0空闲 1忙
    sbit ADDA=P1^0;//地址Asbit ADDB=P1^1;//地址Bsbit ADDC=P1^2;//地址Csbit ALE=P1^3;//地址锁存信号sbit SLOCK=P1^4;//时钟信号(一般输入500KHz)sbit START=P1^5; //AD转换启动信号sbit EOC=P1^6;//转换结束信号sbit OE=P1^7;//输出允许信号
    bit ReadBF()//忙信号 0空闲 1忙{ bit tmp;
    RS=0; RW=1; E=1; _nop_(); tmp=BF; E=0; _nop_(); return tmp;
    }
    void WriteLcd(uchar Com,uchar Data)//写指令/数据 0指令 1数据{ uchar ii; while(ReadBF()==1); RS=Com; RW=0; E=0; _nop_(); E=1; P2=Data; _nop_(); E=0; for(ii=0;ii<60;ii++);//66.19us}
    void WriteAdd(Add)//设置地址{ WriteLcd(0,Add|0x80);}
    void InitLCD()//初始化1602{ WriteLcd(0,0x38);//8位接口 5*7点阵 2行显示 WriteLcd(0,0x06);//数据读写后AC加一 WriteLcd(0,0x0c);//显示开 无光标 光标不闪烁 WriteLcd(0,0x01);//清屏
    }
    uchar ADCStrat(uchar ADD)//数据转换{ uchar tmp;
    START=0;//初始化 OE=0;//初始化 switch(ADD) { case 0://启动AD通道0 ADDA=0; ADDB=0; ADDC=0; break; case 1://启动AD通道1 ADDA=1; ADDB=0; ADDC=0; break; case 2://启动AD通道2 ADDA=0; ADDB=1; ADDC=0; break; case 3://启动AD通道3 ADDA=1; ADDB=1; ADDC=0; break; case 4://启动AD通道4 ADDA=0; ADDB=0; ADDC=1; break; case 5://启动AD通道5 ADDA=1; ADDB=0; ADDC=1; break; case 6://启动AD通道6 ADDA=0; ADDB=1; ADDC=1; break; case 7://启动AD通道7 ADDA=1; ADDB=1; ADDC=1; break; } ALE=1;//将AD地址锁存 START=1;//上跳沿内部清零 


    IP属地:辽宁本楼含有高级字体17楼2012-10-07 21:47
    回复
      2026-01-12 11:29:01
      广告
      不感兴趣
      开通SVIP免广告
      _nop_();//至少100ns的高电平保持时间 START=0;//下跳沿启动转换 while(EOC==0);//=0正在转换 =1转换完毕 OE=1;//输出转换数据 tmp=P0;//保存数据 return tmp;//返回AD转换数据
      }
      void DisPlay(uchar dat)//显示数据{ uchar bai,shi,ge;
      bai=dat/51; shi=dat%51*10/51; ge=dat%51*10%51*10/51;
      WriteLcd(0,0x01);//清屏 WriteAdd(0x00); WriteLcd(1,'U'); WriteLcd(1,'0'); WriteLcd(1,':'); WriteLcd(1,bai+0x30); WriteLcd(1,'.'); WriteLcd(1,shi+0x30); WriteLcd(1,ge+0x30); WriteLcd(1,'V');}
      void main(){ uint ii; uchar tmp;
      InitLCD();//液晶初始化 TMOD=0x20;//定时0 8位自动重载方式 TH0=253;//2us定时产生500KHz信号 TL0=253; EA=1;//开总中断 ET0=1;//开定时器0中断 TR0=1;//启动定时器0 while(1) { tmp=ADCStrat(0);//转换通道并保存0数据 DisPlay(tmp);//显示AD值 for(ii=0;ii<5000;ii++); } }
      void timer0()interrupt 1{ SLOCK=~SLOCK;//产生500KHz信号}
      


      IP属地:辽宁本楼含有高级字体18楼2012-10-07 21:47
      回复