找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8037|回复: 7
收起左侧

基于ADC0831+LM358正负极电压测量 附单片机源程序

  [复制链接]
ID:387856 发表于 2018-9-18 17:17 | 显示全部楼层 |阅读模式
用358做一个加法器,通过ADC0831 AD转换,51单片机控制,可以测量正2.5V至负的2.5V电压值。可以扩展到大电压的测量 加分压电阻即可
电路原理图如下:
ADC0831负电压检测.png

单片机源程序如下:
  1. /*******************
  2. 程序功能:AD转换显示。被测电压范围-2.5V至+2.5V
  3. 版本:Vre1.0
  4. *******************/
  5. #include<reg51.h>
  6. #include<intrins.h>           //头文件

  7. #define uchar unsigned char
  8. #define uint  unsigned int

  9. sbit cs  = P1^0;        //IO定义
  10. sbit clk = P1^1;
  11. sbit dat = P1^2;
  12. sbit dian= P2^7;

  13. uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};        //数码管
  14. uchar code bc[]={0x01,0x02,0x04,0x08};        //数码管位选(共阳)
  15. uint  huancun[]={0,0,0,0}; //数据缓存

  16. uchar adc0831(); //读取AD值
  17. void display();         //数码管显示

  18. void delay(uint time)  //延时
  19. {
  20. for(time;time>0;time--);
  21. }

  22. void main()
  23. {
  24. uint date,date1;
  25. uchar i;
  26. P1=0xff;
  27. P2=0xff;
  28. P3=0xff;
  29. while(1)
  30. {
  31.   i++;
  32.   if(i==100)
  33.   {
  34.    i=0;
  35.    //P2=adc0831(); //测试用
  36.    date=adc0831();        //读取AD值
  37.    date*=2;                 //基准电压5.1V,乘以2刚好是测得的电压值的100倍(date=120,就是1.2V)
  38.    if(date>250)         //如果测得的值大于2.5V,说明加法器上的被测电压是正电压
  39.    {
  40.     date-=250;        //转换到2.5V电压范围内
  41.         huancun[0]=11; //符号位不显示,表示正电压
  42.    }
  43.    else if(date==250) //如果测到的值是2.5V,说明加法器上的被测电压是0V
  44.    {
  45.     date=0;
  46.         huancun[0]=11;
  47.    }
  48.    else                //如果测得的值小于2.5V说明加法器上的电压是负电压
  49.    {
  50.     date1=250-date;//250是加法器上的偏置电压,date是测到的电压
  51.         date=date1;           //date1就是被测的电压值
  52.     huancun[0]=10; //显示负号
  53.    }
  54.    //date=date/51;
  55.    huancun[1]=date/100;
  56.    huancun[2]=date%100/10;
  57.    huancun[3]=date%10;
  58.   }
  59.   display();        //显示
  60. }
  61. }

  62. void display()
  63. {
  64. uchar i;
  65. for(i=0;i<4;i++)
  66. {
  67.   P3=bc[i];
  68.   P2=tab[huancun[i]];
  69.   if(i==1)         //显示百位的小数点
  70.   dian=0;
  71.   else
  72.   dian=1;
  73.   delay(100);
  74. }
  75. }

  76. uchar adc0831()//AD转换程序 就没什么说的了  网上大把
  77. {
  78. uchar i,temp;
  79. dat=1;
  80. _nop_();
  81. _nop_();
  82. _nop_();
  83. cs=0;
  84. _nop_();
  85. _nop_();
  86. _nop_();
  87. clk=1;
  88. _nop_();
  89. _nop_();
  90. _nop_();
  91. clk=0;
  92. _nop_();
  93. _nop_();
  94. _nop_();
  95. clk=1;
  96. _nop_();
  97. _nop_();
  98. _nop_();
  99. clk=0;
  100. for(i=0;i<8;i++)
  101. {
  102.   temp<<=1;
  103.   if(dat)
  104.   {
  105.    temp++;
  106.   }
  107.   clk=1;
  108.   _nop_();
  109.   _nop_();
  110.   _nop_();
  111.   clk=0;
  112.   _nop_();
  113.   _nop_();
  114.   _nop_();
  115. }
  116. cs=1;
  117. _nop_();
  118. _nop_();
  119. return temp;
  120. }
复制代码

所有资料51hei提供下载:
ADC0831负电压检测.zip (21.87 KB, 下载次数: 89)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:1 发表于 2018-9-18 18:23 | 显示全部楼层
仿真工程能分享吗?
回复

使用道具 举报

ID:387856 发表于 2018-9-19 09:06 | 显示全部楼层
admin 发表于 2018-9-18 18:23
仿真工程能分享吗?

仿真文件,用protues打开即可,但单片机的程序要重新加载HEX,直接用KEILL加载上传的C文件就可以生成HEX。

正负电压AD测量.zip

17.12 KB, 下载次数: 54, 下载积分: 黑币 -5

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:64053 发表于 2019-5-28 22:03 | 显示全部楼层
谢楼主分享
回复

使用道具 举报

ID:452173 发表于 2020-2-4 14:44 | 显示全部楼层
收藏了,谢谢分享
回复

使用道具 举报

ID:65956 发表于 2020-2-4 20:52 | 显示全部楼层
现在外接ADC芯片大部份都能带测试正负电压功能了,而且简单,可以省掉LM358等这种复杂电路
回复

使用道具 举报

ID:168857 发表于 2020-3-26 13:34 | 显示全部楼层
aking991 发表于 2020-2-4 20:52
现在外接ADC芯片大部份都能带测试正负电压功能了,而且简单,可以省掉LM358等这种复杂电路

推荐几个芯片,想测试电源的正负电压
回复

使用道具 举报

ID:909771 发表于 2021-5-5 14:59 | 显示全部楼层
我想问一下大神  加电阻分压可以测-15V到15V的电压吗  如果可以的话在哪里测呀  
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表