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

📄 具备跳号跳频和跳址的nrf905的c51演示程序 (ourdev_cn 我们的电子开发社区).htm

📁 以NRF905芯片为核心的PTR8000模块的AVR驱动.驱动芯片为AVR mega16或者AVR mega32.内部详尽的操作流程和时序.包括CRC16校验.主从机通讯.
💻 HTM
📖 第 1 页 / 共 5 页
字号:
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;SystemBuffers.nRFRxBuff[2]&nbsp;=&nbsp;RX_ADDRESS_2; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;SystemBuffers.nRFRxBuff[3]&nbsp;=&nbsp;RX_ADDRESS_3; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;SystemBuffers.nRFRxBuff[8]&nbsp;=&nbsp;CH_NO_BYTE; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;SystemBuffers.nRFTxBuff[8]&nbsp;=&nbsp;CH_NO_BYTE; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;SystemBuffers.RamTest&nbsp;=&nbsp;0x55aa; 
      <BR>&nbsp;&nbsp;} <BR>&nbsp;&nbsp;else&nbsp;{ <BR>&nbsp;&nbsp;} <BR>} 
      <BR><BR>void&nbsp;SystemSetup(void)&nbsp;using&nbsp;0//系统设置 <BR>{ 
      <BR>&nbsp;&nbsp;TimeInit(); 
      <BR>&nbsp;&nbsp;IP&nbsp;=&nbsp;0x05;//中断优先级EX0&gt;EX1&gt;ET0&gt;ET1 
      <BR>&nbsp;&nbsp;SystemBuffers.TestTime&nbsp;=&nbsp;0; 
      <BR>&nbsp;&nbsp;SystemBuffers.WaitTime&nbsp;=&nbsp;0; <BR>} 
      <BR><BR>void&nbsp;TimeInit()&nbsp;using&nbsp;0 <BR>{ 
      <BR>//&nbsp;&nbsp;TCON&nbsp;=&nbsp;0x55;//启动定时器 
      <BR>/*---------------------------------- 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;定时器0定时参数设置 
      <BR>----------------------------------*/ 
      <BR>&nbsp;&nbsp;TL0&nbsp;=&nbsp;0; <BR>&nbsp;&nbsp;TH0&nbsp;=&nbsp;0; 
      <BR>&nbsp;&nbsp;TR0&nbsp;=&nbsp;1;//启动定时器0 
      <BR>/*---------------------------------- 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;定时器1定时参数设置 
      <BR>----------------------------------*/ 
      <BR>&nbsp;&nbsp;TMOD&nbsp;=&nbsp;0x20;&nbsp;&nbsp;&nbsp;&nbsp;//timer1&nbsp;working&nbsp;mode&nbsp;1 
      <BR>&nbsp;&nbsp;TL1&nbsp;=&nbsp;0xfd;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//f7=9600&nbsp;for&nbsp;16mhz&nbsp;Fosc,and&nbsp;... 
      <BR>&nbsp;&nbsp;TH1&nbsp;=&nbsp;0xfd;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//...fd=19200&nbsp;for&nbsp;11.0592mhz&nbsp;Fosc 
      <BR>&nbsp;&nbsp;SCON&nbsp;=&nbsp;0xd8;&nbsp;&nbsp;&nbsp;&nbsp;//uart&nbsp;mode&nbsp;3,ren==1 
      <BR>&nbsp;&nbsp;PCON&nbsp;=&nbsp;0x80; 
      <BR>&nbsp;&nbsp;SioBuffers.SioTXCount&nbsp;=&nbsp;0;//无发送数据 
      <BR>&nbsp;&nbsp;SioBuffers.SioRXCount&nbsp;=&nbsp;32;//允许接收串口数据 
      <BR>&nbsp;&nbsp;TR1&nbsp;=&nbsp;1;//启动定时器1 
      <BR>/*---------------------------------- 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;定时器2定时参数设置 
      <BR>----------------------------------*/ 
      <BR>&nbsp;&nbsp;TIMEER2&nbsp;=&nbsp;T2_5mS; 
      <BR>&nbsp;&nbsp;RCAP&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;T2_5mS; 
      <BR>&nbsp;&nbsp;TR2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;1;//启动定时器2 <BR>} 
      <BR><BR>void&nbsp;nRFInit(void)&nbsp;using&nbsp;0//无线模块初始化 <BR>{ 
      <BR>&nbsp;&nbsp;do{ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;WritenRFConfig(SystemBuffers.nRFRxBuff);//配置nRF905 
      <BR>&nbsp;&nbsp;} <BR>&nbsp;&nbsp;while(VerifynRFConfig()); 
      <BR>&nbsp;&nbsp;SetRxMode();//设置接收模式 
      <BR>&nbsp;&nbsp;SystemBuffers.nRFTxCount&nbsp;=&nbsp;0;//清空无线发送数据缓冲区 
      <BR>&nbsp;&nbsp;SystemBuffers.nRFRxCount&nbsp;=&nbsp;0;//清空无线接收数据缓冲区 <BR>} 
      <BR><BR>void&nbsp;ReadnRFConfig(unsigned&nbsp;char&nbsp;rxaddr[])&nbsp;using&nbsp;0//读配置nRF905 
      <BR>{ <BR>unsigned&nbsp;char&nbsp;i; 
      <BR>&nbsp;&nbsp;TRX_CE&nbsp;=&nbsp;0;//设置nRF905为待机方式 
      <BR>&nbsp;&nbsp;_nop_(); 
      <BR>&nbsp;&nbsp;CSN&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Spi&nbsp;enable&nbsp;for&nbsp;write&nbsp;a&nbsp;spi&nbsp;command 
      <BR>&nbsp;&nbsp;SpiReadWrite(RC);&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Read&nbsp;config&nbsp;command 
      <BR>&nbsp;&nbsp;for&nbsp;(i&nbsp;=&nbsp;10;&nbsp;i&nbsp;&lt;&nbsp;20;&nbsp;i&nbsp;++)&nbsp;rxaddr[i]&nbsp;=&nbsp;SpiReadWrite(0xff); 
      <BR>&nbsp;&nbsp;CSN&nbsp;=&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Disable&nbsp;Spi 
      <BR>&nbsp;&nbsp;TRX_CE&nbsp;=&nbsp;!TX_EN;// <BR>} 
      <BR><BR>void&nbsp;WritenRFConfig(unsigned&nbsp;char&nbsp;rxaddr[])&nbsp;using&nbsp;0//配置nRF905 
      <BR>{ <BR>&nbsp;&nbsp;TRX_CE&nbsp;=&nbsp;0;//设置nRF905为待机方式 
      <BR>&nbsp;&nbsp;_nop_(); 
      <BR>&nbsp;&nbsp;CSN&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Spi&nbsp;enable&nbsp;for&nbsp;write&nbsp;a&nbsp;spi&nbsp;command 
      <BR>&nbsp;&nbsp;SpiReadWrite(WC);&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Write&nbsp;config&nbsp;command 
      <BR>&nbsp;&nbsp;SpiReadWrite(rxaddr[8]);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//中心频率低8位 
      <BR>&nbsp;&nbsp;SpiReadWrite(PA_PWR_10dBm&nbsp;|&nbsp;HFREQ_PLL_433MHz);&nbsp;//发射+10dBm,发射频率433MHz,中心频率第9位=0 
      <BR>&nbsp;&nbsp;SpiReadWrite(TX_AFW_4BYTE&nbsp;|&nbsp;RX_AFW_4BYTE);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//接收地址宽度4字节,发送地址宽度4字节 
      <BR>&nbsp;&nbsp;SpiReadWrite(RX_PW_32BYTE);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//接收数据宽度32字节 
      <BR>&nbsp;&nbsp;SpiReadWrite(TX_PW_32BYTE);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//发送数据宽度32字节 
      <BR>&nbsp;&nbsp;SpiReadWrite(rxaddr[0]);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//接收有效地址第1字节 
      <BR>&nbsp;&nbsp;SpiReadWrite(rxaddr[1]);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//接收有效地址第2字节 
      <BR>&nbsp;&nbsp;SpiReadWrite(rxaddr[2]);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//接收有效地址第3字节 
      <BR>&nbsp;&nbsp;SpiReadWrite(rxaddr[3]);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//接收有效地址第4字节 
      <BR>&nbsp;&nbsp;SpiReadWrite(CRC16_EN&nbsp;|&nbsp;XOF_16MHz);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//CRC16模式使能,晶体振荡器频率16MHz 
      <BR>&nbsp;&nbsp;CSN&nbsp;=&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Disable&nbsp;Spi 
      <BR>&nbsp;&nbsp;TRX_CE&nbsp;=&nbsp;!TX_EN;// <BR>} 
      <BR><BR>unsigned&nbsp;char&nbsp;VerifynRFConfig(void)&nbsp;using&nbsp;0//校验配置nRF905 
      <BR>{ <BR>unsigned&nbsp;char&nbsp;error&nbsp;=&nbsp;0; 
      <BR>&nbsp;&nbsp;TRX_CE&nbsp;=&nbsp;0;//设置nRF905为待机方式 
      <BR>&nbsp;&nbsp;_nop_(); 
      <BR>&nbsp;&nbsp;CSN&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Spi&nbsp;enable&nbsp;for&nbsp;write&nbsp;a&nbsp;spi&nbsp;command 
      <BR>&nbsp;&nbsp;SpiReadWrite(RC);&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Read&nbsp;config&nbsp;command 
      <BR>&nbsp;&nbsp;SpiReadWrite(0xff);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//中心频率低8位 
      <BR>&nbsp;&nbsp;if&nbsp;(SpiReadWrite(0xff)&nbsp;!=&nbsp;(PA_PWR_10dBm&nbsp;|&nbsp;HFREQ_PLL_433MHz))&nbsp;error&nbsp;++;&nbsp;//发射+10dBm,发射频率433MHz,中心频率第9位=0 
      <BR>&nbsp;&nbsp;if&nbsp;(SpiReadWrite(0xff)&nbsp;!=&nbsp;(TX_AFW_4BYTE&nbsp;|&nbsp;RX_AFW_4BYTE))&nbsp;error&nbsp;++;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//接收地址宽度4字节,发送地址宽度4字节 
      <BR>&nbsp;&nbsp;if&nbsp;(SpiReadWrite(0xff)&nbsp;!=&nbsp;(RX_PW_32BYTE))&nbsp;error&nbsp;++;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//接收数据宽度32字节 
      <BR>&nbsp;&nbsp;if&nbsp;(SpiReadWrite(0xff)&nbsp;!=&nbsp;(TX_PW_32BYTE))&nbsp;error&nbsp;++;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//发送数据宽度32字节 
      <BR>&nbsp;&nbsp;SpiReadWrite(0xff);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//接收有效地址第1字节 
      <BR>&nbsp;&nbsp;SpiReadWrite(0xff);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//接收有效地址第2字节 
      <BR>&nbsp;&nbsp;SpiReadWrite(0xff);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//接收有效地址第3字节 
      <BR>&nbsp;&nbsp;SpiReadWrite(0xff);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//接收有效地址第4字节 
      <BR>&nbsp;&nbsp;if&nbsp;(SpiReadWrite(0xff)&nbsp;!=&nbsp;(CRC16_EN&nbsp;|&nbsp;XOF_16MHz))&nbsp;error&nbsp;++;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//CRC16模式使能,晶体振荡器频率16MHz 
      <BR>&nbsp;&nbsp;CSN&nbsp;=&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Disable&nbsp;Spi 
      <BR>&nbsp;&nbsp;TRX_CE&nbsp;=&nbsp;!TX_EN;// 
      <BR>&nbsp;&nbsp;return&nbsp;error; <BR>} 
      <BR><BR>/*******************************************************************************************/ 
      <BR>//function&nbsp;SetTxMode(); 
      <BR>/*******************************************************************************************/ 
      <BR>void&nbsp;SetTxMode(void)&nbsp;using&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp; 
      <BR>{&nbsp; <BR>&nbsp;&nbsp;_nop_(); <BR>&nbsp;&nbsp;_nop_(); 
      <BR>&nbsp;&nbsp;_nop_(); <BR>&nbsp;&nbsp;TX_EN=1; <BR>&nbsp;&nbsp;_nop_(); 
      <BR>&nbsp;&nbsp;TRX_CE=0; <BR>&nbsp;&nbsp;_nop_(); 
      <BR>&nbsp;&nbsp;_nop_(); <BR>&nbsp;&nbsp;_nop_(); 
      <BR>}&nbsp;&nbsp;&nbsp;&nbsp; 
      <BR>/*******************************************************************************************/ 
      <BR>//function&nbsp;SetRxMode(); 
      <BR>/*******************************************************************************************/ 
      <BR>void&nbsp;SetRxMode(void)&nbsp;using&nbsp;0 <BR>{ 
      <BR>&nbsp;&nbsp;_nop_(); <BR>&nbsp;&nbsp;_nop_(); <BR>&nbsp;&nbsp;_nop_(); 
      <BR>&nbsp;&nbsp;TX_EN=0; <BR>&nbsp;&nbsp;_nop_(); 
      <BR>&nbsp;&nbsp;TRX_CE=1; <BR>//650uS <BR>&nbsp;&nbsp;_nop_(); 
      <BR>&nbsp;&nbsp;_nop_(); <BR>&nbsp;&nbsp;_nop_(); <BR>} 
      <BR><BR>void&nbsp;SystemIoInit(void)&nbsp;using&nbsp;0 <BR>{ 
      <BR>&nbsp;&nbsp;IE&nbsp;=&nbsp;0x00;//关闭中断 
      <BR>&nbsp;&nbsp;P2&nbsp;=&nbsp;0x9d;//P2口初始化 
      <BR>&nbsp;&nbsp;P0&nbsp;=&nbsp;0xff;//P0口初始化 
      <BR>&nbsp;&nbsp;P1&nbsp;=&nbsp;0xff;//P1口初始化 
      <BR>&nbsp;&nbsp;P3&nbsp;=&nbsp;0xff;//P3口初始化 
      <BR>//&nbsp;&nbsp;nRFPowerUP(); <BR>} 
      <BR><BR>void&nbsp;UserSetup(void)&nbsp;using&nbsp;0//用户运行环境设置 <BR>{ 
      <BR>&nbsp;&nbsp;KeyInit();//键盘初始化 <BR>&nbsp;&nbsp;nRFInit();//无线模块初始化 
      <BR>&nbsp;&nbsp;SystemBuffers.TimeCount&nbsp;=&nbsp;0; <BR>} 
      <BR><BR>void&nbsp;ClrWdt(void)&nbsp;&nbsp;using&nbsp;0//喂狗 <BR>{ 
      <BR>&nbsp;&nbsp;WDTRST&nbsp;=&nbsp;0x1e;//89s52内狗 
      <BR>&nbsp;&nbsp;WDTRST&nbsp;=&nbsp;0xe1;//89s52内狗 <BR>} <BR><BR>&nbsp; 
      <BR><BR>/*------------------------------------ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;定时器T0中断服务程序 
      <BR>------------------------------------*/ 
      <BR>void&nbsp;t0proc()&nbsp;interrupt&nbsp;TF0_VECTOR&nbsp;using&nbsp;1 
      <BR>{ <BR>} <BR><BR>/*------------------------------------ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;定时器T1中断服务程序 
      <BR>------------------------------------*/ 
      <BR>void&nbsp;t1proc()&nbsp;interrupt&nbsp;TF1_VECTOR&nbsp;using&nbsp;1 
      <BR>{ <BR>} <BR><BR>/*------------------------------------ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;定时器T2中断服务程序(5mS) 
      <BR>------------------------------------*/ 
      <BR>void&nbsp;t2proc()&nbsp;interrupt&nbsp;TF2_VECTOR&nbsp;using&nbsp;0 
      <BR>{ <BR>unsigned&nbsp;char&nbsp;key; 
      <BR>code&nbsp;unsigned&nbsp;char&nbsp;KeyPosTab[]&nbsp;=&nbsp;{0x01,&nbsp;0x02,&nbsp;0x04,&nbsp;0x08}; 
      <BR>&nbsp;&nbsp;TF2&nbsp;=&nbsp;0; 
      <BR>&nbsp;&nbsp;if&nbsp;(PCON&nbsp;&amp;&nbsp;GF0_)&nbsp;{//中断是从主循环内跳入的才能喂狗 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;ClrWdt();//清除看门狗计数器 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;PCON&nbsp;&amp;=&nbsp;~GF0_;//清除标志 
      <BR>&nbsp;&nbsp;} <BR>&nbsp;&nbsp;key&nbsp;=&nbsp;~P0;//接收键盘数据每次可取多键) 
      <BR>&nbsp;&nbsp;if&nbsp;(key&nbsp;&amp;&nbsp;KeyPosTab[SystemBuffers.TimeCount&nbsp;&amp;&nbsp;0x03])&nbsp;{//有键压下(每次只取1键以实现“零耗时消除键盘抖动”) 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;SystemBuffers.KeyCount[SystemBuffers.TimeCount&nbsp;&amp;&nbsp;0x03]&nbsp;++;//压键计数 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(SystemBuffers.KeyCount[SystemBuffers.TimeCount&nbsp;&amp;&nbsp;0x03]&nbsp;==&nbsp;2)&nbsp;{//短压键 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SystemBuffers.WaitTime&nbsp;=&nbsp;0; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KeyCommandExec(0,&nbsp;SystemBuffers.TimeCount&nbsp;&amp;&nbsp;0x03);//单击键Key00()~Key03() 
      <BR>&nbsp;} 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if&nbsp;(SystemBuffers.KeyCount[SystemBuffers.TimeCount&nbsp;&amp;&nbsp;0x03]&nbsp;&gt;=&nbsp;SysPushKeyTime)&nbsp;{//长压键150&nbsp;*&nbsp;20mS&nbsp;=&nbsp;3。0S 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SystemBuffers.WaitTime&nbsp;=&nbsp;0; 
      <BR>&nbsp;&nbsp;&nbsp;KeyCommandExec(2,&nbsp;SystemBuffers.TimeCount&nbsp;&amp;&nbsp;0x03);//长压键Key20()~Key23() 
      <BR>&nbsp;&nbsp;&nbsp;SystemBuffers.KeyCount[SystemBuffers.TimeCount&nbsp;&amp;&nbsp;0x03]&nbsp;=&nbsp;3;//清除长压键计数器(躲过单击键) 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;} <BR>&nbsp;&nbsp;} 
      <BR>&nbsp;&nbsp;else&nbsp;{//无键压下(包括放键) 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(SystemBuffers.KeyCount[SystemBuffers.TimeCount&nbsp;&amp;&nbsp;0x03]&nbsp;&gt;=&nbsp;2)&nbsp;{//放键事件 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SystemBuffers.WaitTime&nbsp;=&nbsp;0; 
      <BR>&nbsp;&nbsp;&nbsp;KeyCommandExec(1,&nbsp;SystemBuffers.TimeCount&nbsp;&amp;&nbsp;0x03);//键释放Key10()~Key13() 
      <BR>&nbsp;} <BR>&nbsp;else&nbsp;{ 

⌨️ 快捷键说明

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