打印
[活动]

EFM8BB1测评——电压测量与显示

[复制链接]
866|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 jinglixixi 于 2019-12-2 13:08 编辑

在开发板的例程中提供了A/D转换的程序,是由P1.7来输入电压信号(幅值应小于等于3.3V),但其使用的条件是将板上的J7和J9分别短接,见图1所示,并由P0.4作为TXD、P0.5 作为RXD,从而能以虚拟串口的方式来观察运行结果。
图1


为了能直观地观察测量结果,在已完成的OLED屏显示基础上稍加修改即可。
受限于2K的程序存储空间,只好将字符串显示程序修改为字符显示程序,其程序如下:

void OLED_P8x16CH(unsigned char x, y,unsigned char ch)
{
unsigned char c=0,i=0;
c =ch-32;
if(x>120){x=0;y++;}
OLED_Set_Pos(x,y);
for(i=0;i<8;i++)
OLED_WrDat(F8X16[c*16+i]);
OLED_Set_Pos(x,y+1);
for(i=0;i<8;i++)
OLED_WrDat(F8X16[c*16+i+8]);
}

实现图2显示效果的主程序为:
void main (void)
{
  uint16_t mV;
  uint8_t mVP;
  enter_DefaultMode_from_RESET();
  SCON0_TI = 1;
  OLED_Init();
  OLED_CLS();
  while (1)
  {
    // Idle the CPU until the next TIMER2 interrupt
    PCON0 |= PCON0_IDLE__IDLE;
    //Start conversion
    ADC0_startConversion();
    // Wait for conversion to complete
    while (!ADC0_isConversionComplete());
    // Convert sample to mV
    mV = ADC0_convertSampleToMillivolts(ADC0_getResult());
    OLED_P8x16CH(0,0,'A');
    OLED_P8x16CH(8,0,'D');
    OLED_P8x16CH(16,0,'C');
    OLED_P8x16CH(32,0,'T');
    OLED_P8x16CH(40,0,'E');
    OLED_P8x16CH(48,0,'S');
    OLED_P8x16CH(56,0,'T');
    OLED_P8x16CH(0,2,'U');
    OLED_P8x16CH(8,2, '=');
    mVP=mV/1000+'0';
    OLED_P8x16CH(16,2, mVP);
    mVP=mV%1000/100+'0';
    OLED_P8x16CH(24,2, mVP);
    mVP=mV%100/10+0X30;
    OLED_P8x16CH(32,2,mVP);
    mVP=mV%10+0X30;
    OLED_P8x16CH(40,2,mVP);
    OLED_P8x16CH(48,2,'M');
    OLED_P8x16CH(56,2,'V');
  }
}


图2

此时的编译提示为:
程序存储空间太小啦!


使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

463

主题

2777

帖子

38

粉丝