找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6695|回复: 8
打印 上一主题 下一主题
收起左侧

BS83B12A-3触摸芯片与STM32通过IIC通信读取触摸芯片的按键值源码

  [复制链接]
跳转到指定楼层
楼主
BS83B12A-3触摸芯片与STM32通过IIC通信读取触摸芯片的按键值,BS83B12A-3的程序,stm32F103C8T6的程序,压缩包里面都有


单片机源程序如下:
  1. #include "BS83B12A-3.h"
  2. #include "USER_PROGRAM/USER_PROGRAM.CEX"
  3. #include "BS83B12A_LIBV413/BS83B12A_LIBV413.CEX"

  4. #define u8 unsigned char
  5. #define u16 unsigned int


  6. #define RxNum 5
  7. #define TxNum 5

  8. volatile unsigned char  IICRxCnt=0,IICTxCnt=0;//iic接收、发送数据计数器
  9. volatile unsigned char  IICRxData[RxNum],IICTxData[TxNum];//接收、发送缓存  数量为5
  10. volatile  bit   IICRxOK=0,IICTxOK=0;//接收、发送完成标志位

  11. //宏定义各个LED对应的管脚
  12. #define LEDCOM _pb4  //LED公共管脚
  13. #define LED0   _pa4

  14. //函数库的初始化 相当于不用函数库时while(1)前面的初始化
  15. void USER_PROGRAM_INITIAL()
  16. {
  17.         
  18.         //IIC_Init
  19.         _pac2  = 1;                        //SCL
  20.         _pac0  = 1;                        //SDA
  21.         _sima  = 0xA0;
  22.         _simc0 = 0xC2;

  23.         //_rnic=1;
  24.         
  25.          _simf = 0;
  26.          _sime = 1;
  27.         _emi  = 1;                        //  总中断使能         
  28.         
  29.         IICTxData[0]='0';
  30.         IICTxData[1]='1';
  31.         IICTxData[2]='2';
  32.         IICTxData[3]='\r';
  33.         IICTxData[4]='\n';
  34.         
  35.         //各个管脚设置为输出
  36.         _pbc4=0;
  37.         _pac4 =0;
  38.         LEDCOM=0;        
  39.         LED0 =0;
  40. }   


  41. //函数库的主循环 相当于不用函数库时while(1)里面的循环
  42. void USER_PROGRAM()
  43. {
  44.         
  45.         u8 temp;
  46.         
  47.         GET_KEY_BITMAP();//将函数库扫描的结果复制到DATA_BUF里
  48.         //DATA_BUF[0]的bit7-bit0 代表触摸按键KEY8-KEY1
  49.         switch(DATA_BUF[0])
  50.         {
  51.                 case 0x01:temp=0x31;break;
  52.                 case 0x02:temp=0x32;break;
  53.                 case 0x04:temp=0x33;break;
  54.                 case 0x08:temp=0x34;break;
  55.                 default:temp=0x30;break;        
  56.                
  57.         }
  58.         
  59.         if(IICRxOK)
  60.         {
  61.                 //将接收到 后三个字节返回,第一个字节为触摸结果字节
  62.                 IICTxData[0]=temp;
  63.                 IICTxData[1]='-';
  64.                 IICTxData[2]=IICRxData[2];
  65.                 IICTxData[3]=IICRxData[3];
  66.                 IICTxData[4]=IICRxData[4];
  67.                 if(IICRxData[2] ==0X35)
  68.                 {
  69.                           LED0 = 1;        
  70.                 }
  71.                 else
  72.                         LED0 = 0;

  73.                 IICRxOK=0;
  74.         }

  75. }


  76. //iic中断
  77. DEFINE_ISR(IIC_ISR, 0x10)
  78. {
  79.         _clrwdt();

  80.         if(_haas) //地址匹配                                
  81.         {        
  82.                 _pc1=1;        
  83.                 if(_srw==0)        //从机读
  84.                 {
  85.                         _htx= 0;
  86.                         _txak=0;
  87.                         _acc=_simd;
  88.                 }
  89.                 else//从机写
  90.                 {
  91.                         _htx = 1;                                
  92.                         _simd =IICTxData[0];//从机写第一个数据
  93.                         IICTxCnt=1;
  94.                 }
  95.         }
  96.         else//数据
  97.         {
  98.                 if(_htx)//接收还是发送  1-发送  0-接收
  99.                 {                                                               
  100.                         if(_rxak)//从机未收到ack不再发送
  101.                         {                                                        
  102.                                 _htx  = 0;
  103.                                 _txak = 0;   
  104.                                 _acc  = _simd;
  105.                         }
  106.                         else //从机收到ack继续发送
  107.                         {        
  108.                                 switch(IICTxCnt)//按顺序把待发送的数据发送出去
  109.                                 {
  110.                                         case 1:_simd =IICTxData[1];break;        
  111.                                         case 2:_simd =IICTxData[2];break;
  112.                                         case 3:_simd =IICTxData[3];break;
  113.                                         case 4:_simd =IICTxData[4];break;
  114.                                 }
  115.                                 IICTxCnt++;
  116.                                 if(IICTxCnt>=TxNum)
  117.                                 {
  118.                                         IICTxOK=1;//发送完成
  119.                                         IICTxCnt=0;        
  120.                                 }
  121.                         }
  122.                 }
  123.                 else//接收
  124.                 {
  125.                         _txak = 0;
  126.                         IICRxData[IICRxCnt++]=_simd;//接收5个数据
  127.                         if(IICRxCnt>=RxNum)
  128.                         {
  129.                                 IICRxOK=1;//接收完成
  130.                                 
  131.                                 IICRxCnt=0;
  132.                         }
  133.                 }
  134.         }
  135.         _simf = 0;
  136. }
复制代码

所有资料51hei提供下载:
STM32f103IICANDBS83B12A-13.rar (326.23 KB, 下载次数: 129)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 分享淘帖 顶 踩
回复

使用道具 举报

来自 2#
ID:708859 发表于 2020-3-15 17:38 | 只看该作者
这个程序有人验证过吗?我怎么试了不行呀,holtek的又不能仿真,在里//iic中断里面放了些灯,看起来又有中断产生。STM32这边求与大神讨论。
回复

使用道具 举报

板凳
ID:423221 发表于 2018-11-19 20:06 | 只看该作者
good job
回复

使用道具 举报

地板
ID:139989 发表于 2019-6-4 15:01 | 只看该作者
学习学习
回复

使用道具 举报

5#
ID:564787 发表于 2019-6-19 09:37 | 只看该作者
最近刚好有个项目要用到这个触摸芯片,下来参考参考
回复

使用道具 举报

6#
ID:558925 发表于 2019-7-5 13:46 | 只看该作者
学习,学习!
回复

使用道具 举报

7#
ID:758073 发表于 2020-5-22 10:23 | 只看该作者
不错的东西
回复

使用道具 举报

8#
ID:758073 发表于 2020-5-22 10:23 | 只看该作者
有人验证过吗?讲讲
回复

使用道具 举报

9#
ID:356290 发表于 2021-3-9 14:44 | 只看该作者
error: '_simtof' undeclared (first use in this function)
'project' - Total 1 error(s), 1 warning(s)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表