?? keyboard.lst
字號:
C51 COMPILER V7.07 KEYBOARD 01/11/2005 11:05:27 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE KEYBOARD
OBJECT MODULE PLACED IN KeyBoard.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE KeyBoard.c OPTIMIZE(6,SPEED) BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /******************************************/
2 /* 廣州天河雙龍電子公司 */
3 /* http://www.sl.com.cn */
4 /* PS2鍵盤驅動程序 */
5 /* 作者:ntzwq@wx88.net */
6 /* 2002年5月11日 */
7 /* 目標MCU:MEGA8 晶振:外部(EXT) 8MHZ */
8 /******************************************/
9 /******************************************/
10 /* 經過改動移植到51芯片上 */
11 /* 改動者:jifeng */
12 /******************************************/
13
14 #include <REG52.h>
15 #include "scancodes.h"
16 #define BUFF_SIZE 64
17 unsigned char bitcount;
18 unsigned char xdata kb_buffer[BUFF_SIZE];
19 unsigned char input=0;
20 unsigned char output=0;
21 sbit PINDATA= P1^0; //連接數據線
22 unsigned char Temp_Key;
23
24 //使用軟件模擬FIFO
25 void put_kbbuff(unsigned char c)
26 {
27 1 kb_buffer[input]=c;
28 1 if (input<(BUFF_SIZE-1))
29 1 input++;
30 1 else
31 1 input=0;
32 1 }
33 //從緩沖區讀取鍵值
34 unsigned char getchar(void)
35 {
36 1 unsigned char temp;
37 1 if(output==input)
38 1 return 0;
39 1 else
40 1 {
41 2 temp=kb_buffer[output];
42 2 if(output<(BUFF_SIZE-1))
43 2 {
44 3 output++;
45 3 }
46 2 else
47 2 output=0;
48 2 return temp;
49 2 }
50 1 }
51 //初始化
52 void init_kb(void)
53 {
54 1 IT1 = 1;//下降延觸發
55 1 EX1 = 1;
C51 COMPILER V7.07 KEYBOARD 01/11/2005 11:05:27 PAGE 2
56 1 PX1 = 0;
57 1 EA=1;
58 1 bitcount = 11;
59 1 }
60 //鍵值分析
61 void decode(unsigned char sc)
62 {
63 1 static unsigned char shift,shiftup,alt,altup,up;
64 1
65 1 unsigned char i;
66 1 if (sc==0xf0)
67 1 {
68 2 up=1;
69 2 return;
70 2 }
71 1 if (up==1)
72 1 {
73 2 up=0;
74 2 if ((sc==0x12)||(sc==0x59)) shift=0;
75 2 if (sc==0x11) alt=0;
76 2 return;
77 2 }
78 1 switch (sc)
79 1 {
80 2 case 0x11:
81 2 { alt=1;
82 3 altup=1;
83 3 }break;
84 2 case 0x12:{
85 3 if((Temp_Key==0xe0)||(Temp_Key==0xf0)) //按鍵PRINT出現的特殊情況
86 3 { put_kbbuff(27);
87 4 }
88 3 else
89 3 { shift=1;
90 4 shiftup=1;
91 4 }
92 3 }break;
93 2 case 0x59:{
94 3 shift=1;
95 3 shiftup=1;
96 3 }
97 2 break;
98 2 default:{
99 3 if ((shift==0)&&(alt==0))
100 3 {
101 4 for(i = 0;i<90; i++)
102 4 { if (unshifted[i][0] == sc)
103 5 { if(((Temp_Key==0xe0)||(Temp_Key==0xf0))&&(sc==0x7c)) {}
104 6 else
105 6 { if(((Temp_Key==0xe0)||(Temp_Key==0xf0))&&(sc==0x71))
106 7 put_kbbuff(15);
107 7 else put_kbbuff(unshifted[i][1]);
108 7 }
109 6 i=90;
110 6 }
111 5
112 5 }
113 4 }
114 3 else if((shift==1)&&(alt==0)) //使用SHIFT+字母的方式,輸入大寫字母
115 3 {
116 4 for(i = 0;shifted[i][0]!=sc && shifted[i][0]; i++);
117 4 if (shifted[i][0] == sc)
C51 COMPILER V7.07 KEYBOARD 01/11/2005 11:05:27 PAGE 3
118 4 {
119 5 put_kbbuff(shifted[i][1]);
120 5 }
121 4 }
122 3 else if((shift==0)&&(alt==1)) //使用ALT+字母的方式,用于焦點的跳轉
123 3 {
124 4 for(i = 0;alted[i][0]!=sc && alted[i][0]; i++);
125 4 if (alted[i][0] == sc)
126 4 {
127 5 put_kbbuff(alted[i][1]);
128 5 }
129 4 }
130 3 }
131 2 }
132 1 }
133 //鍵盤信息接收,使用中斷 ,連接時鐘線
134 void Key_isr() interrupt 2
135 {
136 1 static unsigned char dat;
137 1 switch (bitcount)
138 1 {
139 2 case 11:{
140 3 //if ((PIN_KB&(1<<DATAPIN))!=0)
141 3 if (PINDATA!=0)
142 3 return;
143 3 else
144 3 bitcount--;
145 3 break;
146 3 }
147 2 case 2:{
148 3 bitcount--;
149 3 break;
150 3 }
151 2 case 1:{
152 3 bitcount--;
153 3 //if ((PIN_KB&(1<<DATAPIN))!=0)
154 3 if (PINDATA==0)
155 3 {
156 4 bitcount=11;
157 4 return;
158 4 }
159 3 else
160 3 {
161 4 bitcount=11;
162 4 decode(dat);
163 4 Temp_Key=dat;
164 4 }
165 3 break;
166 3 }
167 2 default:{
168 3 dat = (dat >> 1);
169 3 //if ((PIN_KB&(1<<DATAPIN))!=0)
170 3 if (PINDATA!=0)
171 3 dat|=0x80;
172 3 bitcount--;
173 3 }
174 2 }
175 1 }
176
177
178
179
C51 COMPILER V7.07 KEYBOARD 01/11/2005 11:05:27 PAGE 4
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 464 ----
CONSTANT SIZE = 368 ----
XDATA SIZE = 64 ----
PDATA SIZE = ---- ----
DATA SIZE = 10 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -