unsigned char ADC0804_Read(void) { unsigned char dat; ADC0804_Port = 0xff; ADC0804_CS = 1; ADC0804_WR = 1; ADC0804_CS = 0; ADC0804_WR = 0; //Delay_xus(100); ADC0804_CS = 1; ADC0804_WR = 1; //Delay_xus(500); ADC0804_CS = 0; ADC0804_RD = 0; //Delay_xus(50); dat = ADC0804_Port; ADC0804_RD = 1; ADC0804_CS = 1; return dat; } unsigned int ADC0804_Convert(void) { unsigned char n; unsigned int sum = 0; unsigned int temp; for(n = 0;n < 3;n++) { sum = sum + ADC0804_Read(); Seg_dis(temp); } temp = sum / 3; //temp = temp * 19.60784; //5/255=0.01960784313 return temp; } 注释
时间: 2023-10-25 16:09:56 浏览: 25
这段代码是关于如何通过单片机读取 ADC0804 模数转换器的数据的。首先是一个读取函数 ADC0804_Read(),其中通过对一些控制口的操作,实现了从模数转换器中读取数据的功能。然后是一个转换函数 ADC0804_Convert(),该函数通过多次调用 ADC0804_Read(),并进行求平均值的操作,最终得到了模数转换器输出的数字量。最后还有一行注释,可能是用于将数字量转换为实际的模拟量值的,但是该行代码被注释掉了。
相关问题
unsigned char ADC0804_Read(void) { unsigned char dat; ADC0804_Port = 0xff; ADC0804_CS = 1; ADC0804_WR = 1; ADC0804_CS = 0; ADC0804_WR = 0; //Delay_xus(100); ADC0804_CS = 1; ADC0804_WR = 1; //Delay_xus(500); ADC0804_CS = 0; ADC0804_RD = 0; //Delay_xus(50); dat = ADC0804_Port; ADC0804_RD = 1; ADC0804_CS = 1; return dat; } unsigned int ADC0804_Convert(void) { unsigned char n; unsigned int sum = 0; unsigned int temp; for(n = 0;n < 3;n++) { sum = sum + ADC0804_Read(); Seg_dis(temp); } temp = sum / 3; //temp = temp * 19.60784; //5/255=0.01960784313 return temp; }将代码注释
```
//定义一个函数,用于从ADC0804模数转换器中读取数据
unsigned char ADC0804_Read(void) {
unsigned char dat; //定义一个8位无符号整型变量dat用于存储读取到的数据
ADC0804_Port = 0xff; //将ADC0804的端口设置为输入状态
ADC0804_CS = 1; //设置片选端口为高电平
ADC0804_WR = 1; //设置写端口为高电平
ADC0804_CS = 0; //设置片选端口为低电平
ADC0804_WR = 0; //设置写端口为低电平
//Delay_xus(100); //延时100微秒
ADC0804_CS = 1; //设置片选端口为高电平
ADC0804_WR = 1; //设置写端口为高电平
//Delay_xus(500); //延时500微秒
ADC0804_CS = 0; //设置片选端口为低电平
ADC0804_RD = 0; //设置读端口为低电平
//Delay_xus(50); //延时50微秒
dat = ADC0804_Port; //将读取到的数据存储到dat中
ADC0804_RD = 1; //设置读端口为高电平
ADC0804_CS = 1; //设置片选端口为高电平
return dat; //返回读取到的数据
}
//定义一个函数,用于将多次读取到的数据进行平均值运算,得到数字量输出
unsigned int ADC0804_Convert(void) {
unsigned char n; //定义一个8位无符号整型变量n,用于循环计数
unsigned int sum = 0; //定义一个16位无符号整型变量sum,用于存储多次读取到的数据的累加和
unsigned int temp; //定义一个16位无符号整型变量temp,用于存储平均值输出
for(n = 0; n < 3; n++) { //进行3次循环,每次读取一次数据
sum = sum + ADC0804_Read(); //调用ADC0804_Read()函数读取数据,并将读取到的数据累加到sum中
Seg_dis(temp); //将temp的值显示在数码管上
}
temp = sum / 3; //将多次读取到的数据的累加和除以3,得到平均值
//temp = temp * 19.60784; //将数字量转换为模拟量输出,但是这行代码被注释掉了
return temp; //返回平均值
}
```
unsigned int ADC_Read(unsigned char channel) { unsigned int result = 0; unsigned char i; unsigned char j; unsigned int out = 0; unsigned char nres = 0; switch(channel) // 选择ADC0832 { case 1: ADC0832_CS1 = 0; ADC0832_CS2 = 1; ADC0832_CS3 = 1; ADC0832_CS4 = 1; break; case 2: ADC0832_CS1 = 1; ADC0832_CS2 = 0; ADC0832_CS3 = 1; ADC0832_CS4 = 1; break; case 3: ADC0832_CS1 = 1; ADC0832_CS2 = 1; ADC0832_CS3 = 0; ADC0832_CS4 = 1; break; case 4: ADC0832_CS1 = 1; ADC0832_CS2 = 1; ADC0832_CS3 = 1; ADC0832_CS4 = 0; break; default: return 0; } ADC0832_CLK = 0; ADC0832_DO = 1; ADC0832_CLK = 1; ADC0832_CLK = 0; ADC0832_DO = 1; ADC0832_CLK = 1; ADC0832_CLK = 0; result=0; 修改这段代码,使得4个ADC0832分别接收4个MPX4115的压力信号
首先,需要将MPX4115的压力信号接到ADC0832的输入端口上。假设分别将MPX4115的压力信号接到了ADC0832的CH0、CH1、CH2、CH3输入端口上。
然后,需要修改ADC_Read函数的switch语句部分,使得不同的通道对应不同的ADC0832输入通道。修改后的代码如下:
```
switch(channel)
{
case 1:
ADC0832_CS1 = 0;
ADC0832_CS2 = 1;
ADC0832_CS3 = 1;
ADC0832_CS4 = 1;
break;
case 2:
ADC0832_CS1 = 1;
ADC0832_CS2 = 0;
ADC0832_CS3 = 1;
ADC0832_CS4 = 1;
break;
case 3:
ADC0832_CS1 = 1;
ADC0832_CS2 = 1;
ADC0832_CS3 = 0;
ADC0832_CS4 = 1;
break;
case 4:
ADC0832_CS1 = 1;
ADC0832_CS2 = 1;
ADC0832_CS3 = 1;
ADC0832_CS4 = 0;
break;
default:
return 0;
}
// 将ADC0832的CH0、CH1、CH2、CH3输入通道对应到MPX4115的压力信号
switch(channel)
{
case 1:
ADC0832_CLK = 0;
ADC0832_DO = (MPX4115_CH0 > 0) ? 1 : 0;
ADC0832_CLK = 1;
ADC0832_CLK = 0;
ADC0832_DO = (MPX4115_CH0 > 1) ? 1 : 0;
ADC0832_CLK = 1;
ADC0832_CLK = 0;
ADC0832_DO = (MPX4115_CH0 > 2) ? 1 : 0;
ADC0832_CLK = 1;
ADC0832_CLK = 0;
ADC0832_DO = (MPX4115_CH0 > 3) ? 1 : 0;
ADC0832_CLK = 1;
break;
case 2:
ADC0832_CLK = 0;
ADC0832_DO = (MPX4115_CH1 > 0) ? 1 : 0;
ADC0832_CLK = 1;
ADC0832_CLK = 0;
ADC0832_DO = (MPX4115_CH1 > 1) ? 1 : 0;
ADC0832_CLK = 1;
ADC0832_CLK = 0;
ADC0832_DO = (MPX4115_CH1 > 2) ? 1 : 0;
ADC0832_CLK = 1;
ADC0832_CLK = 0;
ADC0832_DO = (MPX4115_CH1 > 3) ? 1 : 0;
ADC0832_CLK = 1;
break;
case 3:
ADC0832_CLK = 0;
ADC0832_DO = (MPX4115_CH2 > 0) ? 1 : 0;
ADC0832_CLK = 1;
ADC0832_CLK = 0;
ADC0832_DO = (MPX4115_CH2 > 1) ? 1 : 0;
ADC0832_CLK = 1;
ADC0832_CLK = 0;
ADC0832_DO = (MPX4115_CH2 > 2) ? 1 : 0;
ADC0832_CLK = 1;
ADC0832_CLK = 0;
ADC0832_DO = (MPX4115_CH2 > 3) ? 1 : 0;
ADC0832_CLK = 1;
break;
case 4:
ADC0832_CLK = 0;
ADC0832_DO = (MPX4115_CH3 > 0) ? 1 : 0;
ADC0832_CLK = 1;
ADC0832_CLK = 0;
ADC0832_DO = (MPX4115_CH3 > 1) ? 1 : 0;
ADC0832_CLK = 1;
ADC0832_CLK = 0;
ADC0832_DO = (MPX4115_CH3 > 2) ? 1 : 0;
ADC0832_CLK = 1;
ADC0832_CLK = 0;
ADC0832_DO = (MPX4115_CH3 > 3) ? 1 : 0;
ADC0832_CLK = 1;
break;
default:
return 0;
}
```
其中,MPX4115_CH0、MPX4115_CH1、MPX4115_CH2、MPX4115_CH3分别表示四个MPX4115的压力信号,假设其取值范围为0~15,表示0~5V的输入电压分别经过了ADC的0~15个刻度,需要将其转换为二进制信号输入到ADC0832中。
具体实现方式是:首先将ADC0832的CLK置为0,然后判断MPX4115的压力信号是否大于当前输入刻度,如果大于,则将DO置为1,否则置为0;然后将CLK置为1,再将CLK置为0,依次输入四个信号位,最后将CLK置为1,完成一次输入。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)