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

📄 ltc1867.c

📁 S3c2410下ADC[LTC1867]的驱动程序,在LCD上可以直接显示读取的AD数据
💻 C
字号:
#include "2410addr.h"
#include "2410lib.h"
#include "def.h"

volatile int adc_data_buf;
volatile uchar adc_data_buf_H,adc_data_buf_L;
volatile uchar adc_value_disp[5];
  volatile  float adc_anolog_volt;
   
//DIN-->      SPIMOSI0/GP/GPE12
//DOUT-->  SPIMISO0/GPE11
//DCLK-->  SPICLK0/GPE13
//CS-->       SPIMOnSS0/GPG2 
void ltc1867_init()
  {
    uchar i;
    rGPGUP=rGPGUP&~(1<<2)|(1<<2); //CS/nSS0/GPG2 pull up disable
    rGPEUP=rGPEUP&~(1<<13)|(1<<13); //DCLK pull up disable
    rGPEUP=rGPEUP&~(1<<11)|(0<<11); //DIN pull up enable
    rGPEUP=rGPEUP&~(1<<12)|(0<<12);  //Dout pull up enable

     //DIN->SPIMOSI0 DOUT->SPIMISO0 DCLK->SPICLK0
     rGPECON=rGPECON&~(0xff<<22)|(0xaa<<22); 
     
     rSPPRE0=7;   //baud rate=3.125MHZ
     //0:normal mode,1:format A,2:active low,3:master,4:SCK enable,56:polling mode
     rSPCON0=rSPCON0&0x00|(0<<0)|(0<<1)|(0<<2)|(1<<3)|(1<<4)|(0<<5)|(0<<6); 
     rSPPIN0=0x02; //default value
     for(i=0;i<10;i++)
        { rSPTDAT0=0xff;}    
  }
  spi_write(uchar writedata)
   {
      while(!(rSPSTA0&0x01));
     rSPTDAT0=writedata;
      while(!(rSPSTA0&0x01));
   }
     
  void read_ltc1867()
   {
     uchar temp; 

     rGPGDAT=rGPGDAT&~(1<<2);    //CS=0 
     
     spi_write(0x43);  //select ADC CH0
     temp=rSPRDAT0;
     
      spi_write(0xff); 
     while(!(rGPGCON&~(0<<2)));//wait convert complish
     adc_data_buf_H=rSPRDAT0;
     

       spi_write(0xff);         
      while(!(rGPGCON&~(0<<2)));//wait convert complish
       adc_data_buf_L=rSPRDAT0;
       
       rGPGDAT=rGPGDAT&~(1<<2)|(1<<2);    //CS=1 
   }  
         
void adc_value_refresh()
 {
    uchar temp2,temp3,temp4,temp5,temp6;
    uint temp;

   read_ltc1867();
   adc_data_buf=(adc_data_buf_H<<8)|adc_data_buf_L;
   adc_data_buf>>=3;

    temp2=(uchar)(adc_data_buf&0x000f);
    temp3=(uchar)((adc_data_buf&0x00f0)>>4);
    temp4=(uchar)((adc_data_buf&0x0f00)>>8);
    temp5=(uchar)((adc_data_buf&0xf000)>>12);
    temp6=(uchar)((adc_data_buf&0xf0000)>>16);

    adc_anolog_volt=adc_data_buf/19859.3939;	  //3.3V基准
    temp=(int)(adc_anolog_volt*10000);	 
    adc_value_disp[0]=temp/10000;
    adc_value_disp[1]=temp%10000/1000;
    adc_value_disp[2]=temp%10000%1000/100;
    adc_value_disp[3]=temp%10000%1000%100/10;
    adc_value_disp[4]=temp%10000%1000%100%10;
    
    Lcd_clear_byte(208,50,RED);
    Lcd_clear_byte(232,50,RED);
    Lcd_clear_byte(240,50,RED);
    Lcd_clear_byte(232,70,RED);
    Lcd_clear_byte(248,70,RED);
	 
    Lcd_disp_digital_one(216,50,RED,adc_value_disp[0]); //整数个位
    Lcd_disp_digital_one(232,50,RED,adc_value_disp[1]); //小数点后第一位
    Lcd_disp_digital_one(240,50,RED,adc_value_disp[2]); //小数点后第二位
    Lcd_disp_digital_one(248,50,RED,adc_value_disp[3]);//小数点后第三位
    Lcd_disp_digital_one(256,50,RED,adc_value_disp[4]);//小数点后第三位
  
    Lcd_disp_digital_one(216,70,RED,temp6);       
    Lcd_disp_digital_one(232,70,RED,temp5);
    Lcd_disp_digital_one(240,70,RED,temp4);
    Lcd_disp_digital_one(248,70,RED,temp3);
    Lcd_disp_digital_one(256,70,RED,temp2);

 }	 
void adc_value_display()
  {
	Lcd_disp_word(80,30,RED, " ADC Data Samlping Demo ");	  
	Lcd_disp_word(80,50,RED, " CH0 Anolog Volt:  .   V ");
	Lcd_disp_word(80,70,RED, " CH0 AD Value   : 0x        ");
	adc_value_refresh();
  }

⌨️ 快捷键说明

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