资讯详情

模数转换ADC0832、ADC0808和ADC0809的利用

/*************************************************************** 利用AT89c51单片机和A 0808(ADC0809)ADC0832进行模数转换,进行电压测试 采用共阳极,要显示小数点,则小数点位二进制数最高为应为0,在0-9的8421BCD 码中,最高位都为1,所以把输出数据的BCD码与0x7F“相与”才能实现带小数点的显示。 ****************************************************************/ #include<AT89x51.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char //******************adc0832****************************// sbit CS=P2^3; //使能。 sbit CLK=P2^2;//时钟 sbit DO=P2^1; // 数据输出 sbit DI=P2^0;//数据输入 char CC[]="11001001"; uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; uchar temp; uint vvv,i; //通道的选择:0x02就是单通道0;0x03就是单通道1; //0x00就是双通道ch0="+"; ch0="-" //0x01就是双通道ch0="-"; ch0="+" //*****************************************************// void delay(int tt) { while(tt--) {for(i=0;i<120;i++);} } void startADC() { CS=1; _nop_(); _nop_(); CLK=0; _nop_(); _nop_(); CS=0; _nop_(); _nop_(); DI=1; _nop_(); _nop_(); CLK=1; _nop_(); _nop_(); DI=0; _nop_(); _nop_(); CLK=0; _nop_(); _nop_(); } void choiceADC(uint CH)//CH为0选择通道ch0,为1,选择ch1进行AD转换 { startADC(); if(CH==0) { DI=1; _nop_(); CLK=1;//上升沿DI=1 _nop_(); CLK=0;//1个下降沿DI=1 _nop_(); DI=0; _nop_(); CLK=1; _nop_(); CLK=0;//第3个上升沿DI=0 _nop_(); } else { DI=1; _nop_(); CLK=1;//上升沿DI=1 _nop_(); CLK=0;//1个下降沿DI=1 _nop_(); DI=1; _nop_(); CLK=1; _nop_(); CLK=0;//第3个上升沿DI=1 _nop_(); } /********通道选择结束开始读取转换后的二进制数****/ CLK=1; _nop_(); CLK=0;//下降沿读数,一下进行判断和处理,共8次 for(i=0;i<8;i++) { DI=1; if(DO) { temp |=0x01; } else { temp &=0xfe; } CLK=0; _nop_(); CLK=1; temp=temp<<1; } vvv=temp*500.0/255; } void display(uint dat) { P3=0x04; P0=tab[dat/100]; P0 &=0x7f;//实现带小数点位显示小数点。 delay(1); P0=0xff; P3=0x02; P0=tab[dat%100/10]; delay(1); P0=0xff; P3=0x01; P0=tab[dat%10]; delay(1); P0=0xff; } void main() { P3=0xFF; P0=0xff; while(1) { choiceADC(0); delay(1); display(vvv); } #include<reg51.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int sbit OE =P2^7; sbit EOC =P2^6; sbit start=P2^5; sbit CLOCK=P2^4; sbit CS4 =P2^3; sbit CS3 =P2^2; sbit CS2 =P2^1; sbit CS1 =P2^0; uint vvv,vot; uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; void delay(uint ms) { uchar j; while(ms--) for(j=0;j<120;j++); } void ADCread() { start=0; start=1; start=0;//开始转换 while(EOC==0);//等待转换结束 OE=1; vvv=P1;//向单片机发出转换结果存VVV中 OE=0; } void votexcheng()//根据显示要求换算成显示电压值 { /**单片机8为对应最大数255,对应最大电压V(此处为5V)换算如下**/ vot=vvv*5/255;//如最大量程8V,则乘800,依次类推 } void display(uint dat) { CS1=1;CS1=0;CS3=0;CS4=0; P0=~tab[dat/100|0x80]; delay(1); P0=0xff; CS1=0;CS1=0;CS3=1;CS4=0; P0=tab[dat%100/10]; delay(1); P0=0xff; CS1=0;CS1=0;CS3=0;CS4=1; P0=tab[dat%10]; delay(1); P0=0xff; } void t0() interrupt 1 { CLOCK=~CLOCK; } void t0_init()//开启定时器定时,计时满后产生中断以便产生CLK时钟 { TMOD=0x02; TH0=0x14; TL0=0x00; TR0=1; ET0=1; EA=1; } void main() { t0_init(); while(1) { ADCread(); votexcheng(); display(vot); } } -电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台