📄 key_scan.lst
字号:
C51 COMPILER V8.02 KEY_SCAN 01/19/2009 21:56:44 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE KEY_SCAN
OBJECT MODULE PLACED IN key_scan.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE key_scan.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //该函数只完成一次扫描任务,需在循环内调用
2 //row列,hor横
3
4 #include <reg52.h>
5 #define uchar unsigned char
6
7 void delay(uchar time)
8 {
9 1 uchar i,j;
10 1 for(i=time;i>0;i--)
11 1 for(j=110;j>0;j--);
12 1 }
13
14 uchar key_scan()
15 {
16 1 uchar temp,hor,row;
17 1
18 1 P2 = 0xf0;
19 1 temp = P2;
20 1 temp &= 0xf0;
21 1 if(temp != 0xf0)//扫描到按键动作
22 1 {
23 2 delay(5);
24 2
25 2 //开始进行列检查
26 2 P2 = 0xf0;
27 2 temp = P2;
28 2 temp &= 0xf0;
29 2 if(temp != 0xf0)//确认有按键动作
30 2 {
31 3 temp = ~temp;
32 3 temp >>= 4; //列值在temp的低四位
33 3 switch(temp)//列值转换,并保存在row中
34 3 {
35 4 case 1 : row = 1; break;
36 4 case 2 : row = 2; break;
37 4 case 4 : row = 3; break;
38 4 case 8 : row = 4; break;
39 4 default: break;
40 4 }
41 3 //列检查结束
42 3
43 3 //开始进行行检查
44 3 P2 = 0x0f;
45 3 temp = P2;
46 3 temp = ~temp;
47 3 temp &= 0x0f;//行值在temp的低四位
48 3 switch(temp)//行值转换,并保存在hor中
49 3 {
50 4 case 1 : hor = 1; break;
51 4 case 2 : hor = 2; break;
52 4 case 4 : hor = 3; break;
53 4 case 8 : hor = 4; break;
54 4 default: break;
55 4 }
C51 COMPILER V8.02 KEY_SCAN 01/19/2009 21:56:44 PAGE 2
56 3 //行检查结束
57 3
58 3 //检查按键动作是否结束,否则程序在此等待
59 3 P2 = 0xf0;
60 3 temp = P2;
61 3 temp &= 0xf0;
62 3 while(temp != 0xf0)
63 3 {
64 4 P2 = 0xf0;
65 4 temp = P2;
66 4 temp &= 0xf0;
67 4 }
68 3 //按键动作结束,程序往下进行
69 3
70 3 //计算键值并返回
71 3 return ((hor-1)*4 + row);
72 3
73 3 }
74 2 }
75 1 //没有按键动作,返回0;
76 1 return 0;
77 1 }
78
79 //测试开始
80 void display(uchar seat_data,seg_data) //seat_data位值,seg_data管值
81 {
82 1 P0 = (seat_data<<4)|seg_data;
83 1 }
84
85 void main()
86 {
87 1 uchar key,shi,ge;
88 1 P2 = 0xff;
89 1 while(1)
90 1 {
91 2 key = key_scan();
92 2 if(key != 0)
93 2 {
94 3 shi = key/10;
95 3 ge = key%10;
96 3 }
97 2 display(6,shi);
98 2 display(7,ge);
99 2 }
100 1 }
101 //测试结束
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 199 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -