- 打卡等级:初来乍到
- 打卡总天数:1
- 最近打卡:2025-01-27 22:53:28
已绑定手机
注册会员
- 积分
- 79
|
发表于 2025-2-9 13:32:08
|
显示全部楼层
float ADCRead(void)
{
u16 res;
float vex;
ADC_RES = 0;
ADC_RESL = 0;
ADC_CONTR &= 0xF0;
ADC_CONTR |= ADC_START;
_nop_();
_nop_();
while (!(ADC_CONTR & ADC_FLAG));
ADC_CONTR &= ~ADC_FLAG;
res = (ADC_RES << 8) | ADC_RESL;
vex = (float) res * 5.0 / 4096.0;
return vex;
}
这个是读取ADC的函数
volatile float ADCRES;
volatile u16 RAM[126];
volatile u16 POINT;
volatile u16 ADCSIGN;
volatile float MAX;
volatile float MINS;
volatile float CHUFA;
void Timer0_Isr(void) interrupt 1
{
ADCSIGN=1;
TF0=0;
}
void Timer0_Init(void) //40us@35MHz
{
AUXR |= 0x80;
TMOD &= 0xF0;
TL0 = 0x88;
TH0 = 0xFA;
TF0 = 0;
TR0 = 1;
ET0 = 1;
}
void AdcSetRate(void) //400KSPS@35MHz
{
ADCCFG =0xF0; //SPEED(0) 右对齐
ADCTIM = 0x3c; //CSSETUP(0), CSHOLD(1), SMPDUTY(28)
}
int main(void)
{
u16 i;
u16 num;
EA=1;
P_SW2 |= 0x80;
P1M0 = (P1M0 & ~0x01) | 0x30; P1M1 = (P1M1 & ~0x30) | 0x01;
P3M0 = 0x00; P3M1 = 0x00;
LCD_Init();//LCD初始化
LCD_Fill(0,0,LCD_W,LCD_H,WHITE);
ADC_CONTR = 0x80; //使能ADC
drawcoordinate_system();//绘制坐标轴
CHUFA=1.5;//设置触发电压
Timer0_Init();//定时器初始化
AdcSetRate();//ADC设置
POINT=0;
ADCSIGN=0;
while(1)
{
if(ADCSIGN==1){
ADCSIGN=0;
ADCRES=ADCRead();
num=ADCRES/0.08;//ADC数据处理
RAM[POINT]=num;
POINT++;
if(POINT==0)
{
MAX=ADCRES;
MINS=ADCRES;
}
if(ADCRES>MAX){
MAX=ADCRES;
}
if(ADCRES<MINS){
MINS=ADCRES;
}
if(POINT==125&&MAX>=CHUFA){
TR0=0;
LCD_ShowString(60,0,"Max:",BLACK,WHITE,12,0);
LCD_ShowIntNum(85,0,MAX,1,BLACK,WHITE,12);
LCD_ShowFloatNum1(90,0,MAX,2,BLACK,WHITE,12);
LCD_ShowString(60,12,"Min:",BLACK,WHITE,12,0);
LCD_ShowIntNum(85,12,MINS,1,BLACK,WHITE,12);
LCD_ShowFloatNum1(90,12,MINS,2,BLACK,WHITE,12);
for(i=0;i<=123;i++){
LCD_DrawLine(i+34,99-RAM,i+35,99-RAM[i+1],BLACK);
}
break;
}
}
}
while(1);
} |
|