用c51语言设计一个监测系统:利用AD0808循环监测通道6上电位器的电压,并将电压值转换成的数字量,数字量通过外接8个LED灯显示。(ADC0808的基准 电压+5V )
时间: 2024-03-12 15:49:27 浏览: 64
好的,我可以帮您设计这个监测系统。首先,您需要准备以下材料:C51单片机、ADC0808模数转换芯片、电位器、8个LED灯、杜邦线、面包板等。
接下来,您需要将ADC0808芯片连接到C51单片机上。ADC0808有8个输入通道,您需要将电位器连接到通道6上,并将模拟输入引脚(IN)连接到电位器的中心引脚。ADC0808的基准电压需要连接到+5V电源上。
然后,您需要编写C51程序来循环读取ADC0808芯片的值,并将其转换为数字量。您可以使用8051的内部定时器来控制循环时间。读取ADC0808的值需要通过SPI通信协议进行,您需要编写相应的SPI驱动程序。读取到的数字量可以通过8个LED灯进行显示,您需要将LED灯连接到C51单片机的输出引脚上。
下面是一个简单的C51程序示例:
```c
#include<reg52.h>
#include<intrins.h>
sbit SCLK=P1^0; //定义SPI通信时钟引脚
sbit CS=P1^1; //定义ADC0808的片选引脚
sbit EOC=P1^2; //定义ADC0808的转换完成引脚
void delay(unsigned int t){
while(t--);
}
unsigned char SPI_Read(){
unsigned char i,dat=0;
for(i=0;i<8;i++){
SCLK=0; //时钟下降沿读取数据
_nop_();
dat<<=1; //数据左移一位
if(MISO) dat|=0x01; //如果MISO为高,数据最低位为1
SCLK=1; //时钟上升沿
}
return dat;
}
void main(){
unsigned int value;
while(1){
CS=0; //选中ADC0808
SPI_Read(); //启动转换
while(!EOC); //等待转换完成
CS=1; //取消片选
value=SPI_Read(); //读取高8位
value=(value<<8)+SPI_Read(); //读取低8位
P2=value; //将读取到的数字量输出到LED灯
delay(10000); //延时一段时间再继续循环
}
}
```
请注意,这只是一个简单的示例程序,您需要根据实际情况进行调整和完善。此外,为了使程序更加可靠和稳定,您还需要添加一些错误处理和异常情况的处理代码。
阅读全文