?? ps-2keyboard.lst
字號:
C51 COMPILER V7.06 PS_2KEYBOARD 08/31/2006 21:32:01 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE PS_2KEYBOARD
OBJECT MODULE PLACED IN PS-2KEYBOARD.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE PS-2KEYBOARD.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /********************************************************************************************************
2 原理:每次按鍵,鍵盤會向單片機發(fā)脈沖使單片機發(fā)生外部中斷,數(shù)據(jù)有p3.4口一位位傳進來
3 接口:鍵盤時鐘接在p3.2口,即8051的外部中斷int1上,鍵盤數(shù)據(jù)接到p3.4上,外部中斷使用邊沿觸發(fā)方式
4 鍵盤返回數(shù)據(jù)格式:1位開始位(0),8位數(shù)據(jù)位(所按按鍵的通碼,用來識別按鍵),1位校驗位(奇校驗)
5 *********************************************************************************************************/
6
7 #include "ScanCode.h" //按鍵通碼與ascii對照表
8 #include "ps2KEYBOARD.h"
9 #include "lcdapi.h"
10 #include "3310.h"
11
12 uchar InIndex=0,OutIndex=0;
13 uchar KeyBuff[BUFF_SIZE];
14
15 /*功能:通過外部中斷1讀取鍵盤發(fā)送回來的數(shù)據(jù)位
16 *性質(zhì):中斷調(diào)用
17 *參數(shù):無
18 *返回:無
19 */
20 void KeyBoardISR() interrupt 2 //外部中斷1 用來接受鍵盤發(fā)來的數(shù)據(jù)
21 {
22 1 static uchar BitCount=11,KeyData;
23 1 if(BitCount<11 && BitCount>2)
24 1 {
25 2 KeyData>>=1;
26 2 if(KeyBoardSda)
27 2 KeyData|=0x80;
28 2 }
29 1 if(--BitCount==0)
30 1 {
31 2 BitCount=11;
32 2 KeyBuff[InIndex]=KeyData;
33 2 if(++InIndex==BUFF_SIZE)
34 2 InIndex=0;
35 2 KeyData=0;
36 2 }
37 1 }
38
39 /*功能:通過串口或其它方式顯示鍵盤值(自定義)
40 *性質(zhì):外部調(diào)用
41 *參數(shù):鍵盤按鍵值
42 *返回:無
43 */
44 void Send(uchar d)
45 {
46 1 static uchar i,j;
47 1
48 1 if(i!=80)
49 1 {
50 2 DispAsc(i,2,&d);
51 2 i+=8;
52 2 }
53 1 else if(i==80)
54 1 {
55 2 DispAsc(j,4,&d);
C51 COMPILER V7.06 PS_2KEYBOARD 08/31/2006 21:32:01 PAGE 2
56 2 j+=8;
57 2 if(j==80)
58 2 {
59 3 i=0;
60 3 j=0;
61 3 LCD_Clr2();
62 3 DispString(16,0,"零距離");
63 3 }
64 2 }
65 1 }
66
67 /*功能:通過中斷程序的數(shù)據(jù)位從數(shù)組中取出鍵值
68 *性質(zhì):外部調(diào)用
69 *參數(shù):無
70 *返回:無
71 */
72 void KeyBoardDecode(void)
73 {
74 1 static bit ShiftFlg,CapsFlg,NumFlg,BreakFlg,ExtendFlg;
75 1 uchar ArrayIndex;
76 1 uchar ScanCode;
77 1
78 1 while(InIndex != OutIndex)
79 1 {
80 2 if(!BreakFlg)
81 2 {
82 3 switch(KeyBuff[OutIndex])
83 3 {
84 4 case 0x12: //左SHIFT
85 4 case 0x59:
86 4 ShiftFlg = 1; //右SHIFT
87 4 break;
88 4 case 0x58:
89 4 if(CapsFlg) //Caps
90 4 {
91 5 CapsFlg = 0;
92 5 }
93 4 else if(!CapsFlg)
94 4 {
95 5 CapsFlg = 1;
96 5 }
97 4 break;
98 4 case 0x77:
99 4 if(NumFlg) //切換Num
100 4 {
101 5 NumFlg = 0;
102 5 }
103 4 else if(!NumFlg)
104 4 {
105 5 NumFlg = 1;
106 5 }
107 4 break;
108 4 case 0xe0 :
109 4 if(!ExtendFlg)
110 4 {
111 5 ExtendFlg = 1;
112 5 }
113 4 else if(ExtendFlg)
114 4 {
115 5 ExtendFlg = 0;
116 5 }
117 4 break;
C51 COMPILER V7.06 PS_2KEYBOARD 08/31/2006 21:32:01 PAGE 3
118 4 case 0xf0 :
119 4 BreakFlg = 1;
120 4 break;
121 4 default:
122 4 if(ShiftFlg)
123 4 {
124 5 for(ArrayIndex = 0;shifted[ArrayIndex][0] != 0 ;ArrayIndex++)
125 5 {
126 6
127 6 if(KeyBuff[OutIndex] == shifted[ArrayIndex][0])
128 6 {
129 7 ScanCode = shifted[ArrayIndex][1];
130 7 Send(ScanCode);
131 7 break;
132 7 }
133 6 }
134 5
135 5 }
136 4 else if(CapsFlg)
137 4 {
138 5 for(ArrayIndex = 0;unshifted[ArrayIndex][0] != 0 ;ArrayIndex++)
139 5 {
140 6
141 6 if(KeyBuff[OutIndex] == unshifted[ArrayIndex][0])
142 6 {
143 7 ScanCode = unshifted[ArrayIndex][1];
144 7 if((ScanCode >= 'a')&&(ScanCode <= 'z'))
145 7 {
146 8 ScanCode -= 0x20;
147 8 }
148 7 Send(ScanCode);
149 7 break;
150 7 }
151 6 }
152 5 }
153 4 else if(!ShiftFlg)
154 4 {
155 5 for(ArrayIndex = 0;unshifted[ArrayIndex][0] != 0;ArrayIndex++)
156 5 {
157 6 if(KeyBuff[OutIndex] == unshifted[ArrayIndex][0])
158 6 {
159 7 ScanCode = unshifted[ArrayIndex][1];
160 7 Send(ScanCode);
161 7 break;
162 7 }
163 6 }
164 5 }
165 4 }
166 3 }
167 2 else
168 2 {
169 3 BreakFlg = 0; //break code received
170 3 switch(KeyBuff[OutIndex])
171 3 {
172 4 case 0x12 : //lshft
173 4 case 0x59 : ShiftFlg = 0; //rshft
174 4 break;
175 4 }
176 3 }
177 2 OutIndex ++;
178 2 if(OutIndex == BUFF_SIZE) OutIndex =0; //循環(huán) outpointer
179 2 }
C51 COMPILER V7.06 PS_2KEYBOARD 08/31/2006 21:32:01 PAGE 4
180 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 482 ----
CONSTANT SIZE = 279 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 14 3
IDATA SIZE = ---- ----
BIT SIZE = 5 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -