用51单片机测电压值程序和仿真图都在里面
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
注释很详细的单片机源程序如下:
- #include "pcf8591.h"
- void pcf8591_init(uchar channel)
- {
- bit flag;
- // channel%=3;
- I2C_start(); //启动总线,发送起始条件
- write_byte(pcf8591_addr_w);//发送PCF8591器件地址,写
- flag=check_ack();//读应答
- write_byte(channel);//发送控制字节.0代表PCF8591控制寄存器,为0000 0000,单端输入00,A/D,选择通道0.
- flag=check_ack();//读应答
- I2C_stop(); //发送结束条件
- }
- uchar pcf8591_adconvert(uchar x)//转换x次,取平均值
- {
- uchar j;
- bit flag;
- uint sum=0;
- sum=0;
- I2C_start();//重新启动总线,发送起始条件
- write_byte(pcf8591_addr_r);//发送PCF8591器件地址,读,启动A/D转换
- flag=check_ack();//读应答
- for(j=0;j<(x-1);j++)//软件滤波,平均值滤波
- {
- sum+=read_byte();//读转换结果
- send_ack(ACK); //发送应答信号
- delayms(10);
- }
- sum+=read_byte();//读转换结果
- send_ack(NACK); //读完最后一个字节后单片机发送非应答信号
- I2C_stop();//发送结束条件
- return(sum/x);
- }
复制代码- #include <reg52.h>
- #include <intrins.h>
- #include "i2c.h"
- #include "pcf8591.h"
- #include "lcd1602.h"
- #define uchar unsigned char
- #define uint unsigned int
- void delayms(uint x);
- void main()
- {
- uint volt;
- uchar dispbuf[7]={'0','.','0','0','0','V','\0'};
- LCD1602_Init();//液晶显示模块1602初始化
- LCD1602_DisplayString(1,1,"Voltage:");
- LCD1602_DisplayString(2,1,"Voltage:");
- while(1)
- {
- pcf8591_init(0);//PCF8591初始化,单端输入,A/D,选择通道0
- volt=pcf8591_adconvert(10)*19.608;//实际电压(mV)=转换结果*5000/255=转换
- //结果*19.608。即VS=VREF*5V/255
- dispbuf[0]=0x30+volt/1000;//整数位
- dispbuf[2]=0x30+(volt%1000)/100;//小数点后第1位
- dispbuf[3]=0x30+(volt%100)/10;//小数点后第2位
- dispbuf[4]=0x30+volt%10;//小数点后第3位
- LCD1602_DisplayString(1,9,dispbuf);
- pcf8591_init(1);//PCF8591初始化,单端输入,A/D,选择通道0
- volt=pcf8591_adconvert(10)*19.608;//实际电压(mV)=转换结果*5000/255=转换
- //结果*19.608。即VS=VREF*5V/255
- dispbuf[0]=0x30+volt/1000;//整数位
- dispbuf[2]=0x30+(volt%1000)/100;//小数点后第1位
- dispbuf[3]=0x30+(volt%100)/10;//小数点后第2位
- dispbuf[4]=0x30+volt%10;//小数点后第3位
- LCD1602_DisplayString(2,9,dispbuf);
- delayms(500);
- }
- }
- void delayms(uint x)
- {
- unsigned char j;
- while(x--)
- for (j=0;j<122;j++); /*延时约8μs*125=1ms,应根据实验调整j的上限125*/
- }
复制代码
所有资料51hei提供下载:
双通道数字电压表.zip
(123.33 KB, 下载次数: 199)
|