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

这是STC12模块

这是OLED模块
  测试效果

测量模块GND电压

测量模块3.3V电压

测量模块5V电压(用电压表实际测试电压为4.5V)
主程序
  
#include <STC12C5A60S2.H> #include <intrins.h> #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);               } }     其他程序在压缩包里。
  数字电压表.rar (57.6 KB)
  小白初次发帖,求大神指教。