资源简介
基于AD采集的电容触摸 用51单片机带有AD采样的就可以
代码片段和文件信息
#include “includes.h“
#include “zyt_uart.h“
#include “ZYT_AIN.h“
#define KEYNUM 5 //定义按键的个数
#define pressThreshold 0x12 //按下去的差值
#define releaseThreshold 0x05 //释放按键的阀值为按下的50%以下
typedef struct
{
INT16U nowkeyvalue; //采集的当前值
INT16U basekeyvalue; // 基准值
INT16U averagevalue; // 无按键按下的平均值
INT16U dvalue; // 每次采集的差值
INT8U keyflag; //按键按下标志
INT8U Channel_Num; //每一个KEY的通道号
INT8U baseoffset; //设置偏移量
}touchkey;
xdata touchkey keyenum[KEYNUM];
void sys_enter_critical(void)
{
EA = 0;
}
void sys_exit_critical(void)
{
EA = 1;
}
void inittime0(void)
{
AUXR|=0XC0; //12T模式
TMOD|=0x02; //16位定时计数器
TH0 = 230; //5ms中断 0xc8
TR0=1; //开始计数
ET0=1; //允许中断
}
int8s system_init(void)
{
// 关闭系统所有中断
sys_enter_critical();
inittime0();
//串口初始化
UART_Init(9600);
AIN_Init ();
// 打开系统中断
sys_exit_critical();
return 0;
}
void initbaseline(void)
{
INT8U i;
INT32U dataline;
for(i=0;i {
dataline=AIN_Vol_Read (keyenum[i].Channel_Num500); //大端模式 高位在低地址
keyenum[i].basekeyvalue=((INT16U*)&dataline)[1];
keyenum[i].averagevalue=keyenum[i].basekeyvalue;
UART_Write((INT8U*)&(keyenum[i].basekeyvalue) 2);
}
}
void updatabaseline(void) //更新基准值
{
INT8U i;
for(i=0;i {
keyenum[i].basekeyvalue =keyenum[i].averagevalue;
UART_Write((INT8U*)&(keyenum[i].basekeyvalue) 2);
}
}
/*
void updataaverageline(void)
{
INT8U i;
for(i=0;i {
keyenum[i].averagevalue=(keyenum[i].averagevalue + keyenum[i].nowkeyvalue)/2;
}
} */
void updataaverageline(INT8U mode)
{
INT8U i;
for(i=0;i {
switch(mode)
{
case 1:
keyenum[i].averagevalue=(keyenum[i].averagevalue + keyenum[i].nowkeyvalue)/2;
break;
case 2: //avg = avg - (25% * avg) + (25% * reading)
keyenum[i].averagevalue-=(keyenum[i].averagevalue>>2);
keyenum[i].averagevalue+=(keyenum[i].nowkeyvalue>>2);
break;
case 3: //avg = avg - (12.5% * avg) + (12.5% * reading)
keyenum[i].averagevalue-=(keyenum[i].averagevalue>>3);
keyenum[i].averagevalue+=(keyenum[i].nowkeyvalue>>3);
break;
case 4: //average-average/16+now/16
keyenum[i].averagevalue-=(keyenum[i].averagevalue>>4);
keyenum[i].averagevalue+=(keyenum[i].nowkeyvalue>>4);
break;
}
}
}
void releasekey(INT8U key) //释放按键
{
INT8U keynum;
INT16U tmpdata;
INT32U tmdata;
keynum=key;
while(1)
{
tmdata=AIN_Vol_Read (keyenum[keynum].Channel_Num10);
tmpdata=((INT16U*)&tmdata)[1];
if(tmpdata>(keyenum[keynum].bas
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4737 2011-03-01 18:45 基于AD采集的电容触摸\includes.h
文件 6376 2011-08-04 11:51 基于AD采集的电容触摸\STARTUP.A51
文件 10680 2011-08-04 11:51 基于AD采集的电容触摸\STARTUP.LST
文件 750 2011-08-04 11:51 基于AD采集的电容触摸\STARTUP.OBJ
文件 17799 2010-12-06 16:02 基于AD采集的电容触摸\STC12C5A60S2.H
文件 40049 2011-08-06 17:02 基于AD采集的电容触摸\touchkey
文件 5103 2011-08-06 17:01 基于AD采集的电容触摸\touchkey.c
文件 9551 2011-08-06 17:02 基于AD采集的电容触摸\touchkey.hex
文件 81 2011-08-06 17:02 基于AD采集的电容触摸\touchkey.lnp
文件 10911 2011-08-06 17:02 基于AD采集的电容触摸\touchkey.LST
文件 32705 2011-08-06 17:02 基于AD采集的电容触摸\touchkey.M51
文件 19521 2011-08-06 17:02 基于AD采集的电容触摸\touchkey.OBJ
文件 2859 2011-08-06 17:47 基于AD采集的电容触摸\touchkey.Opt
文件 4079 2011-08-06 17:47 基于AD采集的电容触摸\touchkey.plg
文件 2377 2011-08-06 11:51 基于AD采集的电容触摸\touchkey.Uv2
文件 2849 2011-08-06 16:43 基于AD采集的电容触摸\touchkey_Opt.Bak
文件 2377 2011-08-06 11:48 基于AD采集的电容触摸\touchkey_Uv2.Bak
文件 8192 2011-08-05 18:20 基于AD采集的电容触摸\Unti
文件 408 2011-08-05 18:20 基于AD采集的电容触摸\Unti
文件 8192 2011-08-06 16:47 基于AD采集的电容触摸\Unti
文件 408 2011-08-06 16:47 基于AD采集的电容触摸\Unti
文件 28 2011-08-06 17:46 基于AD采集的电容触摸\Unti
文件 776 2011-08-06 17:46 基于AD采集的电容触摸\Unti
文件 2696 2011-08-05 18:20 基于AD采集的电容触摸\Unti
文件 14680 2011-08-05 18:20 基于AD采集的电容触摸\Unti
文件 45748 2012-10-19 09:10 基于AD采集的电容触摸\Unti
文件 346 2011-08-05 17:06 基于AD采集的电容触摸\Unti
文件 24332 2012-10-19 09:10 基于AD采集的电容触摸\Unti
文件 116 2011-08-06 11:59 基于AD采集的电容触摸\UNTITL~1.SearchResults
文件 4741 2011-08-06 16:46 基于AD采集的电容触摸\ZYT_AIN.c
............此处省略11个文件信息
评论
共有 条评论