久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

HSJ121觸摸按鍵STM32F103單片機(jī)驅(qū)動(dòng)程序

[復(fù)制鏈接]
ID:483092 發(fā)表于 2019-3-2 10:32 | 顯示全部樓層 |閱讀模式
里面有完整的資料

單片機(jī)源程序如下:

  1. /* 包含的頭文件 --------------------------------------------------------------*/
  2. #include "bsp.h"
  3. #include "HSJ121.h"
  4. #include "i2c.h"
  5. #include "timer.h"
  6. #include "aboutdata.h"

  7. uint8_t        HSJ121_SendData[HSJ121_SendDataLength];  //命令發(fā)送數(shù)據(jù)
  8. uint8_t HSJ121_ReciveData[HSJ121_ReciveDataLength];        //數(shù)據(jù)回復(fù)接收

  9. uint8_t  HSJ121_Mode_LowScan[HSJ121ModeSetLength]={0x00,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x80,0x0A};        //低速掃描
  10. uint8_t  HSJ121_Mode_NearInduction[HSJ121ModeSetLength]={0x01,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x80,0x0A};                //臨場(chǎng)接近感應(yīng)
  11. uint8_t  HSJ121_KeyScanTime[HSJ121_KeyScanTimeLength]={02,05};        //按鍵掃描時(shí)間

  12. //函數(shù)聲明(內(nèi)部調(diào)用)
  13. uint8_t HSJ121_SendAndRecive(uint8_t *SendData,uint8_t *ReciveData); //發(fā)送和接收
  14. uint8_t HSJ121_SendComByIIC(uint8_t sla,uint8_t *s,uint8_t num);        //通過(guò)IIC發(fā)送命令
  15. uint8_t HSJ121_RecDataByIIC(uint8_t sla,uint8_t *s);        //通過(guò)IIC接收回復(fù)數(shù)據(jù)

  16. //函數(shù)聲明(外部調(diào)用)
  17. void HSJ121Init(void);        //模塊初始化
  18. uint8_t HSJ121_Set_LowScanMode(uint8_t *Mode);        //設(shè)置低速掃描模式
  19. uint8_t HSJ121_Set_NearInductionMode(uint8_t *Mode);        //設(shè)置臨近感應(yīng)模式
  20. uint8_t        HSJ121_Get_Config(void);        //獲取配置信息
  21. uint8_t        HSJ121_Get_Key(void);                  //獲取鍵值
  22. uint8_t HSJ121_Set_ScanTime(uint8_t *ScanTme);        //設(shè)置按鍵掃描時(shí)間
  23. uint8_t HSJ121_Get_ScanTime(void);        //獲取按鍵掃描時(shí)間
  24. uint8_t HSJ121_Set_SleepMode(void);        //設(shè)置睡眠模式
  25. uint8_t HSJ121_Into_SleepMode(void);        //進(jìn)入睡眠模式
  26. uint8_t HSJ121_WakeUp(void);                                //喚醒芯片

  27. /*--------------------------內(nèi)部調(diào)用函數(shù)---------------------------------------*/
  28. /************************************************
  29. 函數(shù)名稱 : SendComByIIC
  30. 功    能 : 通過(guò)IIC發(fā)送命令數(shù)據(jù)幀
  31. 參    數(shù) : uint8_t sla        —— 器件地址
  32.                                           uint8_t *s        —— 命令數(shù)據(jù)緩沖區(qū)
  33.                                           uint8_t num —— 命令長(zhǎng)度
  34. 返 回 值 : TRUE —— 正確
  35.                                          FALSE —— 錯(cuò)誤
  36. 作    者 :
  37. *************************************************/
  38. uint8_t HSJ121_SendComByIIC(uint8_t sla,uint8_t *s,uint8_t num)
  39. {
  40.         uint8_t i,j;
  41.         uint8_t ack=2;
  42.         I2C_Start();        //啟動(dòng)信號(hào)
  43.         //發(fā)送器件地址
  44.         ack=I2C_WriteByte(sla|I2C_WR);
  45.         if(ack==I2C_NOACK){
  46. //                printf("send address fail by write\n");
  47.                 return FALSE;
  48.         }else if(ack==I2C_ACK){
  49. //                printf("send address success by write\n");
  50.         }
  51.         TIMDelay_Nms(1);        //延時(shí)
  52.         //循環(huán)發(fā)送命令數(shù)據(jù)幀
  53.         for(i=0;i<num;i++)
  54.         {
  55.                 ack=I2C_WriteByte(*s);
  56.                 if(ack==I2C_NOACK){
  57. //                        printf("send command data fail\n");
  58.                         return FALSE;
  59.                 }
  60.                 s++;
  61.                 TIMDelay_Nms(1);        //延時(shí)
  62.         }
  63.         I2C_Stop();        //停止信號(hào)
  64.         return TRUE;
  65. }
  66. /************************************************
  67. 函數(shù)名稱 : RecDataByIIC
  68. 功    能 : 通過(guò)IIC接收模塊返回?cái)?shù)據(jù)幀
  69. 參    數(shù) : uint8_t sla        —— 器件地址
  70.                                           uint8_t *s        —— 接收回復(fù)數(shù)據(jù)幀緩沖區(qū)
  71.                                           uint8_t num —— 回復(fù)數(shù)據(jù)幀長(zhǎng)度
  72. 返 回 值 : TRUE —— 正確
  73.                                          FALSE —— 錯(cuò)誤
  74. 作    者 :
  75. *************************************************/
  76. uint8_t HSJ121_RecDataByIIC(uint8_t sla,uint8_t *s)
  77. {
  78.                 uint8_t i=0;
  79.                 uint8_t HSJ121_Length;         
  80.     uint8_t j=0;
  81.           uint8_t ack=2;
  82.           uint8_t num;  
  83.         
  84.                 j=250;
  85.           while(1)
  86.                 {
  87.                         I2C_Start();        //啟動(dòng)信號(hào)
  88.                         ack=I2C_WriteByte(sla+1); //發(fā)送器件地址+寫(xiě)入命令
  89. //                        TIMDelay_Nms(5);        //延時(shí)
  90.                         if(ack==I2C_ACK){
  91. //                                printf("Send address success by read\n");
  92.                                 break;        //模塊應(yīng)答成功,退出循環(huán),準(zhǔn)備接收數(shù)據(jù)
  93.                         }
  94.                         //模塊超時(shí)沒(méi)有應(yīng)答,返回出錯(cuò)
  95.                         if(j--==0){
  96.                                 I2C_Stop();
  97. //                                printf("Send address fail by read\n");
  98.                                 return FALSE;
  99.                         }
  100.                 }
  101.                
  102. //                TIMDelay_Nms(1000);        //延時(shí)

  103.                 HSJ121_Length=I2C_ReadByte(I2C_ACK);        //接收第一個(gè)字節(jié)數(shù)據(jù),獲取數(shù)據(jù)幀長(zhǎng)度
  104.                 *s = HSJ121_Length;        
  105.                 s++;  
  106.                
  107.                 if(HSJ121_Length==0x00){
  108.                            I2C_Stop();
  109.                                  return FALSE;
  110.                 }
  111.                
  112.                 for(i=0;i<HSJ121_Length-1;i++)  //循環(huán)接受數(shù)據(jù)(除校驗(yàn)碼外)
  113.                 {
  114.                         *s=I2C_ReadByte(I2C_ACK);
  115.                         s++;
  116.                 }
  117.                         
  118.                 //接收檢驗(yàn)碼
  119.                 *s=I2C_ReadByte(I2C_NOACK);
  120.                 I2C_Stop();        //停止信號(hào)
  121.           return TRUE;
  122. }

  123. /************************************************
  124. 函數(shù)名稱 : HSJ121_SendAndRecive(uint8_t *SendData,uint8_t *ReciveData)
  125. 功    能 : 命令發(fā)送和回復(fù)數(shù)據(jù)接收
  126. 參    數(shù) : *SendData -- 發(fā)送命令緩沖區(qū)
  127.             *ReciveData -- 接收數(shù)據(jù)緩沖區(qū)
  128. 返 回 值 : TRUE —— 正確
  129.                                          FALSE —— 錯(cuò)誤
  130. 作    者 :
  131. *************************************************/
  132. uint8_t HSJ121_SendAndRecive(uint8_t *SendData,uint8_t *ReciveData)
  133. {
  134.         uint8_t Command;
  135.         uint8_t RepetCnt=5;
  136.         
  137.         Command=SendData[CMD];
  138.         
  139.         SendData[SendData[Length]]=GetBcc(SendData,SendData[Length]);        //獲取BCC校驗(yàn)碼
  140.         
  141.         //發(fā)送命令數(shù)據(jù)幀
  142.         while(RepetCnt)         //重復(fù)次數(shù),循環(huán)幾次,避免模塊沒(méi)有及時(shí)發(fā)出ACK而退出
  143.         {
  144.                 RepetCnt--;
  145.                 //發(fā)送命令數(shù)據(jù)幀
  146.                 if(HSJ121_SendComByIIC(HSJ121_ADD,SendData,(SendData[Length]+1))==TRUE){
  147. //                        printf("Send command success\n");
  148.                         break;
  149.                 }
  150.                 //發(fā)送命令數(shù)據(jù)幀出錯(cuò)
  151.                 if(RepetCnt==0){
  152. //                        printf("IIC send command timeout\n");
  153.                         return FALSE;
  154.                 }        
  155.         }
  156.         
  157.         TIMDelay_Nms(5);  
  158.         RepetCnt=250;
  159.         
  160.         //接收模塊返回?cái)?shù)據(jù)幀
  161.         while(RepetCnt)
  162.   {
  163.                 RepetCnt--;
  164.                
  165.                 if(HSJ121_RecDataByIIC(HSJ121_ADD,ReciveData)==TRUE){
  166. //                        printf("Receive data success\n");
  167.                         break;
  168.                 }
  169.                
  170.                 //接收模塊返回?cái)?shù)據(jù)幀出錯(cuò)
  171.                 if(RepetCnt==0){
  172. //                        printf("IIC receive data timeout\n");
  173.                         return FALSE;
  174.                 }
  175.         }
  176.                
  177.         //對(duì)模塊返回的數(shù)據(jù)幀進(jìn)行校驗(yàn)        
  178.         if(!GetBcc(ReciveData,ReciveData[Length]+1)){
  179. //                 printf("Bcc check success\n");
  180.                  if(Command==ReciveData[CMD]){
  181. //                         printf("Command check success\n");
  182.                          return TRUE; //校驗(yàn)成功        
  183.                  }else{
  184. //                         printf("Command check success\n");
  185.                  }
  186.         }else{
  187. //                        printf("Bcc check fail\n");
  188.         }
  189.                 return FALSE;
  190. }        

  191. /*--------------------------外部調(diào)用函數(shù)---------------------------------------*/
  192. /******************************************/
  193. //函數(shù)原型: void HSJ121Init(void)
  194. //輸入?yún)?shù): 無(wú)
  195. //輸出參數(shù): 無(wú)
  196. //函數(shù)返回:
  197. //功能描述: 芯片初始化
  198. /******************************************/
  199. void HSJ121Init(void)
  200. {
  201.         I2C_Initializes();        //I2C通信初始化
  202.         TIMDelay_Nms(10);                //上電等待3ms,芯片穩(wěn)定
  203.         printf("HSJ121 init success\n");
  204.         
  205. }
  206. /******************************************/
  207. //函數(shù)原型: HSJ121_Set_LOWScanMode(uint8_t *Mode)
  208. //輸入?yún)?shù): *Mode 設(shè)置模式碼(10個(gè)字節(jié))
  209. //輸出參數(shù): 無(wú)
  210. //函數(shù)返回: TRUE or FALSE
  211. //功能描述: 設(shè)置低速掃描模式
  212. /******************************************/
  213. uint8_t HSJ121_Set_LowScanMode(uint8_t *Mode)
  214. {
  215.         uint8_t State;
  216.         EXTI->IMR&=~(1<<13); //屏蔽13線上中斷
  217.         
  218.         ClearData(HSJ121_SendData,HSJ121_SendDataLength); //清零發(fā)送數(shù)據(jù)
  219.         ClearData(HSJ121_ReciveData,HSJ121_ReciveDataLength); //清零接收數(shù)據(jù)
  220.         
  221.         HSJ121_SendData[Length]=0x0C;        //添加數(shù)據(jù)長(zhǎng)度
  222.         HSJ121_SendData[CMD]=0x70;         //添加命令碼
  223.         CopyData(&HSJ121_SendData[DataPOS],Mode,10);
  224.         
  225.         State=HSJ121_SendAndRecive(HSJ121_SendData,HSJ121_ReciveData);        
  226.         
  227. //        將模塊回復(fù)的數(shù)據(jù)從HEX碼轉(zhuǎn)成Char
  228.         HexToChar(HSJ121_ReciveData,(HSJ121_ReciveData[Length]+1));
  229.         
  230.         EXTI->IMR|=1<<13;  //開(kāi)13線上中斷
  231.         return State;
  232. }
  233. /******************************************/
  234. //函數(shù)原型: HSJ121_Set_NearInductionMode(uint8_t *Mode)
  235. //輸入?yún)?shù): *Mode 設(shè)置模式碼(10個(gè)字節(jié))
  236. //輸出參數(shù): 無(wú)
  237. //函數(shù)返回: TRUE or FALSE
  238. //功能描述: 設(shè)置臨近感應(yīng)模式
  239. /******************************************/
  240. uint8_t HSJ121_Set_NearInductionMode(uint8_t *Mode)
  241. {
  242.         uint8_t State;
  243.         EXTI->IMR&=~(1<<13); //屏蔽13線上中斷
  244.         
  245.         ClearData(HSJ121_SendData,HSJ121_SendDataLength); //清零發(fā)送數(shù)據(jù)
  246.         ClearData(HSJ121_ReciveData,HSJ121_ReciveDataLength); //清零接收數(shù)據(jù)
  247.         
  248.         HSJ121_SendData[Length]=0x0C;        //添加數(shù)據(jù)長(zhǎng)度
  249.         HSJ121_SendData[CMD]=0x70;         //添加命令碼
  250.         CopyData(&HSJ121_SendData[DataPOS],Mode,10);
  251.         
  252.         State=HSJ121_SendAndRecive(HSJ121_SendData,HSJ121_ReciveData);
  253.         
  254. //        將模塊回復(fù)的數(shù)據(jù)從HEX碼轉(zhuǎn)成Char
  255.         HexToChar(HSJ121_ReciveData,(HSJ121_ReciveData[Length]+1));
  256.         
  257.         EXTI->IMR|=1<<13;  //開(kāi)13線上中斷
  258.         return State;
  259. }
  260. /******************************************/
  261. //函數(shù)原型: uint8_t        HSJ121_Get_Config()
  262. //輸入?yún)?shù): 無(wú)
  263. //輸出參數(shù): 無(wú)
  264. //函數(shù)返回: TRUE or FALSE
  265. //功能描述: 獲取配置信息
  266. /******************************************/
  267. uint8_t        HSJ121_Get_Config(void)
  268. {
  269.         uint8_t State;
  270.         EXTI->IMR&=~(1<<13); //屏蔽13線上中斷
  271.         
  272.         ClearData(HSJ121_SendData,HSJ121_SendDataLength); //清零發(fā)送數(shù)據(jù)
  273.         ClearData(HSJ121_ReciveData,HSJ121_ReciveDataLength); //清零接收數(shù)據(jù)
  274.         
  275.         HSJ121_SendData[Length]=0x02;        //添加數(shù)據(jù)長(zhǎng)度
  276.         HSJ121_SendData[CMD]=0x80;         //添加命令碼
  277.         
  278.         State=HSJ121_SendAndRecive(HSJ121_SendData,HSJ121_ReciveData);
  279.         
  280. //        將模塊回復(fù)的數(shù)據(jù)從HEX碼轉(zhuǎn)成Char
  281.         HexToChar(HSJ121_ReciveData,(HSJ121_ReciveData[Length]+1));
  282.         
  283.         EXTI->IMR|=1<<13;  //開(kāi)13線上中斷
  284.         return State;
  285. }
  286. /******************************************/
  287. //函數(shù)原型: HSJ121_Get_Key(void)
  288. //輸入?yún)?shù): 無(wú)
  289. //輸出參數(shù): 無(wú)
  290. //函數(shù)返回: TRUE or FALSE
  291. //功能描述: 獲取鍵值
  292. /******************************************/
  293. uint8_t        HSJ121_Get_Key(void)
  294. {
  295.         uint8_t num;
  296.         uint8_t State;
  297.         EXTI->IMR&=~(1<<13); //屏蔽13線上中斷
  298.         
  299.         ClearData(HSJ121_SendData,HSJ121_SendDataLength); //清零發(fā)送數(shù)據(jù)
  300.         ClearData(HSJ121_ReciveData,HSJ121_ReciveDataLength); //清零接收數(shù)據(jù)
  301.         
  302.         HSJ121_SendData[Length]=0x02;        //添加數(shù)據(jù)長(zhǎng)度
  303.         HSJ121_SendData[CMD]=0xA0;         //添加命令碼
  304.         
  305.         for(num=0;num<3;num++)
  306.         {
  307.                 State=HSJ121_SendAndRecive(HSJ121_SendData,HSJ121_ReciveData);
  308.                 if(State==TRUE){
  309.                         break;
  310.                 }
  311.         }        
  312.         
  313. //        將模塊回復(fù)的數(shù)據(jù)從HEX碼轉(zhuǎn)成Char
  314.         HexToChar(HSJ121_ReciveData,(HSJ121_ReciveData[Length]+1));
  315.         
  316.         EXTI->IMR|=1<<13;  //開(kāi)13線上中斷
  317.         return State;
  318. }
  319. /******************************************/
  320. //函數(shù)原型: HSJ121_Set_ScanTime(uint8_t *ScanTme)
  321. //輸入?yún)?shù): *ScanTme 掃描時(shí)間
  322. //輸出參數(shù): 無(wú)
  323. //函數(shù)返回: TRUE or FALSE
  324. //功能描述: 設(shè)置掃描時(shí)間
  325. /******************************************/
  326. uint8_t HSJ121_Set_ScanTime(uint8_t *ScanTme)  //設(shè)置按鍵掃描時(shí)間
  327. {
  328.         uint8_t State;
  329.         EXTI->IMR&=~(1<<13); //屏蔽13線上中斷
  330.         
  331.         ClearData(HSJ121_SendData,HSJ121_SendDataLength); //清零發(fā)送數(shù)據(jù)
  332.         ClearData(HSJ121_ReciveData,HSJ121_ReciveDataLength); //清零接收數(shù)據(jù)
  333.         
  334.         HSJ121_SendData[Length]=0x04;        //添加數(shù)據(jù)長(zhǎng)度
  335.         HSJ121_SendData[CMD]=0x71;         //添加命令碼
  336.         CopyData(&HSJ121_SendData[DataPOS],ScanTme,HSJ121_KeyScanTimeLength);
  337.         
  338.         State=HSJ121_SendAndRecive(HSJ121_SendData,HSJ121_ReciveData);
  339.         
  340. //        將模塊回復(fù)的數(shù)據(jù)從HEX碼轉(zhuǎn)成Char
  341.         HexToChar(HSJ121_ReciveData,(HSJ121_ReciveData[Length]+1));
  342.         
  343.         EXTI->IMR|=1<<13;  //開(kāi)13線上中斷
  344.         return State;        
  345. }
  346. /******************************************/
  347. //函數(shù)原型: HSJ121_Get_ScanTime(void)
  348. //輸入?yún)?shù): 無(wú)
  349. //輸出參數(shù): 無(wú)
  350. //函數(shù)返回: TRUE or FALSE
  351. //功能描述: 獲取掃描時(shí)間
  352. /******************************************/
  353. uint8_t HSJ121_Get_ScanTime(void)  //獲取按鍵掃描時(shí)間
  354. {
  355.         uint8_t State;
  356.         EXTI->IMR&=~(1<<13); //屏蔽13線上中斷
  357.         
  358.   ClearData(HSJ121_SendData,HSJ121_SendDataLength); //清零發(fā)送數(shù)據(jù)
  359.         ClearData(HSJ121_ReciveData,HSJ121_ReciveDataLength); //清零接收數(shù)據(jù)
  360.         
  361.         HSJ121_SendData[Length]=0x02;        //添加數(shù)據(jù)長(zhǎng)度
  362.         HSJ121_SendData[CMD]=0x81;         //添加命令碼
  363.         
  364.         State=HSJ121_SendAndRecive(HSJ121_SendData,HSJ121_ReciveData);
  365.         
  366. //        將模塊回復(fù)的數(shù)據(jù)從HEX碼轉(zhuǎn)成Char
  367.         HexToChar(HSJ121_ReciveData,(HSJ121_ReciveData[Length]+1));
  368.         
  369.         EXTI->IMR|=1<<13;  //開(kāi)13線上中斷
  370.         return State;
  371. }        
  372. /******************************************/
  373. //函數(shù)原型: HSJ121_Set_SleepMode(void)
  374. //輸入?yún)?shù): 無(wú)
  375. //輸出參數(shù): 無(wú)
  376. //函數(shù)返回: TRUE or FALSE
  377. //功能描述: 設(shè)置睡眠模式
  378. /******************************************/
  379. uint8_t        HSJ121_Set_SleepMode(void)
  380. {
  381.         uint8_t State;
  382.         EXTI->IMR&=~(1<<13); //屏蔽13線上中斷
  383.         
  384.         ClearData(HSJ121_SendData,HSJ121_SendDataLength); //清零發(fā)送數(shù)據(jù)
  385.         ClearData(HSJ121_ReciveData,HSJ121_ReciveDataLength); //清零接收數(shù)據(jù)
  386.         
  387.         HSJ121_SendData[Length]=0x03;        //添加數(shù)據(jù)長(zhǎng)度
  388.         HSJ121_SendData[CMD]=0x91;         //添加命令碼
  389. //        HSJ121_SendData[DataPOS]=0x00;        //關(guān)閉睡眠模式
  390.         HSJ121_SendData[DataPOS]=0x01;        //使能睡眠模式        
  391.         
  392.         State=HSJ121_SendAndRecive(HSJ121_SendData,HSJ121_ReciveData);
  393.         
  394. //        將模塊回復(fù)的數(shù)據(jù)從HEX碼轉(zhuǎn)成Char
  395.         HexToChar(HSJ121_ReciveData,(HSJ121_ReciveData[Length]+1));
  396.         
  397.         EXTI->IMR|=1<<13;  //開(kāi)13線上中斷
  398.         return State;
  399. }
  400. /******************************************/
  401. //函數(shù)原型: HSJ121_Into_SleepMode(void)
  402. //輸入?yún)?shù): 無(wú)
  403. //輸出參數(shù): 無(wú)
  404. //函數(shù)返回: TRUE or FALSE
  405. //功能描述: 進(jìn)入睡眠模式
  406. /******************************************/
  407. uint8_t        HSJ121_Into_SleepMode(void)
  408. {
  409.         uint8_t State;
  410.         EXTI->IMR&=~(1<<13); //屏蔽13線上中斷
  411.         
  412.         ClearData(HSJ121_SendData,HSJ121_SendDataLength); //清零發(fā)送數(shù)據(jù)
  413.         ClearData(HSJ121_ReciveData,HSJ121_ReciveDataLength); //清零接收數(shù)據(jù)        
  414.         
  415.         HSJ121_SendData[Length]=0x02;        //添加數(shù)據(jù)長(zhǎng)度
  416.         HSJ121_SendData[CMD]=0x90;         //添加命令碼
  417.         
  418.         State=HSJ121_SendAndRecive(HSJ121_SendData,HSJ121_ReciveData);

  419. //        將模塊回復(fù)的數(shù)據(jù)從HEX碼轉(zhuǎn)成Char
  420.         HexToChar(HSJ121_ReciveData,(HSJ121_ReciveData[Length]+1));
  421.         
  422.         EXTI->IMR|=1<<13;  //開(kāi)13線上中斷
  423.         return State;
  424. }
  425. /******************************************/
  426. //函數(shù)原型: HSJ121_WakeUp()
  427. //輸入?yún)?shù): 無(wú)
  428. //輸出參數(shù): 無(wú)
  429. //函數(shù)返回: TRUE or FALSE
  430. //功能描述: 喚醒芯片,進(jìn)入工作模式
  431. /******************************************/
  432. uint8_t HSJ121_WakeUp(void)  
  433. {
  434.         uint8_t State;
  435.         EXTI->IMR&=~(1<<13); //屏蔽13線上中斷
  436.         
  437.         ClearData(HSJ121_SendData,HSJ121_SendDataLength); //清零發(fā)送數(shù)據(jù)
  438.         ClearData(HSJ121_ReciveData,HSJ121_ReciveDataLength); //清零接收數(shù)據(jù)
  439.         
  440.         HSJ121_SendData[Length]=0x02;        //添加數(shù)據(jù)長(zhǎng)度
  441.         HSJ121_SendData[CMD]=0xA6;         //添加命令碼

  442.         State=HSJ121_SendAndRecive(HSJ121_SendData,HSJ121_ReciveData);
  443.         
  444. //        將模塊回復(fù)的數(shù)據(jù)從HEX碼轉(zhuǎn)成Char
  445.         HexToChar(HSJ121_ReciveData,(HSJ121_ReciveData[Length]+1));
  446.         
  447.         EXTI->IMR|=1<<13;  //開(kāi)13線上中斷
  448.         return State;        
  449. }        
  450.                                  
復(fù)制代碼


  1. //////////////////////////////////////////////////////////////////////////////////         
  2. //本程序只供測(cè)試使用,不能用作產(chǎn)品代碼
  3. //////////////////////////////////////////////////////////////////////////////////
  4. /* 包含的頭文件 --------------------------------------------------------------*/
  5. #include "bsp.h"
  6. #include "i2c.h"
  7. #include "timer.h"
  8. #include "usart.h"

  9. #include "aboutdata.h"
  10. #include "HSJ121.h"

  11. /************************************************
  12. 函數(shù)名稱 : System_Initializes
  13. 功    能 : 系統(tǒng)初始化
  14. 參    數(shù) : 無(wú)
  15. 返 回 值 : 無(wú)
  16. 作    者 :
  17. *************************************************/
  18. void System_Initializes(void)
  19. {
  20.   BSP_Initializes();                                                                                                                //底層初始化
  21.   TIMER_Initializes();                                                                                                        //TIMER初始化
  22.   USART_Initializes();                                                                                                        //串口1初始化
  23. }

  24. /************************************************
  25. 函數(shù)名稱 : main
  26. 功    能 : 主函數(shù)入口
  27. 參    數(shù) : 無(wú)
  28. 返 回 值 : int
  29. 作    者 :
  30. *************************************************/
  31. int main(void)
  32. {
  33.   System_Initializes();                                                                                                         //系統(tǒng)初始化
  34.         HSJ121Init();                                                                                                                                         //芯片初始化

  35. //所有命令都必須在喚醒成功的狀態(tài)下執(zhí)行
  36. //---------------------芯片喚醒-------------------------//
  37. #if HSJ_WakeUp_en
  38.                 if(HSJ121_WakeUp()==TRUE){
  39.                         printf("Wake Up Success\n");
  40.                         USART1_PrintfNChar(CharData,strlen(CharData));        
  41. //-----------------------------------------------------//                                
  42. //---------------------低速掃描模式---------------------//
  43. #if        HSJ_LowScanMode_en
  44.                 if(HSJ121_Set_LowScanMode(HSJ121_Mode_LowScan)==TRUE){
  45.                         printf("Set Low Scan Mode Success\n");
  46.                         USART1_PrintfNChar(CharData,strlen(CharData));
  47.                 }else{
  48.                         printf("Set Low Scan Mode Fail\n");
  49.                         USART1_PrintfNChar(CharData,strlen(CharData));
  50.                 }
  51. #endif                        
  52. //---------------------接近感應(yīng)模式---------------------//
  53. #if        HSJ_NearInductionMode_en
  54.                 if(HSJ121_Set_NearInductionMode(HSJ121_Mode_NearInduction)==TRUE){
  55.                         printf("Set Near Induction Mode Success\n");
  56.                         USART1_PrintfNChar(CharData,strlen(CharData));
  57.                 }else{
  58.                         printf("Set Near Induction Mode Fail\n");
  59.                         USART1_PrintfNChar(CharData,strlen(CharData));
  60.                 }        
  61. #endif               
  62. //---------------------獲取配置-------------------------//
  63. #if HSJ_GetConfig_en
  64.                 if(HSJ121_Get_Config()==TRUE){
  65.                         printf("Get Config Success\n");
  66.                         USART1_PrintfNChar(CharData,strlen(CharData));
  67.                 }else{
  68.                         printf("Get Config Fail\n");
  69.                         USART1_PrintfNChar(CharData,strlen(CharData));
  70.                 }
  71. #endif
  72. //---------------------設(shè)置掃描時(shí)間----------------------//        
  73. #if HSJ_SetScanTime_en
  74.                 if(HSJ121_Set_ScanTime(HSJ121_KeyScanTime)==TRUE){
  75.                         printf("Set Scan Time Success\n");
  76.                         USART1_PrintfNChar(CharData,strlen(CharData));
  77.                 }else{
  78.                         printf("Set Scan Time Fail\n");
  79.                         USART1_PrintfNChar(CharData,strlen(CharData));
  80.                 }
  81. #endif
  82. //---------------------獲取掃描時(shí)間----------------------//        
  83. #if HSJ_GetScanTime_en
  84.                 if(HSJ121_Get_ScanTime()==TRUE){
  85.                         printf("Get Scan Time Success\n");
  86.                         USART1_PrintfNChar(CharData,strlen(CharData));
  87.                 }else{
  88.                         printf("Get Scan Time Fail\n");
  89.                         USART1_PrintfNChar(CharData,strlen(CharData));
  90.                 }
  91. #endif        
  92. //---------------------設(shè)置睡眠模式----------------------//        
  93. #if HSj_SetSleepMode_en
  94.                 if(HSJ121_Set_SleepMode()==TRUE){
  95.                         printf("Set Sleep Mode Success\n");
  96.                         USART1_PrintfNChar(CharData,strlen(CharData));
  97.                 }else{
  98.                         printf("Set Sleep Mode Fail\n");
  99.                         USART1_PrintfNChar(CharData,strlen(CharData));
  100.                 }
  101. #endif                        
  102. //---------------------進(jìn)入睡眠模式---------------------//
  103. #if HSJ_IntoSleepMode_en
  104.                 if(HSJ121_Into_SleepMode()==TRUE){
  105.                         printf("Into Sleep Mode Success\n");
  106.                         USART1_PrintfNChar(CharData,strlen(CharData));
  107.                 }else{
  108.                         printf("Into Sleep Mode Fail\n");
  109.                         USART1_PrintfNChar(CharData,strlen(CharData));
  110.                 }               
  111. #endif               
  112. //-----------------------------------------------------//                                
  113.                 }else{
  114.                         printf("Wake Up Fail\n");
  115.                         USART1_PrintfNChar(CharData,strlen(CharData));
  116.                 }        
  117. #endif
  118.                
  119.   while(1);
  120. }


  121. /******************************* end ************************************/
復(fù)制代碼

所有資料51hei提供下載:
HSJ121-STM32F103RCT6.7z (391.06 KB, 下載次數(shù): 15)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

ID:516571 發(fā)表于 2019-6-8 11:36 | 顯示全部樓層
感謝樓主的分享,好好學(xué)習(xí)下
回復(fù)

使用道具 舉報(bào)

ID:495929 發(fā)表于 2019-6-5 19:31 | 顯示全部樓層
樓主我用了你的hsj121的源碼,就是read的時(shí)候一直是0,很奇怪
回復(fù)

使用道具 舉報(bào)

ID:495929 發(fā)表于 2019-6-5 10:39 | 顯示全部樓層
樓主,我IIC讀出來(lái)的數(shù)據(jù)一直是0,你有么有碰到類似的情況?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 视频一区在线观看 | 婷婷综合网| 久久久视 | 国产精品美女久久久久久免费 | 日韩欧美国产精品 | 欧美激情视频一区二区三区免费 | 欧美高清视频在线观看 | 欧美激情综合 | 国产japanhdxxxx麻豆 | 亚洲在线免费观看 | 国产精品国产精品国产专区不蜜 | 青青草这里只有精品 | 日韩欧美国产精品一区二区 | 亚洲欧美网 | 欧美日韩综合视频 | 青娱乐自拍 | 欧美在线一区二区三区 | 96国产精品久久久久aⅴ四区 | 精品一区二区视频 | 玩丰满女领导对白露脸hd | 国产欧美一级二级三级在线视频 | 在线观看中文字幕 | 欧美一区二区三区久久精品 | 激情小说综合网 | 国产日韩欧美在线观看 | 日日操操 | 亚洲精品一区二三区不卡 | 日日夜夜天天久久 | 国产激情一区二区三区 | 国产精品视频一区二区三区不卡 | 黄网站在线观看 | 可以免费看的毛片 | 日韩欧美国产精品一区 | 9999国产精品欧美久久久久久 | 久久精品视频网站 | 国产免费一区二区 | 最新91在线 | 国产成人一区二区三区 | 国产精品久久av | 羞羞色影院 | 玖玖在线精品 |