找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4426|回复: 2
收起左侧

基于51单片机的模拟数据采集器仿真与程序

[复制链接]
ID:273800 发表于 2018-1-9 15:25 | 显示全部楼层 |阅读模式
模拟数据采集器仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png 0.png

单片机源程序如下:
  1. /*模拟数据采集器*/

  2. #include<reg51.h>
  3. #include<intrins.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. #define input P1
  7. #define TT P0
  8. #define         c  0.01 //设置一阶惯性数字滤波值//
  9. sbit START=P3^4;
  10. sbit CLK=P3^5;
  11. sbit OE=P3^6;
  12. sbit EOC=P3^7;
  13. sbit E=P3^0;
  14. sbit AA=P3^1;
  15. sbit BB=P3^2;
  16. sbit CC=P3^3;
  17. sbit K1=P2^4;
  18. sbit K2=P2^5;
  19. sbit P07=P0^7;
  20. uchar t1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};           //数码管0-9//
  21. uchar a,b;
  22. void delay1();

  23. void display(uint temp1);
  24. /*******延时1*******/
  25. void delay1(void)
  26. {
  27.   for(a=248;a>0;a--);
  28.     for(b=248;b>0;b--);
  29. }
  30. /*******延时2*******/
  31. void delay2()
  32. {
  33.   int i;
  34.   for(i=1000;i>0;i--);
  35. }
  36. /*void delay3()
  37. {
  38. int j;
  39. for(j=5000;j>0;j--);
  40. }
  41. /***延时3*****/

  42. /******A/D转换程序*******/

  43. uchar AD()
  44. {

  45. uchar date;
  46. if(!EOC)
  47. {
  48. START=1;
  49. START=0;
  50. }
  51. while(!EOC);
  52. START=1;
  53. START=0;
  54. date=input;
  55. return date;
  56. }
  57. char date;
  58. char new_date;

  59. char filter()
  60. {
  61. char new_date;

  62. return 0.01*date+(1-0.01)*new_date;
  63. }

  64. /*******加地址,选择模拟通道*******/
  65. void get_add(uchar add)
  66. {
  67.   CC=add/4;
  68.   BB=add%4/2;
  69.   AA=add%2;
  70.   delay2();
  71. }
  72. /*******动态扫描程序*******/
  73. void display(uint temp1)
  74. {
  75.   uint aa,bb,cc,dd;

  76.   aa=temp1%10;
  77.   temp1/=10;
  78.   bb=temp1%10;
  79.   temp1/=10;
  80.   cc=temp1%10;
  81.   dd=temp1/10;

  82.   P2=0xf1;
  83.   P0=t1[dd];
  84.    delay2();
  85.                      

  86.   P2=0xf2;
  87.   P0=t1[cc];
  88.     delay2();
  89.    

  90.   P2=0xf4;
  91.   P0=t1[bb]&0X7F;
  92.    delay2();
  93.    

  94.   P2=0xf8;
  95.   P0=t1[aa];
  96.    delay2();
  97.    
  98. }
  99. /*******电压显示转温度显示函数*******/
  100. void c_u(float aa)
  101. {
  102.    uchar i;
  103.   aa=aa*15.4*5*10/255;
  104.   for(i=0;i<10;i++)
  105.   display(aa);
  106. }
  107. /*******主程序*******/
  108. void main(void)
  109. {
  110.   uchar rr,tt;
  111.   bit  temp=0;                                       
  112.   TMOD=0x02;    //定时器0工作在2模式
  113.   TR0=1;// 定时器0启动控制位
  114.   ET0=1; //定时器0的中断允许开关
  115.   IT0=1; //外部中断0触发方式选择位,为1边沿触发
  116.   EX0=1;//允许外部中断0申请中断
  117.   EA=1;
  118.   tt=0;
  119.   while(1)
  120.   {
  121.    if(!K2)       
  122.    {  
  123.      while(!K2);
  124.          temp=~temp;
  125.          }
  126.   if(temp)
  127.   {
  128.     get_add(tt);
  129.         AD();
  130.         rr=input;
  131.         filter();//一阶惯性数字滤波
  132.         c_u(rr);
  133.    if(!K1)       
  134.    {  
  135.      while(!K1);
  136.      tt++;
  137.      tt=tt%8;
  138.         }
  139.         }
  140.         if(!temp)
  141. ……………………

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

所有资料51hei提供下载:
模拟数据采集器.zip (87.13 KB, 下载次数: 104)

评分

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

查看全部评分

回复

使用道具 举报

ID:1113966 发表于 2024-3-23 23:34 | 显示全部楼层
请问下面那个计数器是用来干什么的
回复

使用道具 举报

ID:1113966 发表于 2024-3-23 23:34 | 显示全部楼层
楼主可以讲解一下这个电路吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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