📄 main.lst
字号:
C51 COMPILER V7.50 MAIN 09/29/2007 10:43:26 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2 #include "usb_task.h"
3 #include "usb_kbd_enum.h"
4 #include "ext_5131.h"
5 #include "reg_5131.h"
6 //////////////////////////////
7 code struct usb_st_device_descriptor usb_device_descriptor =
8 {
9 sizeof(usb_device_descriptor), 0x01, 0x1001, 0,
10 0, 0, 32, 0xeb03, 0x0320,
11 0x0001, 0x01, 0x02, 0x03, 1
12 };
13 /*STRING描述符*/
14 code struct usb_st_manufacturer usb_manufacturer =
15 { sizeof(usb_manufacturer), 0x03, {'X'<<8, 'I'<<8, 'N'<<8, 'Z'<<8, 'X'<<8} };
16
17 code struct usb_st_product usb_product =
18 { sizeof(usb_product), 0x03, {'A'<<8, 'T'<<8, '8'<<8, '9'<<8, 'C'<<8, '5'<<8, '1'<<8, \
19 '3'<<8, '1'<<8, ' '<<8, \
20 'H'<<8, 'I'<<8, 'D'<<8, ' '<<8, \
21 'K'<<8, 'e'<<8, 'y'<<8, 'b'<<8, 'o'<<8, 'a'<<8, 'r'<<8,'d'<<8} };
22
23 code struct usb_st_serial_number usb_serial_number =
24 { sizeof(usb_serial_number), 0x03, {'1'<<8, '.'<<8, '2'<<8, '.'<<8, '3'<<8} };
25
26 code struct usb_st_language_descriptor usb_language =
27 { sizeof(usb_language), STRING, 0x0904 };
28 /*配置描述符集合*/
29 code struct
30 { struct usb_st_configuration_descriptor cfg;
31 struct usb_st_interface_descriptor ifc;
32 struct usb_st_hid_descriptor hid ;
33 struct usb_st_endpoint_descriptor ep1 ;
34 unsigned char rep[0x3b] ;
35 }
36 usb_configuration =
37 {
38 { 9, 0x02, 0x2200, 1, 1,0, 0x80, 50},
39 { 9, 0x04, 1, 0, 1, 0x03, 0, 0, 0 },
40 { 9, 0x21, 0x1101, 8, 1, 0x22, 0x3B00 },
41 { 7, 0x05, 0x81, 0x03, 32, 0x20 },
42 { 0x05,0x01, /* Usage Page (Generic Desktop) */
43 0x09,0x06, /* Usage (Keyboard) */
44 0xA1,0x01, /* Collection (Application) */
45 0x05,0x07, /* Usage Page (Keyboard) */
46 0x19,224, /* Usage Minimum (224) */
47 0x29,231, /* Usage Maximum (231) */
48 0x15,0x00, /* Logical Minimum (0) */
49 0x25,0x01, /* Logical Maximum (1) */
50 0x75,0x01, /* Report Size (1) */
51 0x95,0x08, /* Report Count (8) */
52 0x81,0x02, /* Input (Data, Variable, Absolute) */
53 0x81,0x01, /* Input (Constant) */
54 0x19,0x00, /* Usage Minimum (0) */
55 0x29,101, /* Usage Maximum (101) */
C51 COMPILER V7.50 MAIN 09/29/2007 10:43:26 PAGE 2
56 0x15,0x00, /* Logical Minimum (0) */
57 0x25,101, /* Logical Maximum (101) */
58 0x75,0x08, /* Report Size (8) */
59 0x95,0x06, /* Report Count (6) */
60 0x81,0x00, /* Input (Data, Array) */
61 0x05,0x08, /* Usage Page (LED) */
62 0x19,0x01, /* Usage Minimum (1) */
63 0x29,0x05, /* Usage Maximum (5) */
64 0x15,0x00, /* Logical Minimum (0) */
65 0x25,0x01, /* Logical Maximum (1) */
66 0x75,0x01, /* Report Size (1) */
67 0x95,0x05, /* Report Count (5) */
68 0x91,0x02, /* Output (Data, Variable, Absolute) */
69 0x95,0x03, /* Report Count (3) */
70 0x91,0x01, /* Output (Constant) */
71 0xC0 /* End Collection */
72 }
73 };
74 unsigned char key[4][4]={HID_W,HID_E,HID_L,HID_C,
75 HID_O,HID_M,HID_E,HID_U,
76 HID_S,HID_B,HID_R,HID_D,
77 HID_C,HID_A,HID_B,HID_SPACEBAR};
78 unsigned char usb_kbd_state;
79 unsigned char transmit_no_key;
80 typedef union
81 {
82 unsigned int w;
83 unsigned char b[2];
84 } Union16;
85
86 Union16 scan_key;
87 unsigned char usb_key;
88 unsigned char key_hit;
89 unsigned char shift_key;
90 static unsigned char endpoint_status[2];
91 static unsigned char hid_idle_duration;
92 static unsigned char *pbuffer;
93 static unsigned char bmRequestType;
94 unsigned char usb_configuration_nb;
95 extern bit usb_connected;
96 bit usb_connected_stored;
97 bit usb_configured_stored;
98 /////////////////////////////
99 void main (void)
100 {
101 1 EA = 1; //使能中断
102 1 init_timer0(); //定时器初始化
103 1 delay(10);
104 1 usb_task_init(); //usb控制器初始化
105 1 while(1) //任务循环
106 1 {
107 2 usb_task(); //usb任务处理子程序
108 2 usb_kbd_task(); //键盘任务处理
109 2 delay(256); //延时
110 2 }
111 1 }
112
113 void init_timer0()
114 {
115 1 TMOD=0x05;
116 1 TH0=0;
117 1 TL0=0;
C51 COMPILER V7.50 MAIN 09/29/2007 10:43:26 PAGE 3
118 1 }
119 void delay(int n)
120 {
121 1 TH0=n;
122 1 TL0=0;
123 1 TR0=1;
124 1 if(TH0>1);
125 1 return;
126 1 }
127
128 void usb_task_init(void)
129 {
130 1 USBCON |= 0x80; //使能USB控制器
131 1 USBCON |= 0x10; /*USB软件插拔*/
132 1 delay(100);
133 1 USBCON &= ~0x10;
134 1 PLLDIV = 32; //配置控制器时钟
135 1 PLLCON |= 0x02;//使能PLL
136 1 //usb_configure_endpoint(EP_CONTROL, CONTROL);//配置控制端口
137 1 UEPNUM = 0;//复位控制端口
138 1 UEPCONX = 0;
139 1 /*初始化状态变量*/
140 1 usb_connected = 0;
141 1 usb_connected_stored = 1;
142 1 usb_configured_stored = 0;
143 1 transmit_no_key = 0;
144 1 key_hit = 0;
145 1 usb_kbd_state = 0;
146 1 shift_key = 0;
147 1 endpoint_status[0] = 0x00;
148 1 endpoint_status[1] = 0x00;
149 1 usb_connected = 0;
150 1 usb_configuration_nb = 0x00;
151 1 }
152 /////////////////////////////////
153 void usb_task(void)
154 {
155 1
156 1 if (USBINT & 0x01) //如果处于挂起状态
157 1 {
158 2 if (usb_connected == 1)
159 2 {
160 3 usb_connected = 0;
161 3 }
162 2
163 2 if (USBINT & 0x20)//当接受到唤醒指令时
164 2 {
165 3 usb_connected = 1;//设置连接标志
166 3 USBINT =USBINT & ~0x01;//清除挂起标志
167 3 USBINT =USBINT & ~0x20;//清除唤醒标志
168 3 USBINT =USBINT & ~0x08;
169 3 }
170 2 }
171 1 else
172 1 {
173 2 usb_connected = 1;
174 2 if (USBINT & 0x10) //复位中断;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -