专栏名称: 电子工程专辑
电子工程专辑是中国创建较早的电子工程类网站,是《电子工程专辑》杂志的有力补充。专注为工程师提供最新技术及实用方法的专业平台。包括:16个热门技术栏目在内的,新品信息和新闻报道、专题报道以及厂商应用报告、行业重要新闻的信息速递。
目录
相关文章推荐
白鲸出海  ·  马斯克也心动的机器人玩具,2025年开启一场 ... ·  21 小时前  
阿里开发者  ·  全能增强!云原生应用网关进阶 ·  昨天  
白鲸出海  ·  消费习惯加速养成,辐射欧洲,TikTok ... ·  昨天  
企名片  ·  新质生产力|上海逆耳生物科技有限公司 ·  2 天前  
企名片  ·  新质生产力|上海逆耳生物科技有限公司 ·  2 天前  
51好读  ›  专栏  ›  电子工程专辑

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

电子工程专辑  · 公众号  ·  · 2017-11-22 14:15

正文


DIY/拆解大作战!

 “变废为宝第三季” 活动正在进行中一等奖可获得1000元京东卡!点击文末阅读原文,进入活动主帖!活动地址:https://forum.mianbaoban.cn/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);          
}
}


其他程序见原文阅读相关帖内。


阅读原文,了解【变废为宝】活动!