3
收藏
微博
微信
复制链接

51单片机测量电压及电流,ADC0809,asc712

提问于
2024-12-07 05:37

仿真原理图如下

仿真电路图

仿真电路图

单片机源程序如下:
  1. #include
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar code table[]={ ~0x3F,/*0*/
  5.         ~0x06,/*1*/
  6.         ~0x5B,/*2*/
  7.         ~0x4F,/*3*/
  8.         ~0x66,/*4*/
  9.         ~0x6D,/*5*/
  10.         ~0x7D,/*6*/
  11.         ~0x07,/*7*/
  12.         ~0x7F,/*8*/
  13.        ~0x6F,/*9*/
  14. };
  15. uchar Tcount;
  16. uint wei3,wei2,wei1,wei0,num,wei4,wei5,wei6,wei7;
  17. bit timerflag,ADflag;
  18. sbit AD_end        =P3^2;
  19. sbit OE=P3^3;
  20. sbit ST=P3^4;
  21. sbit channel=P3^5;
  22. void AD_INT() interrupt 0
  23. {ADflag=1;
  24. AD_end=1;
  25. }
  26. void T0_int()interrupt 1
  27. {TL0|=0xb0;
  28. TH0=0x3c;
  29.    if(--Tcount==0)
  30.      {Tcount=20;
  31.       timerflag=1;}
  32.                   
  33. }
  34. void delay(uint z)
  35. {uint x,y;
  36. for(x=z;x>0;x--)
  37.     for(y=110;y>0;y--);
  38. }
  39. void main()
  40. {
  41. channel = 0;
  42. Tcount=20;
  43. TMOD=0x01;
  44. TL0=0xb0;
  45. TH0=0x3c;
  46. IT0=1;
  47. TR0=1;
  48. ET0=1;
  49. EX0=1;
  50. EA=1;

  51. while(1)
  52. {
  53.                         

  54.   if(timerflag==1)
  55.     {timerflag=0;
  56.      ADflag=0;
  57.      ST=1;
  58.            ST=0;
  59.         
  60.       while(!ADflag);
  61.          {
  62.                                         if(channel == 0)
  63.                                         {
  64.                                                 OE=1;
  65.                                                 num=P2*20-2500;                                       
  66.                                                 wei0=num/1000;
  67.                                                 wei1=num%1000/100;
  68.                                                 wei2=num%100/10;
  69.                                                 wei3=num%10;
  70.                                         }
  71.                                         else
  72.                                         {
  73.                                                 OE=1;
  74.                                                 num=P2*20/100*51;                                       
  75.                                                 wei4=num/1000;
  76.                                                 wei5=num%1000/100;
  77.                                                 wei6=num%100/10;
  78.                                                 wei7=num%10;                                
  79.                                         }

  80.           OE=0;
  81.           ADflag=0;
  82.                                         channel = ~channel;
  83.                                  }
  84.     }
  85.         
  86.                         //显示电流
  87.         P1=0x01;
  88.   P0=table[wei0];
  89.   delay(1);
  90.   P1=0x02;
  91.   P0=table[wei1]&0X7F;
  92.   delay(1);
  93.   P1=        0X04;        
  94.   P0=table[wei2];
  95.   delay(1);
  96. //  P1=0x08;
  97. //  P0=table[wei3];
  98. //  delay(1);               
  99.                
  100.         //显示电压        
  101.         P1=0x10;
  102.   P0=table[wei4];
  103.   delay(1);
  104.   P1=0x20;
  105.   P0=table[wei5];
  106.   delay(1);
  107.   P1=0x40;
  108.   P0=table[wei6]&0x7f;
  109.   delay(1);
  110.   P1=0x80;
  111.   P0=table[wei7];
  112.   delay(1);
  113. }
  114. }

  115.   


压缩包文件
2021-1-7 14:43 上传
点击文件名下载附件

收藏 38 0 3
粉丝
0
关注
0
主题
2
好东西,是需要的东西,谢了!
0

回答于 · 2024-12-08 04:18

粉丝
1
关注
0
主题
7
我想请问一下怎么测量两点之间的电压,因为用您的电路貌似只能测出电位。求赐教。
0

回答于 · 2024-12-08 15:49

粉丝
0
关注
0
主题
8
谢大哥,不错的好东西
0

回答于 · 2024-12-09 12:13