前言
这个芯片第一次用的时候,我花了不少心思,在网上找不到相关的编程资料,说实话,规格书都看的费劲,写下这篇博文来分享一下如何使用这颗芯片。
规格书分析
初看这个时序图时,人可能会有点懵,这个是芯片的输出管脚发出的波形,在写程序时,目的就是解析时序,分析判断出数据是“0”还是“1”。
芯片在发出数据信号前,会先发送两个周期的低电平,为启动信号,接着就会连续发送16个数据信号,当要发送数据“0”时,其波形时序是1个周期的高电平+1个周期的低电平;当要发送数据“1”时,其波形时序是1个周期的高电平+3个周期的低电平。两个数据的低电平持续时间有区别,所以在判断时,重点也就在这里,可以参考官方的判断数据方法:
代码分析
po代码
宏
#define LOW_V 0
#define HIGH_V 1
数据结构
这里只有一个全局变量,用于保存16位的键值数据
u16 edited_key_code = 0;
函数体
/*************************************************************/
/*函数名:hw_key_code_edit
/*输 入:无
/*输 出:无
/*描 述:中断中调用此函数,将按键时序转化为16位的编码值,低位为1号按键
/*************************************************************/
void hw_key_code_edit(void)
{
static u8 index = 0;
static u8 high_v_count = 0;
static u8 low_v_count = 0;
static u8 last_v = LOW_V;
volatile u8 now_v = LOW_V;
now_v = KEY_INPUT;
if(index>=2 && index<=16) //数据信号
{
//状态切换的条件
if(last_v==LOW_V && now_v==HIGH_V)
{
if(low_v_count>=1 && low_v_count<=4)
{
editing_key_code &= ~(1<<(index-2)<