打印
[应用方案]

基于赛元LB1011,水位检测学习评估板开发心得

[复制链接]
985|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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此后会保持设定的值,重新上电无需重新设定。当用户需要更改灵敏度时再重新设置即可。整个板子的封装空间合理,在隔空检测水位或液体位有很好的实用价值。

       综上评测,赛元在隔空触摸,隔空水或液体位置检测方面,技术成熟。触摸灵敏度高,产品的抗干扰能力优;隔空检测水位多通道,两方式可以供用户选择,灵活实用,在未来的人工智能,工业控制,家电产品等方面有广阔的发展前景。此次使用体验评测就分享到这里啦,欢迎围观,谢谢。


SC92F8463B_8462B_8461Bv0.5cn.pdf

2.35 MB

SCW8916B.pdf

441.16 KB

使用特权

评论回复
评论
21ic小喇叭 2019-5-13 09:40 回复TA
谢谢分享 

相关帖子

沙发
赛元MCU3| | 2019-5-14 09:39 | 只看该作者
写的很好,很详细,非常用心!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

1025

帖子

7

粉丝