新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 模数转换ADC0832、ADC0808和ADC0809的利用

模数转换ADC0832、ADC0808和ADC0809的利用

作者: 时间:2016-11-30 来源:网络 收藏
/***************************************************************
利用AT89c51单片机和ADC0808(ADC0809)ADC0832进行模数转换,进行电压测试
数码管采用共阳极,要显示小数点,则小数点位二进制数最高为应为0,在0-9的8421BCD
码中,最高位都为1,所以把输出数据的BCD码与0x7F“相与”才能实现带小数点的显示。
****************************************************************/
#include
#include
#define uint unsigned int
#define uchar unsigned char
//******************adc0832****************************//
sbit CS=P2^3; //使能。
sbit CLK=P2^2;//时钟
sbit DO=P2^1; // 数据输出
sbit DI=P2^0;//数据输入
char CC[]="11001001";
uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
uchar temp;
uint vvv,i;
//通道的选择:0x02就是单通道0;0x03就是单通道1;
//0x00就是双通道ch0="+"; ch0="-"
//0x01就是双通道ch0="-"; ch0="+"
//*****************************************************//
void delay(int tt)
{
while(tt--)
{for(i=0;i<120;i++);}
}
void startADC()
{
CS=1;
_nop_();
_nop_();
CLK=0;
_nop_();
_nop_();
CS=0;
_nop_();
_nop_();
DI=1;
_nop_();
_nop_();
CLK=1;
_nop_();
_nop_();
DI=0;
_nop_();
_nop_();
CLK=0;
_nop_();
_nop_();
}
void choiceADC(uint CH)//CH为0选择通道ch0,为1,选择ch1进行AD转换
{
startADC();
if(CH==0)
{
DI=1;
_nop_();
CLK=1;//上升沿DI=1
_nop_();
CLK=0;//1个下降沿DI=1
_nop_();
DI=0;
_nop_();
CLK=1;
_nop_();
CLK=0;//第3个上升沿DI=0
_nop_();
}
else
{
DI=1;
_nop_();
CLK=1;//上升沿DI=1
_nop_();
CLK=0;//1个下降沿DI=1
_nop_();
DI=1;
_nop_();
CLK=1;
_nop_();
CLK=0;//第3个上升沿DI=1
_nop_();
}
/********通道选择结束开始读取转换后的二进制数****/
CLK=1;
_nop_();
CLK=0;//下降沿读数,一下进行判断和处理,共8次
for(i=0;i<8;i++)
{
DI=1;
if(DO)
{
temp |=0x01;
}
else
{
temp &=0xfe;
}
CLK=0;
_nop_();
CLK=1;
temp=temp<<1;
}
vvv=temp*500.0/255;
}
上一页 1 2 下一页

评论


技术专区

关闭