www.pudn.com > C51_PCF8591_LCD5110.rar > main.c, change:2015-06-25,size:2411b


/********************************************************************* 
  名称:AD_DA转换,数码管显示 
  作者:徐锐锋 
  日期:2010-10-25 
  内容:此程序通过IIC协议对AD采样然后将采样值传递给DA芯片控制LED亮度,通过数码管显示0-255 
  广州研展电子科技有限公司 www.52yanfa.com (我爱研发网)  版权所有 
*********************************************************************/ 
#include <reg52.h>                 
#include "i2c.h" 
#include "delay.h" 
#include "5110.h" 
 
#define AddWr 0x90   //写数据地址  
#define AddRd 0x91   //读数据地址 
 
extern bit ack; 
unsigned char ReadADC(unsigned char Chl); 
bit WriteDAC(unsigned char dat); 
/*------------------------------------------------ 
              主程序 
------------------------------------------------*/ 
main() 
{ 
 unsigned int num=0; 
// Init_Timer0(); 
	 LCD_clear();      
	 LCD_init();		     //LCD初始化 
 
while (1)         //主循环 
  { 
   
 num=ReadADC(0); 
 DelayMs(100);		         //必须加延时否则出错 
 WriteDAC(num); 
	 LCD_write_shu(5,4,num/100);      // 
     LCD_write_shu(6,4,((num%100)/10)); // 
	 LCD_write_shu(7,4,((num%100)%10)); // 
   	 LCD_write_shu(6,2,((num>>4)&0x0f)); // 
	 LCD_write_shu(7,2,(num&0X0f));  
   
 //主循环中添加其他需要一直工作的程序 
 DelayMs(100); 
  } 
} 
/*------------------------------------------------ 
             读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(0x40|Chl);            //发送器件子地址 
     if(ack==0)return(0); 
   Start_I2c(); 
   SendByte(AddWr+1); 
      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();   
}