📄 keyboard.lst
字号:
C51 COMPILER V8.08 KEYBOARD 12/17/2008 18:44:32 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE KEYBOARD
OBJECT MODULE PLACED IN KeyBoard.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE KeyBoard.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2 #define uchar unsigned char
3 //数码管显示段表
4 uchar code codetab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
5 //键盘扫描段表
6 uchar code duancode[]={0X7E,0XBE,0XdE,0xEE,0X7d,0XBd,0Xdd,0XEd,0X7B,0XBB,0XdB,0XEB,0X77,0XB7,0XD7,0XE7};
7 //键盘扫描位码
8 uchar code bitcode[4]={0xfe,0xfd,0xfb,0xf7};
9 //延迟
10 void delay(uchar n)
11 {
12 1 uchar i,j;
13 1 for(j=n;j>0;--j)
14 1 for(i=255;i>0;--i)
15 1 ;
16 1 }
17
18 //键盘扫描
19 uchar keyscan(void)
20 {
21 1 uchar key;
22 1 P1=0xf0;
23 1 if(P1!=0xF0)
24 1 {
25 2 delay(50);
26 2 if(P1!=0xF0) //按下第一列键
27 2 {
28 3 P1=0x7f;
29 3 if(P1!=0x7f)
30 3 {
31 4 switch(P1)
32 4 {
33 5 case 0x7e:key=0;break;
34 5 case 0x7d:key=4;break;
35 5 case 0x7b:key=8;break;
36 5 case 0x77:key=12;break;
37 5 }
38 4 }
39 3
40 3 P1=0xbf; //按下第二列键
41 3 if(P1!=0xbf)
42 3 {
43 4 switch(P1)
44 4 {
45 5 case 0x7e:key=1;break;
46 5 case 0x7d:key=5;break;
47 5 case 0x7b:key=9;break;
48 5 case 0x77:key=13;break;
49 5 }
50 4 }
51 3
52 3 P1=0xdf; //按下第三列键
53 3 if(P1!=0xdf)
54 3 {
55 4 switch(P1)
C51 COMPILER V8.08 KEYBOARD 12/17/2008 18:44:32 PAGE 2
56 4 {
57 5 case 0x7e:key=2;break;
58 5 case 0x7d:key=6;break;
59 5 case 0x7b:key=10;break;
60 5 case 0x77:key=14;break;
61 5 }
62 4 }
63 3
64 3 P1=0xef; //按下第四列键
65 3 if(P1!=0xef)
66 3 {
67 4 switch(P1)
68 4 {
69 5 case 0x7e:key=3;break;
70 5 case 0x7d:key=7;break;
71 5 case 0x7b:key=11;break;
72 5 case 0x77:key=15;break;
73 5 }
74 4 }
75 3 }
76 2
77 2 }
78 1 return 0;
79 1 }
80 //得到键盘号
81 uchar getkey(uchar key)
82 {
83 1 uchar i,temp;
84 1 temp=key;
85 1 for(i=0;i<=15;i++)
86 1 {
87 2 if(temp==duancode[i])
88 2 return(i);
89 2 }
90 1
91 1 }
92
93 //主函数
94 main()
95 {
96 1 uchar i,key=0;
97 1 SCON=0x50;
98 1 TMOD=0x20;
99 1 TH1=0xfd;
100 1 TL1=0xfd;
101 1 TR1=1;
102 1 IE=1;
103 1 ES=1;
104 1 while(1) //窜口通信
105 1 {
106 2 key=keyscan();
107 2 if(key)
108 2 {
109 3 i=getkey(key);
110 3 SBUF=i;
111 3 while(TI!=1);
112 3 P2=codetab[i];
113 3 TI=0;
114 3
115 3
116 3 }
117 2
C51 COMPILER V8.08 KEYBOARD 12/17/2008 18:44:32 PAGE 3
118 2 if(RI==1)
119 2 {
120 3 while(RI!=1);
121 3 P0=codetab[SBUF];
122 3 RI=0;
123 3
124 3 }
125 2 }
126 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 306 ----
CONSTANT SIZE = 36 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 1
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 + -