THKB_main_v0.2.2 - 嘉立创EDA开源硬件平台

编辑器版本 ×
标准版 Standard

1、简单易用,可快速上手

2、流畅支持300个器件或1000个焊盘以下的设计规模

3、支持简单的电路仿真

4、面向学生、老师、创客

专业版 professional

1、全新的交互和界面

2、流畅支持超过3w器件或10w焊盘的设计规模,支持面板和外壳设计

3、更严谨的设计约束,更规范的流程

4、面向企业、更专业的用户

专业版 THKB_main_v0.2.2

简介:THKB——TouHouKeyboard,一款便宜、低延迟的车万客制化小键盘。支持全键无冲、全键自定义、组合按键、三层自由键层、超低可调延迟、掉电保存记忆等功能;支持上位机改键值、改延迟,包含测试工具

开源协议: MIT License

(未经作者授权,禁止转载)

创建时间: 2023-08-31 22:39:07
更新时间: 2023-09-01 21:07:36
描述
# [THKB] TouHou Keyboard,便宜、低延迟的客制化小键盘 ![LOGO_black2.png](//image.lceda.cn/pullimage/TnnxL1aeDyKSGLdp5R7dya9zGrtwwFURvFaPwxle.png) #### THKB是一款以便宜、低延迟为设计理念的客制化小键盘。支持全键无冲、全键自定义、组合按键、三层自由键层、超低可调延迟、掉电保存记忆等功能;支持上位机改键值、改延迟,包含测试工具以及使用指南。 机械轴体按键支持可调延时(延时最低20us,最高50ms),轻触开关软件延时20ms;上位机仅支持Windows系统。 ##### 下载上位机请点击发行版,选择最新版本下载。 本Git项目仓库包含THKB的下位机固件、上位机软件、PCB Gerber文件、CAD设计文件、3D模型以及相关文档等。 更多资料请访问Git项目仓库,包含THKB的下位机固件、上位机软件、PCB Gerber文件、CAD设计文件、3D模型以及相关文档等,链接:[[THKB] TouHou Keyboard 便宜、低延迟的客制化小键盘](https://gitee.com/Kairingo/thkb)
~~~~
本项目使用MIT开源协议,您可以随意的下载、Clone、Fork本项目作为任何用途。如果用作商业用途量产,希望您赠送一份样品给我,我的联系邮箱是2401977049@qq.com ![front_render_reflective.jpg](//image.lceda.cn/pullimage/QQHWJaNHJzPRGJIFRrSXN1kOVkmZN3u93ufi0Ofb.jpeg) ![photo_front.jpg](//image.lceda.cn/pullimage/9l2e5NS6ENUGjQruSRcgwa4Ds3xt5jEhYhcE5hJE.jpeg) ## 一、更新说明 ##### 2023.9.1更新:增加了一个Type-c接口,消除了电路设计上的冗余电阻,将PCB卫星轴改为钢板卫星轴,原2U区域支持用两个1U按键替换,代码增加若干注释 ##### 2023.7.24更新:首次正式发布项目,修复了测试版的一些BUG ##### 2023.7.25更新:修复了上位机v0.1.0窗体无法显示的问题 ## 二、项目文件说明 #### Firmware -v0.2.0 ##### |-- THKB_fw 使用Keil5 C51配合 vs code Keil Assistant 插件配合编写 ​ |--Obj 文件夹内的**THKB_fw.hex**为生成的hex文件,可以直接用于下载,将P3.6引脚通过20K电阻下拉即可进入ISP下载模式,下载方法请参考沁恒官方 #### Software -v0.2.0 ##### |-- THKB_host_software 上位机程序,使用C#编写,dotnet Framwork 3.5框架,winform窗体。使用Visual Studio开发 ##### |-- fonts 包含上位机所需的字体 ##### |-- pic 上位机中使用的一些图片素材 #### Hardware -v0.2.2 ##### |-- pcb 包含PCB Gerber文件,设计文件:[THKB_main_v0.1.3 - 嘉立创EDA开源硬件平台 (oshwhub.com)](https://oshwhub.com/kairingo/thkb_main_v0-1-3) ##### |-- bom 物料清单与购买链接 #### CADs -v0.2.0 ##### 包含顶板,底板以及垫高板的CAD文件 #### 3D_Models -v0.2.0 ##### 3D模型,包含零件与装配体。使用Soildworks 2022设计 #### Docs ##### LOGO、文档、渲染图以及一些相关文档等 #### Legacy ##### 旧版本的软件固件文档等,已停止维护 ## 三、硬件架构说明 ### 2.1设计理念 ​ 为贯彻低成本的设计方案,所有元器件和结构都在保证稳定可用的情况下做了Cost Down。键盘总共有两个轻触开关,支持安装十个轴体甚至九个。PCB同时支持热插拔和焊接方案,可以根据用途进行调整。键盘可以选装9个1U和1个1.5U,或者7个1U、1个1.5U或1个2U。 ![multi_choice_key.png](//image.lceda.cn/pullimage/Z1aVu3nBiIXHzyyqjUVrDtEOEGLPmRcGLV8tpUYX.png) ### 2.2 结构设计 ​ 键盘倾斜角约为6°;为了节省成本,键盘的结构为三明治夹心结构,从上到下分别是2mm亚克力顶板、FR-4玻纤PCB板、3mm亚克力底板以及5mm亚克力垫高板,使用M3内六角螺丝进行紧固,为了提高稳固性,使用SMT贴片螺柱固定在PCB板上,无法拆卸。顶面使用4mm螺丝,底面8mm和12mm螺丝分别固定,底部使用2mm高的直通柱,防止底板接触到元器件。可以添加夹心垫、轴下垫等配件以提升手感。 ![explosive_front.jpg](//image.lceda.cn/pullimage/C8Raos6SYFUbHrYGFoZ1sksdwajORXmWbB4lNrpZ.jpeg) ​ 键盘使用标准的樱桃MX轴体和PCB 2u卫星轴,建议使用DSA、XDA、原厂或者OEM高度等较低高度的键帽。 ### 2.3 芯片选型 ​ 选用来自南京沁恒的51单片机**CH551**,一块钱的售价,同支持USB FS 2.0、128B DataFlash以及24MHz的主频,非常适合用作本项目的主控MCU。极简的外围器件设计,仅需少量电阻电容,最小系统即可搭建完成。外加51内核的单片机一般都很皮实,可以抗住日常生活中的静电。更好的鲁棒性,可以放心在PCB上做一些美化设计,比如将镀锡的铜皮裸露,绘制图案等。 ![pcb_back.png](//image.lceda.cn/pullimage/fWDHbHw88K0vPaO68jeBOkcPaFBqAkUtCAMXpLJE.png) ![Sch.png](//image.lceda.cn/pullimage/siCqMhA4m4KkUzIUXl7pPnSdCCy1xJtlsCHej7g5.png) ## 四、固件设计 ​ 按键的扫描方式是传统的矩阵扫描,扫描方式是从行到列。键盘由两行六列组成,总共12个按键。使用传统8051模式,使用内置上拉电阻,在扫描前先通过置位相应寄存器为1实现输入功能,通过1n4148防止串扰。所有有关上位机与USB中断的操作都放在USB的终端服务函数中处理。 ```C /*! * @brief 初始化键盘 * @param 无 * @return 无 */ void keyboard_init(void) { Port3Cfg(1,2);//R0推挽输出 Port1Cfg(1,4);//R1推挽输出 Port1Cfg(3,5);//C0准双向输入 Port1Cfg(3,6);//C1准双向输入 Port1Cfg(3,7);//C2准双向输入 Port3Cfg(3,1);//C3准双向输入 Port3Cfg(3,0);//C4准双向输入 Port1Cfg(3,1);//C5准双向输入 //8051准双向模式,IO作为输出使用时,必须先置1,否则输出低电平 IO_KEY_C0 = 1; IO_KEY_C1 = 1; IO_KEY_C2 = 1; IO_KEY_C4 = 1; IO_KEY_C5 = 1; memset(Keyboard_ScanBuf,0,KEY_NUM);//初始化扫描结果 memset(Old_ScanBuf,0,KEY_NUM);//初始化上一次扫描结果 memset(Layer_Keymap[1],0,KEYMAP_LEN);//初始化键值 memset(Layer_Keymap[2],0,KEYMAP_LEN);//初始化键值 memset(Layer_Keymap[3],0,KEYMAP_LEN);//初始化键值 memcpy(Layer_Keymap[0],Layer0_Keymap,KEYMAP_LEN); keyboard_load_keymap();//从flash读取键值 keyboard_get_delaytime();//从flash读取延时时间 Current_Layer = 0; led_off();//关闭所有指示灯 mDelaymS(500); } ``` ​ 按键扫描函数: ```C /*! * @brief 扫描键盘 * @note 12键,两行六列,从行到列扫描; * @note 低电平代表按下,高电平代表弹起 * @param 无 * @return 无 */ void keyboard_scan(void) { memset(Keyboard_ScanBuf,0,KEY_NUM); IO_KEY_R0 = 0; IO_KEY_R1 = 1; mDelayuS(10); Keyboard_ScanBuf[0] = !IO_KEY_C0;//默认键位Ctrl Keyboard_ScanBuf[1] = !IO_KEY_C1;//默认键位Shift Keyboard_ScanBuf[2] = !IO_KEY_C2;//默认键位Z Keyboard_ScanBuf[3] = !IO_KEY_C3;//默认键位X Keyboard_ScanBuf[4] = !IO_KEY_C4;//默认键位C Keyboard_ScanBuf[5] = !IO_KEY_C5;//默认键位Up //按键消抖 if(Keyboard_ScanBuf[0]||Keyboard_ScanBuf[1]|| Keyboard_ScanBuf[2]||Keyboard_ScanBuf[3]|| Keyboard_ScanBuf[4]||Keyboard_ScanBuf[5]) { keyboard_delay(); Keyboard_ScanBuf[0] &= !IO_KEY_C0; Keyboard_ScanBuf[1] &= !IO_KEY_C1; Keyboard_ScanBuf[2] &= !IO_KEY_C2; Keyboard_ScanBuf[3] &= !IO_KEY_C3; Keyboard_ScanBuf[4] &= !IO_KEY_C4; Keyboard_ScanBuf[5] &= !IO_KEY_C5; } IO_KEY_R0 = 1; IO_KEY_R1 = 0; mDelayuS(10); Keyboard_ScanBuf[6] = !IO_KEY_C0;//默认键位Space Keyboard_ScanBuf[7] = !IO_KEY_C1;//默认键位Esc Keyboard_ScanBuf[8] = !IO_KEY_C2;//默认键位Fn Keyboard_ScanBuf[9] = !IO_KEY_C3;//默认键位Left Keyboard_ScanBuf[10] = !IO_KEY_C4;//默认键位Down Keyboard_ScanBuf[11] = !IO_KEY_C5;//默认键位Right //按键消抖 if(Keyboard_ScanBuf[6]||Keyboard_ScanBuf[9]|| Keyboard_ScanBuf[10]||Keyboard_ScanBuf[11]) { keyboard_delay(); Keyboard_ScanBuf[6] &= !IO_KEY_C0; Keyboard_ScanBuf[9] &= !IO_KEY_C3; Keyboard_ScanBuf[10] &= !IO_KEY_C4; Keyboard_ScanBuf[11] &= !IO_KEY_C5; } if(Keyboard_ScanBuf[7]||Keyboard_ScanBuf[8]) { mDelaymS(20);//按键消抖,轻触开关 Keyboard_ScanBuf[7] &= !IO_KEY_C1; Keyboard_ScanBuf[8] &= !IO_KEY_C2; } } ``` ​ 全键无冲的方案参考了稚辉君的重映射键值方案,使用枚举,用负数表示特殊按键(如Ctrl、Shift等),普通按键从0~128依次枚举,用有符号char存储值,FN键层切换键也包含其中,如果FN被按下,则切换键层,并等待一秒钟。 ```C /*! * @brief 重映射键值 * @note 重映射键值,将扫描结果映射到键值 * @param keyvalue 扫描结果 * @return 无 */ static void keyboard_remap(char keyvalue) { UINT8 index = 0 , bit_index = 0; //特殊按键 if( keyvalue < 0) { Keyboard_RemapBuf[0] |= 12->3 ``` ## 五、上位机软件设计 ​ 上位机软件使用C#编写,Winform框架,调用了Hidlibrary库设计思路是主窗体中包含四个子窗体,通过点击主窗体的不同按钮切换子窗体,调用不同的功能,分辨是映射更改、延时更改、按键测试以及设置,左下角显示键盘当前的连接状态 ![host_delay.png](//image.lceda.cn/pullimage/pOY9hPS73SYxOgZeSDuE63HROhLalOLW15ArNali.png) ​ 按键延迟支持20us至50ms,可以输入特定值进行调整,上方的不同模式分别代码:stable稳定模式延时5ms、normal普通模式延时800us、game游戏模式延时50ms,在游戏模式下,若大力敲击会导致按键产生连击。延时大于50ms会导致案件无法触发,而低于20us则极容易发生连击。 ![host_tester.png](//image.lceda.cn/pullimage/Zq9o3ufsoDWOiYyNNT1urB8ae5KnBo4gwClM5G8q.png) ​ 设置界面现在还未开发,所以还是一片空白~ ## 六、渲染图与实拍 ![thkb_keyshot_v0.1.21.jpg](//image.lceda.cn/pullimage/56XGmZn3T1f8LygOMPXz1SnEhAOnBFkdCoBH9B8U.jpeg) v0.1.0打样的原型机 ![prototype_photo.jpg](//image.lceda.cn/pullimage/cvcOHVlkvRgdwq3PkwdJ66WDh2GOYwgHU8EFM0gV.jpeg) v0.1.3特别版(紫金)和v0.2.2(黑银) ![photo_back.jpg](//image.lceda.cn/pullimage/4SEA7pVMlWfaXrsXreqoi4EJwihjFLD6j20ut0nR.jpeg) v0.1.3特别版 ![v0.1_front.jpg](//image.lceda.cn/pullimage/ntNBXKe890yoHJI64QRQVeSEJORmKx7svyq4Y7HV.jpeg) ![v0.1_back.jpg](//image.lceda.cn/pullimage/3UnY2k2Nr2Jh1jRETZhD0ALoIru5MYm4pL7ZNGfK.jpeg) ## 七、授权条款与写在最后 本项目采用MIT开源协议,这意味着您不仅可以用作商业用途,还可以闭源。由于国内的开源大环境不好,任何开源协议最后大概率都会被忽视,与其让别人违背协议,不如放开权限。 如果您想量产,或是基于这个项目进行商业用途的话,虽然不需要再征得我的同意,但还请发送邮件告知我一下,我很希望我的设计可以得到量产,或是被更多人看到,在这里仅抛砖引玉,给大家做键盘或是相关的东西提供更多的灵感。 我希望如果您参考了这个工程,我希望您能将代码开源;如果量产了这款键盘,希望您可以将项目的开源仓库印在产品上,使用自己设计的LOGO,或是用THKB提供的。 这个项目源于我六月底的一个灵感,如果您知道“东方Project”这个IP的话,相信您一定可以猜到了,这款键盘就是专门为了STG(弹幕射击游戏)准备的。可变延时可以适应不同的敲击力度,通过微调使延迟降到最低,以适配不同的使用者。当然,这款键盘的肯定还有更多的用途,这就等待您的开发了。 本项目中除了元器件的3D模型和封装由立创EDA提供外,所有LOGO、代码、图片、PCB板、CAD文件等,都由我编写或设计。本人为管理专业在校大学生,水平有限,项目中尚存在许多错误。实际开发总共就进行了两周半的时间,~~外加我要复习考研~~做的比较仓促,如有错误还请指出,恳请各位的批评指正。```
设计图
原理图
1 /
PCB
1 /
未生成预览图,请在编辑器重新保存一次
工程视频/附件
暂无
工程成员
侵权投诉
相关工程
换一批
加载中...
添加到专辑 ×

加载中...

温馨提示 ×

是否需要添加此工程到专辑?

温馨提示
动态内容涉嫌违规
内容:
  • 153 6159 2675

服务时间

周一至周五 9:00~18:00
  • 技术支持

support
  • 开源平台公众号

MP