void main(void) { u16 id; InitUart(); InitKeyBoard(); //*********************************** // Prints("adfasdfadsfasf"); // LightUpLed(LED1); // TurnOffLed(LED2); Prints("\nGetting chip ID..."); D12ReadID(&id); PrintShortIntHex(id); Prints(",over\n"); USBConnect(); //************************************ while(1); }
/******************************************************************** 函数功能:主函数。 入口参数:无。 返 回:无。 备 注:无。 ********************************************************************/ void main(void) //主函数 { uint8 i; uint16 id; uint8 InterruptSource; EA=1; //打开中断 InitKeyboard(); //初始化按键 InitUART(); //初始化串口 for(i=0;i<18;i++) //显示信息 { Prints(HeadTable[i]); } id=D12ReadID(); Prints("Your D12 chip\'s ID is: "); PrintShortIntHex(id); if(id==0x1012) { Prints(". ID is correct! Congratulations!\r\n\r\n"); } else { Prints(". ID is incorrect! What a pity!\r\n\r\n"); } UsbDisconnect(); //先断开USB连接 UsbConnect(); //将USB连接上 ConfigValue=0; //配置值初始化为0 while(1) //死循环 { if(D12GetIntPin()==0) //如果有中断发生 { D12WriteCommand(READ_INTERRUPT_REGISTER); //写读中断寄存器的命令 InterruptSource=D12ReadByte(); //读回第一字节的中断寄存器 if(InterruptSource&0x80)UsbBusSuspend(); //总线挂起中断处理 if(InterruptSource&0x40)UsbBusReset(); //总线复位中断处理 if(InterruptSource&0x01)UsbEp0Out(); //端点0输出中断处理 if(InterruptSource&0x02)UsbEp0In(); //端点0输入中断处理 if(InterruptSource&0x04)UsbEp1Out(); //端点1输出中断处理 if(InterruptSource&0x08)UsbEp1In(); //端点1输入中断处理 if(InterruptSource&0x10)UsbEp2Out(); //端点2输出中断处理 if(InterruptSource&0x20)UsbEp2In(); //端点2输入中断处理 } if(ConfigValue!=0) //如果已经设置为非0的配置,则可以返回报告数据 { LEDs=~KeyPress; //利用板上8个LED显示按键状态,按下时亮 if(!Ep1InIsBusy) //如果端点1输入没有处于忙状态,则可以发送数据 { KeyCanChange=0; //禁止按键扫描 if(KeyUp||KeyDown||KeyPress) //如果有按键事件发生 { SendReport(); //则返回报告 } KeyCanChange=1; //允许按键扫描 } } } }