📄 keyscan.lst
字号:
C51 COMPILER V8.05a KEYSCAN 08/11/2007 15:13:57 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE KEYSCAN
OBJECT MODULE PLACED IN KeyScan.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE sources\KeyScan.c BROWSE INCDIR(.\include) DEBUG OBJECTEXTEND PRINT(.\KeySc
-an.lst) OBJECT(KeyScan.obj)
line level source
1 //*************************************************************************************************
2 //*************************************************************************************************
3 //**<程序名>:键盘扫描子程序 **
4 //**<功能>:当有外部中断0时调用此函数,使用列扫描的方式获取键码,键码由2位数字组成。高位为行号 **
5 //** 低位为列号。 **
6 //*************************************************************************************************
7 //*************************************************************************************************
8
9
10 //*************************************************************************************************
11 //* *
12 //* ******************************头文件及宏定义************************** *
13 //* *
14 //*************************************************************************************************
15 #include <at89x51.h>
16
17 #define SCANPORT P2
18
19
20 //*************************************************************************************************
21 //* *
22 //* ********************************全局变量****************************** *
23 //* *
24 //*************************************************************************************************
25 unsigned char uca_LineScan[4]={0xEF,0xDF,0xBF,0x7F}; //LINE 1 2 3 4
26
27
28 //*************************************************************************************************
29 //* *
30 //* ********************************函数实现****************************** *
31 //* *
32 //*************************************************************************************************
33 unsigned char ucKeyScan()
34 {
35 1 unsigned char ucTemp=0; //扫描状态暂存。
36 1 unsigned char ucRow=0,ucLine=0; //行号,列号。
37 1
38 1 for(ucLine=0;ucLine<4;ucLine++) //列扫描
39 1 {
40 2 SCANPORT=uca_LineScan[ucLine]; //输出扫描电位。
41 2 ucTemp=SCANPORT&0x0F; //输入扫描电位,并屏蔽高4位。
42 2 if(ucTemp!=0x0F) //判断该列是否有按键按下,有则判断出行号。
43 2 {
44 3 switch(ucTemp)
45 3 {
46 4 case 0x0E: ucRow=10;break;
47 4 case 0x0D: ucRow=20;break;
48 4 case 0x0B: ucRow=30;break;
49 4 case 0x07: ucRow=40;break;
50 4 default: ucRow=50;break;
51 4 }
52 3 break;
53 3 }
54 2 }
C51 COMPILER V8.05a KEYSCAN 08/11/2007 15:13:57 PAGE 2
55 1 SCANPORT=0x0F; //恢复P2口。
56 1
57 1 return ucRow+ucLine+1; //返回按键编码。格式为2位数,高位为行号,低位为列号。
58 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 67 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 ----
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 + -