adc0832数字电压表程序仿真图 下载本文

内容发布更新时间 : 2024/10/10 1:20:41星期一 下面是文章的全部内容请认真阅读。

仿真图:

/*********************************包含头文件********************************/

#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;