⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dac7612u.c

📁 PIC18F6720写DAC7612U,TA1604_LCD显示,I2C读写PCF8563,PIC单片机之间模拟I2C通讯,该软件已调试通过,已经在产品上使用,有中文说明.
💻 C
字号:
#ifndef DAC7612U_CS
#define DAC7612U_SCLK  PIN_A3
#define DAC7612U_SDATA PIN_F0
#define DAC7612U_LOAD  PIN_A2
#else
#define DAC7612U_SCLK  PIN_A3
#define DAC7612U_SDATA PIN_F0
#define DAC7612U_LOAD  PIN_A2
//#define DAC7612U_CS  PIN_A2  //该脚不使用,在电路中,已经接地
#endif

#include<stdlib.h>
int counter;

/* 向DAC7612U写入数据(data),数据的位数为number_of_bits  */
/* 装载数据格式:先从A1开始装入,接着装入A0: D0,D1,D2,D3,D4,D5,D6,D7,D8,D9,D10,D11,A0,A1 */
/* ********************************************************* */
void write_adc_byte(float data, int number_of_bits) {
   BYTE i;
   long int data_byte;
   data_byte=(long int)(data*1000/6);//data为输入mA数量,为小数数
   data_byte=data_byte<<2;           //先将data_byte左移两位,即将A1位移到最高位,等待先被移入DAC7612U
   output_high(DAC7612U_LOAD);       //DAC7612U_LOAD=1,准备移入数据,
   delay_us(2);                      //延时2us
   for(i=0; i<number_of_bits; ++i) {
      if((data_byte & 0x8000)==0)
        output_low( DAC7612U_SDATA );//若data_byte的最高位为0,则DAC7612U_SDATA=0;
      else
        output_high( DAC7612U_SDATA );
      data_byte=data_byte<<1;        //将data_byte左移一位,为下次移位做准备
      output_high(DAC7612U_SCLK);    //DAC7612U_SCLK上升边沿到来时,移入一位
      delay_us(50);                  //延时50us
      output_low( DAC7612U_SCLK );   //将DAC7612U_SCLK时钟置为0,为下一次输入做好准被
      delay_us(50);                  //延时50us
   }
  output_low( DAC7612U_LOAD );       //准备装载数据结束,DAC7612U输出电压
  delay_us(50);                      //延时50us
}

//将字符串转换为浮点数
float string_to_float(char *s){
      char string_temp[6]; //用来存放接收到的数据,以ASCII格式存放
      float float_temp;
      //long int temp;
      strcpy( string_temp,s );//将s所指内容拷贝到string中;
      float_temp=atof( string_temp );//在头文件stdlib.h中,将一串字符转换成浮点数;
      //temp=(long int)( (float_temp*1000)/6 );
      return(float_temp);
}

void write_string_to_DAC7612U(char *string,int number_of_bits){
     float data_temp;
     data_temp=string_to_float(string);
     write_adc_byte(data_temp,number_of_bits);
}


/* DAC7612U初始化 */
/* ***************************************************************** */
void DAC7612U_init() {
   write_adc_byte(0.000, 14);  //一次性初始化DAC7612U通道道1和通道0,使起输出0V
}



/* 测试DAC7612U程序 */
/*
void DAC7612U_test_program(){
   //set_tris_e(0x78);  //将RE0:RE2和RE7设置为输出口,RE3:RE6设置为输入口
   do{
      while( input(PIN_E3) )write_adc_byte( 0.00    , 14); //使DAC7612输出0.000V,对应0mA输出;
      delay_ms(500);
      while( input(PIN_E4) ) write_adc_byte( 1.00   , 14); //使DAC7612输出0.166V,对应1mA输出;
      delay_ms(500);
      while( input(PIN_E3) ) write_adc_byte( 2.00  , 14); //使DAC7612输出0.333V,对应2mA输出;
      delay_ms(500);
      while( input(PIN_E4) ) write_adc_byte( 3.00  , 14); //使DAC7612输出0.500V,对应3mA输出;
      delay_ms(500);
      while( input(PIN_E3) ) write_adc_byte( 4.00 , 14); //使DAC7612输出0.666V,对应4mA输出;
      delay_ms(500);
      while( input(PIN_E4) ) write_adc_byte( 5.00 , 14); //使DAC7612输出0.833V,对应5mA输出;
      delay_ms(500);
      while( input(PIN_E3) ) write_adc_byte( 6.00 , 14); //使DAC7612输出1.000V,对应6mA输出;
      delay_ms(500);
      while( input(PIN_E4) ) write_adc_byte( 7.00 , 14); //使DAC7612输出1.166V,对应7mA输出;
      delay_ms(500);
      while( input(PIN_E3) ) write_adc_byte( 8.00 , 14); //使DAC7612输出1.333V,对应8mA输出;
      delay_ms(500);
      while( input(PIN_E4) ) write_adc_byte( 9.00 , 14); //使DAC7612输出1.500V,对应9mA输出;
      delay_ms(500);
      while( input(PIN_E3) ) write_adc_byte( 10.0 , 14); //使DAC7612输出1.666V,对应10mA输出;
      delay_ms(500);
      while( input(PIN_E4) ) write_adc_byte( 11.0 , 14); //使DAC7612输出1.833V,对应11mA输出;
      delay_ms(500);
      while( input(PIN_E3) ) write_adc_byte( 12.0 , 14); //使DAC7612输出2.000V,对应12mA输出;
      delay_ms(500);
      while( input(PIN_E4) ) write_adc_byte( 13.0 , 14); //使DAC7612输出2.166V,对应13mA输出;
      delay_ms(500);
      while( input(PIN_E3) ) write_adc_byte( 14.0 , 14); //使DAC7612输出2.333V,对应14mA输出;
      delay_ms(500);
      while( input(PIN_E4) ) write_adc_byte( 15.0 , 14); //使DAC7612输出2.500V,对应15mA输出;
      delay_ms(500);
      while( input(PIN_E3) ) write_adc_byte( 16.0 , 14); //使DAC7612输出2.666V,对应16mA输出;
      delay_ms(500);
      while( input(PIN_E4) ) write_adc_byte( 17.0 , 14); //使DAC7612输出2.833V,对应17mA输出;
      delay_ms(500);
      while( input(PIN_E3) ) write_adc_byte( 18.0 , 14); //使DAC7612输出3.000V,对应18mA输出;
      delay_ms(500);
      while( input(PIN_E4) ) write_adc_byte( 19.0 , 14); //使DAC7612输出3.166V,对应19mA输出;
      delay_ms(500);
      while( input(PIN_E3) ) write_adc_byte( 20.0 , 14); //使DAC7612输出3.333V,对应20mA输出;
      delay_ms(500);
      while( input(PIN_E4) ) write_adc_byte( 21.0 , 14); //使DAC7612输出3.500V,对应21mA输出;
      delay_ms(500);
      while( input(PIN_E3) ) write_adc_byte( 22.0 , 14); //使DAC7612输出3.666V,对应22mA输出;
      delay_ms(500);
      while( input(PIN_E4) ) write_adc_byte( 23.0 , 14); //使DAC7612输出3.833V,对应23mA输出;
      delay_ms(500);
      while( input(PIN_E3) ) write_adc_byte( 24.0 , 14); //使DAC7612输出4.000V,对应24mA输出;
      delay_ms(500);
      while( input(PIN_E4) ) write_adc_byte( 24.5 , 14);//使DAC7612输出4.095V,对应24.57mA输出;
      delay_ms(500);
      }while(TRUE);
}
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -