📄 keyscan.lst
字号:
C51 COMPILER V7.50 KEYSCAN 07/23/2007 11:14:31 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE KEYSCAN
OBJECT MODULE PLACED IN keyscan.OBJ
COMPILER INVOKED BY: D:\Program Files\KEIL\C51\BIN\C51.EXE keyscan.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*
2 0x18 0x14 0x12 0x11
3 0x28 0x24 0x22 0x21
4 0x48 0x44 0x42 0x41
5 0x88 0x84 0x82 0x81
6 */
7
8
9
10
11 #include<at89x52.h>
12
13 #define uint unsigned int
14 #define uchar unsigned char
15
16
17 void init();
18 void key_scan();
19
20 bit int1_flag;
21 uchar key=0;
22
23 void main(){
24 1 init();
25 1 while(1){
26 2 if(int1_flag){
27 3 switch(key){
28 4 case 0x11: P0=0xfe; break;
29 4 case 0x12: P0=0xfd; break;
30 4 case 0x14: P0=0xfb; break;
31 4 case 0x18: P0=0xf7; break;
32 4
33 4 case 0x21: P0=0xef; break;
34 4 case 0x22: P0=0xdf; break;
35 4 case 0x24: P0=0xbf; break;
36 4 case 0x28: P0=0x7f; break;
37 4
38 4 case 0x41: P0=0xfe; break;
39 4 case 0x42: P0=0xfc; break;
40 4 case 0x44: P0=0xf8; break;
41 4 case 0x48: P0=0xf0; break;
42 4
43 4 case 0x81: P0=0xe0; break;
44 4 case 0x82: P0=0xc0; break;
45 4 case 0x84: P0=0x80; break;
46 4 case 0x88: P0=0x00; break;
47 4 }
48 3 int1_flag=0;
49 3 }
50 2 }
51 1 }
52 void init(){
53 1 //IE=0x84;//中断总控制位EA、外中断1开中断
54 1 IE=0xff;
55 1 IP=0x04;//外中断1为高中断优先级
C51 COMPILER V7.50 KEYSCAN 07/23/2007 11:14:31 PAGE 2
56 1 TCON=0x05;
57 1 int1_flag=0;
58 1 P2=0x0f;
59 1 }
60
61 void key_scan() interrupt 2
62 {
63 1 uint t;
64 1 uchar keycode,scancode,flag=0xff;
65 1 int1_flag=1;
66 1 t=5000;
67 1 while(t--);
68 1 if(INT1==1) return ; //如果此时键盘中断为高电平,则是拌动
69 1 EX1=0;//关键盘中断
70 1 scancode=0xef;
71 1 while(scancode!=0xff){
72 2 P2=scancode;//输入扫描码,行,1110 1111
73 2 keycode=P2;//读出数据,看是否再些行上的某列键盘按下
74 2 if((keycode&0x0f)!=0x0f) break;//扫描到按上的键,则退出
75 2 scancode=(keycode<<1)|0x0f;//否刚,更新扫描码,下一行,继续扫描
76 2 }
77 1
78 1 keycode=~keycode;//方便读数
79 1 key=keycode;//传给全局变量KEY
80 1 // if(keycode==0x11)
81 1 // else ;
82 1 P2=0x0f;
83 1 while(1){//看按键是否被释放
84 2 if(INT1==0){
85 3 flag=~flag;
86 3 if(flag==0) break;
87 3 }
88 2 t=10000;
89 2 while(t--);
90 2 }
91 1 EX1=1;
92 1 return ;
93 1 }
94
95
96
97
98
99
100
101
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 277 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -