找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 19570|回复: 42
收起左侧

单片机+ADC0832简易数字电压表proteus仿真与程序源码(带详细注释)

  [复制链接]
ID:348504 发表于 2018-6-9 23:25 | 显示全部楼层 |阅读模式
给大家分享一个用ADC0832模数转换芯片设计的电压表设计,内含protues电路图和带有注释的keil工程文件

ADC0832电压表仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png 0.png

单片机电压表源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>

  3. #define uint unsigned int
  4. #define uchar unsigned char
  5.         
  6. sbit CS =P3^4;              //片选使能端
  7. sbit DI =P1^1;               //数据信号输入端,选择通道控制(SIG/DIF和ODD/EVEN)
  8. sbit DO =P1^1;             //数据输出端
  9. sbit CLK =P1^0;           //时钟脉冲

  10. sbit S_1 = P2^3;
  11. sbit S_2 = P2^4;
  12. sbit S_3 = P2^5;
  13. sbit S_4 = P2^6;

  14. unsigned char wd[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //不带小数点的段选码
  15. unsigned char yd[]={0x40,0x79,0x024,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//带小数点的段选码

  16. // ===========延时子程序=================
  17. void delay_ms(unsigned int x)
  18. {
  19.         unsigned int i,j;
  20.         for(i=0;i<x;i++)
  21.              for(j=0;j<123;j++);              //延时1ms
  22. }
  23. /*=============读ADC0832函数=============*/
  24. /*=============采集并返回=================*/
  25. unsigned int Adc0832(unsigned char channel)  //AD转换,返回结果
  26. {
  27.     uchar i=0;   
  28.                 uchar j;
  29.                 uint dat=0;            //正向输入数据
  30.                 uchar ndat=0;       //反向输入数据
  31. //****************初始化操作**************
  32.                 if(channel==0)channel=2;     //10B对应SGL/DIF=1,ODD/EVEN=0
  33.                 if(channel==1)channel=3;     //11B对应SGL/DIF=1,ODD/EVEN=1
  34. //****************写操作,将通道数据写入ADC0832**************
  35.            DI=1; _nop_();_nop_();     //发起始位,固定为1(1位)
  36.                  CS=0;_nop_();_nop_();     //拉低CS端,让ADC0832使能
  37.                  CLK=1;_nop_();_nop_();   //拉高CLK端,DI端的数据移入ADC0832内部的多路移位寄存器
  38.                  CLK=0;_nop_();_nop_();    //拉低CLK端,形成下降沿1,第一个周期开始
  39.                  CLK=1;    //拉高CLK端,在第一个时钟周期内,DI为高电平,表示启动位
  40.                                          //紧接着输入两位配置位进行通道选择
  41.                         DI=channel&0x1;_nop_();_nop_(); //假设选取通道0,则10&01=0,即SGL/DIF=0,为差分输入(2位)
  42.                         CLK=0;_nop_();_nop_();    //拉低CLK端,形成下降沿2,第二个周期开始
  43.                         CLK=1;                                //拉高CLK端
  44.                         DI=(channel>>1)&0x1;_nop_();_nop_();  //假设选取通道0,则01&01=1,ODD/EVEN=1,表示通道0
  45.             CLK=0;                                 //拉低CLK端,形成下降沿3
  46.                         DI=1;_nop_();_nop_();        //控制命令结束
  47.                         dat=0;
  48.                 //*************读操作,将AD转换的数从DO口输出****************
  49.                         for(i=0;i<8;i++)   //每一个CLK下降沿输出一位数,先输出高位
  50.                         {
  51.                                  dat|=DO;    //收数据,“|”位或,如果2位中有一位为1,则结果为1,否则为0
  52.                                  CLK=1;_nop_();_nop_();
  53.                                  CLK=0;_nop_();_nop_();      //形成一次时钟脉冲
  54.                                  dat<<=1;
  55.                                  if(i==7)dat|=DO;
  56.                         }
  57.                         
  58.                         for(i=0;i<8;i++)  //每一个CLK下降沿输出一位数,先输出低位
  59.                         {
  60.                                  j=0;
  61.                                  j=j|DO;    //收数据
  62.                                  CLK=1;_nop_();_nop_();
  63.                                  CLK=0;_nop_();_nop_();    //形成一次时钟脉冲
  64.                                  j=j<<7;
  65.                                  ndat=ndat|j;
  66.                                  if(i<7)ndat>>=1;
  67.                         }
  68. //*********************结束AD转换,并返回转换的数***********************
  69.                         CS=1;     //拉低CS端
  70.                         CLK=0;   //拉低CLK端
  71.                         DO=1;     //拉高数据端,回到初始状态
  72.                         dat<<=8;
  73.                         dat|=ndat;
  74.                         return(dat);            //返回数据
  75.                         }
  76. //============数码管显示函数==========================
  77.         void display(uchar p)                  //数码管显示函数
  78.         {
  79.         uchar S1,S2,S3;

  80.         S1=p/51;                       //个位
  81.         S2=(p*10/51)%10;        //十分位
  82.         S3=(p*100/51)%10;      //百分位
  83.                
  84.         //个位
  85.         S_1 = 1;                 //第一个数码管
  86.         S_2 = 0;
  87.         S_3 = 0;
  88.         S_4= 0;
  89.         P0=yd[S1];             //选取带有小数点的段选码
  90.         delay_ms(5);               //延时
  91.         S_1 = 0;                        //消隐
  92.                
  93.   //十分位
  94.         S_1 = 0;
  95.         S_2 = 1;                   //取第二个数码管
  96.         S_3= 0;
  97.         S_4= 0;
  98.         P0=wd[S2];              //选取不带有小数点的段选码
  99.   delay_ms(5);
  100.         S_2 = 0;                    //消隐
  101.         
  102.   //百分位
  103.         S_1 = 0;
  104.         S_2 = 0;
  105.         S_3= 1;                      //取第三个数码管
  106.         S_4= 0;
  107.         P0=wd[S3];                //选取不带有小数点的段选码
  108.         delay_ms(5);  
  109.   S_3= 0;                       //消隐
  110.         }
  111. //===========主函数================
  112.         int main(void)
  113. {
  114.         while(1)                    //无限循环
  115.         display(Adc0832(0));//数码管显示
  116. //Adc0832(0):选择通道0,单端模式
  117. //调用Adc0832(0),SIG/DIF=0,ODD/EVEN=1,表示工作在差分输入方式,且CH0为-,CH1为+
  118. ……………………

  119. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
Keil代码与Proteus8.8仿真下载:
基于ADC0832简易数字电压表.zip (64.85 KB, 下载次数: 1070)
回复

使用道具 举报

ID:262 发表于 2022-9-20 03:43 | 显示全部楼层
634658537 发表于 2022-9-19 15:53
仿真图打不开,没用的

用Proteus8.8才能打开,亲测  看动图
51hei.gif
回复

使用道具 举报

ID:384707 发表于 2018-8-13 18:07 | 显示全部楼层
感谢分享!!
回复

使用道具 举报

ID:391034 发表于 2018-8-29 08:57 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:415754 发表于 2018-10-26 12:56 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:415754 发表于 2018-10-26 12:56 | 显示全部楼层
很棒的帖子
回复

使用道具 举报

ID:255380 发表于 2018-12-16 17:48 | 显示全部楼层
仿真文件损坏了,或者是我的版本太低打不开,再发个低版本的好吗楼主
回复

使用道具 举报

ID:255380 发表于 2018-12-16 18:08 | 显示全部楼层
P0不需要上拉电阻吗
回复

使用道具 举报

ID:446454 发表于 2018-12-19 12:58 | 显示全部楼层
只能显示内部电压,不能测量外电压
回复

使用道具 举报

ID:453260 发表于 2018-12-27 21:17 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:273035 发表于 2019-1-7 10:00 来自手机 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:519276 发表于 2019-4-23 09:41 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:532577 发表于 2019-5-10 15:49 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:556758 发表于 2019-6-6 20:45 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:568114 发表于 2019-6-20 17:18 | 显示全部楼层
下载了打不开呢?
回复

使用道具 举报

ID:282095 发表于 2019-6-20 22:45 | 显示全部楼层
好资源值得点赞
回复

使用道具 举报

ID:582170 发表于 2019-7-12 15:44 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:570366 发表于 2019-7-13 16:04 | 显示全部楼层
请问一下这是0~5的量程么
回复

使用道具 举报

ID:581629 发表于 2019-7-31 10:07 | 显示全部楼层
真棒,proteus打不开,文件大小和贴的图都不对等,咋办呀
回复

使用道具 举报

ID:348634 发表于 2019-8-8 00:05 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:623610 发表于 2019-10-29 13:26 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:645734 发表于 2019-11-20 14:30 | 显示全部楼层
感谢大佬分享
回复

使用道具 举报

ID:648592 发表于 2019-11-26 20:56 | 显示全部楼层
最后得到16位二进制数?
回复

使用道具 举报

ID:653693 发表于 2019-12-5 10:16 来自手机 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:416053 发表于 2019-12-21 17:53 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:611334 发表于 2020-1-7 10:19 | 显示全部楼层

感谢分享
回复

使用道具 举报

ID:682441 发表于 2020-4-15 19:13 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:482466 发表于 2020-4-28 01:31 | 显示全部楼层
感谢分享!!
回复

使用道具 举报

ID:748376 发表于 2020-5-10 18:23 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:750218 发表于 2020-5-12 19:11 | 显示全部楼层
垃圾
回复

使用道具 举报

ID:737928 发表于 2020-5-14 23:06 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:600952 发表于 2020-5-14 23:47 来自手机 | 显示全部楼层
想问一下ADC0832速度怎么样,可以做数字示波器吗
回复

使用道具 举报

ID:754594 发表于 2020-5-18 15:32 | 显示全部楼层
你好,如果要进行超值预警,那应该怎么做了?
回复

使用道具 举报

ID:770302 发表于 2020-6-5 13:58 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:771319 发表于 2020-6-6 17:31 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:776534 发表于 2020-6-11 18:46 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:780215 发表于 2020-6-15 18:08 | 显示全部楼层
为什么我的下载打不开仿真?
回复

使用道具 举报

ID:789552 发表于 2020-6-26 00:24 | 显示全部楼层
仿真图打不开啊
回复

使用道具 举报

ID:794680 发表于 2020-7-2 12:12 | 显示全部楼层
都是c没有asm
回复

使用道具 举报

ID:801063 发表于 2020-7-10 15:53 | 显示全部楼层
大佬们,保留两位整数,一位小数的怎么改
回复

使用道具 举报

ID:622274 发表于 2022-9-19 15:53 | 显示全部楼层
仿真图打不开,没用的
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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