标题: 51单片机max1241测试源程序与仿真 ADC精度0.01V [打印本页]

作者: 1356986515    时间: 2018-3-16 20:22
标题: 51单片机max1241测试源程序与仿真 ADC精度0.01V
自己用的ADC程序。用的MAX1241,注意我是PROTUES8.0仿真的。欢迎大家讨论,也希望给新手一个参考,精度0.01V
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include<reg51.h>
  2. sbit ADC_DOUT=P3^0;
  3. sbit ADC_CLK=P3^1;
  4. sbit ADC_CS=P3^2;
  5. extern void WriteAddress(unsigned char x,y);
  6. extern void LcdInitiate(void);
  7. extern void display(char *p);
  8. extern void WriteData(unsigned char y);
  9. unsigned char code bt[]=" Max1241 Test! ";
  10. unsigned char code sj[]="Now Date:     V";
  11. unsigned char S;
  12. unsigned char a,b,c;
  13. unsigned char tab[]="0123456789";
  14. unsigned int ADC_Data;
  15. int Read_Max1241()
  16. {
  17. char i;
  18. ADC_CLK=0;
  19. ADC_CS=0;
  20. ADC_Data=0;
  21. while(!ADC_DOUT);   //当CS=0后,开始转换,DOUT输出0,转换结束输出1,再要有一个时钟后才开始传输数据
  22. //start output the data
  23. ADC_CLK=1;
  24. ADC_CLK=0;

  25. //传输数据
  26. for(i=0;i<12;i++)
  27. {
  28.        ADC_CLK=1;
  29.        ADC_Data<<=1;
  30.        ADC_Data |= ADC_DOUT;
  31.        ADC_CLK=0;
  32. }

  33. ADC_CS=1;
  34. ADC_CLK=0;
  35. return  ADC_Data;
  36. }
  37. void ADC_COUNT()
  38. {
  39. S=(Read_Max1241()*0.00122070312)*100;
  40. a=S/100%10;
  41. b=S/10%10;
  42. c=S%10;
  43. WriteAddress(2,11);
  44. WriteData(tab[a]);
  45. WriteAddress(2,13);
  46. WriteData(tab[b]);
  47. WriteData(tab[c]);



  48. }
  49. void main()
  50. {
  51.   LcdInitiate();
  52.   WriteAddress(1,1);
  53.   display(bt);
  54.   WriteAddress(2,1);
  55.   display(sj);
  56.   WriteAddress(2,12);
  57. ……………………

  58. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
max1241.zip (77 KB, 下载次数: 92)




作者: a1357787200    时间: 2018-4-13 17:25
很棒的资料,学习学习

作者: xianfajushi    时间: 2023-6-7 14:45
稍做修正即无精度误差,且乘以小数的值是从哪里来的?我获取的小数是0.05/41*100

0.png (78.28 KB, 下载次数: 57)

0.png





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1