
基于PCF8591的ADC/DAC实验代码及C51单片机KEIL项目文件集合(5份).zip
5星
- 浏览量: 0
- 大小:None
- 文件类型:None
简介:
本资源包包含五个独立的项目文件,适用于C51单片机和Keil开发环境,围绕着PCF8591芯片进行模拟数字转换(ADC)与数模转换(DAC)实验,提供详细的代码示例。
基于PCF8591芯片的AD/DA实验例程C51单片机KEIL源码工程文件包括五个部分:PCF8591 1602液晶显示、PCF8591 一路AD数码管显示、PCF8591 四路AD数码管显示、PCF8591 DA输出模拟和PCF8591 输出锯齿波。
在`main()`函数中,程序初始化后进入无限循环。每次循环中读取四次ADC值并计算电压,然后将结果格式化并在液晶屏上显示。具体实现如下:
```c
unsigned char num = 0, i;
unsigned char temp[7]; // 定义用于存储字符串的临时数组
float Voltage; // 定义浮点变量
LCD_Init(); // 初始化1602 LCD
DelayMs(20); // 延时以确保稳定初始化后清屏
while (1) { // 主循环
for(i=0;i<5;i++) num = ReadADC(0);
Voltage = (float)num * 5 / 256;
sprintf(temp, V0 %3.2f , Voltage);
LCD_Write_String(0, 0, temp);
for(i=0;i<5;i++) num = ReadADC(1);
Voltage = (float)num * 5 / 256;
sprintf(temp, V1 %3.2f , Voltage);
LCD_Write_String(8, 0, temp);
for(i=0;i<5;i++) num = ReadADC(2);
Voltage = (float)num * 5 / 256;
sprintf(temp, V2 %3.2f , Voltage);
LCD_Write_String(0, 1, temp);
for(i=0;i<5;i++) num = ReadADC(3);
Voltage = (float)num * 5 / 256;
sprintf(temp, V3 %3.2f , Voltage);
LCD_Write_String(8, 1, temp);
DelayMs(200); // 延时
}
```
`ReadADC()`函数用于读取指定通道的AD转换值,返回范围为0-255:
```c
unsigned char ReadADC(unsigned char Chl) {
unsigned char Val;
Start_I2c();
SendByte(AddWr);
if (ack == 0) return (0);
SendByte(0x40 | Chl); // 发送通道地址
if (ack == 0) return (0);
Start_I2c();
SendByte(AddWr + 1);
Val = RcvByte();
NoAck_I2c();
Stop_I2c();
return (Val);
}
```
`WriteDAC()`函数用于向DA转换器写入数值,输入参数范围为0-255。
全部评论 (0)


