STM32与CH455g通信测试键盘

1、概述
  CH455是数码管显示驱动和键盘扫描控制芯片。CH455内置时钟振荡电路,可以动态驱动4位数码管或者32只LED;同时还可以进行28键的键盘扫描;CH455通过SCL和SDA组成的2线串行接口与单片机等交换数据。
  
2、键码

编址DIG3DIG2DIG1DIG0
SEG007H06H05H04H
SEG10FH0EH0DH0CH
SEG217H16H15H14H
SEG31FH1EH1DH1CH
SEG427H26H25H24H
SEG52FH2EH2DH2CH
SEG637H36H35H34H
SEG0+SEG13FH3EH3DH3CH

3、原理图接线
在这里插入图片描述注意:INT接单片机的中断接收口,作为按键按下的信号

4、程序设计
这里由于篇幅问题,主要贴一下IIC控制函数:

//--------------------------------------------i2c-------------------------------------------
// 设置SDA为输出方向,对于双向I/O需切换为输出
void CH455_SDA_D_OUT()
{  
	GPIO_InitTypeDef GPIO_InitStruct = {0};
	GPIO_InitStruct.Pin = GPIO_PIN_9;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
	HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
	
}

// 设置SDA为输入方向,对于双向I/O需切换为输入
void CH455_SDA_D_IN()
{  
	GPIO_InitTypeDef GPIO_InitStruct = {0};
  GPIO_InitStruct.Pin = GPIO_PIN_9;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
	
}

void CH455_I2c_Start( void )  // 操作起始
{
	//DISABLE_KEY_INTERRUPT;  //禁止键盘中断,防止开始时被CH455中断而进入中断服务程序中的START
	
	CH455_SDA_SET;   /*发送起始条件的数据信号*/
	CH455_SDA_D_OUT();   /* 设置SDA为输出方向 */
	CH455_SCL_SET;
	CH455_SCL_D_OUT;   /* 设置SCL为输出方向 */
	HAL_Delay(10);
	CH455_SDA_CLR;   /*发送起始信号*/
	HAL_Delay(10);      
	CH455_SCL_CLR;   /*钳住I2C总线,准备发送或接收数据 */
}

void CH455_I2c_Stop( void )  // 操作结束
{
	CH455_SDA_CLR;
	CH455_SDA_D_OUT();   /* 设置SDA为输出方向 */
	HAL_Delay(10);
	CH455_SCL_SET;
	HAL_Delay(10);
	CH455_SDA_SET;  /*发送I2C总线结束信号*/
	HAL_Delay(10);
	CH455_SDA_D_IN();   /* 设置SDA为输入方向 */
	//ENABLE_KEY_INTERRUPT;
}

void CH455_I2c_WrByte( uint8_t dat )	//写一个字节数据
{
	uint8_t i;
	CH455_SDA_D_OUT();   /* 设置SDA为输出方向 */
	for( i = 0; i != 8; i++ )  // 输出8位数据
	{
		if( dat & 0x80 ) 
		{
		    CH455_SDA_SET;
		}
		else 
		{
		    CH455_SDA_CLR;
		}
		HAL_Delay(10);
		CH455_SCL_SET;
		dat <<= 1;
		HAL_Delay(10);  // 可选延时
		CH455_SCL_CLR;
	}
	CH455_SDA_D_IN();   /* 设置SDA为输入方向 */
	CH455_SDA_SET;
	HAL_Delay(10);
	CH455_SCL_SET;  // 接收应答
	HAL_Delay(10);
	CH455_SCL_CLR;
}

uint8_t  CH455_I2c_RdByte( void )		//读一个字节数据
{
	uint8_t dat,i;
	CH455_SDA_SET;
	CH455_SDA_D_IN();   /* 设置SDA为输入方向 */
	dat = 0;
	for( i = 0; i != 8; i++ )  // 输入8位数据
	{
		HAL_Delay(10);  // 可选延时
		CH455_SCL_SET;
		HAL_Delay(10);  // 可选延时
		dat <<= 1;
		if( CH455_SDA_IN ) dat++;  // 输入1位
		CH455_SCL_CLR;
	}
	CH455_SDA_SET;
	HAL_Delay(10);
	CH455_SCL_SET;  // 发出无效应答
	HAL_Delay(10);
	CH455_SCL_CLR;
	return dat;
}

void CH455_Write( uint16_t cmd )	//写命令
{
	CH455_I2c_Start();               //启动总线
  CH455_I2c_WrByte(((uint8_t)(cmd>>7)&CH455_I2C_MASK)|CH455_I2C_ADDR);
  CH455_I2c_WrByte((uint8_t)cmd);               //发送数据
  CH455_I2c_Stop();                 //结束总线 
}

uint8_t CH455_Read( void )		//读取按键
{
	uint8_t keycode;
   	CH455_I2c_Start();                //启动总线
   	CH455_I2c_WrByte((uint8_t)(CH455_GET_KEY>>7)&CH455_I2C_MASK|0x01|CH455_I2C_ADDR);
   	keycode=CH455_I2c_RdByte();      //读取数据
	CH455_I2c_Stop();                //结束总线
	return keycode;
}

主函数中记得加上开中断和键盘:

	HAL_ADC_Start_IT(&hadc1);
	CH455_Write( CH455_7SEG_ON );// 开启显示和键盘,8段显示方式

贴个工程地址:
https://download.csdn.net/download/weixin_44007438/12897901
有问题记得留言,能解决你的疑惑记得打赏哟

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ESP32-Sense 开发套件用于评估和开发 ESP32 触摸传感器功能。评估套件包含一个主板和若干子板,主板包含显示单元,主控单元,调试单元;子板的触摸电极的形状和排列方式多样,包括线性滑条、矩阵按键、弹簧按键、轮式滑条等,可以满足不同的使用场景。用户也可以自行设计子板以满足特殊的使用场景。 ESP32-Sense触摸开发主板硬件资源 显示单元包括数码管和 RGB 三色灯电路。调试单元包括ESP-Prog 调试器接口。主控单元包含 ESP32 模组。Mini USB 供电作用。 电源管理系统 ESP32-Sense 开发套件上 Mini USB 和 ESP-Prog 均可供电,两者之间有保护二极管隔离,供电不相互影响。USB 只具有供电功能。ESP-Prog 接口除了供电功能还具有自动烧写固件功能。 显示电路 ESP32-Sense 开发套件的主板上有显示单元,可直观地反馈触摸动作。三个数码管分别显示被触摸按键的位置和触摸动作的持续时间。数码管驱动芯片为 CH455G,使用 I2C 接口控制。RGB 灯用于触摸时的颜色反馈。用户滑动滑条,RGB 灯的颜色会相应变化。 开发环境 ESP-IDF 是 ESP32 平台的软件开发包。文档 Get Started 介绍编译环境的搭建和软件开发包的使用说明。 ESP-Prog 是 ESP32 调试工具,有下载和 Jtag 调试功能。 ESP32 IoT 应用方案 ESP32 IoT Solution 基于 ESP-IDF 开发,包含多种应用解决方案。文档 build-system-and-dependency 介绍了如何编译解决方案。 ESP32-Sense 项目工程 是 ESP32-Sense 开发套件对应的软件工程文件。下载程序到主板即可使用触摸功能。 ESP32 IoT Solution 工程下的 ESP32-Sense 项目 是 ESP32-Sense 开发套件对应的应用程序。目录结构如下图所示: 其他参考资料,见附件链接查看: Espressif 官网 ESP32 编程指南 : ESP32 相关开发文档的汇总平台,包含硬件手册,软件 API 介绍等。 触摸传感器应用设计参考文档: ESP32 触摸传感器功能应用设计手册,包括触摸传感器原理介绍,软件设计,PCB 设计等内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值