PCF8591 4路AD数码管显示

#include <reg52.h>                
#include "i2c.h"
#include "delay.h"
#include "display.h"

#define AddWr 0x90   //写数据地址 
#define AddRd 0x91   //读数据地址

extern bit ack;
bit ReadADFlag;



unsigned char ReadADC(unsigned char Chl);
bit WriteDAC(unsigned char dat);
/*------------------------------------------------
              主程序
------------------------------------------------*/
main()
{
 unsigned char num=0,i;
 Init_Timer0();
 DelayMs(20);

while (1)         //主循环
  {
 if(ReadADFlag)
  {
  ReadADFlag=0; 
//连续读5次,输入通道后多读几次,取最后一次值,以便读出稳定值
 for(i=0;i<5;i++)
     num=ReadADC(0);
// x10表示把实际值扩大10,如4.5 变成 45 方便做下一步处理 x5 表示基准电压5V 
  num=num*5*10/256;   
  TempData[0]=dofly_DuanMa[num/10]|0x80;    
  TempData[1]=dofly_DuanMa[num%10];

 for(i=0;i<5;i++)
   num=ReadADC(1);
 num=num*5*10/256;   // x10表示把实际值扩大10,如4.5 变成 45 方便做下一步处理
 TempData[2]=dofly_DuanMa[num/10]|0x80;    
 TempData[3]=dofly_DuanMa[num%10];

 for(i=0;i<5;i++)
    num=ReadADC(2);
 num=num*5*10/256;   // x10表示把实际值扩大10,如4.5 变成 45 方便做下一步处理
 TempData[4]=dofly_DuanMa[num/10]|0x80;    
 TempData[5]=dofly_DuanMa[num%10];

 for(i=0;i<5;i++)
     num=ReadADC(3);
 num=num*5*10/256;   // x10表示把实际值扩大10,如4.5 变成 45 方便做下一步处理
 TempData[6]=dofly_DuanMa[num/10]|0x80;    
 TempData[7]=dofly_DuanMa[num%10];
 //主循环中添加其他需要一直工作的程序
   }
  }
}
/*------------------------------------------------
             读AD转值程序
输入参数 Chl 表示需要转换的通道,范围从0-3
返回值范围0-255
------------------------------------------------*/
unsigned char ReadADC(unsigned char Chl)
 {
  unsigned char Val;
   Start_I2c();               //启动总线
   SendByte(AddWr);             //发送器件地址
     if(ack==0)return(0);
   SendByte(Chl);            //发送器件子地址
     if(ack==0)return(0);
   Start_I2c();
   SendByte(AddRd);
      if(ack==0)return(0);
   Val=RcvByte();
   NoAck_I2c();                 //发送非应位
   Stop_I2c();                  //结束总线
  return(Val);
 }
/*------------------------------------------------
               写入DA转换数值
输入参数:dat 表示需要转换的DA数值,范围是0-255
------------------------------------------------*/
/*bit WriteDAC(unsigned char dat)
{
   Start_I2c();               //启动总线
   SendByte(AddWr);             //发送器件地址
     if(ack==0)return(0);
   SendByte(0x40);            //发送器件子地址
     if(ack==0)return(0);
   SendByte(dat);             //发送数据
     if(ack==0)return(0);
   Stop_I2c();  
}*/

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值