[应用方案] 基于赛元LB1011,水位检测学习评估板开发心得

[复制链接]
219|2
 楼主 | 2019-5-12 17:57 | 显示全部楼层 |阅读模式
本帖最后由 yinwuqing110 于 2019-5-12 21:58 编辑

   大家好!首先今天是母亲节,祝愿天下各位母亲节日快乐,幸福健康每一天。
   收到开发板也已经有一段时间了,由于公司的工作比较多,所以选择周末的时间来开发使用之前申请的LB1011与水位检测评估板。首先来个开箱亮照:
1.jpg
2.jpg
   在赛元的官方下载了许多开发资料以及工具软件,感觉赛元的介绍开发套件很是丰富,有视频演示操作指引,模块化层次分明,让开发人员很容易获得相关开发板的学习资源。触摸LB1011隔空3mm按键,操作起来非常灵敏,初次使用调节高灵敏度,采集AD值详细操作过程都可以在赛元官方网站所提供的视频中看到,这里就不再追述。
    LB1011具有非常优异的抗干扰性能,极好的接触按键性能,非常适用于各种使用场合的触控按键和主控控制,如下图所示,操作非常有手感,速度没得说。
操作动态演示.gif
   这款LB1011开发板采用SC92F8462B主控芯片,能够实现高灵敏度触控或者高可靠触控。
高灵敏度触控调试.png
    下载的文件资源如下图所示:
LB1011资料目录.png
  该芯片是增强型51单片机,20pin管脚,封装SOP型。命名规则如下:
命名规则.png
  参考一下demo的示例程序:
  1. #include "lib\S_TouchKeyCFG.h"
  2. //*************************************************************************************
  3. //  844 寄存器定义
  4. //*************************************************************************************
  5. /*PSW*/
  6. sfr         TK_PSW       =        0xD0;                 //程序状态字
  7. sbit         TK_CY        =         TK_PSW^7;        //进位  

  8. //===========================================================================
  9. //全局变量定义
  10. unsigned     char   xdata       SOCAPI_TouchKeyStatus;          //API接口状态:bit7-一轮扫描完成标志  1:完成         0:未完成
复制代码
  1. //*************************************************************
  2. #include "c\SC92F846XB_C.h"
  3. #include "c\data_type.h"
  4. #include "lib\SensorMethod.h"
  5. //*****************全局变量区***************************************************
  6. INT32U exKeyValueFlag = 0;                //当前轮按键标志
  7. INT8U  Timercount = 0;                      //定时器计数
  8. BOOL   TimerFlag_1ms = 0;                //定时器1MS标志
  9. INT8U  gTkIsValid = 0;                       //按键有效标志
  10. INT8U  exKeyValue = 0;                     //当前轮按键键值
  11. INT8U  KeyValue = 0;                        //按键键值
  12. #define  LED1  P05
  13. #define  LED2  P04
  14. #define  LED3  P03

  15. /**************************************************
  16. *函数名称:void TimerInit(void)
  17. *函数功能:定时器初始化
  18. *入口参数:void
  19. *出口参数:void
  20. **************************************************/
  21. void TimerInit(void)
  22. {
  23.         TMCON = (TMCON&0xfe)|(0<<0);                //bit0: 0为FOSC/12,1为FOSO
  24.         TMOD = TMOD&0xf0;                                  //设置定时0,工作方式0
  25.         TMOD = TMOD|0x00;
  26.         TH0=(8192-1000)/32;                                 //1000*1=1000us,1MS
  27.         TL0=(8192-1000)%32;
  28.         TF0 = 0;                                                     //清中断标志
  29.         TR0=0;                                                       //关定时器0
  30.          ET0=1;                                                      //使能定时器0中断
  31.         TR0=1;
  32. }

  33. /**************************************************
  34. *函数名称:void timer0()interrupt 1
  35. *函数功能:定时器中断服务函数
  36. *入口参数:void
  37. *出口参数:void
  38. **************************************************/
  39. void timer0()interrupt 1
  40. {
  41.         TH0 = (8192-1000)/32;                               //2000*1/4us=500us
  42.         TL0 = (8192-1000)%32;        
  43.         TimerFlag_1ms = 1;        
  44. }
  45. /**************************************************
  46. *函数名称:void  Sys_Init(void)
  47. *函数功能:系统初始化
  48. *入口参数:void
  49. *出口参数:void  
  50. **************************************************/
  51. void  Sys_Init(void)
  52. {        
  53.         WDTCON  = 0x10;                    //1--1 -- 00    开WDT,WDT清0,WDT 524.288ms溢出;烧录时,可Code Option选择ENWDT
  54.                                                        //TK对应的IO设置为强推挽输出1
  55.         P0CON = 0xFF;
  56.         P0PH   = 0xFF;
  57.                
  58.         P1CON = 0x00;
  59.         P1PH   = 0xFF;
  60.         P2CON = 0x00;
  61.         P2PH   = 0xFF;
  62.         P5CON = 0xFF;
  63.         P5PH   = 0xFF;
  64.         P0 = 0xFF;
  65.         P1 = 0xFF;
  66.         P2 = 0xFF;
  67.         P5 = 0x00;                 
  68.         EA = 1;                                  //开总中断        
  69.         TimerInit();                             //定时器初始化
  70. }
  71. /**************************************************
  72. *函数名称:void ChangeTouchKeyvalue(void)
  73. *函数功能:转换TK键值
  74. *入口参数:void
  75. *出口参数:void
  76. **************************************************/
  77. void ChangeTouchKeyvalue(void)
  78. {
  79.         switch(exKeyValueFlag)
  80.         {               
  81.                 //不同间距不同大小的按键
  82.                 case 0x00000001:exKeyValue = 1;break;        
  83.                 case 0x00000002:exKeyValue = 2;break;
  84.                 case 0x00000004:exKeyValue = 3;break;
  85.                 default:exKeyValue = 0xff;break;                        
  86.         }
  87. }
  88. /**************************************************
  89. *函数名称:void UpdateLcdBufFunc(void)
  90. *函数功能:更新显示数据函数
  91. *入口参数:void
  92. *出口参数:void
  93. **************************************************/
  94. void UpdateLcdBufFunc(void)
  95. {
  96.         if(exKeyValue != 0xff)
  97.         {
  98.            if(gTkIsValid == 0)                        //松手前只出一次键
  99.            {               
  100.              gTkIsValid = 1;
  101.              KeyValue=exKeyValue;
  102.             switch(KeyValue)
  103.             {               
  104.                 //不同间距不同大小的按键
  105.                 case 1:LED1= ~LED1;break;
  106.                 case 2:LED2= ~LED2;break;
  107.                 case 3:LED3= ~LED3;break;              
  108.                 default:exKeyValue = 0xff;break;                        
  109.             }
  110.           }                                                         
  111.         }
  112.         else
  113.         {
  114.                 gTkIsValid = 0;        
  115.         }
  116. }
  117. /**************************************************
  118. *函数名称:void  Sys_Scan(void)
  119. *函数功能:扫描TK和显示
  120. *入口参数:void
  121. *出口参数:void  
  122. **************************************************/
  123. void Sys_Scan(void)
  124. {                                      
  125.         if(SOCAPI_TouchKeyStatus&0x80)            //重要步骤2:  触摸键扫描一轮标志,是否调用TouchKeyScan()一定要根据此标志位置起后
  126.          {                                                                                                                                                   
  127.                 SOCAPI_TouchKeyStatus &= 0x7f;   //重要步骤3: 清除标志位, 需要外部清除。
  128.                 exKeyValueFlag = TouchKeyScan();  //按键数据处理函数
  129.                 ChangeTouchKeyvalue();                 //转换键值
  130.                 UpdateLcdBufFunc();                       //更新显示数据   
  131.                 TouchKeyRestart();                         //启动下一轮转换                 
  132.         }                             
  133. }
  134. /**************************************************
  135. *函数名称:void main(void)                                                                  
  136. *函数功能:主函数
  137. *入口参数:void
  138. *出口参数:void  
  139. **************************************************/
  140. void main(void)
  141. {                                       
  142.         Sys_Init();
  143.         //触控按键初始化
  144.         TouchKeyInit();
  145.         LED1 = 0;
  146.         LED2 = 0;
  147.         LED3 = 0;
  148.         while(1)
  149.         {
  150.            WDTCON  = 0x10;                                 
  151.            if(TimerFlag_1ms == 1)
  152.            {
  153.                         TimerFlag_1ms=0;        
  154.                         Timercount++;
  155.                         if(Timercount>10)
  156.                         {
  157.                                 Timercount=0;
  158.                                 Sys_Scan();
  159.                         }
  160.                 }                                                                                                                                                      
  161.         }
  162. }
复制代码
  接下来我们来看看水位检测评估开发板,它是一款可以隔空2mm准确检测到水和其它液体的位置变化,采用SCW8916B控制IC,是具有工业级的规格,拥有极高的接触ESD能力,是电子式液位检测方案的首选。非常适合应用于饮水机,水壶,咖啡机,洗碗机,制冰机等家电产品中。它凭借拥有极强的抗干扰能力,被成为业界的独树一帜。优势很多,多用通道检测,也可以采用串口方式检测。其封装如下
封装.png
  接下来我用串口工具连上这款评估板,并按照视频讲解的步骤设置了一下
水位检测资料目录.png 串口接线.jpg 串口打印信息.png
   感觉这款评估开发板检测的距离还是有限的,如果超过了2mm,检测的水位就不太准确了。有水为1,无水为0。电平方式一对一输出,串口是每隔100ms输出一次。在UART模式下,IC(SCW8916B)上电8秒内通过灵敏度设置命令来设置各检测水通道的灵敏度等级0~7档。灵敏度设置成功后,SCW8916B此后会保持设定的值,重新上电无需重新设定。当用户需要更改灵敏度时再重新设置即可。整个板子的封装空间合理,在隔空检测水位或液体位有很好的实用价值。
PCB参考图.png
       综上评测,赛元在隔空触摸,隔空水或液体位置检测方面,技术成熟。触摸灵敏度高,产品的抗干扰能力优;隔空检测水位多通道,两方式可以供用户选择,灵活实用,在未来的人工智能,工业控制,家电产品等方面有广阔的发展前景。此次使用体验评测就分享到这里啦,欢迎围观,谢谢。


SC92F8463B_8462B_8461Bv0.5cn.pdf

2.35 MB, 下载次数: 0

SCW8916B.pdf

441.16 KB, 下载次数: 0

使用特权

评论回复

评论

21ic小喇叭 2019-5-13 09:40 回复TA
谢谢分享 
| 2019-5-14 09:39 | 显示全部楼层
写的很好,很详细,非常用心!

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表