📄 ltc1867.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 + -