51单片机+ADC0808做电压表能测试0~5v的电压误差很小 proteus仿真

[复制链接]
查看3 | 回复0 | 2021-4-25 14:23:43 | 显示全部楼层 |阅读模式
附件里有完整源码和仿真
1.jpg
单片机程序:
  1. //功能:晶振11.0592M,通过采集模拟信号,让数码管显示当前电压//

  2. #include<reg51.h>
  3. sbit duancun= P2^1 ;         //控制锁存器段选
  4. sbit weicun= P2^2;                 //控制锁存器位选
  5. sbit OE  = P1^0;  //输出使能,OE=0高阻,OE=1 ADC转换结果输出到单片机
  6. sbit ST  = P1^2;  //启动信号,上升沿复位清零ADC,下降沿启动转换,低电平保持转换
  7. sbit ALE  = P1^1;         
  8. sbit OEC  = P1^3;
  9. sbit p07  = P0^7;

  10. #define uint unsigned int
  11. #define uchar unsigned char



  12. void delay(uint x)
  13. {

  14.         while(x--);        

  15. }

  16. /**********************************
  17. 函数名:xianshi()
  18. 变量:i
  19. 功能:处理 i的数据 ,让i能够显示到数码管上

  20. ***********************************/

  21. void xianshi(uint i)        

  22.   {                  unsigned char code duan[]={0xc0,0xf9,0xa4,0xb0,
  23.                               0x99,0x92,0x82,0xf8,0x80,0x90};
  24.            unsigned char code led[]={0x00,0x01,0x02,0x04,
  25.                            0x08,0x10,0x20,0x40,0x80};
  26.            delay(50);
  27.                    duancun=1;
  28.                    P0=duan[i%10];         
  29.                    duancun=0;
  30.                    weicun=1;
  31.                    P0=led[8];
  32.                    weicun=0;
  33.                     P0=0xff;



  34.                    delay(50);
  35.                    duancun=1;
  36.                    P0=duan[i/10%10];
  37.                    duancun=0;
  38.                    weicun=1;
  39.                    P0=led[7];
  40.                    weicun=0;
  41.                     P0=0xff;

  42.                    delay(50);
  43.                    duancun=1;
  44.                    P0=duan[i/100%10]&0x7f;
  45.                
  46.                    duancun=0;
  47.                    weicun=1;
  48.                    P0=led[6];
  49.                    weicun=0;
  50.                     P0=0xff;

  51.   }

  52. void main()                           
  53. {        float qq=1.962;
  54.         while(1)        
  55.        {                    
  56.                 ALE =1;
  57.             ST =1;
  58.             delay(5);
  59.                 ALE = 0;
  60.                 ST = 0;
  61.                delay(5);
  62.                 ALE = 1;
  63.                 ST = 1;/*启动A/D转换,上升沿复位清零ADC,下降沿启动转换,低电平保持转换*/
  64.         delay(50);  
  65.         OE = 0;         //输出使能,OE=1高阻,OE=0 ADC转换结果允许输出到单片机
  66.         xianshi((P3*qq)); //因为P3的数据最大只有255,电压最大是5V,所以乘0.962就约等于500
  67.         OE = 1;               //输出使能,OE=0高阻

  68.      }

  69. }
复制代码
需要Proteus8.8及以上版本打开 AD转换c程序和proteus仿真.zip (84.22 KB, 售价: 1 工控币)

回复

使用道具 举报

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

本版积分规则