[活动] EFM8BB1测评——电压测量与显示

[复制链接]
1072|0
 楼主| jinglixixi 发表于 2019-12-2 13:04 | 显示全部楼层 |阅读模式
本帖最后由 jinglixixi 于 2019-12-2 13:08 编辑

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


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

  1. void OLED_P8x16CH(unsigned char x, y,unsigned char ch)
  2. {
  3. unsigned char c=0,i=0;
  4. c =ch-32;
  5. if(x>120){x=0;y++;}
  6. OLED_Set_Pos(x,y);
  7. for(i=0;i<8;i++)
  8. OLED_WrDat(F8X16[c*16+i]);
  9. OLED_Set_Pos(x,y+1);
  10. for(i=0;i<8;i++)
  11. OLED_WrDat(F8X16[c*16+i+8]);
  12. }

实现图2显示效果的主程序为:
  1. void main (void)
  2. {
  3.   uint16_t mV;
  4.   uint8_t mVP;
  5.   enter_DefaultMode_from_RESET();
  6.   SCON0_TI = 1;
  7.   OLED_Init();
  8.   OLED_CLS();
  9.   while (1)
  10.   {
  11.     // Idle the CPU until the next TIMER2 interrupt
  12.     PCON0 |= PCON0_IDLE__IDLE;
  13.     //Start conversion
  14.     ADC0_startConversion();
  15.     // Wait for conversion to complete
  16.     while (!ADC0_isConversionComplete());
  17.     // Convert sample to mV
  18.     mV = ADC0_convertSampleToMillivolts(ADC0_getResult());
  19.     OLED_P8x16CH(0,0,'A');
  20.     OLED_P8x16CH(8,0,'D');
  21.     OLED_P8x16CH(16,0,'C');
  22.     OLED_P8x16CH(32,0,'T');
  23.     OLED_P8x16CH(40,0,'E');
  24.     OLED_P8x16CH(48,0,'S');
  25.     OLED_P8x16CH(56,0,'T');
  26.     OLED_P8x16CH(0,2,'U');
  27.     OLED_P8x16CH(8,2, '=');
  28.     mVP=mV/1000+'0';
  29.     OLED_P8x16CH(16,2, mVP);
  30.     mVP=mV%1000/100+'0';
  31.     OLED_P8x16CH(24,2, mVP);
  32.     mVP=mV%100/10+0X30;
  33.     OLED_P8x16CH(32,2,mVP);
  34.     mVP=mV%10+0X30;
  35.     OLED_P8x16CH(40,2,mVP);
  36.     OLED_P8x16CH(48,2,'M');
  37.     OLED_P8x16CH(56,2,'V');
  38.   }
  39. }


图2

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


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

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

本版积分规则

521

主题

2949

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部