实验6 ADC和曲线控件实验
1. 实验目的
使用串口屏自带的AD输入引脚采样温度模块的电压,计算出温度,显示当前温度并绘制温度曲线。
2. 页面设计
(1)浮点数控件,显示当前温度值
(2)曲线控件,显示曲线,温度的变化
(3)adc控件,可以获取IO电压值
(4)定时器,间隔一秒,读取AD电压并计算温度,显示曲线
(5)数组控件,存放 电阻-温度对应表,计算温度时使用
选中控件,可以在右侧属性栏查看控件的各个属性。详细属性说明可参考 第四章 控件的介绍和用法。
G系列串口屏支持3路AD输入。本实验串口屏型号为SANY-QV-G28-01-R,只用到了1路AD。S系列串口屏可以支持更多路的AD输入。
曲线控件属性配置时,注意通道点数pCount的正确设置。Width >= xStep * pCount,否则曲线显示可能达不到预期的效果。
3. 串口屏协议处理
本实验演示ADC控件和曲线控件的用法。无通信协议。部分脚本代码如下:
页面的加载事件
//进入这个页面的时候,会执行一次加载页面事件
//温度表初始化
int i;
float RT_Tab[161] =
{
366.4286,344.5753,324.1796,305.1344,287.3413,270.7097,255.1561,240.6035,226.9810,214.2231, // -50℃~ -41℃
202.2693,191.0637,180.5546,170.6944,161.4387,152.7468,144.5807,136.9052,129.6879,122.8985, // -40℃~ -31℃
116.5089,110.4932,104.8272, 99.4883, 94.4558, 89.7101, 85.2332, 81.0082, 77.0194, 73.2523, // -30℃~ -21℃
69.6931, 66.3291, 63.1485, 60.1402, 57.2939, 54.5998, 52.0490, 49.6330, 47.3439, 45.1743, // -20℃~ -11℃
43.1172, 41.1663, 39.3153, 37.5587, 35.8910, 34.3074, 32.8029, 31.3734, 30.0145, 28.7225, // -10℃~ - 1℃
27.4936, 26.3245, 25.2119, 24.1527, 23.1442, 22.1835, 21.2682, 20.3959, 19.5644, 18.7714, // 0℃~ 9℃
18.0151, 17.2935, 16.6048, 15.9475, 15.3198, 14.7203, 14.1475, 13.6003, 13.0772, 12.5771, // 10℃~ 19℃
12.0988, 11.6413, 11.2037, 10.7848, 10.3839, 10.0000, 9.6324, 9.2802, 8.9428, 8.6195, // 20℃~ 29℃
8.3096, 8.0124, 7.7275, 7.4541, 7.1919, 6.9403, 6.6987, 6.4669, 6.2442, 6.0304, // 30℃~ 39℃
5.8250, 5.6276, 5.4380, 5.2557, 5.0804, 4.9119, 4.7498, 4.5939, 4.4439, 4.2995, // 40℃~ 49℃
4.1605, 4.0268, 3.8980, 3.7739, 3.6544, 3.5393, 3.4284, 3.3215, 3.2185, 3.1191, // 50℃~ 59℃
3.0234, 2.9310, 2.8419, 2.7559, 2.6729, 2.5929, 2.5156, 2.4410, 2.3690, 2.2994, // 60℃~ 69℃
2.2322, 2.1673, 2.1046, 2.0440, 1.9854, 1.9288, 1.8740, 1.8211, 1.7699, 1.7204, // 70℃~ 79℃
1.6725, 1.6262, 1.5813, 1.5379, 1.4959, 1.4553, 1.4159, 1.3778, 1.3408, 1.3051, // 80℃~ 89℃
1.2704, 1.2368, 1.2043, 1.1728, 1.1422, 1.1126, 1.0839, 1.0560, 1.0290, 1.0028, // 90℃~ 99℃
0.9774, 0.9527, 0.9288, 0.9055, 0.8830, 0.8611, 0.8399, 0.8193, 0.7992, 0.7798, // 100℃~ 109℃
0.7609 // 110℃
};
//温度对应表,初始化
for(i=0;i<161;i++)
{
T_tab.valfs[i] = RT_Tab[i];
}
页面加载事件,仅仅在进入页面的时候会执行脚本代码。本实验只有1页,页面加载事件只在上电的时候执行一次,所以可以在这里做一些初始化,这里是初始化 电阻-温度表的数组。
定时器事件
int i=0;
float R_value; //采集到的当前热敏电阻的电阻值
float Temp; //计算得到的温度值
R_value = 3.0/(3300.0/adc0.val-1); //计算获得RT的电阻值①
//查表获取温度值
for(i=0;i<161;i++)
{
if((T_tab.valfs[i]>=R_value) &&(T_tab.valfs[i+1]<=R_value))
{
Temp = i + (R_value - T_tab.valfs[i+1])/(T_tab.valfs[i] - T_tab.valfs[i-1]) - 50;
}
}
numf3.valf = Temp; //显示当前温度
curvedLine2.ch1Val = Temp; //曲线控件添加一个点②
①adc0.val是AD引脚的电压值,单位mV。这里是计算RT电阻值
②曲线控件添加一个点,注意曲线控件的数值类型和赋值的类型应该一致。
4. 下载验证
编译成功后,点击下载按钮,选择正确的端口号和波特率,下载到串口屏。可以看到显示如下显示: