📄 key.lst
字号:
C51 COMPILER V7.02a KEY 05/04/2004 08:16:37 PAGE 1
C51 COMPILER V7.02a, COMPILATION OF MODULE KEY
OBJECT MODULE PLACED IN KEY.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE KEY.C BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /***************************************************************
2 功能:实现16只按键的识别,并在数码管上显示对应的按下的那只键
3 作者:SG
4 时间:2004-03-15
5 版本:V1.0
6 ***************************************************************/
7
8 /*-------------------------------------------------------------
9 #define 分别定义按键key1 --- key16对应的数值
10 -------------------------------------------------------------*/
11 #include "REG52.H"
12 #define key1 1
13 #define key2 2
14 #define key3 3
15 #define key4 4
16
17
18 /*-------------------------------------------------------------
19 sbit分别定义CPU 管脚对应的硬件连接
20 -------------------------------------------------------------*/
21 sfr KeyPort = 0x90;
22 sbit col1 = 0x96;
23 sbit col2 = 0x97;
24 sbit KD0 = 0x94;
25 sbit KD1 = 0x95;
26 sbit led4 = 0x93;
27
28 /*------------------------------------------------
29 功能:对应0--F显示码.
30 -------------------------------------------------*/
31 unsigned char code Led_Show[]={0x50,0xf5,0x68,0x4a,0x47,0xc2,0xc0,0x5b,0x40,0x42,0x41,0xc4,0xf0,0x4c,0xe0,
-0xe1,0xff};
32
33
34 /*-------------------------------------------------
35 功能:1MS延时子程序
36 -------------------------------------------------*/
37 void Delay_xMs(unsigned int x)
38 {
39 1 unsigned int i,j;
40 1 for( i =0;i < x;i++ )
41 1 {
42 2 for( j =0;j<500;j++ );
43 2 }
44 1 }
45
46 void LED_SHOW2(unsigned char dat)
47 {
48 1 led4=0;
49 1 P0=Led_Show[dat];
50 1 }
51
52 /*-------------------------------------------------
53 功能:判别有无按键,并返回按下的是哪个键
54 -------------------------------------------------*/
C51 COMPILER V7.02a KEY 05/04/2004 08:16:37 PAGE 2
55 bit ReadKeyVal(unsigned char *key)
56 {
57 1 unsigned char i,temp[2],temp2;
58 1 KeyPort = 0xFF;
59 1 col1 = 0; //扫描线置低
60 1 col2 = 0; //扫描线置低
61 1 temp[0]= 0xFF;
62 1 temp2 = KeyPort ; //读键盘端口
63 1 if( (temp2 & 0x30) == 0x30 ) //等于FF表示没键按下
64 1 {
65 2 return(0); //无按键返回0
66 2 }
67 1
68 1 for( i = 0;i < 2;i++ )
69 1 {
70 2 col1 = 0;
71 2 col2 = 1;
72 2 if ( !KD0 )
73 2 temp[i] = key1;
74 2 else if ( !KD1 )
75 2 temp[i] = key2;
76 2 col1 = 1;
77 2 col2 = 0;
78 2 if ( !KD0 )
79 2 temp[i] = key3;
80 2 else if ( !KD1 )
81 2 temp[i] = key4;
82 2 Delay_xMs(10);
83 2 }
84 1 if ( temp[0] != 0xFF && temp[0] == temp[1] )
85 1 {
86 2 *key = temp[0];
87 2 return(0);
88 2 }
89 1 return(1);
90 1 }
91
92 /*-------------------------------------------------
93 主程序
94 功能:实现16只按键的识别,并在数码管上显示
95 对应的按下的那只键
96 -------------------------------------------------*/
97 void main()
98 {
99 1 unsigned char key;
100 1 LED_SHOW2(16); //关闭显示
101 1 while(1)
102 1 {
103 2 if ( !ReadKeyVal(&key)) //识别有无按键
104 2 {
105 3 LED_SHOW2(key); //显示按下的键
106 3 }
107 2 }
108 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 176 ----
CONSTANT SIZE = 17 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 6
C51 COMPILER V7.02a KEY 05/04/2004 08:16:37 PAGE 3
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 + -