资源描述:
《基于51单片机的ADC0832数字电压表(仿真+程序).doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、仿真图:/*********************************包含头文件********************************/#include#include/*********************************端口定义**********************************/sbitCS=P3^5;sbitClk=P3^3;sbitDATI=P3^4;sbitDATO=P3^4;sbitP20=P2^0;/*************
2、******************定义全局变量********************************/unsignedchardat=0x00;//AD值unsignedcharcount=0x00;//定时器计数unsignedcharCH;//通道变量unsignedchardis[]={0x00,0x00,0x00};//显示数值/*******************************共阳LED段码表*******************************/unsignedcharcodeta
3、b[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};charcodetablewe[]={0xfd,0xfb,0xf7,0xef,0xdf,0xfe};/****************************************************************************函数功能:AD转换子程序入口参数:CH出口参数:dat*******************************************************
4、*********************/unsignedcharadc0832(unsignedcharCH){unsignedchari,test,adval;adval=0x00;test=0x00;Clk=0;//初始化DATI=1;_nop_();CS=0;_nop_();Clk=1;_nop_();if(CH==0x00)//通道选择{Clk=0;DATI=1;//通道0的第一位_nop_();Clk=1;_nop_();Clk=0;DATI=0;//通道0的第二位_nop_();Clk=1;_nop_();}
5、else{Clk=0;DATI=1;//通道1的第一位_nop_();Clk=1;_nop_();Clk=0;DATI=1;//通道1的第二位_nop_();Clk=1;_nop_();}Clk=0;DATI=1;for(i=0;i<8;i++)//读取前8位的值{_nop_();adval<<=1;Clk=1;_nop_();Clk=0;if(DATO)adval
6、=0x01;elseadval
7、=0x00;}for(i=0;i<8;i++)//读取后8位的值{test>>=1;if(DATO)test
8、=0x80;els
9、etest
10、=0x00;_nop_();Clk=1;_nop_();Clk=0;}if(adval==test)//比较前8位与后8位的值,如果不相同舍去。若一直出现显示为零,请将该行去掉dat=test;_nop_();CS=1;//释放ADC0832DATO=1;Clk=1;returndat;}/****************************************************************************函数功能:延时子程序***************************
11、*************************************************/voiddelay(void){intk;for(k=10;k<500;k++);}/****************************************************************************函数功能:将0-255级换算成0.00-5.00的电压数值*******************************************************************
12、*********/voidconvdata(unsignedchari){dis[0]=i/51;//个位dis[1]=(i%51)*10/51*2;//小数点后第一位dis[2]=((i%51)*10%51)*10/51*2;//小数点后第二位}/*******************