本帖最后由 yinwuqing110 于 2019-5-12 21:58 编辑
大家好!首先今天是母亲节,祝愿天下各位母亲节日快乐,幸福健康每一天。
收到开发板也已经有一段时间了,由于公司的工作比较多,所以选择周末的时间来开发使用之前申请的LB1011与水位检测评估板。首先来个开箱亮照:
在赛元的官方下载了许多开发资料以及工具软件,感觉赛元的介绍开发套件很是丰富,有视频演示操作指引,模块化层次分明,让开发人员很容易获得相关开发板的学习资源。触摸LB1011隔空3mm按键,操作起来非常灵敏,初次使用调节高灵敏度,采集AD值详细操作过程都可以在赛元官方网站所提供的视频中看到,这里就不再追述。
LB1011具有非常优异的抗干扰性能,极好的接触按键性能,非常适用于各种使用场合的触控按键和主控控制,如下图所示,操作非常有手感,速度没得说。
这款LB1011开发板采用SC92F8462B主控芯片,能够实现高灵敏度触控或者高可靠触控。
下载的文件资源如下图所示:
该芯片是增强型51单片机,20pin管脚,封装SOP型。命名规则如下:
参考一下demo的示例程序:
#include "lib\S_TouchKeyCFG.h"
//*************************************************************************************
// 844 寄存器定义
//*************************************************************************************
/*PSW*/
sfr TK_PSW = 0xD0; //程序状态字
sbit TK_CY = TK_PSW^7; //进位
//===========================================================================
//全局变量定义
unsigned char xdata SOCAPI_TouchKeyStatus; //API接口状态:bit7-一轮扫描完成标志 1:完成 0:未完成
//*************************************************************
#include "c\SC92F846XB_C.h"
#include "c\data_type.h"
#include "lib\SensorMethod.h"
//*****************全局变量区***************************************************
INT32U exKeyValueFlag = 0; //当前轮按键标志
INT8U Timercount = 0; //定时器计数
BOOL TimerFlag_1ms = 0; //定时器1MS标志
INT8U gTkIsValid = 0; //按键有效标志
INT8U exKeyValue = 0; //当前轮按键键值
INT8U KeyValue = 0; //按键键值
#define LED1 P05
#define LED2 P04
#define LED3 P03
/**************************************************
*函数名称:void TimerInit(void)
*函数功能:定时器初始化
*入口参数:void
*出口参数:void
**************************************************/
void TimerInit(void)
{
TMCON = (TMCON&0xfe)|(0<<0); //bit0: 0为FOSC/12,1为FOSO
TMOD = TMOD&0xf0; //设置定时0,工作方式0
TMOD = TMOD|0x00;
TH0=(8192-1000)/32; //1000*1=1000us,1MS
TL0=(8192-1000)%32;
TF0 = 0; //清中断标志
TR0=0; //关定时器0
ET0=1; //使能定时器0中断
TR0=1;
}
/**************************************************
*函数名称:void timer0()interrupt 1
*函数功能:定时器中断服务函数
*入口参数:void
*出口参数:void
**************************************************/
void timer0()interrupt 1
{
TH0 = (8192-1000)/32; //2000*1/4us=500us
TL0 = (8192-1000)%32;
TimerFlag_1ms = 1;
}
/**************************************************
*函数名称:void Sys_Init(void)
*函数功能:系统初始化
*入口参数:void
*出口参数:void
**************************************************/
void Sys_Init(void)
{
WDTCON = 0x10; //1--1 -- 00 开WDT,WDT清0,WDT 524.288ms溢出;烧录时,可Code Option选择ENWDT
//TK对应的IO设置为强推挽输出1
P0CON = 0xFF;
P0PH = 0xFF;
P1CON = 0x00;
P1PH = 0xFF;
P2CON = 0x00;
P2PH = 0xFF;
P5CON = 0xFF;
P5PH = 0xFF;
P0 = 0xFF;
P1 = 0xFF;
P2 = 0xFF;
P5 = 0x00;
EA = 1; //开总中断
TimerInit(); //定时器初始化
}
/**************************************************
*函数名称:void ChangeTouchKeyvalue(void)
*函数功能:转换TK键值
*入口参数:void
*出口参数:void
**************************************************/
void ChangeTouchKeyvalue(void)
{
switch(exKeyValueFlag)
{
//不同间距不同大小的按键
case 0x00000001:exKeyValue = 1;break;
case 0x00000002:exKeyValue = 2;break;
case 0x00000004:exKeyValue = 3;break;
default:exKeyValue = 0xff;break;
}
}
/**************************************************
*函数名称:void UpdateLcdBufFunc(void)
*函数功能:更新显示数据函数
*入口参数:void
*出口参数:void
**************************************************/
void UpdateLcdBufFunc(void)
{
if(exKeyValue != 0xff)
{
if(gTkIsValid == 0) //松手前只出一次键
{
gTkIsValid = 1;
KeyValue=exKeyValue;
switch(KeyValue)
{
//不同间距不同大小的按键
case 1:LED1= ~LED1;break;
case 2:LED2= ~LED2;break;
case 3:LED3= ~LED3;break;
default:exKeyValue = 0xff;break;
}
}
}
else
{
gTkIsValid = 0;
}
}
/**************************************************
*函数名称:void Sys_Scan(void)
*函数功能:扫描TK和显示
*入口参数:void
*出口参数:void
**************************************************/
void Sys_Scan(void)
{
if(SOCAPI_TouchKeyStatus&0x80) //重要步骤2: 触摸键扫描一轮标志,是否调用TouchKeyScan()一定要根据此标志位置起后
{
SOCAPI_TouchKeyStatus &= 0x7f; //重要步骤3: 清除标志位, 需要外部清除。
exKeyValueFlag = TouchKeyScan(); //按键数据处理函数
ChangeTouchKeyvalue(); //转换键值
UpdateLcdBufFunc(); //更新显示数据
TouchKeyRestart(); //启动下一轮转换
}
}
/**************************************************
*函数名称:void main(void)
*函数功能:主函数
*入口参数:void
*出口参数:void
**************************************************/
void main(void)
{
Sys_Init();
//触控按键初始化
TouchKeyInit();
LED1 = 0;
LED2 = 0;
LED3 = 0;
while(1)
{
WDTCON = 0x10;
if(TimerFlag_1ms == 1)
{
TimerFlag_1ms=0;
Timercount++;
if(Timercount>10)
{
Timercount=0;
Sys_Scan();
}
}
}
}
接下来我们来看看水位检测评估开发板,它是一款可以隔空2mm准确检测到水和其它液体的位置变化,采用SCW8916B控制IC,是具有工业级的规格,拥有极高的接触ESD能力,是电子式液位检测方案的首选。非常适合应用于饮水机,水壶,咖啡机,洗碗机,制冰机等家电产品中。它凭借拥有极强的抗干扰能力,被成为业界的独树一帜。优势很多,多用通道检测,也可以采用串口方式检测。其封装如下
接下来我用串口工具连上这款评估板,并按照视频讲解的步骤设置了一下
感觉这款评估开发板检测的距离还是有限的,如果超过了2mm,检测的水位就不太准确了。有水为1,无水为0。电平方式一对一输出,串口是每隔100ms输出一次。在UART模式下,IC(SCW8916B)上电8秒内通过灵敏度设置命令来设置各检测水通道的灵敏度等级0~7档。灵敏度设置成功后,SCW8916B此后会保持设定的值,重新上电无需重新设定。当用户需要更改灵敏度时再重新设置即可。整个板子的封装空间合理,在隔空检测水位或液体位有很好的实用价值。
综上评测,赛元在隔空触摸,隔空水或液体位置检测方面,技术成熟。触摸灵敏度高,产品的抗干扰能力优;隔空检测水位多通道,两方式可以供用户选择,灵活实用,在未来的人工智能,工业控制,家电产品等方面有广阔的发展前景。此次使用体验评测就分享到这里啦,欢迎围观,谢谢。
|
谢谢分享