找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7687|回復(fù): 8
收起左側(cè)

BS83B12A-3觸摸芯片與STM32通過IIC通信讀取觸摸芯片的按鍵值源碼

  [復(fù)制鏈接]
ID:136928 發(fā)表于 2018-11-19 18:31 | 顯示全部樓層 |閱讀模式
BS83B12A-3觸摸芯片與STM32通過IIC通信讀取觸摸芯片的按鍵值,BS83B12A-3的程序,stm32F103C8T6的程序,壓縮包里面都有
0.png

單片機(jī)源程序如下:
  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接收、發(fā)送數(shù)據(jù)計(jì)數(shù)器
  9. volatile unsigned char  IICRxData[RxNum],IICTxData[TxNum];//接收、發(fā)送緩存  數(shù)量為5
  10. volatile  bit   IICRxOK=0,IICTxOK=0;//接收、發(fā)送完成標(biāo)志位

  11. //宏定義各個LED對應(yīng)的管腳
  12. #define LEDCOM _pb4  //LED公共管腳
  13. #define LED0   _pa4

  14. //函數(shù)庫的初始化 相當(dāng)于不用函數(shù)庫時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.         //各個管腳設(shè)置為輸出
  36.         _pbc4=0;
  37.         _pac4 =0;
  38.         LEDCOM=0;        
  39.         LED0 =0;
  40. }   


  41. //函數(shù)庫的主循環(huán) 相當(dāng)于不用函數(shù)庫時while(1)里面的循環(huán)
  42. void USER_PROGRAM()
  43. {
  44.         
  45.         u8 temp;
  46.         
  47.         GET_KEY_BITMAP();//將函數(shù)庫掃描的結(jié)果復(fù)制到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.                 //將接收到 后三個字節(jié)返回,第一個字節(jié)為觸摸結(jié)果字節(jié)
  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)        //從機(jī)讀
  84.                 {
  85.                         _htx= 0;
  86.                         _txak=0;
  87.                         _acc=_simd;
  88.                 }
  89.                 else//從機(jī)寫
  90.                 {
  91.                         _htx = 1;                                
  92.                         _simd =IICTxData[0];//從機(jī)寫第一個數(shù)據(jù)
  93.                         IICTxCnt=1;
  94.                 }
  95.         }
  96.         else//數(shù)據(jù)
  97.         {
  98.                 if(_htx)//接收還是發(fā)送  1-發(fā)送  0-接收
  99.                 {                                                               
  100.                         if(_rxak)//從機(jī)未收到ack不再發(fā)送
  101.                         {                                                        
  102.                                 _htx  = 0;
  103.                                 _txak = 0;   
  104.                                 _acc  = _simd;
  105.                         }
  106.                         else //從機(jī)收到ack繼續(xù)發(fā)送
  107.                         {        
  108.                                 switch(IICTxCnt)//按順序把待發(fā)送的數(shù)據(jù)發(fā)送出去
  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;//發(fā)送完成
  119.                                         IICTxCnt=0;        
  120.                                 }
  121.                         }
  122.                 }
  123.                 else//接收
  124.                 {
  125.                         _txak = 0;
  126.                         IICRxData[IICRxCnt++]=_simd;//接收5個數(shù)據(jù)
  127.                         if(IICRxCnt>=RxNum)
  128.                         {
  129.                                 IICRxOK=1;//接收完成
  130.                                 
  131.                                 IICRxCnt=0;
  132.                         }
  133.                 }
  134.         }
  135.         _simf = 0;
  136. }
復(fù)制代碼

所有資料51hei提供下載:
STM32f103IICANDBS83B12A-13.rar (326.23 KB, 下載次數(shù): 129)


回復(fù)

使用道具 舉報

ID:708859 發(fā)表于 2020-3-15 17:38 | 顯示全部樓層
這個程序有人驗(yàn)證過嗎?我怎么試了不行呀,holtek的又不能仿真,在里//iic中斷里面放了些燈,看起來又有中斷產(chǎn)生。STM32這邊求與大神討論。
回復(fù)

使用道具 舉報

ID:423221 發(fā)表于 2018-11-19 20:06 | 顯示全部樓層
good job
回復(fù)

使用道具 舉報

ID:139989 發(fā)表于 2019-6-4 15:01 | 顯示全部樓層
學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報

ID:564787 發(fā)表于 2019-6-19 09:37 | 顯示全部樓層
最近剛好有個項(xiàng)目要用到這個觸摸芯片,下來參考參考
回復(fù)

使用道具 舉報

ID:558925 發(fā)表于 2019-7-5 13:46 | 顯示全部樓層
學(xué)習(xí),學(xué)習(xí)!
回復(fù)

使用道具 舉報

ID:758073 發(fā)表于 2020-5-22 10:23 | 顯示全部樓層
不錯的東西
回復(fù)

使用道具 舉報

ID:758073 發(fā)表于 2020-5-22 10:23 | 顯示全部樓層
有人驗(yàn)證過嗎?講講
回復(fù)

使用道具 舉報

ID:356290 發(fā)表于 2021-3-9 14:44 | 顯示全部樓層
error: '_simtof' undeclared (first use in this function)
'project' - Total 1 error(s), 1 warning(s)
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表