|
- //引入头文件*********************************************************
- #include "delay.h"
- #include "delay.c"
- #include "pic1684.h"
- //输入定义***********************************************************
- #define Key RA0 //按键输入
- #define InRc RA1 //测量输入
- //输出定义***********************************************************
- #define RcSu TRISA1 //输出设置
- //公用变量***********************************************************
- unsigned char cycle = 0; //计时母数
- unsigned char coune = 0; //时间计数
- //*******************************************************************
- //函数名称:port_init();
- //输入参数:无
- //输出参数:无
- //功能描述:端口设置
- //建造日期:2008.07.08
- //*******************************************************************
- void PortInit(void)
- {
- PORTA = 0x00; //
- PORTB = 0x00; //
- TRISA = 0x01; //A 口设置
- TRISB = 0x00; //B 口设置
- }
- //*******************************************************************
- //函数名称:IdsInit();
- //输入参数:无
- //输出参数:无
- //功能描述:中断设置
- //建造日期:2008.07.08
- //*******************************************************************
- void IdsInit(void)
- {
- OPTION = 0x87; //分频因子
- TMR0 = 0x3d; //定时初值
- T0IE = 1; //开启定时
- GIE = 1; //准许中断
- }
- //*******************************************************************
- //函数名称:DischargeOut();
- //输入参数:无
- //输出参数:无
- //功能描述:电容放电
- //建造日期:2008.07.08
- //*******************************************************************
- void DischargeOut(void)
- {
- InRc = 0; //置低电平
- RcSu = 0; //开始放电
- DelayMs(1); //放电时间
- }
- //*******************************************************************
- //函数名称:SurveyRc();
- //输入参数:无
- //输出参数:充电时间
- //功能描述:测量充电时间
- //建造日期:2008.07.08
- //*******************************************************************
- unsigned char SurveyRc(void)
- {
- unsigned char count = 0; //时间计数
- DischargeOut(); //电容放电
- RcSu = 1; //输入设置
- while (!InRc)
- {
- count++; //开始计时
- if (count == 100) break; //最大限时
- }
- return count; //返回时间
- }
- //*******************************************************************
- //函数名称:DataAdd(*buffer, size);
- //输入参数:缓冲区首址, 大小
- //输出参数:数据总和
- //功能描述:缓冲区所有数据相加
- //建造日期:2008.07.08
- //*******************************************************************
- unsigned int DataAdd(unsigned char *buffer, unsigned char size)
- {
- unsigned int add;
- unsigned char i;
- add = 0; //数据清零
- for (i = 0; i < size; i++)
- {
- add += buffer[i]; //数据相加
- }
- return add; //返回总和
- }
- //*******************************************************************
- //函数名称:DataMax(*buffer, size);
- //输入参数:缓冲区首址, 大小
- //输出参数:数据最大值
- //功能描述:选出缓冲区最大值
- //建造日期:2008.07.08
- //*******************************************************************
- unsigned char DataMax(unsigned char *buffer, unsigned char size)
- {
- unsigned char max, i;
- max = buffer[0]; //假设最大
- for (i = 1; i < size; i++)
- {
- if (max < buffer[i]) max = buffer[i]; //对比最大
- }
- return max; //最大数据
- }
- //*******************************************************************
- //函数名称:DataMin(*buffer, size);
- //输入参数:缓冲区首址, 大小
- //输出参数:数据最小大值
- //功能描述:选出缓冲区最小值
- //建造日期:2008.07.08
- //*******************************************************************
- unsigned char DataMin(unsigned char *buffer, unsigned char size)
- {
- unsigned char min, i;
- min = buffer[0]; //假设最小
- for (i = 1; i < size; i++)
- {
- if (min > buffer[i]) min = buffer[i]; //对比最小
- }
- return min; //最小数据
- }
- //*******************************************************************
- //函数名称:DataEqually(idend, isor);
- //输入参数:被除数,除数
- //输出参数:平均值
- //功能描述:使所数据相等
- //建造日期:2008.07.08
- //*******************************************************************
- unsigned char DataEqually(unsigned int idend, unsigned char isor)
- {
- return (idend / isor); //数据平均
- }
- //*******************************************************************
- //函数名称:FilterData();
- //输入参数:无
- //输出参数:平均值
- //功能描述:取样平均滤波
- //建造日期:2008.07.08
- //*******************************************************************
- unsigned char FilterData(void)
- {
- unsigned char i, max, min, data[10];
- unsigned int sum;
- for (i = 0; i < 10; i++) data[i] = SurveyRc(); //收集数据
- sum = DataAdd(data, 10); //数据相加
- max = DataMax(data, 10); //取最大值
- min = DataMin(data, 10); //取最小值
- return (DataEqually((sum - max - min), 8)); //取平均值
- }
- //*******************************************************************
- //函数名称:MonitorRC();
- //输入参数:无
- //输出参数:无
- //功能描述:监测电位器
- //建造日期:2008.07.08
- //*******************************************************************
- void MonitorRC(void)
- {
- static unsigned char value[8];
- unsigned char i, update;
- update = DataEqually((DataAdd(value, 8)), 8); //数据平均
- if (update != cycle) //数据变动
- {
- cycle = update; //更新周期
- coune = 0; //计数清零
- }
- for (i = 0; i < 7; i++) value[i] = value[i + 1]; //数据左移
- value[7] = FilterData(); //采集数据
- }
- //*******************************************************************
- //函数名称:TimeInt();
- //输入参数:无
- //输出参数:无
- //功能描述:定时中断服务
- //建造日期:2008.07.08
- //*******************************************************************
- void interrupt TimeInt(void)
- {
- coune++; //周期递增
- if (coune == cycle) //是否相等
- {
- coune = 0; //周期清零
- PORTB ^= 0x80; //输出指示
- }
- TMR0 = 0x3d; //定时初值
- T0IF = 0; //清除标志
- }
- //*******************************************************************
- //函数名称:main();
- //输入参数:无
- //输出参数:无
- //功能描述:主要程序
- //建造日期:2008.07.08
- //*******************************************************************
- void main(void)
- {
- PortInit(); //脚位设置
- IdsInit(); //中数设置
- while (1)
- {
- MonitorRC(); //启动监测
- DelayMs(5); //监测周期
- }
- }
复制代码
11111.rar
(34.21 KB, 下载次数: 51)
|
|