2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > ADC0832模数转换采集电压上位机和下位机单片机程序源码

ADC0832模数转换采集电压上位机和下位机单片机程序源码

时间:2022-12-07 05:08:54

相关推荐

ADC0832模数转换采集电压上位机和下位机单片机程序源码

ADC0832电压采集上位机程序,51黑附件中可下载vc++源码

下面是单片机做的下位机程序:

#include<reg52.h>

#include "intrins.h"

#define uint unsigned int

#define uchar unsigned char

sbit ADCS =P2^3;//ADC0832 chip seclect

sbit ADDI =P2^2;//ADC0832 k in

sbit ADDO =P2^1;//ADC0832 k out

sbit ADCLK =P2^0;//ADC0832 clock signal

sbit cs=P2^2;

sbit wr=P2^3;

unsigned char dispbitcode[8]={0xf7,0xfb,0xfd};//位扫描

unsigned char dispcode[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};

unsigned char dispbuf[3];

unsigned char table[9]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

uint temp,adc=0;

uchar getdata; //获取ADC转换回来的值

uchar flag,a;

void delayms(void)//12mhz delay 1.01ms

{

unsigned char x,y;

x=10;

while(x--)

{

y=4;

while(y--);

}

}

void display(void)//数码管显示函数

{

char k;

for(k=0;k<3;k++)

{

P1 = dispbitcode[k];

P0 = dispcode[dispbuf[k]];

delayms();

if(k==0) //加上数码管的dp小数点

P0&=0x7f;

delayms();

P1=0xff;

}

}

//采集并返回

unsigned int Adc0832(unsigned char channel) //AD转换,返回结果

{

uchar i=0;

uchar j;

uint dat=0;

uchar ndat=0;

if(channel==0)channel=2;

if(channel==1)channel=3;

ADDI=1;

_nop_();

_nop_();

ADCS=0;//拉低CS端

_nop_();

_nop_();

ADCLK=1;//拉高CLK端

_nop_();

_nop_();

ADCLK=0;//拉低CLK端,形成下降沿1

_nop_();

_nop_();

ADCLK=1;//拉高CLK端

ADDI=channel&0x1;

_nop_();

_nop_();

ADCLK=0;//拉低CLK端,形成下降沿2

_nop_();

_nop_();

ADCLK=1;//拉高CLK端

ADDI=(channel>>1)&0x1;

_nop_();

_nop_();

ADCLK=0;//拉低CLK端,形成下降沿3

ADDI=1;//控制命令结束

_nop_();

_nop_();

dat=0;

for(i=0;i<8;i++)

{

dat|=ADDO;//收数据

ADCLK=1;

_nop_();

_nop_();

ADCLK=0;//形成一次时钟脉冲

_nop_();

_nop_();

dat<<=1;

if(i==7)dat|=ADDO;

}

for(i=0;i<8;i++)

{

j=0;

j=j|ADDO;//收数据

ADCLK=1;

_nop_();

_nop_();

ADCLK=0;//形成一次时钟脉冲

_nop_();

_nop_();

j=j<<7;

ndat=ndat|j;

if(i<7)ndat>>=1;

}

ADCS=1;//拉低CS端

ADCLK=0;//拉低CLK端

ADDO=1;//拉高数据端,回到初始状态

dat<<=8;

dat|=ndat;

return(dat); //return ad k

}

void main()

{ P0=0XFF;

TMOD=0x20;

TH1=0xfd;

TL1=0xfd;

TR1=1;

REN=1;

SM0=0;

SM1=1;

EA=1;

ES=1;

while(1)

{ if(flag==1)

{

ES=0;

flag=0;

SBUF=getdata;

while(!TI);

TI=0;

ES=1;

}

getdata=Adc0832(1);

temp=getdata*1.0/255*500;//电压值转换,5V做为参考电压,分成256份。

dispbuf[2]=temp%10; //个位

dispbuf[1]=temp/10%10; //十位

dispbuf[0]=temp/100; //百位

display();

}

}

void ckzd() interrupt 4

{

RI=0;

a=SBUF;

switch(a)

{

case "a":

flag=1; break;

case "b":

P0=adc; break;

case "c":

P0=adc; break;

default:

P1=0xFF;

break;

}

}

复制代码

ADC0832模数转换测试程序,带上位机源程序和下位机源程序,将adc0832采集的电压值送给上位机显示,本人亲测

上位机和下位机ADC0832upanddown.rar(5.72 MB, 下载次数: 85)

源程序

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。