找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3674|回复: 0
收起左侧

基于AT89C51单片机的ADC0809两路数据采集代码Proteus仿真

[复制链接]
ID:920091 发表于 2021-5-17 17:37 | 显示全部楼层 |阅读模式
调整电位器的阻值改变模拟输入电压

完成对ADC0809(模数转换器)的两个通道的输入模拟量进行转换,两个通道的结果显示各占3位,同时显示在8位数码管上(有效显示位数为6位)。两个通道的采集模拟输入电压的大小由两个滑动电位器来调节,后续也可以换成温度传感器,光线传感器,红外传感器等各种传感器,可构成测量不同变量的检测电路。

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.png

单片机源程序如下:
  1. /******************************************************************************/

  2. #include <reg51.h>
  3. #define uchar unsigned char

  4. sbit dula=P2^0;
  5. sbit wela=P2^1;

  6. sbit CLK=P1^3;
  7. sbit ST=P1^2;
  8. sbit OE=P1^0;
  9. sbit EOC=P1^1;

  10. sbit wei1=P2^1;
  11. sbit wei2=P2^2;
  12. sbit wei3=P2^3;

  13. sbit wei4=P2^5;
  14. sbit wei5=P2^6;
  15. sbit wei6=P2^7;

  16. uchar code dulatab[]={0x3f,0x06,0x5b,0x4f,0x66,
  17.                                           0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //数字编码0-9
  18. uchar code welatab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位控制字

  19. uchar count;

  20. void delay(uchar time)         //延时
  21. {
  22.         uchar i,j;
  23.         for(i=0;i<time;i++)
  24.         {
  25.                 for(j=0;j<110;j++)
  26.                 ;
  27.         }
  28. }

  29. /*********系统初始化***********/
  30. void init()
  31. {
  32. P2=0xff;
  33. EA = 1;                     //开总中断
  34. TMOD = 0x02;                //设定定时器T0工作方式  
  35. TH0=216;                    //利用T0中断产生CLK信号
  36. TL0=216;                                         //定时40us频率25K
  37. TR0=1;                      //启动定时器T0
  38. ET0=1;
  39. ST=0;
  40. OE=0;  
  41. P1=0x30;
  42. }

  43. void write1(uchar num)
  44. {

  45.         uchar i,j,k;
  46.         k=num/100;
  47.         j=num%100/10;
  48.         i=num%10;

  49.         P2=0xff;
  50.         P0=dulatab[k];
  51.         wei4=0;

  52.         delay(4);
  53.         
  54.         P2=0xff;
  55.         P0=dulatab[j];
  56.         wei5=0;

  57.         delay(4);
  58.         
  59.         P2=0xff;
  60.         P0=dulatab[i];
  61.         wei6=0;

  62.         delay(4);
  63. }

  64. void write0(uchar num)
  65. {
  66.         uchar i,j,k;
  67.         k=num/100;
  68.         j=num%100/10;
  69.         i=num%10;

  70.         P2=0xff;
  71.         P0=dulatab[k];
  72.         wei1=0;

  73.         delay(4);
  74.         
  75.         P2=0xff;
  76.         P0=dulatab[j];
  77.         wei2=0;

  78.         delay(4);
  79.         
  80.         P2=0xff;
  81.         P0=dulatab[i];
  82.         wei3=0;

  83.         delay(4);

  84. }
  85. uchar adin0()
  86. {
  87.         uchar value;
  88.         OE=0;
  89.         EOC=1;
  90.         ST=0;
  91.         P1&=0x8f;
  92.         P1|=0x30;
  93.         delay(10);
  94.         ST=1;
  95.         delay(10);
  96.         ST=0;
  97.         while(!EOC);
  98. //        EOC=0;
  99.         delay(10);
  100.         OE=1;
  101.         delay(1);
  102.         value=P3;
  103.         OE=0;
  104.         return value;
  105. }
  106. uchar adin1()
  107. {
  108.         uchar value;
  109.         OE=0;
  110.         EOC=1;
  111.         ST=0;
  112.         P1&=0x8f;
  113.         P1|=0x00;
  114.         delay(10);
  115.         ST=1;
  116.         delay(10);
  117.         ST=0;
  118.         while(!EOC);
  119. //        EOC=0;
  120.         delay(10);
  121.         OE=1;
  122.         delay(1);
  123.         value=P3;
  124.         OE=0;
  125.         return value;
  126. }
  127. void main()
  128. {
  129.         uchar in0,in1;
  130.         init();
  131.         while(1)
  132.         {
  133.                 in0=adin0();
  134.                 write0(in0);
  135.                 in1=adin1();
  136.                 write1(in1);
  137.         }               
  138. }


  139. void timer0(void) interrupt 1
  140. {
  141. CLK=~CLK;
  142. }
复制代码

所有资料51hei提供下载:
基于AT89C51的两路数据采集.zip (512.5 KB, 下载次数: 93)

评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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