📄 key.lst
字号:
C51 COMPILER V8.02 KEY 04/19/2007 11:19:16 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE KEY
OBJECT MODULE PLACED IN KEY.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE KEY.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg51.h>
2 #define WAITFORKEYBOARDPULSE while(!scl); while(scl);
3 #define uchar unsigned char
4 #define uint unsigned int
5 #define DE 0x40
6 #define PDATA P0
7
8 uchar read_key (void);
9 //sbit led = P1^2;
10 sbit scl = P1^0;
11 sbit sda = P1^1;
12 void setkey(uchar row,uchar col);
13
14 uchar te;
15 void Delay(unsigned int MS)
16 {
17 1 unsigned char us,usn;
18 1 while(MS!=0) //for 12M
19 1 { usn = 2;
20 2 while(usn!=0)
21 2 {
22 3 us=0xf5;
23 3 while (us!=0){us--;};
24 3 usn--;
25 3 }
26 2 MS--;
27 2 }
28 1 }
29 main ()
30 {
31 1 Delay(250);
32 1 // setkey(1,3);
33 1 while(1)
34 1 {
35 2 switch(read_key())
36 2 {
37 3 case 0x69: //1
38 3 setkey(0,0);
39 3 while(read_key()==0x69 || read_key()==0xF0);
40 3 break;
41 3 case 0x72: //2
42 3 setkey(0,1);
43 3 while(read_key()==0x72 || read_key()==0xF0);
44 3 break;
45 3 case 0x7A: //3
46 3 setkey(0,2);
47 3 while(read_key()==0x7A || read_key()==0xF0);
48 3 break;
49 3 case 0x6B: //4
50 3 setkey(1,0);
51 3 while(read_key()==0x6B || read_key()==0xF0);
52 3 break;
53 3 case 0x73: //5
54 3 setkey(1,1);
55 3 while(read_key()==0x73 || read_key()==0xF0);
C51 COMPILER V8.02 KEY 04/19/2007 11:19:16 PAGE 2
56 3 break;
57 3 case 0x74: //6
58 3 setkey(1,2);
59 3 while(read_key()==0x74 || read_key()==0xF0);
60 3 break;
61 3 case 0x6C: //7
62 3 setkey(2,0);
63 3 while(read_key()==0x6C || read_key()==0xF0);
64 3 break;
65 3 case 0x75: //8
66 3 setkey(2,1);
67 3 while(read_key()==0x75 || read_key()==0xF0);
68 3 break;
69 3 case 0x7D: //9
70 3 setkey(2,2);
71 3 while(read_key()==0x7D || read_key()==0xF0);
72 3 break;
73 3 case 0x70: //0
74 3 setkey(3,0);
75 3 while(read_key()==0x70 || read_key()==0xF0);
76 3 break;
77 3 case 0x71: //.
78 3 setkey(3,1);
79 3 while(read_key()==0x71 || read_key()==0xF0);
80 3 break;
81 3
82 3 case 0x06: //设置 F2
83 3 setkey(0,3);
84 3 while(read_key()==0x06 || read_key()==0xF0);
85 3 break;
86 3 case 0x05: //F1
87 3 setkey(1,3);
88 3 while(read_key()==0x05 || read_key()==0xF0);
89 3 break;
90 3 case 0x79: //X 小+
91 3 setkey(2,3);
92 3 while(read_key()==0x79 || read_key()==0xF0);
93 3 break;
94 3 case 0xE0: //确认 小回车
95 3 if(read_key()==0x5A)
96 3 {
97 4 setkey(3,3);
98 4 while(read_key()==0xE0 || read_key()==0x5A);
99 4 }
100 3 break;
101 3 case 0x0C: //查询 F4
102 3 setkey(3,2);
103 3 while(read_key()==0x0C || read_key()==0xF0);
104 3 break;
105 3 case 0x5A: //结账 大回车
106 3 setkey(4,3);
107 3 while(read_key()==0x5A || read_key()==0xF0);
108 3 break;
109 3 case 0x76: //退出 ESC
110 3 setkey(4,0);
111 3 while(read_key()==0x76 || read_key()==0xF0);
112 3 break;
113 3 case 0x03: //总清 F5
114 3 setkey(4,1);
115 3 while(read_key()==0x03 || read_key()==0xF0);
116 3 break;
117 3 case 0x66: //清除 退格键
C51 COMPILER V8.02 KEY 04/19/2007 11:19:16 PAGE 3
118 3 setkey(4,2);
119 3 while(read_key()==0x66 || read_key()==0xF0);
120 3 break;
121 3
122 3 }
123 2 }
124 1 }
125
126 void setkey(uchar row,uchar col)
127 {
128 1 uchar tmp;
129 1 //led=0;
130 1 tmp=row+(col<<3);
131 1 tmp&=~DE;
132 1 PDATA=tmp;
133 1 Delay(58);
134 1 tmp|=DE;
135 1 PDATA=0xFF;
136 1 // led=1;
137 1 }
138 uchar read_key (void)
139 {
140 1 uchar KeyCode;
141 1 uchar Rbit;
142 1 while(scl); // 等待键盘把时钟第一次拉低
143 1
144 1 for(Rbit = 8; Rbit != 0; Rbit --) // 把起始位算入
145 1 {
146 2 WAITFORKEYBOARDPULSE; // 等待一个有效的下跳沿
147 2 KeyCode >>= 1; // 按照PS2格式,数据低位在前
148 2 scl = 1;
149 2 sda = 1;
150 2 if(sda == 1)
151 2 {
152 3 KeyCode |= 0x80; // 得到有效的数据位
153 3 }
154 2 }
155 1 WAITFORKEYBOARDPULSE; // 等待按键发送效验位
156 1 WAITFORKEYBOARDPULSE; // 等待按键发送终止位
157 1 while(!scl); // 等待键盘把时钟线拉高
158 1
159 1 return(KeyCode); // 返回按键扫描
160 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 727 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 ----
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 + -