"); //-->
****R项目范例
这是一个完整的项目文件,程序我已经全部调试完毕,现将软硬件资料全部上传,供大家参考学习。里面包含了M16的AD、EEPROM、定时器、中断、看门狗等内部资源的使用,以及菜单程序、浮点数的存放与取出和显示、液晶显示、数字滤波、按键复用等内容。项目硬件比较简单,AD0、AD1读取两路4-20ma电流信号(由RCV420转换成0-5V的电压信号),AD2读取电压信号
该系统主要完成这样一个工作,从AD0读出温度、AD1读取差压,由这两个值根据一个公式计算出流量并显示,AD2读出全压并显示。系统有4个按键,分别接在4个IO口上,这是个按键是 “设置/退出”、“向上/加1”、“向下/右移”、“确认/保存”,这些按键用于设置3路模拟量的上下限值和其他的一些系统参数。整个系统不算复杂,但程序稍微繁琐,调试较费时。PCB绘制好,正准备制版,等焊好了再发上来吧
因为赶时间,并且项目对运行时间无要求,程序中使用了较多的浮点数,导致HEX文件较大。菜单程序使用了全局变量screen_status来记录菜单的状态。
对于AD值的处理,我使用了一种自己摸索出来的滤波方法,对于AD值在正负2以内的跳动非常有效。具体如下实现:用一个全局变量last_ad来存放上一次AD转换的值,每次显示AD值时都要拿本次的AD值与last_ad做比较,若比last_ad大1,则本次值减1,大2则减2,依此类推,并把处理之后的AD值放入last_ad中作为下次比较的值。这样就可以滤出正负2以内的跳动(对于这样的跳动,平均值滤波是无能为力的,具体原因嘛,自己试验一下便知道了)
使用ATMAN****R4.5编译通过,GCC版本为3.4.1 GCC提供了较为丰富的库函数,这个程序中的AD、浮点、EEPROM等都是使用函数完成的,稍后我会贴一篇专门介绍浮点数应用的文章,敬请关注。
另外我把12864液晶的驱动单独做了一个范例文件,放在另一个帖子里了
注:仅供学习使用,请勿用于其他用途
项目文件,包括SCH、熔丝、程序
点击此处下载armok0166341.rar
项目硬件
正常画面
主菜单1
主菜单2
主菜单3
测试模式,显示AD值、电压值、电流值
项目中使用的焊接式变压器
电流转电压芯片RCV420
液晶近照
液晶近照
液晶型号LCM128645,北京青云创新科技生产,零售价120左右,建议购买成都飞宇达的,与之兼容(管脚不兼容),大概90多吧,还有几种颜色可选,北京网上中发也有买的
对于AD值的处理,我使用了一种自己摸索出来的滤波方法,对于AD值在正负2以内的跳动非常有效。具体如下实现:用一个来存放上一次AD转换的值,每次显示AD值时都要拿本次的AD值与last_ad做比较,若比last_ad大1,则本次值减1,大2则减2,依此类推,并把处理之后的AD值放入last_ad中作为下次比较的值。
我也来聊下对于AD显示数据跳动的处理吧 同样是用全局变量last_ad 但我还加多两个标志位和一个计数寄存器 标志位用来标志数据是上升还是下降 计数寄存器用来计算上升或下降时比较的次数 AD值计算出来后 与last_ad 比较 上升还是下降 标志不同的标志位 同时计数寄存器加1 当然显示数值由“升转降或 “降转升”都清计数寄存器 连续为升且计数寄存器为3次以上才能变化 否则不变 并把处理之后的AD值放入last_ad中作为下次比较的值 这样可以减少显示跳动的次数
滤波程序不会改变分辨率的,分辨率还是1,只不过更稳定了
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。