仿真图:
/*********************************包含头文件********************************/
#include
#include
/*********************************端口定义**********************************/
sbit CS = P3^5;
sbit Clk = P3^3;
sbit DATI = P3^4;
sbit DATO = P3^4; sbit P20=P2^0 ;
/*******************************定义全局变量********************************/
unsigned char dat = 0x00; //AD值
unsigned char count = 0x00; //定时器计数
unsigned char CH; //通道变量
unsigned char dis[] = {0x00, 0x00, 0x00}; //显示数值
/*******************************共阳LED段码表*******************************/
unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; char code tablewe[]={ 0xfd,0xfb,0xf7,0xef,0xdf,0xfe };
/****************************************************************************
函数功能:AD转换子程序
入口参数:CH
出口参数:dat
****************************************************************************/
unsigned char adc0832(unsigned char CH) {
unsigned char i,test,adval;
adval = 0x00; test = 0x00;
Clk = 0; //初始化 DATI = 1; _nop_(); CS = 0; _nop_(); Clk = 1; _nop_();
if ( CH == 0x00 ) //通道选择 {
Clk = 0;
DATI = 1; //通道0的第一位 _nop_(); Clk = 1;
_nop_();
Clk = 0;
DATI = 0; //通道0的第二位 _nop_(); Clk = 1; _nop_(); } else {
Clk = 0;
DATI = 1; //通道1的第一位 _nop_(); Clk = 1;
_nop_();
Clk = 0;
DATI = 1; //通道1的第二位 _nop_(); Clk = 1; _nop_(); }
Clk = 0; DATI = 1;
for( i = 0;i < 8;i++ ) //读取前8位的值 {
_nop_(); adval <<= 1; Clk = 1; _nop_(); Clk = 0; if (DATO)
adval |= 0x01; else
adval |= 0x00; }
for (i = 0; i < 8; i++) //读取后8位的值 {
test >>= 1;