【自制键盘01】CH9329代码两则,让任何单片机都能做键盘

这篇具有很好参考价值的文章主要介绍了【自制键盘01】CH9329代码两则,让任何单片机都能做键盘。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介

CH9329是一款由WCH(Nanjing QinHeng Electronics Co. Ltd.)生产的USB转串口芯片,可以方便地将USB接口转换为串口接口,它在键盘设计这块可以实现作为MCU和电脑设备的“中间人”,把串口信号转换为按键。

引脚定义

【自制键盘01】CH9329代码两则,让任何单片机都能做键盘

来自官网页面:

串口转HID键盘鼠标芯片 CH9329 - 南京沁恒微电子股份有限公司

主要特性和规格

  • 支持USB 2.0协议,全速传输,最大传输速率为12Mbps;
  • 内置16字节FIFO缓存,可以缓存接收和发送的数据;
  • 支持多种流控模式,包括软件流控、硬件流控和自动流控;
  • 支持自动唤醒功能,可以在需要时自动唤醒系统;
  • 支持多种波特率、数据位、停止位和校验位的配置;
  • 支持外部中断和定时器中断等多种中断模式;
  • 工作电压范围:3.3V~5V;
  • 工作温度范围:-40℃~85℃;
  • 封装形式:SSOP20。

在CH9329芯片上测试串口通信功能。

#include <ch9329.h>

#define UART_TX PA3     // 定义串口发送引脚
#define UART_RX PA2     // 定义串口接收引脚

void delay(unsigned int x)
{
    unsigned int i;
    while(x--)
    {
        i=200;
        while(i--);
    }
}

void main()
{
    CH9329_Init();      // 初始化CH9329

    while(1)
    {
        CH9329_WriteByte('H'); // 发送字符'H'

        CH9329_WriteByte('i'); // 发送字符'i'

        CH9329_WriteByte('!'); // 发送字符'!'

        delay(50000); // 延时0.5秒
    }
}

在CH9329芯片上测试按键的按下和抬起。

#include <ch9329.h>

#define KEY_PIN PA0     // 定义按键输入引脚

void main()
{
    CH9329_Init();      // 初始化CH9329

    while(1)
    {
        if(CH9329_ReadBit(KEY_PIN) == 0) // 检测按键是否按下
        {
            CH9329_WriteByte('P'); // 发送字符'P'表示按键按下
            while(CH9329_ReadBit(KEY_PIN) == 0); // 等待按键抬起
            CH9329_WriteByte('R'); // 发送字符'R'表示按键抬起
        }
    }
}

测试矩阵键盘文章来源地址https://www.toymoban.com/news/detail-485452.html

#include <ch9329.h>

#define ROWS 4        // 定义矩阵键盘的行数
#define COLS 4        // 定义矩阵键盘的列数

// 定义矩阵键盘的行列引脚
#define ROW1 PA0
#define ROW2 PA1
#define ROW3 PA2
#define ROW4 PA3
#define COL1 PA4
#define COL2 PA5
#define COL3 PA6
#define COL4 PA7

// 定义按键矩阵
char keyMap[ROWS][COLS] = {
    {'1', '2', '3', 'A'},
    {'4', '5', '6', 'B'},
    {'7', '8', '9', 'C'},
    {'*', '0', '#', 'D'}
};

void main()
{
    CH9329_Init();      // 初始化CH9329

    // 配置行引脚为输出
    CH9329_SetDirection(ROW1, OUTPUT);
    CH9329_SetDirection(ROW2, OUTPUT);
    CH9329_SetDirection(ROW3, OUTPUT);
    CH9329_SetDirection(ROW4, OUTPUT);

    // 配置列引脚为输入
    CH9329_SetDirection(COL1, INPUT);
    CH9329_SetDirection(COL2, INPUT);
    CH9329_SetDirection(COL3, INPUT);
    CH9329_SetDirection(COL4, INPUT);

    while(1)
    {
        // 逐行扫描矩阵键盘
        for(int i=0; i<ROWS; i++)
        {
            // 设置当前行为高电平,其他行为低电平
            CH9329_WriteBit(ROW1, i==0 ? 1 : 0);
            CH9329_WriteBit(ROW2, i==1 ? 1 : 0);
            CH9329_WriteBit(ROW3, i==2 ? 1 : 0);
            CH9329_WriteBit(ROW4, i==3 ? 1 : 0);

            // 检测列引脚的状态,判断是否有按键按下
            if(CH9329_ReadBit(COL1) == 0) // 列1有按键按下
            {
                CH9329_WriteByte(keyMap[i][0]); // 发送按键字符
                while(CH9329_ReadBit(COL1) == 0); // 等待按键抬起
            }
            if(CH9329_ReadBit(COL2) == 0) // 列2有按键按下
            {
                CH9329_WriteByte(keyMap[i][1]); // 发送按键字符
                while(CH9329_ReadBit(COL2) == 0); // 等待按键抬起
            }
            if(CH9329_ReadBit(COL3) == 0) // 列3有按键按下
            {
                CH9329_WriteByte(keyMap[i][2]); // 发送按键字符
                while(CH9329_ReadBit(COL3) == 0); // 等待按键抬起
            }
            if(CH9329_ReadBit(COL== 0) // 列4有按键按下
            {
            CH9329_WriteByte(keyMap[i][3]); // 发送按键字符
            while(CH9329_ReadBit(COL4) == 0); // 等待按键抬起
 }
 }
}
}

到了这里,关于【自制键盘01】CH9329代码两则,让任何单片机都能做键盘的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32单片机4*4矩阵键盘相关代码

           矩阵键盘是我们学习32单片机中十分常见的模块。对于我们掌握32单片机的基本要求有很大的帮助。其核心原理是利用键盘按键按下时产生的电位变化来判断是否按下以及利用行列电平变化来得到按键在矩阵键盘位置的思路。本文简述其使用的相关代码。         

    2024年02月07日
    浏览(39)
  • 二、51单片机 使用Proteus仿真掌握矩阵键盘(仿真及代码)

    学习内容:通过proteus实现对51单片机矩阵的掌握 1 、键盘接口设计。键盘——向单片机输入数据、命令等功能,是人机对话的主要手段。由若干按键按照一定规则组成。每一个按键实质上是一个按键开关,按构造可分为有触点开关按键和无触点按键。有触点开关按键常见的有

    2024年02月11日
    浏览(41)
  • 基于51单片机的自制秒表

            基于LCD1602显示屏的自制秒表,可完成计时,暂停,继续,清零功能 1.1、实现功能 输入参数为延时时间长度,单位为毫秒,用于短暂延时 1.2、设计原理 从STC-ISP 中生成的延时1ms的代码修改得到的延时任意时间的函数 1.3、代码实现 2.1、实现功能 检测四个独立按键

    2024年02月09日
    浏览(40)
  • GC9A01-TFT屏幕驱动(整理有stm32/51单片机/arduino等驱动代码)

           不久前我们收到用户反馈问题中,多次反馈各种不同型号的屏幕驱动不起来,从0开始编写代码花费大量时间,也有不少初次学习驱动屏幕代码编写经验过少等问题,为此我们决定以文章的形式发布到CSDN来分享相应的一些经验以及收集整理好的资料,希望可以帮助用

    2024年01月25日
    浏览(42)
  • CH32V203 单片机串口使用

    以串口2为例,初始化代码如下: 发送数据代码如下: USART_SendData(USART2, 0x55);  以上代码使用 MounRiver Studio 开发,单片机型号 :CH32V203C8T6

    2024年02月12日
    浏览(41)
  • CH340进行STM32单片机程序烧录

    目录 代码: 接法: 结束: 刚写完32点灯程序,接下来打算用CH340进行烧录 一个main.c实现点灯,即PA2出低电位 放个仿真图  接下来就是烧录了 用的是CH340进行烧录 CH340usb转ttl CH340 STM32 TXD RXD RXD TXD 3V3 3V3 GND GND 注意这里TXD和RXD是反接的 然后打开flymcu进行配置 port看设备管理器选

    2024年02月05日
    浏览(46)
  • 如何使用CH340G模块给51单片机下载程序

    一、首先准备好材料: 1、CH340G下载器USB转TTL模块+3根杜邦线; 2、51单片机STC89C52RC最小系统板; 3、51单片机STC89C52RC; 4、USB转DC005接口的DC电源线; 二、下载程序步骤 1、给最小系统装好晶振和芯片,如下图所示。注意事项:芯片的朝向,有个缺口的地方朝10针简易牛角这边;

    2024年01月17日
    浏览(52)
  • 单片机(一):VScode+SDCC+Make的Windows下51(CH552)单片开发环境搭建

    CH552芯片是一款兼容 MCS51 指令集的增强型 E8051 内核单片机。CH552既然是51单片机,按照以前的惯例都是用Keil来进行开发。但是本次决定抛弃Keil的开发环境,主要原因是Keil为商业软件,普通用户难以支撑,并且Keil软件本身的界面丑、编辑器不智能等,这导致软件的使用体验非

    2024年02月01日
    浏览(105)
  • 串口线转CH9329,HID控制电脑方案(适用于无法上外网的电脑)

    1、使用C#语言编写,可自行选择com口,键盘鼠标可以分别控制。 2、需要使用一根串口转HID数据线,某宝可买。 3、基本思路,使用键盘钩子监测键盘输入。使用timer获取鼠标位置,当然也可以用鼠标钩子,这里使用的是timer空间获取鼠标位置,所以存在一个分辨率或者说是延

    2024年02月07日
    浏览(25)
  • CH32V307VCT6单片机程序写入教程

    之前在沁恒微电子官网上申请了块互连型的单片机,芯片的型号是 CH32V307 ,之前在论坛上看到他们说这一块单片机和 stm32 系列的单片机差不多,正好今天板子到了我试了一下,发现真的和 stm32 差不多。 很多没有接触过stm32单片机但是白嫖到板子的朋友可能不会用这块板子,

    2024年02月01日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包