int data;
int shuzu[7]={0x00,0x00,0x00,0x00,0x00,0x00,0x00};
/****************限值平均滤波法****************/
/*********去最大值最小值,剩下的取平均*********/
int filter(int newdata, uchar n)
{
int max, min, sum;
uchar i;
shuzu[0]=newdata;
max=shuzu[0];
min=shuzu[0];
sum=shuzu[0];
for(i=n-1; i!=0; i--)
{
if(shuzu[i]>max)max=shuzu[i];
else if(shuzu[i]
sum+=shuzu[i];
shuzu[i]=shuzu[i-1];
}
i=n-2;
sum=sum-max-min+i/2;
sum=sum/i;
return((int)sum);
}
void main()
{uchar i;
uchar table[5];
long a;
DDRA=0X00;
PORTA=0X00;
DDRB=0X00;
PORTB=0XFF;
DDRC=0X00;
PORTC=0X00;
DDRD=0x00;
PORTD=0X00;
DDRE=0X00;
PORTE=0X00;
DDRF=0X00;
PORTF=0X00;
DDRG=0X00;
PORTG=0X00;
SEI(); //开总中断
DDRF=0XFF;
LCD1602_initial();
LCD1602_gotoXY(1,13);
LCD1602_sendbyte(iDat,5+0x30);
while(1)
{
if(PINB==0B11111110)
{
delayms(1000);
data=data+100;
a=filter(data,7);
LCD1602_gotoXY(1,3);
table[0]=a/100000;
table[1]=a%100000/10000;
table[2]=a%10000/1000;
table[3]=a%1000/100;
table[4]=a%100/10;
table[5]=a%10;
for(i=0;i<6;i++)
{
//LCD1602_sendbyte(iDat,0x30+R_dat0);
LCD1602_sendbyte(iDat,0x30+table[i]);
}
}
}
}
关键字:AVR ATMEGA 软件滤波 限值平均滤波法
引用地址:
AVR (ATMEGA)软件滤波方法程序(限值平均滤波法)
推荐阅读最新更新时间:2024-03-16 15:16
基于AVR的家庭语音控制器的软硬件实现
一、项目概述 1.1 引言 随着家居控制进入信息化,智能化的时代,将语音识别技术与嵌入式设备融合,同时兼具红外遥控功能的的家用智能设备将给人们的家居生活带来极大便利。同时此项目对残疾人的日常生活无疑亦有积极的意义。AVR32 AT32UC3A单片机可与一系列丰富的外设、存储兼容,可充分开发AVR32设备的全部潜能。以此单片机为核心,扩展语音识别输出、红外识别发射模块等,可较好的完成本项目的相关功能,在通用性方面将会有很大提高。本项目开发的家电关键词语音识别系统,可实现语音应答报时以及对基本家电的语音控制,让语音技术融入到日常生活中,给人们带来更便捷、更舒适、更健康的生活模式。 1.2 项目背景/选题动机 家居智能化是当
[单片机]
基于AVR的“三电”测量仪表设计
这个电路不同国家和地区很多人制作过,测量精度高,测量范围大,有用不同语言写的程序,本人作了一个BASCOM-AVR版本的,并增加了对电解电容器测量。 电感测量范围:0.1μH~2H 电容测量范围:1pF~2.5μF 电解电容测量范围:0.1μF~30000μF 一、电容、电感测量原理: 电路是一个由LM393(U3A)组成的LC振荡器。由单片机测量LC震荡回路的频率F1,然后控制继电器K2将标准电容C2与C1并联,测出振荡器频率F2,再用下列式子计算出电容C1电感L1的值。 这里电容器C2的容量的精确程度,基本上决定了整个测量过程的精度。应该选用稳定性好精度高的电容器,这个制作选用了1800pF的云母电容器。 上述过程可
[单片机]
ATmega88 堆栈指针
堆栈指针主要用来保存临时数据、局部变量和中断/ 子程序的返回地址。堆栈指针总是指向堆栈的顶部。要注意AVR 的堆栈是向下生长的,即新数据推入堆栈时,堆栈指针的数值将减小。 堆栈指针指向数据SRAM 堆栈区。在此聚集了子程序堆栈和中断堆栈。ATmega88 在调用子程序和使能中断之前必须定义堆栈空间,且堆栈指针必须指向高于0xFF 的地址空间。使用PUSH指令将数据推入堆栈时指针减一;而子程序或中断返回地址推入堆栈时指针将减二。使用POP 指令将数据弹出堆栈时,堆栈指针加一;而用RET 或RETI 指令从子程序或中断返回时堆栈指针加二。 AVR的堆栈指针由I/O空间中的两个8位寄存器实现。实际使用的位数与具体器件有关。请注意某些AV
[单片机]
ICCAVR位操作的宏定义
C语言位操作的功能是其比较出色的地方,现在许多微处理器都支持C编译器也可看出。汇编语言的位操作也很直观,但在某些C编译器对位操作却不能象汇编中对单个的位进行直接处理,而要转化为对一个字节的操作,在ICCAVR中这种限制充分体现出来。如要对PORTA的PORTA0置1,则应写成PORTA|=0X01;这样的位处在字节的两端还比较直观,但若是要置PORTA的第3位,第6位置1,则写出的程序可读性不强了。于是便有了一些宏操作定义#define BIT(x) (1 (x))(需要包含头文件macros.h)才可直接使用。下面给出两种置1和清0的宏定义: 置1: 1,#define set(x) (1 (x)) 2,#d
[单片机]
AVR单片机学习程序(音乐合成)
//AVR单片机学习程序 //名称:音乐合成 //硬件:AVR-ATMEGA16实验板 //修改日志: #include iom16v.h #include macros.h //-------------位拉高-------------------------------------------- #define ADC0_H PORTA|=BIT(PA0) #define ADC1_H PORTA|=BIT(PA1) #define LEDLK_H PORTA|=BIT(PA2) //流水灯选通 #define SEGLK_H PORTA|=BIT(PA3) //数码管段码选通 #define BITLK_H PORTA|
[单片机]
ATmega16的熔丝设置详解
在此写下自己对熔丝的理解,参照了一些MEGA16的PDF文档,双龙的文档,以及大家的帖子。力求易懂、全面。 下面以双龙的在系统编程软件SLISP为例具体说明我对熔丝的理解。 a intro b 低位(时钟及启动时间设置): c 时钟总表 d 高位(BOOT区设置): e 常用熔丝设置 打开运行SLISP.exe,首先记住: 1:未编程(配置熔丝检查框未打钩) 0:编程 (配置熔丝检查框打钩) 建议在配置熔丝之前先“读取配置”读出原来的设定,再自己编辑。 先了解一下M16的出厂设置。 默认设置为:内部RC振荡8MHz 6 CK + 65 ms CKSEL=0100 SUT=10 低
[单片机]
基于ATmega128的安全工器具监控系统设计
众所周知,安全是电力企业一个永恒的主题,而安全工器具的好坏,将直接影响着电力企业在生产过程中的人身和设备安全。笔者提出了一种基于AVR单片机的安全工器具监控系统的设计方案,主要是对安全工器具的离就位状态信息、有效使用期限和安全工器具柜内的温湿度状况等进行监控,可以根据实现安全工器具柜内温湿度的自动调节,能够自动记录安全工器具的相关信息。本文首先阐述了系统的总体结构,然后详细论述了系统的硬件设计和软件设计。 1 安全工器具监控系统的总体结构 1.1 系统结构 本文所设计的安全工器具监控系统主要分为下位机数据采集和上位机数据管理两个部分,两者之间通过网络进行通信。 系统首先通过数据采集板对安全工器具柜的相关量进行采集,然后将采
[单片机]
基于AVR单片机的有害气体红外感应及语音警示控制系统
0引言 利用红外感应系统感应附近有无有害气体,当红外感应系统感受到有有害气体接近时,送出持续一段时间的高电平;单片机通过开启中断,启动语音芯片,单片机通过串口通信,从上位机提取的有害气体参数提示给附近人体,并经过与安全值的比较判定当前环境是否安全。对语音芯片的使用,先将必要的文字、数字信息录制进去,放音时,通过单片机自动寻址,把实时参数读取出来。为便于以后系统改进或移植到其他系统,可设计录音、放音电路,通过切换录制不同内容。系统设计友好、方便,给人的信息也更加直接。 1系统总体设计方案 在气体浓度是现有可利用的数据的基础上,考虑了系统的衔接性和可移植性。系统总体方案见图1。 本系统分为四大模块:核心控制模块、语音电路
[工业控制]