自己用的ADC程序。用的MAX1241,注意我是PROTUES8.0仿真的。欢迎大家讨论,也希望给新手一个参考,精度0.01V
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #include<reg51.h>
- sbit ADC_DOUT=P3^0;
- sbit ADC_CLK=P3^1;
- sbit ADC_CS=P3^2;
- extern void WriteAddress(unsigned char x,y);
- extern void LcdInitiate(void);
- extern void display(char *p);
- extern void WriteData(unsigned char y);
- unsigned char code bt[]=" Max1241 Test! ";
- unsigned char code sj[]="Now Date: V";
- unsigned char S;
- unsigned char a,b,c;
- unsigned char tab[]="0123456789";
- unsigned int ADC_Data;
- int Read_Max1241()
- {
- char i;
- ADC_CLK=0;
- ADC_CS=0;
- ADC_Data=0;
- while(!ADC_DOUT); //当CS=0后,开始转换,DOUT输出0,转换结束输出1,再要有一个时钟后才开始传输数据
- //start output the data
- ADC_CLK=1;
- ADC_CLK=0;
- //传输数据
- for(i=0;i<12;i++)
- {
- ADC_CLK=1;
- ADC_Data<<=1;
- ADC_Data |= ADC_DOUT;
- ADC_CLK=0;
- }
- ADC_CS=1;
- ADC_CLK=0;
- return ADC_Data;
- }
- void ADC_COUNT()
- {
- S=(Read_Max1241()*0.00122070312)*100;
- a=S/100%10;
- b=S/10%10;
- c=S%10;
- WriteAddress(2,11);
- WriteData(tab[a]);
- WriteAddress(2,13);
- WriteData(tab[b]);
- WriteData(tab[c]);
- }
- void main()
- {
- LcdInitiate();
- WriteAddress(1,1);
- display(bt);
- WriteAddress(2,1);
- display(sj);
- WriteAddress(2,12);
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
max1241.zip
(77 KB, 下载次数: 92)
|