编写一段代码,使得四个ADC0832分别接收共四个MPX4115的检测值,并将数据输送给AT89C51,其中四个ADC0832的CS口分别接四个串口,四个ADC0832的CLK接同一个串口、DO和DI接一个串口,并将四个数据的平均数投屏在LCD1602上,提供相关头文件和主程序
时间: 2023-12-08 21:05:42 浏览: 112
好的,以下是参考代码:
```c
#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
#include "lcd1602.h"
#define ADC_CS1 P1_0
#define ADC_CS2 P1_1
#define ADC_CS3 P1_2
#define ADC_CS4 P1_3
#define ADC_CLK P1_4
#define ADC_DO P1_5
#define ADC_DI P1_6
void delay_us(unsigned int us)
{
while(us--)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
unsigned char adc_read(unsigned char cs)
{
unsigned char i, dat = 0;
ADC_CLK = 0;
ADC_CS1 = ADC_CS2 = ADC_CS3 = ADC_CS4 = 1;
delay_us(1);
switch(cs)
{
case 1:
ADC_CS1 = 0;
break;
case 2:
ADC_CS2 = 0;
break;
case 3:
ADC_CS3 = 0;
break;
case 4:
ADC_CS4 = 0;
break;
}
delay_us(1);
for(i=0; i<8; i++)
{
ADC_CLK = 1;
delay_us(1);
dat <<= 1;
dat |= ADC_DO;
ADC_CLK = 0;
delay_us(1);
}
switch(cs)
{
case 1:
ADC_CS1 = 1;
break;
case 2:
ADC_CS2 = 1;
break;
case 3:
ADC_CS3 = 1;
break;
case 4:
ADC_CS4 = 1;
break;
}
return dat;
}
void main()
{
unsigned char i;
unsigned int adc_sum1 = 0, adc_sum2 = 0, adc_sum3 = 0, adc_sum4 = 0;
float adc_avg1, adc_avg2, adc_avg3, adc_avg4;
lcd_init();
while(1)
{
adc_sum1 = 0;
adc_sum2 = 0;
adc_sum3 = 0;
adc_sum4 = 0;
for(i=0; i<8; i++)
{
adc_sum1 += adc_read(1);
adc_sum2 += adc_read(2);
adc_sum3 += adc_read(3);
adc_sum4 += adc_read(4);
}
adc_avg1 = adc_sum1 / 8.0;
adc_avg2 = adc_sum2 / 8.0;
adc_avg3 = adc_sum3 / 8.0;
adc_avg4 = adc_sum4 / 8.0;
// 输出到 LCD1602 上
lcd_clear();
lcd_set_cursor(0, 0);
printf("ADC1:%.2f", adc_avg1);
lcd_set_cursor(0, 1);
printf("ADC2:%.2f", adc_avg2);
lcd_set_cursor(8, 0);
printf("ADC3:%.2f", adc_avg3);
lcd_set_cursor(8, 1);
printf("ADC4:%.2f", adc_avg4);
}
}
```
需要说明的是,本程序中使用了另一个头文件 `lcd1602.h`,其中包含了 LCD1602 的相关函数。如果需要使用该程序,需要自行编写该头文件。
阅读全文