标题:
PCF8591 AD采集电位器电压并显示代码值的单片机源码与电路图
[打印本页]
作者:
你的小甜甜
时间:
2018-5-5 14:58
标题:
PCF8591 AD采集电位器电压并显示代码值的单片机源码与电路图
51单片的1 AD采集电位器电压并显示代码值
电路原理图如下:
0.jpg
(37.6 KB, 下载次数: 33)
下载附件
2018-5-5 23:47 上传
0.jpg
(26.5 KB, 下载次数: 30)
下载附件
2018-5-5 23:47 上传
单片机源程序如下:
//摘要:
//四位数码管显示采集的电位器AD(代码值)
//Designed by Cache.Lee
#include "STC12C5A60S2.h"
#include <I2C.H>
#define uchar unsigned char
#define uint unsigned int
#define PCF8591 0x90 //PCF8591 地址
#define THCO 0xf8 //11.0592MHZ晶振
#define TLCO 0xcb //定时2ms时间常数值
unsigned char Data_Buffer[4]={1,2,3,4};
uchar code Duan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x76};
sbit P24=P2^4; //四个数码管的位码口定义
sbit P25=P2^5;
sbit P26=P2^6;
sbit P27=P2^7;
bit flag=0;
bit DACconversion(unsigned char sla,unsigned char c, unsigned char Val);
bit ISendByte(unsigned char sla,unsigned char c);
unsigned char IRcvByte(unsigned char sla);
/******************************/
void main(void) //主程序
{
unsigned int v;
unsigned char AD_CHANNEL=1;
unsigned int D[5]={0,0,0,0,255};
TMOD=0x11; //设置定时器0工作模式,16位计数模式
TH0=THCO;
TL0=TLCO;
TR0=1; //启动定时器
ET0=1; //使能定时器中断
EA=1; //开总中断
while(1)
{
if(flag==1)
{flag=0;
ISendByte(PCF8591,0x41);
v=IRcvByte(PCF8591);
Data_Buffer[0]=0;
Data_Buffer[1]=v/100%10;
Data_Buffer[2]=v/10%10;
Data_Buffer[3]=v%10;
}
}
}
void timer0() interrupt 1 //定时器中断服务子程序
{
static unsigned int count=0;//软计时变量定义
static unsigned char Bit=0; //静态变量,退出程序后,值保留
TH0=THCO;
TL0=TLCO;
Bit++;
if(Bit>=4)Bit=0;
P2|=0xf0; //先关位码
P0=Duan[Data_Buffer[Bit]]; //开段码
switch(Bit) //送位码
{
case 0: P24=0;break;
case 1: P25=0;break;
case 2: P26=0;break;
case 3: P27=0;break;
}
count++;
if(count>=250) //半S时间到
{
count=0;
flag=1;
}
}
/*******************************************************************
DAC 变换, 转化函数
*******************************************************************/
bit DACconversion(unsigned char sla,unsigned char c, unsigned char Val)
{
Start_I2c(); //启动总线
SendByte(sla); //发送器件地址
if(ack==0)return(0);
SendByte(c); //发送控制字节
if(ack==0)return(0);
SendByte(Val); //发送DAC的数值
if(ack==0)return(0);
Stop_I2c(); //结束总线
return(1);
}
/*******************************************************************
ADC发送字节[命令]数据函数
*******************************************************************/
bit ISendByte(unsigned char sla,unsigned char c)
{
Start_I2c(); //启动总线
SendByte(sla); //发送器件地址
if(ack==0)return(0);
SendByte(c); //发送数据
if(ack==0)return(0);
Stop_I2c(); //结束总线
return(1);
}
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
1 AD采集电位器电压并显示代码值.rar
(204.52 KB, 下载次数: 101)
2018-5-5 14:58 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
快乐眼泪
时间:
2020-2-25 11:23
正在学习,谢谢!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1