📄 key.lst
字号:
C51 COMPILER V8.08 KEY 03/25/2008 22:08:52 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE KEY
OBJECT MODULE PLACED IN Key.OBJ
COMPILER INVOKED BY: C:\Program Files\keil\C51\BIN\C51.EXE Key.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<stdio.h> //头文件
2 #include<reg52.h> //头文件
3
4 int row; //定义行号
5 int tier; //定义列号
6
7 int KeyScan(); //子函数声明
8 void Delay();
9
10 void main() //主函数
11 {
12 1 int Key,i;
13 1 while(1) //开始循环扫描键盘
14 1 {
15 2 Key=KeyScan(); //键盘扫描子函数
16 2
17 2 for(i=0;i<Key;i++) //根据键值,使LED闪烁相应的次数
18 2 {
19 3 P2=0x80; //点亮发光二级管
20 3 Delay();
21 3 P2=0x00; //熄灭发光二级管
22 3 Delay();
23 3 }
24 2 }
25 1 }
26
27 void Delay() //延时子函数
28 {
29 1 long i;
30 1 for(i=10000;i>0;i--); //可以根据系统的时钟频率来调整
31 1 }
32 int KeyScan() //键盘扫描子函数
33 {
34 1 P1=0xF0; //列输出全0
35 1 if((P1&0xF0)!=0xF0) //扫描行,如果不全为0,则进入
36 1 {
37 2 switch(P1) //获得行号
38 2 {
39 3 case 0x70:
40 3 row=1;
41 3 break;
42 3 case 0xB0:
43 3 row=2;
44 3 break;
45 3 case 0xD0:
46 3 row=3;
47 3 break;
48 3 case 0xE0:
49 3 row=4;
50 3 break;
51 3 default:
52 3 break;
53 3 }
54 2 Delay(); //延时去抖动
55 2 P1=0x0F; //行输出全0
C51 COMPILER V8.08 KEY 03/25/2008 22:08:52 PAGE 2
56 2 if((P1&0x0F)!=0x0F) //扫描列,如果不全为0,则确认按键按下
57 2 {
58 3 switch(P1) //获得列号
59 3 {
60 4 case 0x07:
61 4 tier=1;
62 4 break;
63 4 case 0x0B:
64 4 tier=2;
65 4 break;
66 4 case 0x0D:
67 4 tier=3;
68 4 break;
69 4 case 0x0E:
70 4 tier=4;
71 4 break;
72 4 default:
73 4 break;
74 4 }
75 3 return 4*(row-1)+tier; //扫描到按键,返回键值
76 3 }
77 2 }
78 1 else
79 1 {
80 2 return 0; //未扫描到按键按下,返回0
81 2 }
82 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 265 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 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 + -