3227|2

391

帖子

1

TA的资源

一粒金砂(高级)

楼主
 

【TI首届低功耗设计大赛】手持温度心电监测仪(综合帖) [复制链接]

本帖最后由 hh376158101 于 2015-1-5 23:59 编辑

说说我设计这个手持式监护仪的缘由吧。记得高考那年,因为身体原因住进了医院,在医院住了挺久,每天都要进行两次体温检测,使用的是常规的水银体温计,由于所在的是省里的大医院,所以病号特别多,每一层200多个病号。每一个病号都要分发、回收体温计。护士们都是通过纸笔记录测量数据,回到护士站一一输入系统。所以护士姐姐的工作量还是挺大的。难怪她们经常抱怨,医生动动嘴,护士跑断腿,呵呵。在医院住了挺久,换了好几个病友,又一次因为军区医院的干部病房告急,就把一个部队首长安排跟我一起住。待遇就是不一样啊,有专人服侍,而且心电检测等许多常规检查都是上门服务,同样都是病号,差别怎么就那么大呢,呵呵。那么问题来了,为了减轻护士工作负担,同时解决医疗资源合理分配的问题,我打算设计一款能够进行非接触式测温,能够测量保存多组数据,最后将数据通过蓝牙发送至护士站电脑的手持终端,稍后,还会拓展心电监测功能。

说说系统框架。
首先,本次大赛要求基于金刚狼套件,所以launchpad 的IO口对设计有一定的限制。下图为金刚狼launchpad的各类硬件接口示意图。

从接口示意图中,我们了解到该launchpad预留了一路硬件SPIUART,已经两路模拟输入接口,I2C接口通过软件模拟。使用了这些接口之后,省下的IO已经不多,所以我们要考虑周全,好好利用这些接口。
                   通过网络查找相关资料,最终得到了如下图所示的系统框图。


非接触式测温:
我们使用的是MLX90615热电堆传感器。该传感器在人体体温范围内,精度达到0.02摄氏度。其通过I2C接口与单片机进行通信。
显示部分:
                   由于msp430fr5969没有提供段式LCD驱动器,而且对功耗的要求相对较高,所以我选择了cog12864低功耗点阵液晶。单片机通过SPI接口与其通信。
数据存储:
                   RF5969提供了64KBFRAM,用于温度、时间的存储足够,可是用于存储心电信号数据就捉襟见肘了,,所以我拓展了一片外置存储器,期初想使用富士通的1MFRAM,看了下价格,却步了。最后我使用了512KEEPROM,跟富士通I2C接口的FRAM存储器接口一样,日后,有需要可以随时更换。
键盘:
                   当初我考虑过普通的IO矩阵键盘、AD键盘。不过由于IO有限,第一种方案放弃。AD键盘存在一定的不确定性,对于医疗设备这种要求严苛的设备老说不太适合。所以最后,我选择了通过键盘芯片来拓展。我使用的是TITCA8418,其最大可支持80个按键,有键盘模式和普通IO模式可供我们配置,可向单片机提供中断信号,通过I2C接口与单片机通信。
蓝牙模块:
                   蓝牙模块通过串口与单片机通信。两个蓝牙模块使用透传模式。
电池电量检测:
                   电池电量检测使用TIBQ27010,其通过I2C总线与单片机进行通信。
ECG心电监测:
                   心电监测模拟前端选择TI公司的ADS1294四通道模拟前端,可实现5导联的心电监测。


四肢电极RA\LA\LL经过差分放大器做差,分别得到四肢导联I、导联II、导联III、四肢电极RL作为电势零点、威尔逊中心终端电势为四肢电极RA\LA\LL的平均电势,其作为胸部导联的参考电势,经差分放大得到胸部导联V1
电源部分:
电源使用锂电池供电,所以我使用了,TPS63021DCDC芯片。

以下是原理图:




软件:
TCA8418驱动:
  1. /**************************************************************************************************************************************************
  2. *                                 Included Headers                                                                                                *
  3. **************************************************************************************************************************************************/
  4. #include "MSP430.h"                           // Empty header file to allow global changes in one header file
  5. #include "I2C.h"
  6. #include "TCA8418_Key_Scan.h"                 // Definition file for TCA8418 Registers





  7. /**************************************************************************************************************************************************
  8. *                                 External Variables                                                                                              *
  9. **************************************************************************************************************************************************/
  10. extern char   TCA8418_Packet_Data[];

  11. /**************************************************************************************************************************************************
  12. *                                 Initialize_Keyboard                                                                                         *
  13. **************************************************************************************************************************************************/
  14. /*!
  15. * @ingroup TCA8418_Functions_Public
  16. *
  17. * @brief Initializes the TCA8418 Keyboard
  18. *
  19. * @param[in]   device_slot     Location of the CC Radio on the MAVRK Motherboard
  20. *
  21. * @return      NONE   
  22. *
  23. **************************************************************************************************************************************************/
  24. void Initialize_Keyboard()
  25. {
  26.     Init_TCA8418(TCA8418_I2C_SLAVE_ADDRESS); // Initialize TCA8418 Component  
  27.    
  28.     //Initialize_Keylock ();
  29.    
  30.     Enable_TCA8418_Interrupts();
  31.       
  32. }   

  33. /**************************************************************************************************************************************************
  34. *                                 Initialize_Keylock                                                                                         *
  35. **************************************************************************************************************************************************/
  36. /*!
  37. * @ingroup TCA8418_Functions_Public
  38. *
  39. * @brief Initializes the TCA8418 Keyboard keypad lock/unlock feature
  40. *
  41. * @param[in]   device_slot     Location of the CC Radio on the MAVRK Motherboard
  42. *
  43. * @return      NONE   
  44. *
  45. **************************************************************************************************************************************************/
  46. void Initialize_Keylock ()
  47. {
  48.    
  49. // USe SHIFT Key & 0 Key as keypad unlock keys
  50.     Set_TCA8418_Keylock_Unlock_Values (SHIFT_SWITCH, SWITCH_0, TCA8418_I2C_SLAVE_ADDRESS);  

  51.    
  52. // 1 second timeout between 1st unlock key press and 2nd unlock key press
  53.     Set_TCA8418_Keylock_Timer_Value (TCA8418_1_SEC, TCA8418_I2C_SLAVE_ADDRESS);            

  54. // 1 second interrupt timer mask
  55.     Set_TCA8418_Keylock_Interrupt_Mask_Timer_Value (TCA8418_1_SEC, TCA8418_I2C_SLAVE_ADDRESS);  

  56. // This function can be used if the initial state desired is to have the keypad unlocked   
  57.     Disable_TCA8418_Keylock(TCA8418_I2C_SLAVE_ADDRESS);         

  58. // Enable Keypad Lock Interrupt which signals detection of correct unlock key1 and key2 which unlocks of keypad
  59.     Enable_TCA8418_Keypad_Lock_Interrupt (TCA8418_I2C_SLAVE_ADDRESS);
  60. }

  61. /**************************************************************************************************************************************************
  62. *                                 Enable_TCA8418_Interrupts                                                                                   *
  63. **************************************************************************************************************************************************/
  64. /*!
  65. * @ingroup TCA8418_Functions_Public
  66. *
  67. * @brief Enable TCA8418 Component Data_Ready Interrupt
  68. *
  69. * @param[in]   device_slot     Location of the CC Radio on the MAVRK Motherboard
  70. *
  71. * @return      NONE   
  72. *
  73. **************************************************************************************************************************************************/
  74. void Enable_TCA8418_Interrupts ()  
  75. {  
  76.     //写1清中断标志位
  77.     Clear_TCA8418_Interrupt_Status(TCA8418_ALL_INTERRUPT_FLAGS,  TCA8418_I2C_SLAVE_ADDRESS);   // Clear all interrupt status bits in TCA8418 device
  78.     Enable_TCA8418_Key_Event_Interrupt( TCA8418_I2C_SLAVE_ADDRESS); // Enable interrupt for Key press Events on Keypad

  79. }



  80. /*TCA8418使用指南*/

  81. //***************TCA8418初始化*******************/
  82. //配置寄存器清零
  83. //将FIFO内键值全部读出(清空FIFO)
  84. //配置键盘IO
  85. //设置MCU中断IO,负责接收TCA8418中断请求

  86. //**************键盘锁初始化********************/
  87. //设置键盘锁的值(两个组合键,解锁)
  88. //设置第一解锁键与第二解锁键的时间间隔
  89. //设置键盘锁中断屏蔽时间
  90. //不使能键盘锁(根据需要设置)
  91. //使能键盘锁中断

  92. /***************使能中断***********************/
  93. //清除中断状态寄存器的标志位
  94. //使能按键事件中断

  95. //**************按键检测及处理*****************/
  96. //关闭按键事件中断
  97. //读取中断状态寄存器,查看是什么引起的中断
  98. //如果是解锁中断,则打开键盘锁,停止键盘锁中断
  99. //如果是按键事件中断,则查看键盘锁状态寄存器,看键盘
  100. //是否处于锁定状态,如果是,不处理,如果不是,则读取
  101. //键值,之后清除中断状态寄存器,使能按键事件中断
  102. //这就完成里一个键值的读取工作


  103. unsigned char TCA8418_Key_Event_Buffer[TCA8418_KEY_EVENT_BUFFER_SIZE];
  104. unsigned char TCA8418_Key_Events_In_Buffer_Size;

  105. TCA8418_Interrupt_Status_register_type TCA8418_Interrupt_Status_register;
  106. /*************************************************************************************************************************************************/
  107. /*  This section of code contains public functions that are generally used by standard applications. The parameter sets for public API functions */
  108. /*  provide an abstraction layer that will be maintained throughout updates and changes to underlying processor functions.                       */
  109. /*                                                                                                                                               */   
  110. /*! \cond PUBLIC                                                                                                                                 */
  111. /*************************************************************************************************************************************************/

  112. /**************************************************************************************************************************************************
  113. *  Read_TCA8418_Register                                                                                                  
  114. **************************************************************************************************************************************************/
  115. /*!
  116. * @ingroup TCA8418_Functions_Public
  117. *
  118. * @brief Read an I2C register value from a TCA8418 Device
  119. *
  120. * The function will read an I2C register value from a TCA8418 Device.
  121. *
  122. * @param[in]   register_address        TCA8418 I2C register address to be read
  123. * @param[out]  read_data               Pointer to variable where data read from TCA8418 register is stored
  124. * @param[in]   I2C_slave_address       TCA8418 I2C slave address
  125. *
  126. * @return  I2C_OPERATION_SUCCESSFUL    Success
  127. * @return  I2C_WRITE_FAILED_NACK       Failure as TCA8418 NAK a transmission on I2C            
  128. **************************************************************************************************************************************************/
  129. unsigned char Read_TCA8418_Register (unsigned char register_address, unsigned char I2C_slave_address)
  130. {
  131.     return (IIC_ReadByte(I2C_slave_address, register_address));
  132. }

  133. /**************************************************************************************************************************************************
  134. *  Write_TCA8418_Register                                                                                                  
  135. **************************************************************************************************************************************************/
  136. /*!
  137. * @ingroup TCA8418_Functions_Public
  138. *
  139. * @brief Write a value to an I2C register in the TCA8418 Keypad Scan Device
  140. *
  141. * The function will write a value to an I2C register in the TCA8418 Keypad Scan Device.
  142. *
  143. * @param[in]   register_address        TCA8418 I2C register address to be written
  144. * @param[in]   write_data              Pointer to value to be written to the specified TCA8418 register
  145. * @param[in]   I2C_slave_address       TCA8418 I2C slave address
  146. *
  147. * @return  I2C_OPERATION_SUCCESSFUL    Success
  148. * @return  I2C_WRITE_FAILED_NACK       Failure as TCA8418 NAK a transmission on I2C            
  149. **************************************************************************************************************************************************/
  150. void Write_TCA8418_Register (unsigned char register_address, unsigned char write_data, unsigned char I2C_slave_address)
  151. {                                    
  152.      IIC_WriteByte(I2C_slave_address, register_address, write_data);
  153. }


  154. /**************************************************************************************************************************************************
  155. *  Config_TCA8418_Row_Col_Keyscan_GPIO_Function                                                                                                  
  156. **************************************************************************************************************************************************/
  157. /*!
  158. * @ingroup TCA8418_Functions_Public
  159. *
  160. * @brief Configure the TCA8418 Row Column Pin Function
  161. *
  162. * This function configures the TC8418 keyscan ROW-COLUMNS to the layout of key switches on RF-TCA8418-MVK module
  163. *
  164. * @param[in]   device_slot             Defines slot where RF-TCA8418-MVK module is plugged into MB-PRO-MVK motherboard
  165. * @param[in]   I2C_slave_address       TCA8418 I2C slave address
  166. *
  167. * @return  I2C_OPERATION_SUCCESSFUL    Success
  168. * @return  I2C_WRITE_FAILED_NACK       Failure as TCA8418 NAK a transmission on I2C            
  169. **************************************************************************************************************************************************/
  170. void Config_TCA8418_Row_Col_Keyscan_GPIO_Function (unsigned char I2C_slave_address)  
  171. {
  172.     Write_TCA8418_Register (TCA8418_KEYSCAN_GPIO_FUNCTION_1_REGISTER, 0X1F, I2C_slave_address);         

  173.     Write_TCA8418_Register (TCA8418_KEYSCAN_GPIO_FUNCTION_2_REGISTER, 0X0F, I2C_slave_address);         
  174.       
  175.     Write_TCA8418_Register (TCA8418_KEYSCAN_GPIO_FUNCTION_3_REGISTER, 0X00, I2C_slave_address);
  176. }
  177.   

  178. /**************************************************************************************************************************************************
  179. *  Enable_TCA8418_Key_Event_Interrupt                                                                                                  
  180. **************************************************************************************************************************************************/
  181. /*!
  182. * @ingroup TCA8418_Functions_Public
  183. *
  184. * @brief Enable the TCA8418 Key Event Interrupt
  185. *
  186. * This function sets the state of the TC8418 Key Event Interrupt to ENABLE
  187. *
  188. * @param[in]   device_slot             Defines slot where RF-TCA8418-MVK module is plugged into MB-PRO-MVK motherboard
  189. * @param[in]   I2C_slave_address       TCA8418 I2C slave address
  190. *
  191. * @return  I2C_OPERATION_SUCCESSFUL    Success
  192. * @return  I2C_WRITE_FAILED_NACK       Failure as TCA8418 NAK a transmission on I2C            
  193. **************************************************************************************************************************************************/
  194. void  Enable_TCA8418_Key_Event_Interrupt ( unsigned char I2C_slave_address)
  195. {
  196.     unsigned char TCA8418_Configuration = 0X00;
  197.     TCA8418_Configuration = Read_TCA8418_Register (TCA8418_CONFIGURATION_REGISTER, I2C_slave_address);
  198.    
  199.     TCA8418_Configuration = TCA8418_Configuration | 0X01 ;
  200.    
  201.     Write_TCA8418_Register (TCA8418_CONFIGURATION_REGISTER, TCA8418_Configuration, I2C_slave_address);
  202. }  

  203. /**************************************************************************************************************************************************
  204. *  Disable_TCA8418_Key_Event_Interrupt                                                                                                  
  205. **************************************************************************************************************************************************/
  206. /*!
  207. * @ingroup TCA8418_Functions_Public
  208. *
  209. * @brief Disable the TCA8418 Key Event Interrupt
  210. *
  211. * This function sets the state of the TC8418 Key Event Interrupt to DISABLE
  212. *
  213. * @param[in]   I2C_slave_address       TCA8418 I2C slave address
  214. *
  215. * @return  I2C_OPERATION_SUCCESSFUL    Success
  216. * @return  I2C_WRITE_FAILED_NACK       Failure as TCA8418 NAK a transmission on I2C            
  217. **************************************************************************************************************************************************/
  218. void  Disable_TCA8418_Key_Event_Interrupt ( unsigned char I2C_slave_address)
  219. {
  220.     unsigned char TCA8418_Configuration = 0X00 ;
  221.     TCA8418_Configuration = Read_TCA8418_Register (TCA8418_CONFIGURATION_REGISTER,I2C_slave_address);
  222.    
  223.     TCA8418_Configuration = TCA8418_Configuration & 0XFE ;
  224.    
  225.     Write_TCA8418_Register (TCA8418_CONFIGURATION_REGISTER, TCA8418_Configuration, I2C_slave_address);
  226. }  

  227. /**************************************************************************************************************************************************
  228. *  Get_TCA8418_Key_Event                                                                                                  
  229. **************************************************************************************************************************************************/
  230. /*!
  231. * @ingroup TCA8418_Functions_Public
  232. *
  233. * @brief Get the Key Event from the TCA8418 Key Event FIFO
  234. *
  235. * This function gets the data for  single key event data from the TC8418.
  236. *
  237. * @param[out]  key_event               Pointer to variable used to store key_event  data read from TCA8418 register
  238. * @param[in]   I2C_slave_address       TCA8418 I2C slave address
  239. *
  240. * @return  I2C_OPERATION_SUCCESSFUL    Success
  241. * @return  I2C_WRITE_FAILED_NACK       Failure as TCA8418 NAK a transmission on I2C            
  242. **************************************************************************************************************************************************/
  243. unsigned char  Get_TCA8418_Key_Event ( unsigned char I2C_slave_address)
  244. {  
  245.    
  246.     return Read_TCA8418_Register (TCA8418_KEY_EVENT_0_REGISTER,I2C_slave_address);
  247. }  

  248. /**************************************************************************************************************************************************
  249. *  Get_TCA8418_Key_Event_Count                                                                                                  
  250. **************************************************************************************************************************************************/
  251. /*!
  252. * @ingroup TCA8418_Functions_Public
  253. *
  254. * @brief Gets the number of Key Events stored in the TCA8418 Event FIFO
  255. *
  256. * This function gets the current Event Count (Number of Key and/or GPIO-Input Events in the ten deep FIFO)
  257. *
  258. * @param[out]  event_count             Pointer to variable used to store event_count
  259. * @param[in]   I2C_slave_address       TCA8418 I2C slave address
  260. *
  261. * @return  I2C_OPERATION_SUCCESSFUL    Success
  262. * @return  I2C_WRITE_FAILED_NACK       Failure as TCA8418 NAK a transmission on I2C            
  263. **************************************************************************************************************************************************/
  264. unsigned char Get_TCA8418_Key_Event_Count (unsigned char I2C_slave_address)
  265. {
  266.     return Read_TCA8418_Register (TCA8418_KEY_LOCK_AND_EVENT_COUNTER_REGISTER,I2C_slave_address);
  267. }


  268. /********************************************************************************************************************************
  269. *  Move_Key_Events_From_TCA8418_FIFO_To_Buffer
  270. ********************************************************************************************************************************/
  271. /*!
  272. * @ingroup TCA8418_Functions_Public
  273. *
  274. * @brief Drain TC8418 Key Event FIFO until empty, while storing Key Event data to Buffer
  275. *
  276. * This function will move all the Key_Events in the TCA8418 Key_Event FIFO into an application supplied key_event Buffer
  277. *                                      
  278. * @param[out]  key_event_buffer                Pointer to application supplied Key Event Buffer
  279. * @param[in]   key_event_buffer_size           Defines size of application key event buffer to prevent writing past end of buffers
  280. * @param[out]  number_of_key_events_in_buffer  Pointer to variable used to store the number of key events moved from the TCA8418 FIFO
  281. * @param[in]   I2C_slave_address               TCA8418 I2C slave address
  282. *
  283. * @return  I2C_OPERATION_SUCCESSFUL    Success
  284. * @return  I2C_WRITE_FAILED_NACK       Failure as TCA8418 NAK a transmission on I2C            
  285. ********************************************************************************************************************************/
  286. void Move_Key_Events_From_TCA8418_FIFO_To_Buffer (unsigned char* key_event_buffer,
  287.                                                                unsigned char  key_event_buffer_size,
  288.                                                                unsigned char number_of_key_events_in_buffer,
  289.                                                                unsigned char  I2C_slave_address)
  290. {
  291.     unsigned char buffer_index = 0;
  292.     unsigned char key_event;
  293.     unsigned char number_of_key_events_in_fifo;
  294.     unsigned char number_of_buffer_key_events = 0;
  295.             
  296.     // Get the current count of Key/GPIO Events in the Event FIFO  
  297.     number_of_key_events_in_fifo = Get_TCA8418_Key_Event_Count (I2C_slave_address);
  298.    
  299.     // Drain the TCA8418 Key/GPIO Event FIFO. The Event Count Register(Number of Events in FIFO)
  300.     // must be zero before the Interrupt Status Bit "K_INT" can be cleared  
  301.     do
  302.     {
  303.         Get_TCA8418_Key_Event (I2C_slave_address);
  304.         
  305.         // Copy Key_Event to output Key_Event Buffer
  306.         // Increment number of key events stored in output Buffer
  307.         // Increment outut buffer array index for storage of next key event
  308.         key_event_buffer [buffer_index] = key_event;
  309.         ++number_of_buffer_key_events;
  310.         ++buffer_index;
  311.         
  312.         // Get the current count of Key/GPIO Events in the Event FIFO
  313.         // It should be one less than previous count, unless a new key event occured
  314.         Get_TCA8418_Key_Event_Count (I2C_slave_address);

  315.       // Keep moving Key Event data from TCA8418 FIFO to Buffer until FIFO is drained
  316.       // or Output Buffer is Full based on defined size   
  317.     } while ((number_of_key_events_in_fifo > 0) && (buffer_index <= key_event_buffer_size));   
  318.    
  319.    
  320.     // Copy the number of key events that have been stored in the key_Event_Buffer for
  321.     // use by the calling function for retrieval/processing of key_events
  322.     number_of_key_events_in_buffer = number_of_buffer_key_events;         
  323. }  



  324. /********************************************************************************************************************************
  325. *  Enable_TCA8418_GP_Input_Event_Interrupt
  326. ********************************************************************************************************************************/
  327. /*!
  328. * @ingroup TCA8418_Functions_Public
  329. *
  330. * @brief Enables the GPIO Pin Event interrupt
  331. *
  332. * This function will enable the GPIO Input(Row or Col) Pin Event interrupt
  333. *                                      
  334. * @param[in]   I2C_slave_address       TCA8418 I2C slave address
  335. *
  336. * @return  I2C_OPERATION_SUCCESSFUL    Success
  337. * @return  I2C_WRITE_FAILED_NACK       Failure as TCA8418 NAK a transmission on I2C            
  338. ********************************************************************************************************************************/
  339. void Enable_TCA8418_GP_Input_Event_Interrupt (unsigned char I2C_slave_address)
  340. {  
  341.     unsigned char TCA8418_Configuration = 0X00 ;
  342.    
  343.     TCA8418_Configuration = Read_TCA8418_Register (TCA8418_CONFIGURATION_REGISTER, I2C_slave_address);

  344.     TCA8418_Configuration = TCA8418_Configuration | 0X02 ;
  345.    
  346.     Write_TCA8418_Register (TCA8418_CONFIGURATION_REGISTER, TCA8418_Configuration, I2C_slave_address);
  347. }  

  348. /********************************************************************************************************************************
  349. *  Disable_TCA8418_GP_Input_Event_Interrupt
  350. ********************************************************************************************************************************/
  351. /*!
  352. * @ingroup TCA8418_Functions_Public
  353. *
  354. * @brief Disables the GPIO Pin Event interrupt
  355. *
  356. * This function will disable the GPIO Input(Row or Col) Pin Event interrupt
  357. *                                      
  358. * @param[in]   device_slot             Defines slot where RF-TCA8418-MVK module is plugged into MB-PRO-MVK motherboard
  359. * @param[in]   I2C_slave_address       TCA8418 I2C slave address
  360. *
  361. * @return  I2C_OPERATION_SUCCESSFUL    Success
  362. * @return  I2C_WRITE_FAILED_NACK       Failure as TCA8418 NAK a transmission on I2C            
  363. ********************************************************************************************************************************/
  364. void Disable_TCA8418_GP_Input_Event_Interrupt ( unsigned char I2C_slave_address)
  365. {
  366.     unsigned char TCA8418_Configuration = 0X00 ;
  367.    
  368.     TCA8418_Configuration = Read_TCA8418_Register (TCA8418_CONFIGURATION_REGISTER,I2C_slave_address);

  369.     TCA8418_Configuration = TCA8418_Configuration & 0XFD ;
  370.    
  371.     Write_TCA8418_Register (TCA8418_CONFIGURATION_REGISTER, TCA8418_Configuration, I2C_slave_address);
  372. }  


  373. /********************************************************************************************************************************
  374. *  Set_TCA8418_Keylock_Timer_Value
  375. ********************************************************************************************************************************/
  376. /*!
  377. * @ingroup TCA8418_Functions_Public
  378. *
  379. * @brief Sets the Keylock Timer for delay "fill this in"
  380. *
  381. * This function will set the Keylock Timer Value for the Delay time between Key Unlock Press #1 and Key Unlock Press #2  
  382. *                                      
  383. * @param[in]   keypad_lock_timer_value         Sets time delay "fill this in Later"
  384. * @param[in]   device_slot                     Defines slot where RF-TCA8418-MVK module is plugged into MB-PRO-MVK motherboard
  385. * @param[in]   I2C_slave_address               TCA8418 I2C slave address
  386. *
  387. * @return  I2C_OPERATION_SUCCESSFUL    Success
  388. * @return  I2C_WRITE_FAILED_NACK       Failure as TCA8418 NAK a transmission on I2C            
  389. ********************************************************************************************************************************/
  390. void Set_TCA8418_Keylock_Timer_Value (unsigned char keypad_lock_timer_value,
  391.                                                    unsigned char I2C_slave_address)
  392. {
  393.     unsigned char TCA8418_Keypad_Timer = 0x00;                                               // Zero out global variable  
  394.    
  395.     TCA8418_Keypad_Timer = Read_TCA8418_Register (TCA8418_KEYPAD_LOCK_TIMER_REGISTER, I2C_slave_address);
  396.    
  397.     TCA8418_Keypad_Timer = (keypad_lock_timer_value & 0XF8) | keypad_lock_timer_value;
  398.    
  399.     Write_TCA8418_Register (TCA8418_KEYPAD_LOCK_TIMER_REGISTER, TCA8418_Keypad_Timer, I2C_slave_address);

  400. }  


  401. /********************************************************************************************************************************
  402. *  Get_TCA8418_Keylock_Timer_Value
  403. ********************************************************************************************************************************/
  404. /*!
  405. * @ingroup TCA8418_Functions_Public
  406. *
  407. * @brief Gets the Keylock Timer for delay "fill this in"
  408. *
  409. * This function will get the Keylock Timer Value for the Delay time between Key Unlock Press #1 and Key Unlock Press #2  
  410. *                                      
  411. * @param[out]  keypad_lock_timer_value         Time delay "fill this in Later"
  412. * @param[in]   device_slot                     Defines slot where RF-TCA8418-MVK module is plugged into MB-PRO-MVK motherboard
  413. * @param[in]   I2C_slave_address               TCA8418 I2C slave address
  414. *
  415. * @return  I2C_OPERATION_SUCCESSFUL    Success
  416. * @return  I2C_WRITE_FAILED_NACK       Failure as TCA8418 NAK a transmission on I2C            
  417. ********************************************************************************************************************************/
  418. void Get_TCA8418_Keylock_Timer_Value (unsigned char keypad_lock_timer_value,
  419.                                                    unsigned char I2C_slave_address)
  420. {   
  421.     unsigned char TCA8418_Keypad_Timer = 0x00;                                                // Zero out global variable  
  422.    
  423.     TCA8418_Keypad_Timer = Read_TCA8418_Register (TCA8418_KEYPAD_LOCK_TIMER_REGISTER,I2C_slave_address);
  424.    
  425.     keypad_lock_timer_value = TCA8418_Keypad_Timer & 0X07 ;
  426.    
  427. }  

  428. /********************************************************************************************************************************
  429. *  Set_TCA8418_Keylock_Interrupt_Mask_Timer_Value
  430. ********************************************************************************************************************************/
  431. /*!
  432. * @ingroup TCA8418_Functions_Public
  433. *
  434. * @brief Sets the Keylock Interrupt Mask Timer
  435. *
  436. * This function will set the Keylock Interrupt Mask Timer Value
  437. *                                      
  438. * @param[in]   keypad_lock_interrupt_mask_timer_value      Mask timer delay "fill this in Later"
  439. * @param[in]   device_slot                                 Defines slot where RF-TCA8418-MVK module is plugged into MB-PRO-MVK motherboard
  440. * @param[in]   I2C_slave_address                           TCA8418 I2C slave address
  441. *
  442. * @return  I2C_OPERATION_SUCCESSFUL    Success
  443. * @return  I2C_WRITE_FAILED_NACK       Failure as TCA8418 NAK a transmission on I2C            
  444. ********************************************************************************************************************************/
  445. void Set_TCA8418_Keylock_Interrupt_Mask_Timer_Value (unsigned char keypad_lock_interrupt_mask_timer_value,
  446.                                                                   unsigned char I2C_slave_address)
  447. {
  448.     unsigned char TCA8418_Keypad_Timer = 0x00;                                               // Zero out global variable  
  449.    
  450.     TCA8418_Keypad_Timer = Read_TCA8418_Register (TCA8418_KEYPAD_LOCK_TIMER_REGISTER, I2C_slave_address);
  451.    
  452.     TCA8418_Keypad_Timer = (TCA8418_Keypad_Timer & 0X07) | keypad_lock_interrupt_mask_timer_value;

  453.     Write_TCA8418_Register (TCA8418_KEYPAD_LOCK_TIMER_REGISTER, TCA8418_Keypad_Timer,I2C_slave_address);
  454.    
  455. }  


  456. /********************************************************************************************************************************
  457. *  Get_TCA8418_Keylock_Interrupt_Mask_Timer_Value
  458. ********************************************************************************************************************************/
  459. /*!
  460. * @ingroup TCA8418_Functions_Public
  461. *
  462. * @brief Gets the Keylock Interrupt Mask Timer Value  
  463. *
  464. * This function will get the Keylock Interrupt Mask Timer Value
  465. *                                      
  466. * @param[out]  keypad_lock_interrupt_mask_timer_value      Mask timer delay "fill this in Later"
  467. * @param[in]   I2C_slave_address                           TCA8418 I2C slave address
  468. *
  469. * @return  I2C_OPERATION_SUCCESSFUL    Success
  470. * @return  I2C_WRITE_FAILED_NACK       Failure as TCA8418 NAK a transmission on I2C            
  471. ********************************************************************************************************************************/
  472. void Get_TCA8418_Keylock_Interrupt_Mask_Timer_Value (unsigned char keypad_lock_interrupt_mask_timer_value,
  473.                                                                   unsigned char I2C_slave_address)
  474. {
  475.     unsigned char TCA8418_Keypad_Timer = 0x00;  
  476.    
  477.     TCA8418_Keypad_Timer = Read_TCA8418_Register (TCA8418_KEYPAD_LOCK_TIMER_REGISTER, I2C_slave_address);
  478.                            
  479.     keypad_lock_interrupt_mask_timer_value = TCA8418_Keypad_Timer & 0XF8 ;
  480.    
  481. }  

  482. /********************************************************************************************************************************
  483. *  Set_TCA8418_Keylock_Unlock_Values
  484. ********************************************************************************************************************************/
  485. /*!
  486. * @ingroup TCA8418_Functions_Public
  487. *
  488. * @brief Sets the Unlock Key Values for Key 1 and Key 2
  489. *
  490. * This function will set the Unlock Key Values for Key 1 and Key 2
  491. *                                      
  492. * @param[in]   key_1_unlock_value              Key 1 unlock value
  493. * @param[in]   key_2_unlock_value              Key 2 unlock value
  494. * @param[in]   I2C_slave_address               TCA8418 I2C slave address
  495. *
  496. * @return  I2C_OPERATION_SUCCESSFUL    Success
  497. * @return  I2C_WRITE_FAILED_NACK       Failure as TCA8418 NAK a transmission on I2C            
  498. ********************************************************************************************************************************/
  499. void Set_TCA8418_Keylock_Unlock_Values (unsigned char key_1_unlock_value,
  500.                                                      unsigned char key_2_unlock_value,
  501.                                                      unsigned char I2C_slave_address)

  502. {
  503.     unsigned char I2C_key_1_unlock_value = key_1_unlock_value;
  504.     unsigned char I2C_key_2_unlock_value = key_2_unlock_value;
  505.    
  506.     Write_TCA8418_Register (TCA8418_UNLOCK_KEY_1_REGISTER, I2C_key_1_unlock_value, I2C_slave_address);
  507.    
  508.     Write_TCA8418_Register (TCA8418_UNLOCK_KEY_2_REGISTER, I2C_key_2_unlock_value, I2C_slave_address);
  509. }

  510. /********************************************************************************************************************************
  511. *  Set_TCA8418_Keylock_Unlock_Values
  512. ********************************************************************************************************************************/
  513. /*!
  514. * @ingroup TCA8418_Functions_Public
  515. *
  516. * @brief Gets the Unlock Key Values for Key 1 and Key 2
  517. *
  518. * This function will get the Unlock Key Values for Key 1 and Key 2
  519. *                                      
  520. * @param[out]  key_1_unlock_value              Key 1 unlock value
  521. * @param[out]  key_2_unlock_value              Key 2 unlock value
  522. * @param[in]   device_slot                     Defines slot where RF-TCA8418-MVK module is plugged into MB-PRO-MVK motherboard
  523. * @param[in]   I2C_slave_address               TCA8418 I2C slave address
  524. *
  525. * @return  I2C_OPERATION_SUCCESSFUL    Success
  526. * @return  I2C_WRITE_FAILED_NACK       Failure as TCA8418 NAK a transmission on I2C            
  527. ********************************************************************************************************************************/
  528. void Get_TCA8418_Keylock_Unlock_Values (unsigned char key_1_unlock_value,
  529.                                                    unsigned char key_2_unlock_value,
  530.                                                    unsigned char  I2C_slave_address)
  531. {
  532.     unsigned char return_status;   
  533.     unsigned char I2C_key_1_unlock_value = 0X00;
  534.     unsigned char I2C_key_2_unlock_value = 0X00;
  535.    
  536.     I2C_key_1_unlock_value = Read_TCA8418_Register (TCA8418_UNLOCK_KEY_1_REGISTER, I2C_slave_address);
  537.    
  538.     I2C_key_2_unlock_value = Read_TCA8418_Register (TCA8418_UNLOCK_KEY_2_REGISTER, I2C_slave_address);
  539.    
  540.     key_1_unlock_value = I2C_key_1_unlock_value;
  541.     key_2_unlock_value = I2C_key_2_unlock_value;
  542. }

  543. /**************************************************************************************************************************************************
  544. *  Set_TCA8418_Keylock_State                                                                                                  
  545. **************************************************************************************************************************************************/
  546. /*!
  547. * @ingroup TCA8418_Functions_Public
  548. *
  549. * @brief Set(Enable or Disable) the Key Lock state
  550. *
  551. * This function sets the state of the TC8418 Key Lock (Enable or Disable)  
  552. *
  553. * @param[in]   keylock_state           Key Lock state can be set to ENABLE or DISABLE
  554. * @param[in]   I2C_slave_address       TCA8418 I2C slave address
  555. *
  556. * @return  I2C_OPERATION_SUCCESSFUL    Success
  557. * @return  I2C_WRITE_FAILED_NACK       Failure as TCA8418 NAK a transmission on I2C            
  558. **************************************************************************************************************************************************/
  559. void Set_TCA8418_Keylock_State(unsigned char  keylock_state,
  560.                                             unsigned char  I2C_slave_address)
  561. {
  562.    
  563.     unsigned char TCA8418_Key_Lock_Event_Counter = 0x00;                                     // Zero out global register
  564.   
  565.     TCA8418_Key_Lock_Event_Counter = Read_TCA8418_Register (TCA8418_KEY_LOCK_AND_EVENT_COUNTER_REGISTER,I2C_slave_address);
  566.    
  567.     TCA8418_Key_Lock_Event_Counter = (TCA8418_Key_Lock_Event_Counter & 0XCF) |  keylock_state ;

  568.     Write_TCA8418_Register (TCA8418_KEY_LOCK_AND_EVENT_COUNTER_REGISTER, TCA8418_Key_Lock_Event_Counter, I2C_slave_address);
  569. }

  570. /**************************************************************************************************************************************************
  571. *  Enable_TCA8418_Keylock                                                                                                  
  572. **************************************************************************************************************************************************/
  573. /*!
  574. * @ingroup TCA8418_Functions_Public
  575. *
  576. * @brief Enables the Key Lock state
  577. *
  578. * This function sets the state of the TC8418 Key Lock to ENABLE.  
  579. *
  580. * @param[in]   I2C_slave_address       TCA8418 I2C slave address
  581. *
  582. * @return  I2C_OPERATION_SUCCESSFUL    Success
  583. * @return  I2C_WRITE_FAILED_NACK       Failure as TCA8418 NAK a transmission on I2C            
  584. **************************************************************************************************************************************************/
  585. void Enable_TCA8418_Keylock( unsigned char I2C_slave_address)
  586. {   
  587.     Set_TCA8418_Keylock_State(0X00, I2C_slave_address);  // Enable Keylock Function
  588. }

  589. /**************************************************************************************************************************************************
  590. *  Disable_TCA8418_Keylock                                                                                                  
  591. **************************************************************************************************************************************************/
  592. /*!
  593. * @ingroup TCA8418_Functions_Public
  594. *
  595. * @brief Disables the Key Lock state
  596. *
  597. * This function sets the state of the TC8418 Key Lock to DISABLE.  
  598. *
  599. * @param[in]   device_slot             Defines slot where RF-TCA8418-MVK module is plugged into MB-PRO-MVK motherboard
  600. * @param[in]   I2C_slave_address       TCA8418 I2C slave address
  601. *
  602. * @return  I2C_OPERATION_SUCCESSFUL    Success
  603. * @return  I2C_WRITE_FAILED_NACK       Failure as TCA8418 NAK a transmission on I2C            
  604. **************************************************************************************************************************************************/
  605. void Disable_TCA8418_Keylock(unsigned char I2C_slave_address)
  606. {  
  607.     Set_TCA8418_Keylock_State(0X30, I2C_slave_address);  // Disable Keylock Function  
  608. }

  609. /**************************************************************************************************************************************************
  610. *  mvk_Get_TCA8418_Keylock_Status
  611. **************************************************************************************************************************************************/
  612. /*!
  613. * @ingroup TCA8418_Functions_Public
  614. *
  615. * @brief Get the Key Lock state (Enable or Disable)
  616. *
  617. * This function gets the state of the TC8418 Key Lock (Enable or Disable)  
  618. *
  619. * @param[out]  keypad_lock_status      Key Lock state can be set to ENABLE or DISABLE
  620. * @param[in]   device_slot             Defines slot where RF-TCA8418-MVK module is plugged into MB-PRO-MVK motherboard
  621. * @param[in]   I2C_slave_address       TCA8418 I2C slave address
  622. *
  623. * @return  I2C_OPERATION_SUCCESSFUL    Success
  624. * @return  I2C_WRITE_FAILED_NACK       Failure as TCA8418 NAK a transmission on I2C            
  625. **************************************************************************************************************************************************/
  626. void Get_TCA8418_Keypad_Lock_Status(unsigned char keypad_lock_status,
  627.                                                  unsigned char I2C_slave_address)
  628. {  
  629.     unsigned char TCA8418_Key_Lock_Event_Counter = 0x00;                                     // Zero out global variable
  630.    
  631.     TCA8418_Key_Lock_Event_Counter = Read_TCA8418_Register (TCA8418_KEY_LOCK_AND_EVENT_COUNTER_REGISTER, I2C_slave_address);
  632.    
  633.     keypad_lock_status = TCA8418_Key_Lock_Event_Counter;

  634. }

  635. /**************************************************************************************************************************************************
  636. *  Set_TCA8418_Keypad_Lock_Interrupt
  637. **************************************************************************************************************************************************/
  638. /*!
  639. * @ingroup TCA8418_Functions_Public
  640. *
  641. * @brief Set(Enable or Disable) the Key Lock Interrupt
  642. *
  643. * This function sets the Key Lock Interrupt register to ENABLE or DISABLE
  644. *
  645. * @param[in]   state                   Key Lock Interrupt state can be set to ENABLE or DISABLE
  646. * @param[in]   device_slot             Defines slot where RF-TCA8418-MVK module is plugged into MB-PRO-MVK motherboard
  647. * @param[in]   I2C_slave_address       TCA8418 I2C slave address
  648. *
  649. * @return  I2C_OPERATION_SUCCESSFUL    Success
  650. * @return  I2C_WRITE_FAILED_NACK       Failure as TCA8418 NAK a transmission on I2C            
  651. **************************************************************************************************************************************************/
  652. void Set_TCA8418_Keypad_Lock_Interrupt(unsigned char state, unsigned char I2C_slave_address)
  653. {
  654.     unsigned char TCA8418_Configuration = 0x00;                                              // Zero out global variable
  655.    
  656.     TCA8418_Configuration = Read_TCA8418_Register (TCA8418_CONFIGURATION_REGISTER,I2C_slave_address);
  657.    
  658.     TCA8418_Configuration = (TCA8418_Configuration & 0XFB)| state;

  659.     Write_TCA8418_Register (TCA8418_CONFIGURATION_REGISTER, TCA8418_Configuration, I2C_slave_address);
  660. }     

  661. /**************************************************************************************************************************************************
  662. *  Enable_TCA8418_Keypad_Lock_Interrupt
  663. **************************************************************************************************************************************************/
  664. /*!
  665. * @ingroup TCA8418_Functions_Public
  666. *
  667. * @brief Enables the Key Lock Interrupt
  668. *
  669. * This function sets the Key Lock Interrupt register to ENABLE.
  670. *
  671. * @param[in]   device_slot             Defines slot where RF-TCA8418-MVK module is plugged into MB-PRO-MVK motherboard
  672. * @param[in]   I2C_slave_address       TCA8418 I2C slave address
  673. *
  674. * @return  I2C_OPERATION_SUCCESSFUL    Success
  675. * @return  I2C_WRITE_FAILED_NACK       Failure as TCA8418 NAK a transmission on I2C            
  676. **************************************************************************************************************************************************/
  677. void Enable_TCA8418_Keypad_Lock_Interrupt ( unsigned char I2C_slave_address)
  678. {   
  679.     Set_TCA8418_Keypad_Lock_Interrupt (0X04, I2C_slave_address);
  680. }  

  681. /**************************************************************************************************************************************************
  682. *  Disable_TCA8418_Keypad_Lock_Interrupt
  683. **************************************************************************************************************************************************/
  684. /*!
  685. * @ingroup TCA8418_Functions_Public
  686. *
  687. * @brief Disables the Key Lock Interrupt
  688. *
  689. * This function sets the Key Lock Interrupt register to DISABLE.
  690. *
  691. * @param[in]   device_slot             Defines slot where RF-TCA8418-MVK module is plugged into MB-PRO-MVK motherboard
  692. * @param[in]   I2C_slave_address       TCA8418 I2C slave address
  693. *
  694. * @return  I2C_OPERATION_SUCCESSFUL    Success
  695. * @return  I2C_WRITE_FAILED_NACK       Failure as TCA8418 NAK a transmission on I2C            
  696. **************************************************************************************************************************************************/
  697. void Disable_TCA8418_Keypad_Lock_Interrupt (unsigned char I2C_slave_address)
  698. {   
  699.     Set_TCA8418_Keypad_Lock_Interrupt (0X00, I2C_slave_address);
  700. }  

  701. /**************************************************************************************************************************************************
  702. *  Get_TCA8418_Interrupt_Status
  703. **************************************************************************************************************************************************/
  704. /*!
  705. * @ingroup TCA8418_Functions_Public
  706. *
  707. * @brief Get the TCA8418 Interrupt Status Register
  708. *
  709. * This function returns the TCA8418 interrupt status register containing individual bits (SET or CLEAR) for each interrupt in the status byte.
  710. *
  711. * @param[out]  interrupt_status        Contains individual bits for each current interrupt (SET or CLEAR)
  712. * @param[in]   I2C_slave_address       TCA8418 I2C slave address
  713. *
  714. * @return  I2C_OPERATION_SUCCESSFUL    Success
  715. * @return  I2C_WRITE_FAILED_NACK       Failure as TCA8418 NAK a transmission on I2C            
  716. **************************************************************************************************************************************************/
  717. unsigned char  Get_TCA8418_Interrupt_Status ( unsigned char  I2C_slave_address)
  718. {
  719.     return Read_TCA8418_Register (TCA8418_INTERRUPT_STATUS_REGISTER, I2C_slave_address);
  720. }

  721. /**************************************************************************************************************************************************
  722. *  Clear_TCA8418_Interrupt_Status
  723. **************************************************************************************************************************************************/
  724. /*!
  725. * @ingroup TCA8418_Functions_Public
  726. *
  727. * @brief Clears interrupts out of the TCA8418 Interrupt Register
  728. *
  729. * This function clears the indicated interrupts in the TCA8418.
  730. *
  731. * @param[in]   interrupt_status        Contains individual bits for each interrupt to clear
  732. * @param[in]   I2C_slave_address       TCA8418 I2C slave address
  733. *
  734. * @return  I2C_OPERATION_SUCCESSFUL    Success
  735. * @return  I2C_WRITE_FAILED_NACK       Failure as TCA8418 NAK a transmission on I2C            
  736. **************************************************************************************************************************************************/
  737. void Clear_TCA8418_Interrupt_Status (unsigned char interrupt_status,
  738.                                                   unsigned char I2C_slave_address)
  739. {
  740.     unsigned char TCA8418_interrupt_status = interrupt_status;
  741.    
  742.     Write_TCA8418_Register (TCA8418_INTERRUPT_STATUS_REGISTER, TCA8418_interrupt_status, I2C_slave_address);
  743. }

  744. /**************************************************************************************************************************************************
  745. *  Set_TCA8418_Debounce_State
  746. **************************************************************************************************************************************************/
  747. /*!
  748. * @ingroup TCA8418_Functions_Public
  749. *
  750. * @brief Sets the TCA8418 Debounce State
  751. *
  752. * This function sets the debounce state for the indicated row / columns
  753. *
  754. * @param[in]   row7_row0_state         Identifies the row settings
  755. * @param[in]   col9_col0_state         Identifies the column settings
  756. * @param[in]   I2C_slave_address       TCA8418 I2C slave address
  757. *
  758. * @return  I2C_OPERATION_SUCCESSFUL    Success
  759. * @return  I2C_WRITE_FAILED_NACK       Failure as TCA8418 NAK a transmission on I2C            
  760. **************************************************************************************************************************************************/
  761. void Set_TCA8418_Debounce_State (unsigned int row7_row0_state,
  762.                                               unsigned int col9_col0_state,
  763.                                               unsigned char I2C_slave_address)
  764. {
  765.     unsigned char TCA8418_row_debounce_state =  ~(unsigned char)row7_row0_state;             // Bitwise inversion Register bit defined 0=Enabled, 1=Disabled
  766.     unsigned char TCA8418_col7_col0_debounce_state = ~(unsigned char)col9_col0_state;        // Bitwise inversion Register bit defined 0=Enabled, 1=Disabled
  767.     unsigned char TCA8418_col9_col8_debounce_state = ~(unsigned char)(col9_col0_state >> 8); // Bitwise inversion Register bit defined 0=Enabled, 1=Disabled

  768.     Write_TCA8418_Register (TCA8418_GPIO_DEBOUNCE_DISABLE_1_REGISTER, TCA8418_row_debounce_state, I2C_slave_address);

  769.     Write_TCA8418_Register (TCA8418_GPIO_DEBOUNCE_DISABLE_2_REGISTER, TCA8418_col7_col0_debounce_state, I2C_slave_address);
  770.       
  771.     Write_TCA8418_Register (TCA8418_GPIO_DEBOUNCE_DISABLE_3_REGISTER, TCA8418_col9_col8_debounce_state,  I2C_slave_address);

  772. }

  773. /**************************************************************************************************************************************************
  774. *  Get_TCA8418_Debounce_State
  775. **************************************************************************************************************************************************/
  776. /*!
  777. * @ingroup TCA8418_Functions_Public
  778. *
  779. * @brief Gets the TCA8418 Debounce State
  780. *
  781. * This function returns the debounce state for the indicated row / columns
  782. *
  783. * @param[out]  row7_row0_state         Location to place the row settings
  784. * @param[out]  col9_col0_state         Location to place the column settings
  785. * @param[in]   I2C_slave_address       TCA8418 I2C slave address
  786. *
  787. * @return  I2C_OPERATION_SUCCESSFUL    Success
  788. * @return  I2C_WRITE_FAILED_NACK       Failure as TCA8418 NAK a transmission on I2C            
  789. **************************************************************************************************************************************************/
  790. void Get_TCA8418_Debounce_State (unsigned int row7_row0_state,
  791.                                               unsigned int col9_col0_state,
  792.                                               unsigned char I2C_slave_address)
  793. {
  794.     unsigned char TCA8418_row_debounce_state;
  795.     unsigned char TCA8418_col7_col0_debounce_state;
  796.     unsigned char TCA8418_col9_col8_debounce_state;
  797.          
  798.     TCA8418_row_debounce_state = Read_TCA8418_Register (TCA8418_GPIO_DEBOUNCE_DISABLE_1_REGISTER,I2C_slave_address);
  799.      
  800.     TCA8418_col7_col0_debounce_state = Read_TCA8418_Register (TCA8418_GPIO_DEBOUNCE_DISABLE_2_REGISTER,I2C_slave_address);
  801.       
  802.     TCA8418_col9_col8_debounce_state = Read_TCA8418_Register (TCA8418_GPIO_DEBOUNCE_DISABLE_3_REGISTER,I2C_slave_address);

  803.    
  804.     row7_row0_state = ~TCA8418_row_debounce_state;                                    // Bitwise inversion Register bit defined 0=Enabled, 1=Disabled
  805.     col9_col0_state = ~ ( ((unsigned int)TCA8418_col9_col8_debounce_state << 8) |     // Bitwise inversion Register bit defined 0=Enabled, 1=Disabled
  806.                             (unsigned int)TCA8418_col7_col0_debounce_state);
  807. }

  808. /**************************************************************************************************************************************************
  809. *  Set_TCA8418_GPIO_Pullup_State
  810. **************************************************************************************************************************************************/
  811. /*!
  812. * @ingroup TCA8418_Functions_Public
  813. *
  814. * @brief Sets the TCA8418 GPIO pullup registers
  815. *
  816. * This function sets the GPIO pullup state for the indicated row / columns
  817. *
  818. * @param[in]   row7_row0_state         Identifies the row settings
  819. * @param[in]   col9_col0_state         Identifies the column settings
  820. * @param[in]   I2C_slave_address       TCA8418 I2C slave address
  821. *
  822. * @return  I2C_OPERATION_SUCCESSFUL    Success
  823. * @return  I2C_WRITE_FAILED_NACK       Failure as TCA8418 NAK a transmission on I2C            
  824. **************************************************************************************************************************************************/
  825. void Set_TCA8418_GPIO_Pullup_State (unsigned int row7_row0_state,
  826.                                                  unsigned int col9_col0_state,
  827.                                                  unsigned char I2C_slave_address)
  828. {
  829.     unsigned char TCA8418_row_pullup_state =  ~(unsigned char)row7_row0_state;             // Bitwise inversion Register bit defined 0=Enabled, 1=Disabled
  830.     unsigned char TCA8418_col7_col0_pullup_state = ~(unsigned char)col9_col0_state;        // Bitwise inversion Register bit defined 0=Enabled, 1=Disabled
  831.     unsigned char TCA8418_col9_col8_pullup_state = ~(unsigned char)(col9_col0_state >> 8); // Bitwise inversion Register bit defined 0=Enabled, 1=Disabled
  832.    
  833.     Write_TCA8418_Register (TCA8418_GPIO_PULLUP_1_REGISTER, TCA8418_row_pullup_state, I2C_slave_address);
  834.    
  835.     Write_TCA8418_Register (TCA8418_GPIO_PULLUP_2_REGISTER, TCA8418_col7_col0_pullup_state, I2C_slave_address);

  836.     Write_TCA8418_Register (TCA8418_GPIO_PULLUP_3_REGISTER, TCA8418_col9_col8_pullup_state, I2C_slave_address);
  837. }

  838. /**************************************************************************************************************************************************
  839. *  Get_TCA8418_GPIO_Pullup_State
  840. **************************************************************************************************************************************************/
  841. /*!
  842. * @ingroup TCA8418_Functions_Public
  843. *
  844. * @brief Gets the TCA8418 GPIO pullup registers
  845. *
  846. * This function returns the GPIO pullup state for the indicated row / columns
  847. *
  848. * @param[out]  row7_row0_state         Location to place the row settings
  849. * @param[out]  col9_col0_state         Location to place the column settings
  850. * @param[in]   I2C_slave_address       TCA8418 I2C slave address
  851. *
  852. * @return  I2C_OPERATION_SUCCESSFUL    Success
  853. * @return  I2C_WRITE_FAILED_NACK       Failure as TCA8418 NAK a transmission on I2C            
  854. **************************************************************************************************************************************************/
  855. void Get_TCA8418_GPIO_Pullup_State (unsigned int row7_row0_state,
  856.                                                  unsigned int col9_col0_state,
  857.                                                  unsigned char I2C_slave_address)
  858. {
  859.     unsigned char TCA8418_row_pullup_state;
  860.     unsigned char TCA8418_col7_col0_pullup_state;
  861.     unsigned char TCA8418_col9_col8_pullup_state;
  862.       
  863.     TCA8418_row_pullup_state = Read_TCA8418_Register (TCA8418_GPIO_PULLUP_1_REGISTER, I2C_slave_address);
  864.   
  865.     TCA8418_col7_col0_pullup_state = Read_TCA8418_Register (TCA8418_GPIO_PULLUP_2_REGISTER,I2C_slave_address);
  866.       
  867.     TCA8418_col9_col8_pullup_state = Read_TCA8418_Register (TCA8418_GPIO_PULLUP_3_REGISTER,I2C_slave_address);
  868.    
  869.     row7_row0_state = ~TCA8418_row_pullup_state;                                    // Bitwise inversion Register bit defined 0=Enabled, 1=Disabled
  870.     col9_col0_state = ~ ( ((unsigned int)TCA8418_col9_col8_pullup_state << 8) |     // Bitwise inversion Register bit defined 0=Enabled, 1=Disabled
  871.                             (unsigned int)TCA8418_col7_col0_pullup_state);  
  872. }


  873. /**************************************************************************************************************************************************
  874. *  Get_TCA8418_GPIO_Interrupt_Status
  875. **************************************************************************************************************************************************/
  876. /*!
  877. * @ingroup TCA8418_Functions_Public
  878. *
  879. * @brief Get the TCA8418 GPIO Interrupt Status Register
  880. *
  881. * This function returns the TCA8418 GPIO interrupt status register containing individual bits (SET or CLEAR) for each GPIO interrupt in the
  882. * status bytes.
  883. *
  884. * @param[out]  GPIO_interrupt_status_1 Contains individual bits for each current GPIO interrupt (SET or CLEAR)
  885. * @param[out]  GPIO_interrupt_status_2 Contains individual bits for each current GPIO interrupt (SET or CLEAR)
  886. * @param[out]  GPIO_interrupt_status_3 Contains individual bits for each current GPIO interrupt (SET or CLEAR)
  887. * @param[in]   I2C_slave_address       TCA8418 I2C slave address
  888. *
  889. * @return  I2C_OPERATION_SUCCESSFUL    Success
  890. * @return  I2C_WRITE_FAILED_NACK       Failure as TCA8418 NAK a transmission on I2C            
  891. **************************************************************************************************************************************************/
  892. void Get_TCA8418_GPIO_Interrupt_Status (unsigned char GPIO_interrupt_status_1,
  893.                                                      unsigned char GPIO_interrupt_status_2,
  894.                                                      unsigned char GPIO_interrupt_status_3,
  895.                                                      unsigned char I2C_slave_address)
  896. {
  897.      unsigned char TCA8418_GPIO_interrupt_status_1 = 0x00;
  898.      unsigned char TCA8418_GPIO_interrupt_status_2 = 0x00;
  899.      unsigned char TCA8418_GPIO_interrupt_status_3 = 0x00;
  900.      
  901.      TCA8418_GPIO_interrupt_status_1 = Read_TCA8418_Register (TCA8418_KEYSCAN_GPIO_FUNCTION_1_REGISTER, I2C_slave_address);

  902.      TCA8418_GPIO_interrupt_status_2 = Read_TCA8418_Register (TCA8418_KEYSCAN_GPIO_FUNCTION_2_REGISTER, I2C_slave_address);

  903.      TCA8418_GPIO_interrupt_status_3 = Read_TCA8418_Register (TCA8418_KEYSCAN_GPIO_FUNCTION_3_REGISTER, I2C_slave_address);
  904.      
  905.      GPIO_interrupt_status_1 = TCA8418_GPIO_interrupt_status_1;
  906.      GPIO_interrupt_status_2 = TCA8418_GPIO_interrupt_status_2;
  907.      GPIO_interrupt_status_3 = TCA8418_GPIO_interrupt_status_3;
  908.      
  909. }

  910. /**************************************************************************************************************************************************
  911. *  Get_TCA8418_GPIO_Data_Status
  912. **************************************************************************************************************************************************/
  913. /*!
  914. * @ingroup TCA8418_Functions_Public
  915. *
  916. * @brief Get the TCA8418 GPIO Data Status
  917. *
  918. * This function returns the TCA8418 GPIO datt bits for each GPIO pin in the TCA8418.
  919. *
  920. * @param[out]  GPIO_data_status_1      Contains individual bits with the data from each GPIO
  921. * @param[out]  GPIO_data_status_2      Contains individual bits with the data from each GPIO
  922. * @param[out]  GPIO_data_status_3      Contains individual bits with the data from each GPIO
  923. * @param[in]   device_slot             Defines slot where RF-TCA8418-MVK module is plugged into MB-PRO-MVK motherboard
  924. * @param[in]   I2C_slave_address       TCA8418 I2C slave address
  925. *
  926. * @return  I2C_OPERATION_SUCCESSFUL    Success
  927. * @return  I2C_WRITE_FAILED_NACK       Failure as TCA8418 NAK a transmission on I2C            
  928. **************************************************************************************************************************************************/
  929. void Get_TCA8418_GPIO_Data_Status (unsigned char GPIO_data_status_1,
  930.                                                 unsigned char GPIO_data_status_2,
  931.                                                 unsigned char GPIO_data_status_3,
  932.                                                 unsigned char I2C_slave_address)
  933. {
  934.      unsigned char TCA8418_GPIO_data_status_1 = 0x00;
  935.      unsigned char TCA8418_GPIO_data_status_2 = 0x00;
  936.      unsigned char TCA8418_GPIO_data_status_3 = 0x00;

  937.      TCA8418_GPIO_data_status_1 = Read_TCA8418_Register (TCA8418_GPIO_DATA_STATUS_1_REGISTER, I2C_slave_address);

  938.      TCA8418_GPIO_data_status_2 = Read_TCA8418_Register (TCA8418_GPIO_DATA_STATUS_2_REGISTER, I2C_slave_address);
  939.      
  940.      TCA8418_GPIO_data_status_3 = Read_TCA8418_Register (TCA8418_GPIO_DATA_STATUS_3_REGISTER, I2C_slave_address);
  941.      
  942.      GPIO_data_status_1 = TCA8418_GPIO_data_status_1;
  943.      GPIO_data_status_2 = TCA8418_GPIO_data_status_2;
  944.      GPIO_data_status_3 = TCA8418_GPIO_data_status_3;   
  945. }  

  946. /**************************************************************************************************************************************************
  947. *  Process_TCA8418_Interrupt
  948. **************************************************************************************************************************************************/
  949. /*!
  950. * @ingroup TCA8418_Functions_Public
  951. *
  952. * @brief Process TCA8418 Interrupt
  953. *
  954. * This function processes the various TCA8418 interrupts, including CTRL-ALT-DEL, KEY Lock, GPI events, Key buffer overflow, and general Key events
  955. *
  956. * @param[in]   I2C_slave_address       TCA8418 I2C slave address
  957. *
  958. * @return  I2C_OPERATION_SUCCESSFUL    Success
  959. * @return  I2C_WRITE_FAILED_NACK       Failure as TCA8418 NAK a transmission on I2C            
  960. **************************************************************************************************************************************************/
  961. void Process_TCA8418_Interrupt ( unsigned char I2C_slave_address)
  962. {
  963.     unsigned char lock_status;
  964.     unsigned char number_of_key_events_in_buffer;
  965.     unsigned char interrupt_status = 0x00;
  966.     volatile TCA8418_Interrupt_Status_register_type *TCA8418_Interrupt_Status_register = (TCA8418_Interrupt_Status_register_type*)&interrupt_status;

  967.     Disable_TCA8418_Key_Event_Interrupt (I2C_slave_address);  // Prevent TCA8418 from generating additional interrupts until current one is processed  
  968.         
  969.     Get_TCA8418_Interrupt_Status (I2C_slave_address); // Find out what type of action is required by the TCA8418
  970.      
  971.      
  972.     if (TCA8418_Interrupt_Status_register->Key_Event_Interrupt_Flag)
  973.     {
  974.         Move_Key_Events_From_TCA8418_FIFO_To_Buffer (TCA8418_Key_Event_Buffer,  // Globally allocated buffer array in TCA8418_Key_Scan.c
  975.                                                                 TCA8418_KEY_EVENT_BUFFER_SIZE,        
  976.                                                                 number_of_key_events_in_buffer,
  977.                                                                 I2C_slave_address);
  978.         
  979.         
  980.         // Prints Key Press/Realease to terminal  
  981.         // Replace Print_Key_Event below below with call to process key events for your specific embedded system
  982.         TCA8418_Print_Key_Event (TCA8418_Key_Event_Buffer,               
  983.                                    number_of_key_events_in_buffer,
  984.                                    I2C_slave_address);
  985.          
  986.         // Data is available to be packetized, if desired by the main program
  987.         TCA8418_Key_Events_In_Buffer_Size = number_of_key_events_in_buffer;  // Provides user an indication of the number of events currently in the buffer
  988.     }  
  989.    
  990.         
  991.     Clear_TCA8418_Interrupt_Status (interrupt_status, I2C_slave_address);

  992.     Enable_TCA8418_Key_Event_Interrupt (I2C_slave_address);
  993. }


  994. /**************************************************************************************************************************************************
  995. *  TCA8418_Print_Key_Event
  996. **************************************************************************************************************************************************/
  997. /*!
  998. * @ingroup TCA8418_Functions_Private
  999. *
  1000. * @brief Prints the key event buffer out the UART Print buffer
  1001. *
  1002. * This function prints debug messages for all key events present in the buffer.
  1003. *
  1004. * @param[in]   TCA8418_key_event_buffer        Pointer to the key event buffer containing the key press events
  1005. * @param[in]   number_of_key_events_in_buffer  Number of characters in the event buffer
  1006. * @param[in]   I2C_slave_address               TCA8418 I2C slave address
  1007. *
  1008. * @return  I2C_OPERATION_SUCCESSFUL    Success
  1009. * @return  I2C_WRITE_FAILED_NACK       Failure as TCA8418 NAK a transmission on I2C            
  1010. **************************************************************************************************************************************************/
  1011. //void TCA8418_Print_Key_Event (unsigned char TCA8418_key_event_buffer,
  1012. //                                  unsigned char number_of_key_events_in_buffer,
  1013. //                                  unsigned char I2C_slave_address)
  1014. //{
  1015. //    unsigned char number_of_key_events = number_of_key_events_in_buffer;
  1016. //    unsigned char buffer_index= 0;
  1017. //    unsigned char keypad_locked;
  1018. //    unsigned char key;
  1019. //    unsigned char key_state;
  1020. //
  1021. //    Get_TCA8418_Keypad_Lock_Status(&keypad_locked, device_slot, I2C_slave_address);
  1022. //        
  1023. //    while(number_of_key_events > 0)
  1024. //    {  
  1025. //        TCA8418_Key_Event = TCA8418_key_event_buffer[buffer_index];
  1026. //        key = TCA8418_Key_Event_register->Key_Event;
  1027. //        key_state = TCA8418_Key_Event_register->Key_Press_State;
  1028. //      
  1029. //        if (!keypad_locked)
  1030. //        {  
  1031. //            switch(key)
  1032. //            {  
  1033. //                case SWITCH_1:
  1034. //                    mvk_UART_Debug_PrintF_Flush ("7", 1);
  1035. //                    break;
  1036. //        
  1037. //                case SWITCH_2:
  1038. //                    mvk_UART_Debug_PrintF_Flush ("8", 1);
  1039. //                    break;
  1040. //   
  1041. //                case SWITCH_3:
  1042. //                    mvk_UART_Debug_PrintF_Flush ("9", 1);
  1043. //                    break;
  1044. //        
  1045. //                case SWITCH_4:
  1046. //                    mvk_UART_Debug_PrintF_Flush ("4", 1);
  1047. //                    break;
  1048. //        
  1049. //                case SWITCH_5:
  1050. //                    mvk_UART_Debug_PrintF_Flush ("5", 1);
  1051. //                    break;            
  1052. //            
  1053. //                case SWITCH_6:
  1054. //                    mvk_UART_Debug_PrintF_Flush ("6", 1);
  1055. //                    break;      
  1056. //           
  1057. //                case SWITCH_7:
  1058. //                    mvk_UART_Debug_PrintF_Flush ("1", 1);
  1059. //                    break;   
  1060. //           
  1061. //                case SWITCH_8:
  1062. //                    mvk_UART_Debug_PrintF_Flush ("2", 1);
  1063. //                    break;   
  1064. //           
  1065. //                case SWITCH_9:
  1066. //                    mvk_UART_Debug_PrintF_Flush ("3", 1);
  1067. //                    break;   
  1068. //               
  1069. //                case SHIFT_SWITCH:
  1070. //                    mvk_UART_Debug_PrintF_Flush ("SHIFT", 5);
  1071. //                    break;   
  1072. //               
  1073. //                case SWITCH_0:
  1074. //                    mvk_UART_Debug_PrintF_Flush ("0", 1);
  1075. //                    break;   
  1076. //            
  1077. //                case ENTER_SWITCH: // ENTER_SWITCH used as a special Key to initiate keypad lock
  1078. //
  1079. //                    if(Is_TCA8418_Keylock_Available())
  1080. //                    {
  1081. //                        if (!keypad_locked)  // Remove if ENTER key is not used as Lock Keypad Key Event
  1082. //                        {  
  1083. //                            Enable_TCA8418_Keylock(I2C_slave_address);
  1084. //                            Enable_TCA8418_Keypad_Lock_Interrupt ( I2C_slave_address);
  1085. //                        }
  1086. //                    }
  1087. //                    else                  
  1088. //                    {
  1089. //                        mvk_UART_Debug_PrintF_Flush ("ENTER", 5);
  1090. //                    }
  1091. //                    break;        
  1092. //            
  1093. //                case NAVIGATION_UP:
  1094. //                    mvk_UART_Debug_PrintF_Flush ("NAV_UP", 6);
  1095. //                    break;   
  1096. //           
  1097. //                case NAVIGATION_DOWN:
  1098. //                    mvk_UART_Debug_PrintF_Flush ("NAV_DOWN", 8);
  1099. //                    break;   
  1100. //               
  1101. //                case NAVIGATION_RIGHT:
  1102. //                    mvk_UART_Debug_PrintF_Flush ("NAV_RIGHT", 9);
  1103. //                    break;   
  1104. //               
  1105. //                case NAVIGATION_LEFT:
  1106. //                    mvk_UART_Debug_PrintF_Flush ("NAV_LEFT", 8);
  1107. //                    break;   
  1108. //               
  1109. //                case NAVIGATION_SELECT:
  1110. //                    mvk_UART_Debug_PrintF_Flush ("NAV_SELECT", 10);
  1111. //                    break;               
  1112. //        
  1113. //                default:     
  1114. //                    mvk_UART_Debug_PrintF_Flush ("UNDEFINED_KEY_ERROR", 19);
  1115. //                break;
  1116. //            }
  1117. //        }// end of if (!keypad_locked)
  1118. //        
  1119. //        // Get current state of keypad locked, it could have changed if ENTER key processed above
  1120. //        Get_TCA8418_Keypad_Lock_Status(&keypad_locked, device_slot, I2C_slave_address);
  1121. //         
  1122. //        if (!keypad_locked)  
  1123. //        {
  1124. //            switch(key_state)
  1125. //            {  
  1126. //                case KEY_RELEASED:
  1127. //                    mvk_UART_Debug_PrintF_Flush ("_KEY_RELEASED \n\r", 16);
  1128. //                    break;
  1129. //        
  1130. //                case KEY_PRESSED:
  1131. //                    mvk_UART_Debug_PrintF_Flush ("_KEY_PRESSED \n\r", 15);
  1132. //                    break;        
  1133. //                default:     
  1134. //                    mvk_UART_Debug_PrintF_Flush ("_UNDEFINED_KEY_STATE_ERROR \n\r", 29);
  1135. //                    break;
  1136. //            }
  1137. //        }// end of if (!keypad_locked)
  1138. //        
  1139. //        ++buffer_index;
  1140. //        --number_of_key_events;  
  1141. //        
  1142. //    } // End While (Key_Events > 0)
  1143. //}



  1144. /*************************************************************************************************************************************************/
  1145. /* End of PUBLIC section                                                                                                                         */
  1146. /*                                                                                                                                               */
  1147. /*! \endcond                                                                                                                                     */
  1148. /*************************************************************************************************************************************************/

复制代码

LCD驱动:
  1. #include "msp430fr5969.h"
  2. #include "SPI.h"
  3. #include "IO_Define.h"
  4. #include "LCD.h"
  5. #include "zifu.h"
  6. #include "delay.h"


  7. void HDReset()
  8. {
  9.   //LCD_CS_0;
  10.   LCD_RSTB_0;
  11.   TimerDelay_ms(20);
  12.   LCD_RSTB_1;
  13.   TimerDelay_ms(40);
  14.   //LCD_CS_1;
  15. }


  16. void Init_ST7567()
  17. {
  18.   LCD_AO_0;                     //发指令
  19.   //SPI_SELECT_LCD;               //SELECT LCD
  20.   LCD_CS_0;
  21.   HDReset();
  22.   TimerDelay_ms(100);

  23.   UCB0TXBUF = 0xe2;          //SOFT RESET//寄存器复位
  24.   TimerDelay_us(64);
  25.   UCB0TXBUF = 0xaf;          //0xaf显示器开
  26.   TimerDelay_us(64);
  27.   UCB0TXBUF = 0x2f;          //0x2f升压电路,电压管理电路,
  28.   TimerDelay_us(64);             
  29.   UCB0TXBUF = 0x25;           //0x20-0x27为V5电压内部电阻调整设置
  30.   TimerDelay_us(64);
  31.   UCB0TXBUF = 0x81;           // SET EV 调对比度
  32.   TimerDelay_us(64);
  33.   UCB0TXBUF = 0x1F;           //0x01-0x3f电量寄存器设置模式
  34.   TimerDelay_us(64);
  35.   UCB0TXBUF = 0xa0;           //0xa0为Segment正向,0xa1 为Segment反向
  36.   TimerDelay_us(64);
  37.   UCB0TXBUF = 0xc8;           //0xc0正向扫描,0xc8反射扫描
  38.   TimerDelay_us(64);
  39.   UCB0TXBUF = 0xa6;           // //0xa6正向显示,0xa7反向显示
  40.   TimerDelay_us(64);
  41.   UCB0TXBUF = 0xa4;           // //0xa4正常显示,0xa5全屏点亮
  42.   TimerDelay_us(64);
  43.   UCB0TXBUF = 0xf8;           // //背压比设置
  44.   TimerDelay_us(64);
  45.   UCB0TXBUF = 0x00;                 //00--10
  46.   TimerDelay_us(64);
  47.   LCD_AO_0;
  48. //  Stop_SPI();
  49.   //LCD_CS_1;
  50. }


  51. /*-------------------------------------------
  52. LCD_set_XY: 设置LCD坐标函数
  53. 输入参数:X:0-128(column) Y:0-8(page)
  54. 编写日期:20140315
  55. ---------------------------------------------*/
  56. void LCD_set_XY(unsigned int X, unsigned char Y)
  57. {
  58.         unsigned char temp1 = 0,temp2 = 0;
  59. //        Star_SPI();
  60.         LCD_CS_0;
  61.         LCD_AO_0;
  62.         UCB0TXBUF = 0xb0+Y;   //设置page(页)地址
  63.         TimerDelay_us(64);
  64.         temp1 =( X & 0XF0)>>4;      //高四位
  65.         temp2 = X & 0X0F;           //低四位
  66.         UCB0TXBUF = 0x10|temp1;     //设置column(列)地址高4位  (共有131列)
  67.         TimerDelay_us(64);
  68.         UCB0TXBUF = temp2;     //设置column(列)地址低4位
  69.         TimerDelay_us(64);
  70.         LCD_AO_1;
  71. }

  72. /*-------------------------------------------
  73. Clear_Arrow: 清除箭头
  74. 输入参数:X:0-128(column) Y:0-8(page)
  75. 编写日期:20140315
  76. ---------------------------------------------*/
  77. void Clear_Arrow(unsigned char column,unsigned char page)
  78. {
  79.   LCD_write_word(column, page , 34);
  80. }

  81. /*-------------------------------------------
  82. Clear_Region: 清除区域
  83. 输入参数:column1:起始点横坐标
  84.             page1:起始点纵坐标      
  85.           column2:终点横坐标  
  86.             page2:终点纵坐标
  87.               xx : 填充内容
  88. 编写日期:20140315
  89. ---------------------------------------------*/
  90. void Clear_Region(unsigned char column1,unsigned char page1,unsigned char column2,unsigned char page2,unsigned char xx)
  91. {
  92.   unsigned char i,j;
  93.   LCD_CS_0;
  94.   for(i=page1;i<page2;i++)
  95.   {
  96.     LCD_AO_0;
  97.     UCB0TXBUF = 0xb0+i;   //设置page(页)地址         (共有8页)
  98.     TimerDelay_us(64);
  99.     UCB0TXBUF = 0x10;     //设置column(列)地址高4位  (共有131列)
  100.     TimerDelay_us(64);
  101.     UCB0TXBUF = 0x00;     //设置column(列)地址低4位
  102.     TimerDelay_us(64);
  103.     for(j=column1;j<column2;j++)
  104.     {
  105.       LCD_AO_1;
  106.       UCB0TXBUF = xx;
  107.       TimerDelay_us(64);
  108.     }
  109.   }
  110.   LCD_CS_1;
  111. }


  112. /*---------------------------------------------
  113. LCD_write_zimu: 显示6(宽)*12(高)点阵列数字字母符号等半角类
  114. 输入参数:c:显示的字符;
  115. 编写日期:20140315
  116. -----------------------------------------------*/
  117. void LCD_write_zimu(unsigned char column, unsigned char page,unsigned char c) //row:列 page:页 dd:字符
  118. {
  119.         unsigned char i;         
  120.        
  121.         LCD_set_XY(column, page);// 列,页
  122.         for(i=0; i<8;i++)
  123.         {
  124.                 UCB0TXBUF = zimu[c*16+i];
  125.                 TimerDelay_us(64);
  126.         }
  127.        
  128.         LCD_set_XY(column, page+1);// 列,页
  129.         for(i=8; i<16;i++)
  130.         {
  131.                 UCB0TXBUF = zimu[c*16+i];
  132.                 TimerDelay_us(64);
  133.         }
  134.         LCD_CS_1;
  135. }


  136. /*---------------------------------------------
  137. LCD_write_shu_6_8: 显示6(宽)*8(高)点阵列数字字母符号等半角类
  138. 输入参数:c:显示的字符;
  139. 编写日期:20140315
  140. -----------------------------------------------*/
  141. void LCD_write_shu_6_8(unsigned char column, unsigned char page,unsigned char c) //row:列 page:页 dd:字符
  142. {
  143.         unsigned char i;         
  144.        
  145.         LCD_set_XY(column, page);// 列,页
  146.         for(i=0; i<6;i++)
  147.         {
  148.                 UCB0TXBUF = shuzi_6_8[c*6+i];
  149.                 TimerDelay_us(64);
  150.         }
  151.         LCD_CS_1;
  152. }

  153. /*---------------------------------------------
  154. LCD_write_shu_6_8: 显示6(宽)*8(高)点阵列数字字母符号等半角类,支持反向显示
  155. 输入参数:c:显示的字符;
  156. 编写日期:20140315
  157. -----------------------------------------------*/
  158. void LCD_write_shu_6_8_opp(unsigned char column, unsigned char page,unsigned char c,unsigned char opposite) //row:列 page:页 dd:字符
  159. {
  160.         unsigned char i;         
  161.        
  162.         LCD_set_XY(column, page);// 列,页
  163.         if(opposite == 0)
  164.         {
  165.           for(i=0; i<6;i++)
  166.           {
  167.                   UCB0TXBUF = shuzi_6_8[c*6+i];
  168.                   TimerDelay_us(64);
  169.           }
  170.         }
  171.         else if(opposite == 1)
  172.         {
  173.           for(i=0; i<6;i++)
  174.           {
  175.                   UCB0TXBUF = ~shuzi_6_8[c*6+i];
  176.                   TimerDelay_us(64);
  177.           }
  178.         }
  179.         LCD_CS_1;
  180.          
  181. }


  182. /*---------------------------------------------
  183. LCD_write_shu_6_16: 显示6(宽)*16(高)点阵列数字字母符号等半角类
  184. 输入参数:c:显示的字符;
  185. 编写日期:20140315
  186. -----------------------------------------------*/
  187. void LCD_write_shu_6_16(unsigned char column, unsigned char page,unsigned char c) //row:列 page:页 dd:字符
  188. {
  189.         unsigned char i;         
  190.        
  191.         LCD_set_XY(column, page);// 列,页
  192.         for(i=0; i<6;i++)
  193.         {
  194.                 UCB0TXBUF = shuzi_6_16[c*12+i];
  195.                 TimerDelay_us(64);
  196.         }
  197.        
  198.         LCD_set_XY(column, page+1);// 列,页
  199.         for(i=6; i<12;i++)
  200.         {
  201.                 UCB0TXBUF = shuzi_6_16[c*12+i];
  202.                 TimerDelay_us(64);
  203.         }
  204.         LCD_CS_1;
  205. }


  206. /*---------------------------------------------
  207. LCD_write_shu_13_24: 显示13(宽)*24(高)点阵列数字字母符号等半角类
  208. 输入参数:c:显示的字符;
  209. 编写日期:20140315
  210. -----------------------------------------------*/
  211. void LCD_write_shu_13_24(unsigned char column, unsigned char page,unsigned char c) //row:列 page:页 dd:字符
  212. {
  213.         unsigned char i;         
  214.        
  215.         LCD_set_XY(column, page);// 列,页
  216.         for(i=0; i<13;i++)
  217.         {
  218.                 UCB0TXBUF = shuzi_13_24[c*39+i];
  219.                 TimerDelay_us(64);
  220.         }
  221.        
  222.         LCD_set_XY(column, page+1);// 列,页
  223.         for(i=13; i<26;i++)
  224.         {
  225.                 UCB0TXBUF = shuzi_13_24[c*39+i];
  226.                 TimerDelay_us(64);
  227.         }
  228.         LCD_set_XY(column, page+2);// 列,页
  229.         for(i=26; i<39;i++)
  230.         {
  231.                 UCB0TXBUF = shuzi_13_24[c*39+i];
  232.                 TimerDelay_us(64);
  233.         }
  234.         LCD_CS_1;
  235. }


  236. /*---------------------------------------------
  237. LCD_write_shu_digit: 显示9(宽)*16(高)点阵列数字字母符号等半角类
  238. 输入参数:c:显示的字符;
  239. 编写日期:20140315
  240. -----------------------------------------------*/
  241. void LCD_write_shu_digit(unsigned char column, unsigned char page,unsigned char c) //row:列 page:页 dd:字符
  242. {
  243.         unsigned char i;         
  244.        
  245.         LCD_set_XY(column, page);// 列,页
  246.         for(i=0; i<9;i++)
  247.         {
  248.                 UCB0TXBUF = shuzi[c*18+i];
  249.                 TimerDelay_us(64);
  250.         }
  251.        
  252.         LCD_set_XY(column, page+1);// 列,页
  253.         for(i=9; i<18;i++)
  254.         {
  255.                 UCB0TXBUF = shuzi[c*18+i];
  256.                 TimerDelay_us(64);
  257.         }
  258.         LCD_CS_1;
  259. }

  260. /*---------------------------------------------
  261. LCD_write_word: 显示16(宽)*16(高)点阵列数字字母符号等半角类
  262. 输入参数:c:显示的汉字;
  263. 编写日期:20140315
  264. -----------------------------------------------*/
  265. void LCD_write_word(unsigned char column, unsigned char page,unsigned char c) //row:列 page:页 dd:字符
  266. {
  267.         unsigned char i;         
  268.        
  269.         LCD_set_XY(column, page);// 列,页
  270.         for(i=0; i<16;i++)
  271.         {
  272.                 UCB0TXBUF = word[c*32+i];
  273.                 TimerDelay_us(64);
  274.         }
  275.        
  276.         LCD_set_XY(column, page+1);// 列,页
  277.         for(i=16; i<32;i++)
  278.         {
  279.                 UCB0TXBUF = word[c*32+i];
  280.                 TimerDelay_us(64);
  281.         }       
  282.         LCD_CS_1;
  283. }


  284. /*---------------------------------------------
  285. 函数名:LCD_write_Icon_Signal  显示信号强度图标
  286. 输入参数:c   信号强度等级   1最弱 5最强
  287. 编写日期:20141017
  288. -----------------------------------------------*/
  289. void LCD_write_Icon_Signal(unsigned char c) //row:列 page:页 dd:字符
  290. {
  291.         LCD_set_XY(0, 8);                            //天线图标
  292.         UCB0TXBUF = 0x01;
  293.         TimerDelay_us(64);
  294.         switch(c)
  295.         {
  296.         case 1:
  297.                 LCD_set_XY(10, 8);
  298.                 UCB0TXBUF = 0x01;
  299.                 TimerDelay_us(64);
  300.                 break;
  301.         case 2:
  302.                 LCD_set_XY(10, 8);
  303.                 UCB0TXBUF = 0x01;
  304.                 TimerDelay_us(64);
  305.                 LCD_set_XY(12, 8);
  306.                 UCB0TXBUF = 0x01;
  307.                 TimerDelay_us(64);
  308.                 break;
  309.         case 3:
  310.                 LCD_set_XY(10, 8);
  311.                 UCB0TXBUF = 0x01;
  312.                 TimerDelay_us(64);
  313.                 LCD_set_XY(12, 8);
  314.                 UCB0TXBUF = 0x01;
  315.                 TimerDelay_us(64);
  316.                 LCD_set_XY(16, 8);
  317.                 UCB0TXBUF = 0x01;
  318.                 TimerDelay_us(64);
  319.                 break;
  320.         case 4:
  321.                 LCD_set_XY(10, 8);
  322.                 UCB0TXBUF = 0x01;
  323.                 TimerDelay_us(64);
  324.                 LCD_set_XY(12, 8);
  325.                 UCB0TXBUF = 0x01;
  326.                 TimerDelay_us(64);
  327.                 LCD_set_XY(16, 8);
  328.                 UCB0TXBUF = 0x01;
  329.                 TimerDelay_us(64);
  330.                 LCD_set_XY(18, 8);
  331.                 UCB0TXBUF = 0x01;
  332.                 TimerDelay_us(64);
  333.                 break;
  334.         case 5:
  335.                 LCD_set_XY(10, 8);
  336.                 UCB0TXBUF = 0x01;
  337.                 TimerDelay_us(64);
  338.                 LCD_set_XY(12, 8);
  339.                 UCB0TXBUF = 0x01;
  340.                 TimerDelay_us(64);
  341.                 LCD_set_XY(16, 8);
  342.                 UCB0TXBUF = 0x01;
  343.                 TimerDelay_us(64);
  344.                 LCD_set_XY(18, 8);
  345.                 UCB0TXBUF = 0x01;
  346.                 TimerDelay_us(64);
  347.                 LCD_set_XY(20, 8);
  348.                 UCB0TXBUF = 0x01;
  349.                 TimerDelay_us(64);
  350.                 break;
  351.         default:
  352.                 LCD_set_XY(10, 8);
  353.                 UCB0TXBUF = 0x00;
  354.                 TimerDelay_us(64);
  355.                 LCD_set_XY(12, 8);
  356.                 UCB0TXBUF = 0x00;
  357.                 TimerDelay_us(64);
  358.                 LCD_set_XY(16, 8);
  359.                 UCB0TXBUF = 0x00;
  360.                 TimerDelay_us(64);
  361.                 LCD_set_XY(18, 8);
  362.                 UCB0TXBUF = 0x00;
  363.                 TimerDelay_us(64);
  364.                 LCD_set_XY(20, 8);
  365.                 UCB0TXBUF = 0x00;
  366.                 TimerDelay_us(64);
  367.                 break;
  368.         }
  369.         LCD_CS_1;
  370. }


  371. /*---------------------------------------------
  372. 函数名:LCD_write_Icon_DumpEnergy    显示剩余电量图标
  373. 输入参数:c   剩余电量等级   0 (无) 1(25%) 2(50%)3(75%)4(100%)
  374. 编写日期:20141017
  375. -----------------------------------------------*/
  376. void LCD_write_Icon_DumpEnergy(unsigned char c) //row:列 page:页 dd:字符
  377. {
  378.         LCD_set_XY(116, 8);                            //电池框图标
  379.         UCB0TXBUF = 0x01;
  380.         TimerDelay_us(64);
  381.         switch(c)
  382.         {
  383.         case 1:
  384.                 LCD_set_XY(120, 8);
  385.                 UCB0TXBUF = 0x01;
  386.                 TimerDelay_us(64);
  387.                 break;
  388.         case 2:
  389.                 LCD_set_XY(120, 8);
  390.                 UCB0TXBUF = 0x01;
  391.                 TimerDelay_us(64);
  392.                 LCD_set_XY(123, 8);
  393.                 UCB0TXBUF = 0x01;
  394.                 TimerDelay_us(64);
  395.                 break;
  396.         case 3:
  397.                 LCD_set_XY(120, 8);
  398.                 UCB0TXBUF = 0x01;
  399.                 TimerDelay_us(64);
  400.                 LCD_set_XY(123, 8);
  401.                 UCB0TXBUF = 0x01;
  402.                 TimerDelay_us(64);
  403.                 LCD_set_XY(127, 8);
  404.                 UCB0TXBUF = 0x01;
  405.                 TimerDelay_us(64);
  406.                 break;
  407.         case 4:
  408.                 LCD_set_XY(120, 8);
  409.                 UCB0TXBUF = 0x01;
  410.                 TimerDelay_us(64);
  411.                 LCD_set_XY(123, 8);
  412.                 UCB0TXBUF = 0x01;
  413.                 TimerDelay_us(64);
  414.                 LCD_set_XY(127, 8);
  415.                 UCB0TXBUF = 0x01;
  416.                 TimerDelay_us(64);
  417.                 LCD_set_XY(125, 8);
  418.                 UCB0TXBUF = 0x01;
  419.                 TimerDelay_us(64);
  420.                 break;
  421.         default:
  422.                 LCD_set_XY(120, 8);
  423.                 UCB0TXBUF = 0x00;
  424.                 TimerDelay_us(64);
  425.                 LCD_set_XY(123, 8);
  426.                 UCB0TXBUF = 0x00;
  427.                 TimerDelay_us(64);
  428.                 LCD_set_XY(125, 8);
  429.                 UCB0TXBUF = 0x00;
  430.                 TimerDelay_us(64);
  431.                 LCD_set_XY(127, 8);
  432.                 UCB0TXBUF = 0x00;
  433.                 TimerDelay_us(64);
  434.                 break;
  435.         }
  436.         LCD_CS_1;
  437. }

  438. /*---------------------------------------------
  439. 函数名:LCD_write_Icon_Voice    显示声音图标
  440. 输入参数:c   指示有无声   0 (无声) 1(有声)
  441. 编写日期:20141017
  442. -----------------------------------------------*/
  443. void LCD_write_Icon_Voice(unsigned char c) //row:列 page:页 dd:字符
  444. {
  445.         switch(c)
  446.         {
  447.         case 0:
  448.                 LCD_set_XY(74, 8);
  449.                 UCB0TXBUF = 0x01;
  450.                 TimerDelay_us(64);
  451.                 LCD_set_XY(79, 8);
  452.                 TimerDelay_us(64);
  453.                 UCB0TXBUF = 0x01;
  454.                 break;
  455.         case 1:
  456.                 LCD_set_XY(74, 8);
  457.                 UCB0TXBUF = 0x01;
  458.                 TimerDelay_us(64);
  459.                 LCD_set_XY(79, 8);
  460.                 UCB0TXBUF = 0x00;
  461.                 TimerDelay_us(64);
  462.                 break;
  463.         default:
  464.                 break;
  465.         }
  466.         LCD_CS_1;
  467. }

  468. /*---------------------------------------------
  469. 函数名:LCD_write_Icon_Alarm    显示闹铃图标
  470. 输入参数:c   指示有无闹铃   0 (无) 1(有)
  471. 编写日期:20141017
  472. -----------------------------------------------*/
  473. void LCD_write_Icon_Alarm(unsigned char c) //row:列 page:页 dd:字符
  474. {
  475.         switch(c)
  476.         {
  477.         case 0:
  478.                 LCD_set_XY(87, 8);
  479.                 UCB0TXBUF = 0x00;
  480.                 TimerDelay_us(64);
  481.                 break;
  482.         case 1:
  483.                 LCD_set_XY(87, 8);
  484.                 UCB0TXBUF = 0x01;
  485.                 TimerDelay_us(64);
  486.                 break;
  487.         default:
  488.                 break;
  489.         }
  490.         LCD_CS_1;
  491. }
  492. /*---------------------------------------------
  493. 函数名:Clear_Screen  清屏
  494. 输入参数:xx   填充
  495. 编写日期:20141017
  496. -----------------------------------------------*/
  497. void Clear_Screen( unsigned char xx)
  498. {
  499.   unsigned char i,j;
  500.   LCD_CS_0;
  501.   for(i=0;i<9;i++)
  502.   {
  503.     LCD_AO_0;
  504.     UCB0TXBUF = 0xb0+i;   //设置page(页)地址         (共有8页)
  505.     TimerDelay_us(64);
  506.     UCB0TXBUF = 0x10;     //设置column(列)地址高4位  (共有131列)
  507.     TimerDelay_us(64);
  508.     UCB0TXBUF = 0x00;     //设置column(列)地址低4位
  509.     TimerDelay_us(64);
  510.     for(j=0;j<128;j++)
  511.     {
  512.       LCD_AO_1;
  513.       UCB0TXBUF = xx;
  514.       TimerDelay_us(64);
  515.     }
  516.   }
  517.   LCD_CS_1;
  518. }

  519. /*---------------------------------------------
  520. 函数名:LCD_Display_Temprature  显示温度
  521. 输入参数:xx   填充
  522. 编写日期:20141017
  523. -----------------------------------------------*/
  524. void LCD_Display_Temprature(unsigned char column, unsigned char page,unsigned int number)
  525. {
  526.   unsigned int num_temp[5] = {0};
  527.   unsigned int temp = 0;
  528.   temp = number + number -27315;
  529.   
  530.   num_temp[0] = temp/10000;
  531.   num_temp[1] = temp/1000%10;
  532.   num_temp[2] = temp/100%10;
  533.   num_temp[3] = temp/10%10;
  534.   num_temp[4] = temp%10;
  535.   
  536.   if(num_temp[0] == 0)
  537.     num_temp[0] = 12;
  538.   if((num_temp[0] == 0) || (num_temp[1] == 0))
  539.     num_temp[1] = 12;
  540.   
  541.   LCD_write_shu_13_24(column,page,num_temp[0]);
  542.   LCD_write_shu_13_24(column+13,page,num_temp[1]);
  543.   LCD_write_shu_13_24(column+26,page,num_temp[2]);
  544.   LCD_write_shu_13_24(column+39,page,10);
  545.   LCD_write_shu_13_24(column+52,page,num_temp[3]);  
  546.   LCD_write_shu_13_24(column+65,page,num_temp[4]);
  547.   LCD_write_shu_13_24(column+80,page,11);
  548.   
  549.   
  550. //   while(!(UCA1IFG&UCTXIFG));
  551. //    UCA1TXBUF = num_temp[0] + '0';
  552. //     while(!(UCA1IFG&UCTXIFG));
  553. //    UCA1TXBUF = num_temp[1] + '0';
  554. //  while(!(UCA1IFG&UCTXIFG));
  555. //    UCA1TXBUF = num_temp[2] + '0';
  556. //  while(!(UCA1IFG&UCTXIFG));
  557. //    UCA1TXBUF = '.';   
  558. //  while(!(UCA1IFG&UCTXIFG));
  559. //    UCA1TXBUF = num_temp[3] + '0';   
  560. //  while(!(UCA1IFG&UCTXIFG));
  561. //    UCA1TXBUF = num_temp[4] + '0';
  562. //  while(!(UCA1IFG&UCTXIFG));
  563. //    UCA1TXBUF = '\n';   
  564. }



  565. /*---------------------------------------------
  566. 函数名:LCD_Display_ECG 显示心电波形
  567. 输入参数:xx   填充
  568. 编写日期:20141017
  569. -----------------------------------------------*/
  570. void LCD_Display_ECG(unsigned char column, unsigned char page,unsigned int number)
  571. {
  572.   unsigned int num_temp[5] = {0};
  573.   unsigned int temp = 0;
  574.   
  575.   num_temp[0] = temp/10000;
  576.   num_temp[1] = temp/1000%10;
  577.   num_temp[2] = temp/100%10;
  578.   num_temp[3] = temp/10%10;
  579.   num_temp[4] = temp%10;
  580.   
  581.   if(num_temp[0] == 0)
  582.     num_temp[0] = 12;
  583.   if((num_temp[0] == 0) && (num_temp[1] == 0))
  584.     num_temp[1] = 12;
  585.   
  586.   LCD_write_shu_13_24(column,page,num_temp[0]);
  587.   LCD_write_shu_13_24(column+13,page,num_temp[1]);
  588.   LCD_write_shu_13_24(column+26,page,num_temp[2]);
  589.   LCD_write_shu_13_24(column+39,page,10);
  590.   LCD_write_shu_13_24(column+52,page,num_temp[3]);  
  591.   LCD_write_shu_13_24(column+65,page,num_temp[4]);
  592.   LCD_write_shu_13_24(column+80,page,11);
  593. }


  594. /*---------------------------------------------
  595. 函数名:LCD_Display_BloodPresure 显示血压
  596. 输入参数:xx   填充
  597. 编写日期:20141017
  598. -----------------------------------------------*/
  599. void LCD_Display_BloodPresure(unsigned char column, unsigned char page, unsigned int Hi_Presure, unsigned int Low_Presure)
  600. {
  601.   unsigned char num_temp1[3] = {0};
  602.   unsigned char num_temp2[3] = {0};
  603.   //unsigned int temp = 0;
  604.   
  605.   num_temp1[0] = Hi_Presure/100%10;
  606.   num_temp1[1] = Hi_Presure/10%10;
  607.   num_temp1[2] = Hi_Presure%10;
  608.   
  609.   num_temp2[0] = Low_Presure/100%10;
  610.   num_temp2[1] = Low_Presure/10%10;
  611.   num_temp2[2] = Low_Presure%10;
  612.   
  613.   //消零
  614.   if(num_temp1[0] == 0)
  615.     num_temp1[0] = 12;
  616.   if((num_temp1[0] == 0) && (num_temp1[1] == 0))
  617.     num_temp1[1] = 12;
  618.   if(num_temp2[0] == 0)
  619.     num_temp2[0] = 12;
  620.   if((num_temp2[0] == 0) && (num_temp2[1] == 0))
  621.     num_temp2[1] = 12;
  622.   
  623.   LCD_write_shu_13_24(column,page,num_temp1[0]);
  624.   LCD_write_shu_13_24(column+13,page,num_temp1[1]);
  625.   LCD_write_shu_13_24(column+26,page,num_temp1[2]);

  626.   LCD_write_shu_13_24(column,page+2,num_temp2[0]);
  627.   LCD_write_shu_13_24(column+13,page+2,num_temp2[1]);
  628.   LCD_write_shu_13_24(column+26,page+2,num_temp2[2]);
  629.   
  630. }









复制代码

MLX90615驱动:
  1. #include "msp430.h"
  2. #include "MLX90615.h"
  3. #include "I2C.h"

  4. void MLX90615_init(void)
  5. {
  6.   Init();
  7. }


  8. unsigned int MemRead(unsigned char SlaveAddress,unsigned char command)
  9. {
  10.         unsigned int  data;                        // Data storage (DataH:DataL)
  11.         unsigned char Pec;                        // PEC byte storage
  12.         unsigned char DataL;                        // Low data byte storage
  13.         unsigned char DataH;                        // High data byte storage
  14.         unsigned char arr[6];                        // Buffer for the sent bytes
  15.         unsigned char PecReg;                        // Calculated PEC byte storage
  16.         unsigned char ErrorCounter;                // Defines the number of the attempts for communication with MLX90615
  17.        
  18.         ErrorCounter=0x00;                        // Initialising of ErrorCounter
  19.        
  20.         //do{
  21. //                Stop();                                //If slave send NACK stop comunication       
  22. //                --ErrorCounter;                        //Pre-decrement ErrorCounter
  23. //                if(!ErrorCounter){                //ErrorCounter=0?
  24. //                        break;                        //Yes,go out from do-while{}
  25. //                }
  26.                 Start();                        //Start condition
  27.                
  28.                 WriteByte(SlaveAddress);        //Send SlaveAddress
  29.                 ReceiveAck();       
  30.                 WriteByte(command);                //Send command       
  31.                 ReceiveAck();
  32.                 Start();                        //Repeated Start condition
  33.                
  34.                 WriteByte(SlaveAddress);        //Send SlaveAddress-------------------???
  35.                 ReceiveAck();
  36.                
  37.                 DataL=ReadByte();                //Read low data,master must send ACK
  38.                 TransferAckOrNack(0);
  39.                 DataH=ReadByte();                 //Read high data,master must send ACK
  40.                 TransferAckOrNack(0);
  41.                 Pec=ReadByte();                        //Read PEC byte, master must send NACK
  42.                 TransferAckOrNack(1);
  43.                 Stop();                                // condition
  44.                
  45.                
  46.                 arr[5]=SlaveAddress;                //
  47.                 arr[4]=command;                        //
  48.                 arr[3]=SlaveAddress;                //Load array arr
  49.                 arr[2]=DataL;                        //
  50.                 arr[1]=DataH;                        //
  51.                 arr[0]=0;                        //
  52.                 PecReg=PEC_calculation(arr);//Calculate CRC
  53.                         
  54.         //}while(PecReg != Pec);                //If received and calculated CRC are equal go out from do-while{}
  55.                
  56.         *((unsigned char *)(&data))=DataL;        //
  57.         *((unsigned char *)(&data)+1)=DataH ; //data=DataH:DataL
  58.        
  59.         return data;                                                       
  60. }
  61. //---------------------------------------------------------------------------------------------

  62. //---------------------------------------------------------------------------------------------
  63. void DummyCommand(unsigned char byte)         //test
  64. {
  65.         Start();                             //Start condition
  66.         WriteByte(byte);                             //Send Slave Address or whatever,no need ACK checking
  67.         Stop();                             // condition
  68. }
  69. //---------------------------------------------------------------------------------------------
  70. float CalcTemp(unsigned int value)
  71. {
  72.         float temp;
  73.        
  74.         temp=(value*0.02)-273.15;
  75.         _NOP();
  76.        
  77.         return temp;
  78. }
  79. unsigned char PEC_calculation(unsigned char pec[])
  80. {
  81.         unsigned char         crc[6];
  82.         unsigned char        BitPosition=47;
  83.         unsigned char        shift;
  84.         unsigned char        i;
  85.         unsigned char        j;
  86.         unsigned char        temp;

  87.         do{
  88.                 crc[5]=0;                        /* Load CRC value 0x000000000107 */
  89.                 crc[4]=0;
  90.                 crc[3]=0;
  91.                 crc[2]=0;
  92.                 crc[1]=0x01;
  93.                 crc[0]=0x07;
  94.                 BitPosition=47;                        /* Set maximum bit position at 47 */
  95.                 shift=0;
  96.                                
  97.                 //Find first 1 in the transmited message
  98.                 i=5;                                        /* Set highest index */
  99.                 j=0;
  100.                 while((pec[i]&(0x80>>j))==0 && i>0){
  101.                         BitPosition--;
  102.                         if(j<7){
  103.                                 j++;
  104.                         }
  105.                         else{
  106.                                 j=0x00;
  107.                                 i--;
  108.                         }
  109.                 }/*End of while */
  110.                
  111.                 shift=BitPosition-8;        /*Get shift value for crc value*/
  112.                
  113.                
  114.                 //Shift crc value
  115.                 while(shift){
  116.                         for(i=5; i<0xFF; i--){
  117.                                 if((crc[i-1]&0x80) && (i>0)){
  118.                                         temp=1;
  119.                                 }
  120.                                 else{
  121.                                         temp=0;
  122.                                 }
  123.                                 crc[i]<<=1;
  124.                                 crc[i]+=temp;
  125.                         }/*End of for*/
  126.                         shift--;
  127.                 }/*End of while*/
  128.                
  129.                
  130.                 //Exclusive OR between pec and crc               
  131.                 for(i=0; i<=5; i++){
  132.                         pec[i] ^=crc[i];
  133.                 }/*End of for*/
  134.         }while(BitPosition>8);/*End of do-while*/
  135.        
  136.         return pec[0];
  137. }/*End of PEC_calculation*/
复制代码


EEPROM驱动:
  1. #include <msp430.h>
  2. #include "I2C.h"
  3. #include "24C512.h"


  4. void AT24C512_Byte_Write(unsigned char Device_Address,unsigned int Address,unsigned char data)
  5. {
  6.   Start();
  7.   WriteByte(Device_Address);
  8.   ReceiveAck();
  9.   WriteByte((unsigned char)((Address&0xff00)>>8));
  10.   ReceiveAck();
  11.   WriteByte((unsigned char)(Address&0x00ff));
  12.   ReceiveAck();
  13.   WriteByte(data);
  14.   ReceiveAck();
  15.   Stop();
  16. }

  17. unsigned char  AT24C512_Byte_Read(unsigned char Device_Address,unsigned int Address)
  18. {
  19.   unsigned char TempData = 0;
  20.   Start();
  21.   WriteByte(Device_Address);
  22.   ReceiveAck();
  23.   WriteByte((unsigned char)((Address&0xff00)>>8));
  24.   ReceiveAck();
  25.   WriteByte((unsigned char)(Address&0x00ff));
  26.   ReceiveAck();
  27.   Start();
  28.   WriteByte(Device_Address|0x01);
  29.   ReceiveAck();
  30.   TempData  = ReadByte();
  31.   TransferAckOrNack(1);
  32.   Stop();
  33.   //Delay_us(66);
  34.   return(TempData);
  35. }
复制代码


调试:






最新回复

好长的代码   详情 回复 发表于 2015-1-6 11:48
 
点赞 关注

回复
举报

6066

帖子

92

TA的资源

裸片初长成(初级)

沙发
 
能否加一个视频演示一下呢
 
 

回复

1291

帖子

0

TA的资源

纯净的硅(中级)

板凳
 
好长的代码
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表