|
这是我写的ADC0832的采样和数码管显示程序 通过按键切换采样通道,调了很久都不行 真心求助高手 24M晶振 #include<reg52.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int sbit CS = P1^3; sbit Clk = P1^0; sbit DATI = P1^1; sbit DATO = P1^2; sbit xsd=P0^7; sbit s1=P2^2; sbit we1=P2^7; sbit we2=P2^6; sbit we3=P2^5; sbit we4=P2^4; uchar tab[]={0XEC,0XD8,0XC4,0XB0,0X9C,0X92,0X90,0X8E,0X8C,0XFC,0XFA,0XF8,0XF6,0XEC,0XD8, 0XC4,0XB0,0X9C};//显示0-9段码 uint i,ge,shi,bai,qian,getdata,number; unsigned char dat; void delayms(uint x); //可控延时函数 void display0(); void AD(); void key(); void key() { P2=0xff;
if(s1==0) { delayms(5);//延时判断5ms if(s1==0) { number++; if(number==3) number=0; while(!s1);// 松手检测 }
}
}
main() { number=0; while(1) { AD(); display0(); key(); } }
void delayms(uint x) { uint i,j; for(i=x;i>0;i--) for(j=240;j>0;j--); }
void AD()
{ unsigned char i,test,adval; adval=0x00; test=0x00; Clk=0; //初始化 DATI=1; _nop_(); _nop_(); CS=0; _nop_(); _nop_(); Clk=1; _nop_(); _nop_(); if(number==1)//通道选择 { Clk=0; DATI=1;//通道0的第一位 _nop_(); _nop_(); Clk=1; _nop_(); _nop_(); Clk = 0; DATI = 0; //通道0的第二位 _nop_(); _nop_(); Clk = 1; _nop_(); } else { Clk=0; DATI=1; //通道1的第一位 _nop_(); _nop_(); Clk=1; _nop_(); _nop_(); Clk=0; DATI=1; //通道1的第二位 _nop_(); _nop_(); Clk=1; _nop_(); } Clk=0; DATI=1; for(i=0;i<8;i++ ) //从高位向低位读取8位AD值 { _nop_(); adval<<=1; Clk=1; _nop_(); _nop_(); Clk=0; if(DATO) adval|=0x01; else adval|=0x00; }
for(i=0;i<8;i++) //从低位向高位读取8位AD值 { test>>=1; if(DATO) test|=0x80; else test|=0x00; _nop_(); _nop_(); Clk=1; _nop_(); _nop_(); Clk=0; }
dat=test; _nop_(); _nop_(); CS = 1; //释放ADC0832 DATO = 1; Clk = 1; getdata=dat; } void display0() { qian=(getdata*49*5/25)/1000;//读得的数据乘以2再乘以98%,再乘以5倍的分压除以1000得千位 bai=((getdata*49*5/25)%1000)/100;//数值对1000求余后的得剩下几位,对100整除后得百位 shi=(((getdata*49*5/25)%1000)%100)/10;//分出十位 ge=(((getdata*49*5/25)%1000)%100)%10;//分出个位 P0=tab[qian];//送千位显示 we1=0;//选择第一个数码管 delayms(1); P0=tab[bai];//送百位显示 xsd=0; we2=0;//选择第二个数码管 delayms(1); P0=tab[shi];//送十位显示 we3=0;//选择第三个数码管 delayms(1); P0=tab[ge];//送各位显示 we4=0;//选择第四个数码管 delayms(1); }
|
|