📄 shuru.lst
字号:
C51 COMPILER V7.06 SHURU 09/29/2006 11:19:49 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE SHURU
OBJECT MODULE PLACED IN shuru.OBJ
COMPILER INVOKED BY: D:\keil 7.06\C51\BIN\C51.EXE shuru.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*========================================
2 用PS2的小键盘采集三位数据,只能用一般的键
3 输入时,先输入的是高位
4 当不足三位时要用0补齐
5 当输入的是高于三位的数据时,再从高位计起
6 =======================================*/
7
8 #include<reg51.h>
9 #define uchar unsigned char
10
11
12 sbit Clk=P3^2; //时钟线接在P32
13 sbit Dat=P3^0; //数据线接在P30
14
15 uchar Degree =0; //中断次数
16 uchar Data =0; //句路数据
17 uchar Data_Over =0; //确定标志位
18 uchar i =0;
19 uchar Key_Data[3] =0; //得到的键盘输入值
20 uchar Get_Key_Data = 0; //最后得到的数据
21
22 void Dispose(void);
23
24 /*=====================
25 中断函数,负责采集数据
26 =======================*/
27 void Get_data(void) interrupt 0 using 1
28 {
29 1 if((Degree>11)&&(Degree<20))
30 1 {
31 2 Data=Data>>1;
32 2 if(Dat){Data|=0x80;};
33 2 } //只用采集到的中间11位的八位数据
34 1
35 1 Degree++;
36 1 if(Degree>=33) //32次后重新计数
37 1 {
38 2 Degree=0;
39 2 Dispose(); //进行数据处理,只在中断中得到数据,不用等待
40 2 }
41 1 }
42
43 /*===========================
44 数据处理函数,处理得到的数据
45 ============================*/
46 void Dispose(void)
47 {
48 1 uchar n=0;
49 1
50 1 if (Data==0x77) //收到NUM(确定)
51 1 {
52 2 Get_Key_Data=Key_Data[0]*100
53 2 +Key_Data[1]*10
54 2 +Key_Data[2];
55 2 for(n=0;n<3;n++) Key_Data[n] = 0 ; //将数组置为0
C51 COMPILER V7.06 SHURU 09/29/2006 11:19:49 PAGE 2
56 2 i = 0; //将下次收到的数据放在第一
57 2 Data_Over = 1; //确定标志
58 2 }
59 1
60 1
61 1 else
62 1 {
63 2 if(i>=3) i = 0; //可以按键多于3次
64 2 switch(Data)
65 2 {
66 3 case 0x70: Key_Data[i]=0; break;
67 3 case 0x69: Key_Data[i]=1; break;
68 3 case 0x72: Key_Data[i]=2; break;
69 3 case 0x7A: Key_Data[i]=3; break;
70 3 case 0x6b: Key_Data[i]=4; break;
71 3 case 0x73: Key_Data[i]=5; break;
72 3 case 0x74: Key_Data[i]=6; break;
73 3 case 0x6C: Key_Data[i]=7; break;
74 3 case 0x75: Key_Data[i]=8; break;
75 3 case 0x7D: Key_Data[i]=9; break;
76 3 }
77 2 i++;
78 2 }
79 1 }
80
81
82 void main()
83 {
84 1 IT0=1;
85 1 EA=1;
86 1 EX0=1;
87 1 while(1) //下面的写法可以直接在Dispose函数中P2=Get_Key_Data;
88 1 {
89 2 if(Data_Over) //这样写只是为了用在其他程序上的接口
90 2 {
91 3 P2=Get_Key_Data;
92 3 Data_Over=0;
93 3 }
94 2 }
95 1
96 1
97 1 }
98
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 262 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 8 ----
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 + -