本帖最后由 jinglixixi 于 2022-11-22 22:04 编辑
#申请原创#
新定义NBK-RD8x3x 开发板内部具有ADC数据采集功能,将它与LCD屏相结合就可进行电压测量。 以检测通道2的电压为例,其程序如下:void main(void)
{
unsigned int ADCValue = 0x0000;
P0CON = 0xFF;
P0PH = 0x00;
P1CON = 0x00;
P1PH = 0x00;
P2CON = 0xFF;
P2PH = 0x00;
P3CON = 0xFF;
P3PH = 0x00;
P4CON = 0xFF;
P4PH = 0x01;
P5CON = 0xFF;
P5PH = 0x00;
GPIO_Init(GPIO0, GPIO_PIN_4 | GPIO_PIN_5 |GPIO_PIN_6, GPIO_MODE_OUT_PP);
GPIO_Init(GPIO2, GPIO_PIN_2, GPIO_MODE_OUT_PP);
GPIO_Init(GPIO5, GPIO_PIN_3, GPIO_MODE_OUT_PP);
GPIO_Init(GPIO4, GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5, GPIO_MODE_OUT_PP);
Delay(100);
Lcd_Init();
LCD_Clear(RED);
BACK_COLOR=RED;
LCD_Picturea();
LCD_ShowChinese(80,10,0,16,YELLOW);
LCD_ShowChinese(96,10,1,16,YELLOW);
LCD_ShowChar(112,10,':',0,YELLOW);
LCD_ShowChinese(80,30,2,16,YELLOW);
LCD_ShowChinese(96,30,3,16,YELLOW);
LCD_ShowChar(112,30,':',0,YELLOW);
LCD_ShowChinese(80,50,4,16,YELLOW);
LCD_ShowChinese(96,50,5,16,YELLOW);
LCD_ShowChar(112,50,':',0,YELLOW);
SC_ADC_Init();
while(1)
{
ADCValue = ADC_GetConversionAverageValue(ADC_SamplesNum_EightTimes);
LCD_ShowNum(120,10,ADCValue,4,YELLOW);
Delay(1000);
}
}
经程序的编译与下载,其满量程的采集结果如图1所示。 图1 满量程检测 此外,在配置NTC热敏电阻的情况下,还可进行温度的检测。由于手头没有相应的功能模块,只好临时搭建了一个功能板,其这个硬件构成如图2所示。 图2 硬件构成 使用NTC热敏电阻进行温度检测的方法有2种,一是采用查表法,另一个是采用公式法。 这里采用的是一种混合的处理方式,即基于关键点的差值处理法。因为查表法比较专用存储空间,而公式法则需要。 在电压检测电路的基础上,实现温度检测的主要程序为: while(1)
{
ADCValue = ADC_GetConversionAverageValue(ADC_SamplesNum_EightTimes);
u=5.0*ADCValue/4095;
...
if((u<=1.922)&&(u>1.435)) u=20+(1.922-u)/0.048;
if((u<=1.435)&&(u>1.050)) u=30+(1.435-u)/0.038;
...
sd=u;
LCD_ShowNum(120,10,sd,4,YELLOW);
Delay(1000);
}
在室温情况下,使用微控器的检测值如图3所示,而使用开发板所检测的结果则如图4所示。 图3 室温检测值 图4 实际检测值
在测量体感温度时,微控器的检测值见图5所示,而开发板的检测结果则如图6所示。 图5体温检测值 图6实际检测值
通过比对,其检测结果基本相近,是可以采用的。
|