找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5611|回复: 8
打印 上一主题 下一主题
收起左侧

adc0832数字电压表proteus仿真及51单片机源程序

  [复制链接]
跳转到指定楼层
楼主
用adc0832芯片和51单片机做的电压表,里面有仿真,C源程序,可根据不同的应用场合不同,稍改程序就能改变量程,达到你的要求
adc0832数字电压表的源程序和仿真工程文件下载:
数字电压表的设计.rar (55.75 KB, 下载次数: 177)

源程序:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint  unsigned int
  5. sbit cs=P3^5;
  6. sbit clk=P3^3;
  7. sbit dati=P3^4;
  8. sbit dato=P3^4;
  9. sbit P20=P2^4;
  10. uchar dat=0x00;
  11. uchar count=0x00;
  12. uchar CH;
  13. uchar dis[]={0x01,0x02,0x03,0x04};
  14. uchar  code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  15. uchar  code tablewe[]={0xfd,0xfb,0xf7,0xf0,0xdf,0xfe};
  16. uchar adc0832(uchar CH)
  17. { uchar i,test,adval;
  18.   adval=0x00;
  19.   test=0x00;
  20.   clk=0;
  21.   dati=1;
  22.   _nop_();cs=0;        _nop_();clk=1;_nop_();
  23.   if(CH==0x00)
  24.   { clk=0;
  25.     dati=1;
  26.         _nop_();clk=1;_nop_();clk=0;                 
  27.         dati=0;
  28.         _nop_();clk=1;_nop_();}
  29.         else { clk=0;dati=1;
  30.               _nop_();
  31.                   clk=1;_nop_();clk=1;
  32.                   _nop_();clk=0;dati=1;
  33.                   _nop_();clk=1;_nop_();}
  34.         clk=0;dati=1;
  35.         for(i=0;i<8;i++)
  36.         {_nop_();adval<<=1;clk=1;
  37.         _nop_();clk=0;
  38.         if(dato) adval|=0x01;
  39.          
  40.          else adval|=0x00;        }
  41.          for(i=0;i<8;i++)
  42.          {test>>=1;
  43.          if(dato) test|=0x80;
  44.            else test|=0x00;                _nop_();
  45.            clk=1;
  46.            _nop_();
  47.            clk=0;}
  48.   if(adval==test)
  49.     dat=test;_nop_();
  50.         cs=1;
  51.         dato=1;clk=1;return dat;}
  52. void delay(void)//延时函数
  53. {uint r;
  54.   for(r=10;r<500;r++)
  55.       ;
  56.           }
  57. void convdata(uchar i)
  58. { dis[0]=i/51;
  59.   dis[1]=(i%51)*10/51;
  60.   dis[2]=((i%51)*10%51)*10/51;
  61.   }
  62. void display(void)
  63. {P2=0x02;
  64. P0=tab[dis[0]]&0x7f;
  65. delay();
  66. P2=0x04;
  67. P0=tab[dis[1]];
  68. delay();

  69. P2=0x08;

  70. P0=tab[dis[2]];
  71. delay();

  72. }
  73. void main(void)
  74. { P2=0xff;
  75.    P0=0xff;
  76.    delay();
  77.    delay();
  78.    CH=0x00;
  79.    TMOD=0x01;
  80.    TH0=15535/256;
  81.    TL0=15536%256;
  82.    IE=0x82;
  83.    TR0=1;
  84.    while(1)
  85.    {dat=adc0832(CH);
  86.     convdata(dat);
  87.         display();
  88.         }}
  89. void timero(void) interrupt 1
  90. {  TMOD=0x01;
  91.    TMOD=0x01;
  92.    TH0=15535/256;
  93.    TL0=15536%256;
  94.    IE=0x82;
  95.    TR0=1;
  96.    count++;
  97.    if(count==0x01)
  98.    {count=0x00;dat=adc0832(CH);}}
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:99130 发表于 2017-5-5 00:01 来自手机 | 只看该作者
范围多大
回复

使用道具 举报

板凳
ID:362243 发表于 2018-6-30 13:34 | 只看该作者
很不错,很简易的帖子。
回复

使用道具 举报

地板
ID:308419 发表于 2018-7-10 13:17 | 只看该作者
很不错的帖子,赞一个
回复

使用道具 举报

5#
ID:390650 发表于 2018-9-17 19:31 | 只看该作者
不错  试验很成功
回复

使用道具 举报

6#
ID:446454 发表于 2018-12-19 13:02 | 只看该作者
大佬我想问一下,这个能测量外电压吗
回复

使用道具 举报

7#
ID:445903 发表于 2018-12-20 12:39 | 只看该作者
点一个站 刚谢分享
回复

使用道具 举报

8#
ID:435674 发表于 2018-12-24 14:12 | 只看该作者
怎么检测是AC还是DC
回复

使用道具 举报

9#
ID:498145 发表于 2019-5-2 19:16 | 只看该作者
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int
sbit cs=P3^5;
sbit clk=P3^3;
sbit dati=P3^4;
sbit dato=P3^4;
sbit P20=P2^4;
uchar dat=0x00;
uchar count=0x00;
uchar CH;
uchar dis[]={0x01,0x02,0x03,0x04};
uchar  code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar  code tablewe[]={0xfd,0xfb,0xf7,0xf0,0xdf,0xfe};
uchar adc0832(uchar CH)
{ uchar i,test,adval;
  adval=0x00;
  test=0x00;
  clk=0;
  dati=1;
  _nop_();cs=0;        _nop_();clk=1;_nop_();
  if(CH==0x00)
  { clk=0;
    dati=1;
        _nop_();clk=1;_nop_();clk=0;                 
        dati=0;
        _nop_();clk=1;_nop_();}
        else { clk=0;dati=1;
              _nop_();
                  clk=1;_nop_();clk=1;
                  _nop_();clk=0;dati=1;
                  _nop_();clk=1;_nop_();}
        clk=0;dati=1;
        for(i=0;i<8;i++)
        {_nop_();adval<<=1;clk=1;
        _nop_();clk=0;
        if(dato) adval|=0x01;
         
         else adval|=0x00;        }
         for(i=0;i<8;i++)
         {test>>=1;
         if(dato) test|=0x80;
           else test|=0x00;                _nop_();
           clk=1;
           _nop_();
           clk=0;}
  if(adval==test)
    dat=test;_nop_();
        cs=1;
        dato=1;clk=1;return dat;}
void delay(void)//延时函数
{uint r;
  for(r=10;r<500;r++)
      ;
          }
void convdata(uchar i)
{ dis[0]=i/51;
  dis[1]=(i%51)*10/51;
  dis[2]=((i%51)*10%51)*10/51;
  }
void display(void)
{P2=0x02;
P0=tab[dis[0]]&0x7f;
delay();
P2=0x04;
P0=tab[dis[1]];
delay();

P2=0x08;

P0=tab[dis[2]];
delay();

}
void main(void)
{ P2=0xff;
   P0=0xff;
   delay();
   delay();
   CH=0x00;
   TMOD=0x01;
   TH0=15535/256;
   TL0=15536%256;
   IE=0x82;
   TR0=1;
   while(1)
   {dat=adc0832(CH);
    convdata(dat);
        display();
        }}
void timero(void) interrupt 1
{  TMOD=0x01;
   TMOD=0x01;
   TH0=15535/256;
   TL0=15536%256;
   IE=0x82;
   TR0=1;
   count++;
   if(count==0x01)
   {count=0x00;dat=adc0832(CH);}}
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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