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, 下载次数: 136)
|