www.pudn.com > adcc.rar > adcc.c
/************************************************************************** A/D转换模块演示程序 来源: 郑州远博科技 王兴民 0371-6949037 0371-7256036 13949105551 实验本程序,需要把转换模块上的J2短路 阅读本程序,需要参照AD0832的使用说明及时序图进行 ***************************************************************************/ #include#include #define CS P0_0 //ADC0832 的CS端 #define CLK P0_1 //ADC0832 的CLK端 #define DO P0_2 //ADC0832 的DO端 #define DI P0_3 //ADC0832 的DI端 #define SDA P2_7 //74LS164 SAD #define SCK P2_6 //74LS164 SCK #define BIT5 P2_5 //数码管位1 #define BIT4 P2_4 //数码管位2 #define BIT3 P2_3 //数码管位3 #define BIT2 P2_2 //数码管位4 #define BIT1 P2_1 //数码管位5 #define BIT0 P2_0 //数码管位6 #define uchar unsigned char #define uint unsigned int code uchar szdm[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0xff}; //共阳数码管的显示字模数据 data uchar displaybuff[6]; //定义显示缓冲区 uchar CH0=0X10; //通道0转换数据 void display(); uchar adconvert(sign); void main() { uchar temp; DelayMs(2000); //延时使芯片复位完成 CS=1; DI=1; DO=1; CLK=0; while(1) { temp=adconvert(CH0); displaybuff[2]=temp/100; displaybuff[1]=(temp-displaybuff[2]*100)/10; displaybuff[0]=temp-(displaybuff[2]*100+displaybuff[1]*10); display(); } } void adstart(void) { //开始条件 CLK=0; CS=0; DI=1; CLK=1; CLK=0; } void adsendsign(uchar signifi) { //发送信号 uchar temp; temp=signifi&0x03; DI=(signifi>>1)&0x01; CLK=1; CLK=0; DI=temp&0x01; CLK=1; CLK=0; } uchar adoutdata(void) { //数据输出 uchar mfdata,i,j; bit D; while(DO); CLK=1; for(i=0;i<8;i++) { CLK=0; D=DO; mfdata=mfdata|D; CLK=1; mfdata=mfdata<<1; } for(j=0;j<7;j++) { CLK=0;CLK=1; } CS=1; DO=1; return(mfdata); } uchar adconvert(sign) { //开始转换 uchar addata; adstart(); adsendsign(sign); addata=adoutdata(); return(addata); } void senddata(uchar dd) { //74HC164移入显示数据 uchar j; for (j=0;j<8;j++) { SDA=(bit)(dd&0x01); SCK=1; SCK=0; dd=dd>>1; } } void display() { //在实验板的6位数码管上动态显示缓冲区中的数据 senddata(szdm[displaybuff[0]]); BIT0=0; Delay_ms(10); BIT0=1; senddata(szdm[displaybuff[1]]); BIT1=0; Delay_ms(10); BIT1=1; senddata(szdm[displaybuff[2]]); BIT2=0; Delay_ms(10); BIT2=1; senddata(szdm[displaybuff[3]]); BIT3=0; Delay_ms(10); BIT3=1; senddata(szdm[displaybuff[4]]); BIT4=0; Delay_ms(10); BIT4=1; senddata(szdm[displaybuff[5]]); BIT5=0; Delay_ms(10); BIT5=1; }