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

📄 main.c

📁 2010年新增TX-1C程序
💻 C
字号:
/******************************************************************
   本程序只供学习使用,未经作者许可,不得用于其它任何用途
				 
				 欢迎光临天祥电子  www.txmcu.cn
          
*******************************************************************/

#include <AT89X52.H>  //头文件
#include "Key.h"
#include "Led.h"
#include "UART.h"
#include "pdiusbd12.h"
#include "UsbCore.h"
#include "config.h"

unsigned char s6,s7,s10,s11,s14,s15,s,again1,again2,again3,again4,again5,again6,pp,qq,rr,ss,tt,uu;

code uint8 HeadTable[][74]={
"********************************************************************\r\n",
"******                  “天祥电子”之 USB鼠标                  ******\r\n",
"******                       www.txmcu.cn                       ******\r\n",
"******                       www.txmcu.com                      ******\r\n",
"******                       AT89S52 CPU                        ******\r\n",
"******                   建立日期:",__DATE__,"                 ******\r\n",
"******                   建立时间:",__TIME__,"                 ******\r\n",
"******                  请按下列按键分别进行测试                ******\r\n",
"******         S10:左Shift键  S11:左Alt键  S14:1键   			 ******\r\n",
"******       S15:2键   S6:Caps Lock键 S7:Num Lock键     		******\r\n",
"******  注意:数字键是数字小键盘,必须打开Num Lock才是数字键  ******\r\n",
"********************************************************************\r\n",
};		

/********************************************************************
函数功能:根据按键情况返回报告的函数。
入口参数:无。
返    回:无。
备    注:无。
********************************************************************/
void SendReport(void)
{
 //需要返回的8字节报告的缓冲
 //通过报告描述符的定义及HID用途表文档,可知Buf[0]的D0是左Ctrl键,
 //D1是左Shift键,D2是左Alt键,D3是左GUI(即Window键),
 //D4是右Ctrl,D5是右Shift,D6是右Alt,D7是右GUI键。
 //Buf[1]保留,值为0。Buf[2]~Buf[7]为键值,最多可以有6个。
 //由于我们这里普通键最多只有5个,因此不会超过6个。
 //对于实际的键盘,如果按键数太多时,后面的6个字节都为0xFF,
 //表示按下的键太多,无法正确返回。
 
 uint8 Buf[8]={0,0,0,0,0,0,0,0};
 //由于需要返回多个按键,所以需要增加一个变量来保存当前的位置。
 uint8 i=2;
 if(s)
 {
 	s=0;
 	if(s6)	
	{
		s6=0;
 		Buf[i]=0x39;  //S6为大/小写切换键。
  		i++;  //切换到下个位置。
  	}
	if(s7)
	{
		s7=0;
 		Buf[i]=0x53;  //S7为数字小键盘功能切换键。
	}
	if(s10)
	{
		s10=0;
  		Buf[0]|=0x02;  //S10为左Shift键。
  	}
	if(s11)
	{
		s11=0;
 		Buf[0]|=0x04;  //S11为左Alt键
	}
	if(s14)
	{
		s14=0;
		Buf[i]=0x59;  //S14为数字小键盘1键。
 	 	i++;  //切换到下个位置。
	}
	if(s15)
	{
		s15=0;
 		Buf[i]=0x5A;  //S15数字小键盘2键。
  		i++;  //切换到下个位置。
	}
//报告准备好了,通过端点1返回,长度为4字节。
  D12WriteEndpointBuffer(3,8,Buf);
  Ep1InIsBusy=1;  //设置端点忙标志。	
}
}
////////////////////////End of function//////////////////////////////

/********************************************************************
函数功能:主函数。
入口参数:无。
返    回:无。
备    注:无。
********************************************************************/
void main(void)  //主函数
{
 uint8 i;
 uint16 id;
 uint8 InterruptSource;
 
 EA=1; //打开中断
 InitKeyboard(); //初始化按键
 InitUART();  //初始化串口
 
 for(i=0;i<19;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) //如果有中断发生
  {
   outportb(D12COMMAND,0xF4);// READ_INTERRUPT_REGISTER);
   InterruptSource=inportb(D12DATA);//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的配置,则可以返回报告数据
  {
   if(!Ep1InIsBusy)  //如果端点1输入没有处于忙状态,则可以发送数据
   {
    KeyCanChange=0;  //禁止按键扫描
    if(s) //如果有按键事件发生
    {
     SendReport();  //则返回报告
    }
    KeyCanChange=1;  //允许按键扫描
   }
  }
 }
}
////////////////////////End of function//////////////////////////////

⌨️ 快捷键说明

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