本帖最后由 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
此时的编译提示为: 程序存储空间太小啦!
|