?? main.lst
字號(hào):
C51 COMPILER V7.06 MAIN 11/16/2008 15:59:54 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN Main.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE Main.c BROWSE DEBUG OBJECTEXTEND TABS(1)
stmt level source
1 /******************************************************************
2 本程序只供學(xué)習(xí)使用,未經(jīng)作者許可,不得用于其它任何用途
3
4 歡迎訪問我的USB專區(qū):http://group.ednchina.com/93/
5 歡迎訪問我的blog: http://www.ednchina.com/blog/computer00
6 http://computer00.21ic.org
7
8 感謝PCB贊助商——電子園: http://bbs.cepark.com/
9
10 main.c file
11
12 作者:電腦圈圈
13 建立日期: 2008.06.27
14 修改日期: 2008.07.14
15 版本:V1.1
16 版權(quán)所有,盜版必究。
17 Copyright(C) 電腦圈圈 2008-2018
18 All rights reserved
19 *******************************************************************/
20
21 #include <AT89X52.H> //頭文件
22 #include "Key.h"
23 #include "Led.h"
24 #include "UART.h"
25 #include "pdiusbd12.h"
26 #include "UsbCore.h"
27 #include "config.h"
28
29 code uint8 HeadTable[][74]={
30 "********************************************************************\r\n",
31 "****** 《圈圈教你玩USB》之 用戶自定義的USB HID設(shè)備 ******\r\n",
32 "****** AT89S52 CPU ******\r\n",
33 "****** 建立日期:",__DATE__," ******\r\n",
34 "****** 建立時(shí)間:",__TIME__," ******\r\n",
35 "****** 作者:電腦圈圈 ******\r\n",
36 "****** 歡迎訪問作者的 ******\r\n",
37 "****** USB專區(qū):http://group.ednchina.com/93/ ******\r\n",
38 "****** BLOG1:http://www.ednchina.com/blog/computer00 ******\r\n",
39 "****** BLOG2:http://computer00.21ic.org ******\r\n",
40 "****** 打開上位機(jī)應(yīng)用軟件,然后按K1-K8分別進(jìn)行測試 ******\r\n",
41 "********************************************************************\r\n",
42 };
43
44 /********************************************************************
45 函數(shù)功能:根據(jù)按鍵情況返回報(bào)告的函數(shù)。
46 入口參數(shù):無。
47 返 回:無。
48 備 注:無。
49 ********************************************************************/
50 void SendReport(void)
51 {
52 1 //需要返回的8字節(jié)報(bào)告的緩沖。但在本測試程序中,只使用前5字節(jié)。
53 1 uint8 Buf[8]={0,0,0,0,0,0,0,0};
54 1
55 1 //每發(fā)送一次數(shù)據(jù),則將Count增加一。
C51 COMPILER V7.06 MAIN 11/16/2008 15:59:54 PAGE 2
56 1 Count++;
57 1
58 1 //根據(jù)不同的按鍵設(shè)置輸入報(bào)告。這里將8個(gè)按鍵情況放在第一字節(jié)。
59 1 Buf[0]=KeyPress;
60 1
61 1 //根據(jù)Count的值設(shè)置報(bào)告的第二到第五字節(jié)。
62 1 Buf[1]=(Count&0xFF); //最低字節(jié)
63 1 Buf[2]=((Count>>8)&0xFF); //次低字節(jié)
64 1 Buf[3]=((Count>>16)&0xFF); //次高字節(jié)
65 1 Buf[4]=((Count>>24)&0xFF); //最高字節(jié)
66 1
67 1 //報(bào)告準(zhǔn)備好了,通過端點(diǎn)1返回,長度為8字節(jié)。
68 1 D12WriteEndpointBuffer(3,8,Buf);
69 1 Ep1InIsBusy=1; //設(shè)置端點(diǎn)忙標(biāo)志。
70 1
71 1 //記得清除KeyUp和KeyDown
72 1 KeyUp=0;
73 1 KeyDown=0;
74 1 }
75 ////////////////////////End of function//////////////////////////////
76
77 /********************************************************************
78 函數(shù)功能:主函數(shù)。
79 入口參數(shù):無。
80 返 回:無。
81 備 注:無。
82 ********************************************************************/
83 void main(void) //主函數(shù)
84 {
85 1 uint8 i;
86 1 uint16 id;
87 1 uint8 InterruptSource;
88 1
89 1 EA=1; //打開中斷
90 1 InitKeyboard(); //初始化按鍵
91 1 InitUART(); //初始化串口
92 1
93 1 for(i=0;i<16;i++) //顯示信息
94 1 {
95 2 Prints(HeadTable[i]);
96 2 }
97 1
98 1 id=D12ReadID();
99 1
100 1 Prints("Your D12 chip\'s ID is: ");
101 1 PrintShortIntHex(id);
102 1
103 1 if(id==0x1012)
104 1 {
105 2 Prints(". ID is correct! Congratulations!\r\n\r\n");
106 2 }
107 1 else
108 1 {
109 2 Prints(". ID is incorrect! What a pity!\r\n\r\n");
110 2 }
111 1
112 1 UsbDisconnect(); //先斷開USB連接
113 1 UsbConnect(); //將USB連接上
114 1 ConfigValue=0; //配置值初始化為0
115 1
116 1 while(1) //死循環(huán)
117 1 {
C51 COMPILER V7.06 MAIN 11/16/2008 15:59:54 PAGE 3
118 2 if(D12GetIntPin()==0) //如果有中斷發(fā)生
119 2 {
120 3 D12WriteCommand(READ_INTERRUPT_REGISTER); //寫讀中斷寄存器的命令
121 3 InterruptSource=D12ReadByte(); //讀回第一字節(jié)的中斷寄存器
122 3 if(InterruptSource&0x80)UsbBusSuspend(); //總線掛起中斷處理
123 3 if(InterruptSource&0x40)UsbBusReset(); //總線復(fù)位中斷處理
124 3 if(InterruptSource&0x01)UsbEp0Out(); //端點(diǎn)0輸出中斷處理
125 3 if(InterruptSource&0x02)UsbEp0In(); //端點(diǎn)0輸入中斷處理
126 3 if(InterruptSource&0x04)UsbEp1Out(); //端點(diǎn)1輸出中斷處理
127 3 if(InterruptSource&0x08)UsbEp1In(); //端點(diǎn)1輸入中斷處理
128 3 if(InterruptSource&0x10)UsbEp2Out(); //端點(diǎn)2輸出中斷處理
129 3 if(InterruptSource&0x20)UsbEp2In(); //端點(diǎn)2輸入中斷處理
130 3 }
131 2 if(ConfigValue!=0) //如果已經(jīng)設(shè)置為非0的配置,則可以返回報(bào)告數(shù)據(jù)
132 2 {
133 3 if(Ep1InIsBusy==0) //如果端點(diǎn)1輸入沒有處于忙狀態(tài),則可以發(fā)送數(shù)據(jù)
134 3 {
135 4 KeyCanChange=0; //禁止按鍵掃描
136 4 if(KeyUp||KeyDown) //如果有按鍵事件發(fā)生
137 4 {
138 5 SendReport(); //則返回報(bào)告
139 5 }
140 4 KeyCanChange=1; //允許按鍵掃描
141 4 }
142 3 }
143 2 }
144 1 }
145 ////////////////////////End of function//////////////////////////////
146
147
148
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 323 ----
CONSTANT SIZE = 1290 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 12
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -