📄 main.lst
字号:
C51 COMPILER V7.06 MAIN 03/11/2009 16:59:41 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <reg51.h>
2 #define BYTE unsigned char
3 #define uint unsigned int
4
5 extern void ProcessPS2(void);
6 extern void PS2Init(void);
7 extern void OnPS2SendChar(BYTE dat);
8
9 sbit c1=P1^7;//列1
10 sbit c2=P1^6;//列2
11 sbit c3=P1^5;//列3
12 sbit c4=P1^4;//列4
13 sbit r1=P1^3;//行1
14 sbit r2=P1^2;//行2
15 sbit r3=P1^1;//行3
16 sbit r4=P1^0;//行4
17 sbit r5=P3^7;//行5
18 sbit BELL=P3^5;//喇叭
19 sbit CT_KB=P3^1;//pc大键盘通过一个模拟开关再连接到ps2接口,当小键盘往pc上发东西,则把pc大键盘断开模拟开关
-,发完后再闭合模拟开关
20
21 code BYTE tab[]=
22 {
23 //键码表
24 0x45,0xf0,0x45,//0
25 0x16,0xf0,0x16,//1
26 0x1e,0xf0,0x1e,//2
27 0x26,0xf0,0x26,//3
28 0x25,0xf0,0x25,//4
29 0x2e,0xf0,0x2e,//5
30 0x36,0xf0,0x36,//6
31 0x3d,0xf0,0x3d,//7
32 0x3e,0xf0,0x3e,//8
33 0x46,0xf0,0x46,//9
34 0x76,0xf0,0x76,//ESC
35 0x05,0xf0,0x05,//F1
36 0x06,0xf0,0x06,//F2
37 0x04,0xf0,0x04,//F3
38 0x0c,0xf0,0x0c,//F4
39 0x03,0xf0,0x03,//F5
40 0x66,0xf0,0x66,//BS
41 0x5a,0xf0,0x5a,//ENTER
42 0x49,0xf0,0x49//.
43 };
44
45 void delay(BYTE k)
46 {
47 1 BYTE j,i;
48 1 for(i=0;i<k;i++)
49 1 for(j=0;j<125;j++);
50 1 }
51
52 uint key_scan(void)//键盘扫描程序
53 {
54 1 P1=0x0f;
C51 COMPILER V7.06 MAIN 03/11/2009 16:59:41 PAGE 2
55 1 r5=1;
56 1 delay(1);
57 1 while(1)
58 1 {
59 2 c1=0;
60 2 c2=c3=c4=1;
61 2 delay(1);
62 2 if(r1==0){delay(80);if(r1==0)return 10;}
63 2 if(r2==0){delay(80);if(r2==0)return 1;}
64 2 if(r3==0){delay(80);if(r3==0)return 4;}
65 2 if(r4==0){delay(80);if(r4==0)return 7;}
66 2 if(r5==0){delay(80);if(r5==0)return 16;}
67 2 c2=0;
68 2 c1=c3=c4=1;
69 2 delay(1);
70 2 if(r1==0){delay(80);if(r1==0)return 11;}
71 2 if(r2==0){delay(80);if(r2==0)return 2;}
72 2 if(r3==0){delay(80);if(r3==0)return 5;}
73 2 if(r4==0){delay(80);if(r4==0)return 8;}
74 2 if(r5==0){delay(80);if(r5==0)return 0;}
75 2 c3=0;
76 2 c1=c2=c4=1;
77 2 delay(1);
78 2 if(r1==0){delay(80);if(r1==0)return 12;}
79 2 if(r2==0){delay(80);if(r2==0)return 3;}
80 2 if(r3==0){delay(80);if(r3==0)return 6;}
81 2 if(r4==0){delay(80);if(r4==0)return 9;}
82 2 if(r5==0){delay(80);if(r5==0)return 17;}
83 2 c4=0;
84 2 c1=c2=c3=1;
85 2 delay(1);
86 2 if(r1==0){delay(80);if(r1==0)return 13;}
87 2 if(r2==0){delay(80);if(r2==0)return 14;}
88 2 if(r3==0){delay(80);if(r3==0)return 15;}
89 2 if(r5==0){delay(80);if(r5==0)return 18;}
90 2 }
91 1 }
92
93 void speaker(void)
94 {
95 1 BYTE i;
96 1 for(i=0;i<100;i++)
97 1 {
98 2 BELL=0;
99 2 delay(1);
100 2 BELL=1;
101 2 delay(1);
102 2 }
103 1 }
104
105 void main(void)
106 {
107 1 uint j;
108 1 CT_KB=0;
109 1 PS2Init();
110 1 BELL=1;
111 1 while(1)
112 1 {
113 2 ProcessPS2();//开机应答,使电脑能识别到键盘
114 2 j=key_scan();
115 2 CT_KB=1;
116 2 j*=3;
C51 COMPILER V7.06 MAIN 03/11/2009 16:59:41 PAGE 3
117 2 speaker();
118 2 OnPS2SendChar(tab[j]);
119 2 OnPS2SendChar(tab[j+1]);
120 2 OnPS2SendChar(tab[j+2]);
121 2 CT_KB=0;
122 2 delay(200);
123 2 }
124 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 469 ----
CONSTANT SIZE = 57 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 2
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 + -