找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4756|回复: 1
收起左侧

单片机在LCD屏上画幅频特性曲线的方法

[复制链接]
ID:75926 发表于 2015-4-1 22:43 | 显示全部楼层 |阅读模式
        单片机画实时曲线的实现
     如果我们要画实时曲线也就是随着时间的不同曲线的值就会有变化。
举例我们将ADC采集的0-5V电压值在320*240的屏幕上画曲线。
     我们使用打点计数法实现。
我们可以开启一个定时器,如果要求500Ms画一个点,那么我们就将定时器设置为500ms中断产生此时在相应的位置画点。
      如果不考虑其他文字说明,坐标系就是屏的横竖长度,我们可以模拟彩屏的320就是X轴也就是时间轴,定时器中断处理函数内会有一个U16的计数量加到320清零,从头开始画。屏的240就是电压值的转换体现,如果最大值239是5V,0是0V,如果我们采集到一个2V的电压值,那么他对应的位置是(240/5)*2=96,我们调用画点函数Draw_line(t,96,Black)就可以画出该点了,我们将96换成ADc_value的值,就可以简单的实现画曲线了。
复杂点我们可以建立坐标系指示,还可以添加文子说明,但是相应的320和240就会变小,就要重新里算了。
      但是对于画幅頻特性曲线,就要要求幅度是跟随频率的不同而增大的,频率是时间的倒数,时间增大,频率反而减小。这种曲线的实现待研究。




回复

使用道具 举报

ID:75926 发表于 2015-4-1 22:43 | 显示全部楼层
    上一文中研究,在LCD上画实时曲线已经实现了,现在想改成幅频特性曲线,经过查资料实现思路如下

幅频特性曲线是以横轴为频率,纵轴为幅度,这里可认为是电压值。如果是实时曲线,1MS采集一个值将它显示在屏幕上,实际上它的频率已固定就是1000HZ,也就是1s中采集1000次,然后计算出1000次数据的平均值这是他在频率为1000HZ时的幅度值。

        如果我们通过更改变量实现在每1S内采集的次数不相等,不就实现频率值的变化了吗。

首先,我们定义个变量u8 FRE_NUM;FRE_NUM=100,然后我们编写一个函数,GET_ADC_VALUE(u8 channel,u8 times,u8 delayalue);该函数中channel代表ADC采集的通道,times代表采集的次数,delay代表1/times的延时单位为毫秒。举个例子 1s中采集20次 调用GET_ADC_VALUE(u8 channel,20,50);及频率为20HZ,

制作一个表格分别显示10HZ,20HZ,50HZ,100HZ,500HZ下的幅度值。
value=GET_ADC_VALUE(0,10,100);

draw_point(100,value,color);
value=GET_ADC_VALUE(0,20,100);

draw_point(120,value,color);

value=GET_ADC_VALUE(0,50,100);

draw_point(140,value,color);
value=GET_ADC_VALUE(0,100,100);

draw_point(160,value,color);
value=GET_ADC_VALUE(0,500,100);

draw_point(180,value,color);

这样便可以实现幅频特性曲线的画法了。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表