0.png (9.26 KB, 下載次數(shù): 110)
下載附件
2016-6-17 01:13 上傳
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轉(zhuǎn)換回來的值
- 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) //數(shù)碼管顯示函數(shù)
- {
- char k;
- for(k=0;k<3;k++)
- {
- P1 = dispbitcode[k];
-
- P0 = dispcode[dispbuf[k]];
-
- delayms();
- if(k==0) //加上數(shù)碼管的dp小數(shù)點
- P0&=0x7f;
- delayms();
- P1=0xff;
-
- }
- }
- //采集并返回
- unsigned int Adc0832(unsigned char channel) //AD轉(zhuǎn)換,返回結果
- {
- 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;//收數(shù)據(jù)
- 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;//收數(shù)據(jù)
- 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;//拉高數(shù)據(jù)端,回到初始狀態(tài)
- 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; //電壓值轉(zhuǎn)換,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;
- }
-
- }
復制代碼
0.png (61.43 KB, 下載次數(shù): 99)
下載附件
2016-6-17 01:13 上傳
ADC0832模數(shù)轉(zhuǎn)換測試程序,帶上位機源程序和下位機源程序,將adc0832采集的電壓值送給上位機顯示,本人親測
上位機和下位機ADC0832upanddown.rar
(5.72 MB, 下載次數(shù): 139)
2016-6-17 01:15 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|