⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 cypresscy74294ic键盘和鼠标原码
💻 C
字号:
//----------------------------------------------------------------------------
// C main ( unisen Cyber Station K.B. Qwert Mode Keyboard )
// 2007-1 ver 1.00
// 应 增加 NumLock,ArrowLock,Shift,Ctrl四个LED灯
//----------------------------------------------------------------------------

#include <m8c.h>        // part specific constants and macros
#include <string.h>
#include "PSoCAPI.h"    // PSoC API definitions for all User Modules
#include "CSD_KeyProcess.c"

int KB_empty_cnt;
BYTE KB_save;
/*
//GPIO 操作例程,先在 Device Editer 中将其中一个IO口 命名为
#define Beep_BIT_Enable  Beep_BIT_Data_ADDR |=  Beep_BIT_MASK
#define Beep_BIT_Disable Beep_BIT_Data_ADDR &= ~Beep_BIT_MASK
//如何判断以上IO的高低电平?
//如何控制IO高低电平?

//下面是 中断服务程序的定义方法:
#pragma interrupt_handler timer_handler
...
void timer_handler()
{
...
}

//在 boot.tpl 中,将对应的中断向量表中 填写 ljmp timer_handler
*/

//memcmp(RPT_DATA,USB_INTERFACE_0_OUT_RPT_DATA,8);  //从 USB 得到USB HOST送来的数据

BYTE abKeyboardData[8] = {0,0,0,0,0,0,0,0};
//                        ^   ^
//                        |   |
//                     ctrl   Alpha

//M8C_Reset;
char KeyPressMainFlg; 

void main()
{  
  M8C_EnableGInt;                     //Enable Global Interrupts  

  Beep_Start(); Beep_Switch(0);
  
  LED_ShiftCAP_Start(); LED_ShiftCAP_Switch(0);  
  
  CSD_1_Start();//CSD 电容式键盘初始化   
  CSD_1_InitializeBaselines() ; //scan all sensors first time, init baseline  
  CSD_1_SetDefaultFingerThresholds() ;//设置 电容式键盘 Finger Thresholds  
  
	USBFS_1_Start(0, USB_5V_OPERATION);     //Start USBFS Operation using device 0  
	                                        //and with 5V operation  
	while(!USBFS_1_bGetConfiguration());    //Wait for Device to enumerate 等待USB HOST取得USB描述符
	//Enumeration is completed load endpoint 1. Do not toggle the first time  
	USBFS_1_LoadInEP(1, abKeyboardData, 8, USB_NO_TOGGLE);  

  //M8C_EnableWatchDog;                 //(CPU_SCR0 &= ~CPU_SCR0_PORS_MASK)	  
  memset( abKeyboardData,0,8 );
  KB_empty_cnt = 0; KB_save = 0; KeyPressMainFlg = 0;
  while( 1 )
  { 
	memset( ScanArrayImage,0,5 );//将键盘位图清零
	KeyPressMainFlg = KeyPressMain();//扫描键盘
	while(!USBFS_1_bGetEPAckState(1));    //Wait for ACK before loading data 等待 USB HOST ACK 协议发生
	//ACK has occurred, load the endpoint and toggle the data bit  
    //扫描键盘
    if( KeyPressMainFlg == 1 ) //产生了键盘码
    {
    	 if( USB_KeyAct[1]==KB_save && KB_empty_cnt<1 )//防抖动
		   continue;
		 else
		 { 
		   KB_empty_cnt = 0; KB_save = USB_KeyAct[1]; 
		 }
    	 //向 USB 送键盘扫描码
    	 BeepDelayXXms( 50 ); //响铃,表示按键有效
    	 memset( abKeyboardData,0,8 );
    	 abKeyboardData[0] = USB_KeyAct[0];
    	 abKeyboardData[2] = USB_KeyAct[1];
    	 USBFS_1_LoadInEP(1, abKeyboardData, 8, USB_TOGGLE);//将键盘码送USB
    	 memset( abKeyboardData,0,8 );
    	 while(!USBFS_1_bGetEPAckState(1));
    	 USBFS_1_LoadInEP(1, abKeyboardData, 8, USB_TOGGLE);//将键盘抬起送USB
    }else
    {
         KB_empty_cnt ++;
    }
  }  
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -