当前位置: 首页 > news >正文

DA-AD试验

/**********************************************************************************
*                                                                                  *
*   1.通过本例程了解并掌握AD-DA转换芯片的基本原理和使用                           *
*   2.了解掌握I2C总线接口的工作原理及一般编程方法。
*                                                                                   *                         *
***********************************************************************************/

#include<reg52.h>
#include <I2C.H>

#define  PCF8591 0x90    //PCF8591 地址


//else IO
sbit    LS138A=P2^2;  
sbit    LS138B=P2^3;
sbit    LS138C=P2^4;  

// 此表为 LED 的字模            // 0    1    2    3    4    5    6   7    8    9    A    b    c    d    E    -    L   P    U    Hidden  _ (20)
unsigned char code  Disp_Tab[] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x88,0x83,0xC6,0xA1,0x86,0xbf,0xc7,0x8c,0xc1, 0xff,  0xf7 }; 

unsigned char AD_CHANNEL;
unsigned long xdata  LedOut[8];
unsigned int  D[32];
         

/*******************************************************************
DAC 变换, 转化函数               
*******************************************************************/
bit DACconversion(unsigned char sla,unsigned char c,  unsigned char Val)
{
   Start_I2c();              //启动总线
   SendByte(sla);            //发送器件地址
   if(ack==0)return(0);
   SendByte(c);              //发送控制字节
   if(ack==0)return(0);
   SendByte(Val);            //发送DAC的数值  
   if(ack==0)return(0);
   Stop_I2c();               //结束总线
   return(1);
}

/*******************************************************************
ADC发送字节[命令]数据函数               
*******************************************************************/
bit ISendByte(unsigned char sla,unsigned char c)
{
   Start_I2c();              //启动总线
   SendByte(sla);            //发送器件地址
   if(ack==0)return(0);
   SendByte(c);              //发送数据
   if(ack==0)return(0);
   Stop_I2c();               //结束总线
   return(1);
}

/*******************************************************************
ADC读字节数据函数               
*******************************************************************/
unsigned char IRcvByte(unsigned char sla)
{  unsigned char c;

   Start_I2c();          //启动总线
   SendByte(sla+1);      //发送器件地址
   if(ack==0)return(0);
   c=RcvByte();          //读取数据0

   Ack_I2c(1);           //发送非就答位
   Stop_I2c();           //结束总线
   return(c);
}

//******************************************************************/
main()
{  unsigned char i,j;

 while(1)
 {/********以下AD-DA处理*************/  
   switch(AD_CHANNEL)
   {
     case 0: ISendByte(PCF8591,0x41);
             D[0]=IRcvByte(PCF8591)*2;  //ADC0 模数转换1
             break;  
 
     case 1: ISendByte(PCF8591,0x42);
             D[1]=IRcvByte(PCF8591)*2;  //ADC1  模数转换2
             break;  

     case 2: ISendByte(PCF8591,0x43);
             D[2]=IRcvByte(PCF8591)*2;  //ADC2    模数转换3
             break;  

     case 3: ISendByte(PCF8591,0x40);
             D[3]=IRcvByte(PCF8591)*2;  //ADC3   模数转换4
             break;  

     case 4: DACconversion(PCF8591,0x40, D[4]/4); //DAC      数模转换
             break;
   }

   if(++AD_CHANNEL>4) AD_CHANNEL=0;

 /********以下将AD的值送到LED数码管显示*************/
      D[4]+=1;        
     LedOut[0]=Disp_Tab[D[4]%10000/1000];
     LedOut[1]=Disp_Tab[D[4]%1000/100];
     LedOut[2]=Disp_Tab[D[4]%100/10];
     LedOut[3]=Disp_Tab[D[4]%10];  
    
     for( i=0; i<4; i++) 
     {     
        P0 = LedOut[i];
         P2 = i;         
        for (j = 0 ; j<200 ;j++) { ;}
      } 
     }  
}

http://www.lryc.cn/news/260669.html

相关文章:

  • Leetcode—896.单调数列【简单】
  • vue2生命周期
  • 【Flink on k8s】 -- flink kubernetes operator 1.7.0 发布
  • Java网络编程,对使用UDP实现TCP(一)三次握手实现的补充
  • Redis 的常见使用场景
  • VRRP协议详解
  • Linux 常用命令----mktemp 命令
  • 基于ssm服装定制系统源码和论文
  • 【AI】如何准备mac开发vue项目的环境
  • BERT大模型:英语NLP的里程碑
  • JVM的类的生命周期
  • uni-app获取response header响应头(h5/app/小程序三端)
  • 本地部署语音转文字(whisper,SpeechRecognition)
  • js new 原理
  • 智能优化算法应用:基于黏菌算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • LeetCode每日一题——2132.用邮票贴满网格图
  • PyQt6 表单布局Form Layout (QFormLayout)
  • Python: any()函数
  • 一些AG10K FPGA 调试的建议-Douglas
  • 【模型量化】神经网络量化基础及代码学习总结
  • 次模和K次模是多项式可解吗?
  • 网络安全——SQL注入实验
  • 【cocotb】【达坦科技DatenLord】Cocotb Workshop分享
  • Kafka系列之:统计kafka集群Topic的分区数和副本数,批量增加topic副本数
  • 开具实习证明:在线实习项目介绍
  • MFC逆向之CrackMe Level3 过反调试 + 写注册机
  • 【Centos】
  • 1+X大数据平台运维职业技能等级证书中级
  • 网络基础(五):网络层协议介绍
  • 浅显易懂 @JsonIgnore 的作用