📄 ps2key.lst
字号:
C51 COMPILER V8.05a PS2KEY 08/31/2008 21:10:01 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE PS2KEY
OBJECT MODULE PLACED IN ps2key.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE ps2key.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h>
2
3 sbit ps2dat=P2^0;
4 sbit ps2clk=P2^2;
5 sbit SPK=P3^7;
6 sbit K1=P1^6;
7 sbit K2=P1^7;
8
9 bit parity;
10
11 unsigned char sdata;
12
13 void delayus(unsigned char n)
14 { n=n>>1;
15 1 while(n--);
16 1 }
17
18 void delayms(unsigned char ms)
19 // 延时子程序
20 {
21 1 unsigned char i;
22 1 while(ms--)
23 1 {
24 2 for(i = 0; i < 120; i++);
25 2 }
26 1 }
27
28 void send_char(unsigned char send_data)
29 {unsigned char i;
30 1 parity=1;
31 1 while(!ps2clk)
32 1 {delayus(10);}//等待主机释放抑制
33 1 if(!ps2dat)
34 1 return;//主机要发送数据,传输中止
35 1 delayus(20);
36 1 // 发送起始位
37 1 ps2dat=0;
38 1 delayus(10);
39 1 ps2clk=0;
40 1 delayus(20);
41 1 ps2clk=1;
42 1 delayus(10);
43 1 ps2dat=1;
44 1
45 1 //发送数据
46 1 for(i=0;i<8;i++)
47 1 {ps2dat=send_data&0x01;
48 2 parity=parity^(ps2dat^0);
49 2 send_data=send_data>>1;
50 2 delayus(10);
51 2 ps2clk=0;
52 2 SPK=0;
53 2 delayus(20);
54 2 ps2clk=1;
55 2 SPK=1;
C51 COMPILER V8.05a PS2KEY 08/31/2008 21:10:01 PAGE 2
56 2 delayus(10);
57 2
58 2 }
59 1 //发送校验位
60 1 ps2dat=parity;
61 1 delayus(10);
62 1 ps2clk=0;
63 1 delayus(20);
64 1 ps2clk=1;
65 1 delayus(10);
66 1 ps2dat=1;
67 1 //发送停止位
68 1 ps2dat=1;
69 1 delayus(10);
70 1 ps2clk=0;
71 1 delayus(20);
72 1 ps2clk=1;
73 1
74 1 }
75
76 main()
77 {unsigned char kk1,kk2;
78 1 kk1=1;
79 1 kk2=1;
80 1 while(1)
81 1 {/*if(K1==0)
82 2 { delayms(50);
83 2 if(K1==0)
84 2 {send_char(0x11);
85 2 delayms(10);
86 2 send_char(0x0d);
87 2 delayms(10);
88 2 send_char(0xf0);
89 2 delayms(10);
90 2 send_char(0x0d);
91 2 delayms(10);
92 2 send_char(0xf0);
93 2 delayms(10);
94 2 send_char(0x11);
95 2 delayms(100);
96 2 }
97 2
98 2 }
99 2 if(K2==0)
100 2 { delayms(50);
101 2 if(K2==0)
102 2 {send_char(0x2e);
103 2 delayms(10);
104 2 send_char(0xf0);
105 2 delayms(10);
106 2 send_char(0x2e);
107 2 delayms(100);
108 2 }
109 2
110 2 } */
111 2 if(K1==0&&kk1==1) //K1按下
112 2 {kk1=0;
113 3 send_char(0x11);
114 3 delayms(10);
115 3 }
116 2 if(K1==1&&kk1==0) //K1弹起
117 2 {kk1=1;
C51 COMPILER V8.05a PS2KEY 08/31/2008 21:10:01 PAGE 3
118 3 send_char(0xf0);
119 3 delayms(10);
120 3 send_char(0x11);
121 3 delayms(10);
122 3 }
123 2 if(K2==0&&kk2==1) //K2按下
124 2 {kk2=0;
125 3 send_char(0x0d);
126 3 delayms(10);
127 3 }
128 2 if(K2==1&&kk2==0) //K2按下
129 2 {kk2=1;
130 3 send_char(0xf0);
131 3 delayms(10);
132 3 send_char(0x0d);
133 3 delayms(10);
134 3 }
135 2 }
136 1 }
137
138 /*
139
140 #include <intrins.h>
141
142 sbit ps2data = P2^0;
143 sbit ps2clock = P2^2;
144 sbit speak = P3^7;
145 unsigned char bdata ps2char;
146 unsigned char bdata status;
147 sbit ps2lsb = ps2char^0;
148 sbit pverify = status^0;
149
150 unsigned char bdata keystatus;
151 sbit key1_up=keystatus^0;
152
153
154 sbit AN1 = P1^6;
155 sbit AN2 = P1^7;
156 sbit LED1 = P0^2;
157 sbit irt = P0^0;
158 sbit gdt = P0^1;
159 void delayus(unsigned char us)
160 { us=us*2;
161 while(--us) ;
162 }
163
164 void send_char()
165 {
166 unsigned char cnt = 9;
167 while(!ps2clock)
168 delayus(10);
169 if(!ps2data)
170 return;
171 //起始位
172 ps2data = 0;
173 delayus(10);
174 ps2clock = 0;
175 delayus(20);
176 ps2clock = 1;
177 delayus(10);
178
179 ACC = ps2char;
C51 COMPILER V8.05a PS2KEY 08/31/2008 21:10:01 PAGE 4
180 pverify = ~P;
181
182 while(--cnt)
183 {
184 ps2data = ps2lsb;
185 ps2char = _cror_(ps2char,1);
186 delayus(10);
187 ps2clock = 0;
188 speak = 0;
189 delayus(20);
190 ps2clock = 1;
191 speak = 1;
192 delayus(10);
193 }
194
195 ps2data = ps2lsb;
196 delayus(10);
197 ps2clock = 0;
198 delayus(20);
199 ps2clock = 1;
200 delayus(10);
201
202 ps2data = 1;
203 delayus(10);
204 ps2clock = 0;
205 delayus(20);
206 ps2clock = 1;
207 }
208
209 void delayms(unsigned char ms)
210 // 延时子程序
211 {
212 unsigned char i;
213 while(ms--)
214 {
215 for(i = 0; i < 120; i++);
216 }
217 }
218
219 void main(void)
220 {
221 P0=0xFF;
222 keystatus = 0xFF;
223 gdt = 0;
224 while(1)
225 {
226 LED1 = irt;
227 speak = irt;
228 if(AN1==0) // 扫描按键
229 {
230 delayms(100); // 延时去抖动
231 if(AN1==0) // 再次扫描
232 {
233 key1_up = AN1;
234 //if(!key1_up)
235 {
236 LED1 = 0;
237 ps2char = 0x1c;
238 send_char();
239 delayms(10);
240 }
241 //else
C51 COMPILER V8.05a PS2KEY 08/31/2008 21:10:01 PAGE 5
242 {
243 LED1 = 1;
244 ps2char = 0xF0;
245 send_char();
246 delayms(10);
247 ps2char = 0x1c;
248 send_char();
249 }
250 }
251 }
252 }
253 }
254 */
255
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 214 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -