这个是关机重启正常的代码
- void usb_class_in()
- {
- BYTE button[3]; // 声明一个名为button的3个字节大小的数组,用于存储按钮状态
- BYTE i; // 声明一个字节大小的变量i,用于循环计数
-
- if (DeviceState != DEVSTATE_CONFIGURED)
- return; // 如果设备状态不是已配置状态,就立即返回,不执行后续代码
-
-
-
- if (!UsbInBusy&& fKeyOK )//
- {
- fKeyOK = 0;
-
-
-
- // 初始化按钮状态数组为0
- for (i = 0; i < 3; i++) {
- button[i] = 0;
- }
- // 增加按钮
- // 检查按键状态并设置对应的位
- if (bKeyCode & 0x01) {
- button[0] |= 0x01;
- }
- if (bKeyCode & 0x02) {
- button[0] |= 0x02;
- }
- if (bKeyCode & 0x04) {
- button[0] |= 0x04;
- }
-
- //继续检查其他按键状态并设置相应的位
-
- IE2 &= ~0x80; // 清除IE2寄存器中的特定位,可能用于禁用某些USB中断
- UsbInBusy = 1; // 设置UsbInBusy标志为1,表示USB输入忙
- usb_write_reg(INDEX, 1); // 调用usb_write_reg函数,向USB设备的INDEX寄存器写入值1
- for (i = 0; i < 3; i++)
- {
- usb_write_reg(FIFO1, button[i]); // 循环将按钮状态写入USB设备的FIFO1寄存器
- }
- usb_write_reg(INCSR1, INIPRDY); // 调用usb_write_reg函数,向USB设备的INCSR1寄存器写入INIPRDY值
- IE2 |= 0x80; // 设置IE2寄存器的特定位,可能用于启用某些USB中断
- }
- }
-
-
-
- void configure_P14_P15_P36_as_digital_inputs_with_pullup()
- {P1M1 &= ~0x01; // 设置P1.0为输入模式,清除P1.0的P1M1位
- P1M0 |= 0x01; // 设置P1.0为数字输入模式,置位P1.0的P1M0位
-
- P3M1 &= ~0x08; // 设置P3.3为输入模式,清除P3.3的P3M1位
- P3M0 |= 0x08; // 设置P3.3为数字输入模式,置位P3.3的P3M0位
-
- P3M1 &= ~0x40; // 设置P3.6为输入模式,清除P3.6的P3M1位
- P3M0 |= 0x40; // 设置P3.6为数字输入模式,置位P3.6的P3M0位
-
-
- }
-
- void scan_key()
- {
- BYTE key;
- configure_P14_P15_P36_as_digital_inputs_with_pullup(); // 配置 P14、P15 和 P36 为数字输入并启用上拉电阻
- key = 0; // 初始化按键状态变量 key 为 0
-
- // 通过 P14、P15 和 P36 读取按钮状态,并将其存储到 key 变量中
- key |= ((P10 == 0) ? 0x01 : 0x00); // 如果 P14 按键连接到 Vcc(高电平),设置 key 的第 0 位为 1,否则为 0
- key |= ((P33 == 0) ? 0x02 : 0x00); // 如果 P15 按键连接到 Vcc(高电平),设置 key 的第 1 位为 1,否则为 0
- key |= ((P36 == 0) ? 0x04 : 0x00); // 如果 P36 按键连接到 Vcc(高电平),设置 key 的第 2 位为 1,否则为 0
-
- if (key != bKeyCode)
- {
- bKeyCode = key; // 如果检测到按键状态发生变化,则更新 bKeyCode 变量为当前按键状态
- bKeyDebounce = 20; // 并设置按键抖动计数器为 20,用于处理按键抖动
- }
- else
- {
- if (bKeyDebounce)
- {
- bKeyDebounce--; // 如果按键抖动计数器不为 0,则递减计数器
- if (bKeyDebounce == 0)
- {
- fKeyOK = 1; // 如果按键抖动计数器达到 0,表示按键稳定,将 fKeyOK 标志置为 1
- }
- }
- }
- }
复制代码
|