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