分享

【变废为宝DIY】自制一个OLED简易数字电压表(附程序)

 bxud 2017-11-22

DIY/拆解大作战!

 “变废为宝第三季” 活动正在进行中一等奖可获得1000元京东卡!点击文末阅读原文,进入活动主帖!活动地址:https://forum./t/diy/59670。

本项制作直接利用STC12C5A60S2单片机自带的AD转换器。能够测试0-5V电压的数字电压表表头,并有OLED模块显示数值。正好手头有这两个小东西,寻思着可以做个什么小东西玩玩。



这是STC12模块

这是OLED模块

测试效果

测量模块GND电压

测量模块3.3V电压

测量模块5V电压(用电压表实际测试电压为4.5V)


主程序


#include
#include
#include 'oled.h'

float V = 0;
u32  L = 0;
u8 d[5];

/*********************************************************************************************

/*********************************************************************************************/
u32 Read(u32 CHA)
{
    u8 AD_FLAG = 0;

/**************************************************************************/
    
    CHA &= 0x07;                         
    ADC_CONTR = 0x40;             
    _nop_();
    ADC_CONTR |= CHA;                
    _nop_();
    ADC_CONTR |= 0x80;             
    delay_ms(3);                     

/****************************************************************************/
    ADC_CONTR |= 0x08;     
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    while(AD_FLAG == 0)         
    {
        AD_FLAG = (ADC_CONTR & 0x10);     
    }
    ADC_CONTR &= 0xe7;                 
    return(ADC_RES*4+ADC_RESL);         
}

/*********************************************************************************************/

/*********************************************************************************************

/*********************************************************************************************/
void transfer(void)
{
      V = Read(0x00)*4.321;             
      L=V;
      d[1] = L / 1000;
      L = L % 1000;
      d[2] = L / 100;
      L = L % 100;
      d[3] = L / 10;
      d[4] = L % 10;
}
/*********************************************************************************************/


void main(void)
{
      AUXR = 0x00;
      P1M0 = 0xff;  
      P1M1 = 0x00;
      P1ASF = 0xff;

        OLED_Init();            
    OLED_Clear();     
  OLED_Clear();
    
    OLED_ShowCHinese(18,0,0);
    OLED_ShowCHinese(36,0,1);
  OLED_ShowCHinese(54,0,2);
    OLED_ShowCHinese(72,0,3);
    OLED_ShowCHinese(90,0,4);

while (1)
{            
    transfer();
        
    OLED_ShowCHinese(5,4,5);
    OLED_ShowCHinese(23,4,6);
    OLED_ShowCHinese(41,4,7);
    OLED_ShowChar(59,4,58);      
    OLED_ShowNum(67,4,d[0],1,16);
    OLED_ShowNum(75,4,d[1],1,16);    
    OLED_ShowChar(83,4,46);   
    OLED_ShowNum(91,4,d[2],1,16);
    OLED_ShowNum(99,4,d[3],1,16);
    OLED_ShowNum(107,4,d[4],1,16);
    OLED_ShowChar(115,4,86);
            
    OLED_ShowString(20,6,'2017/11/21');  
    
  delay_ms(500);          
}
}


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多