📄 test.lst
字号:
C51 COMPILER V8.02 TEST 03/05/2009 15:26:54 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE TEST
OBJECT MODULE PLACED IN test.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE test.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*=======================================================
2 键盘显示程序
3 武汉世纪久华科技有限公司
4
5 ========================================================*/
6 #include <reg51.h>
7 #include <intrins.h>
8 #define uchar unsigned char
9 #define uint unsigned int
10
11 sbit PL1=P1^0; //数码管选通最低位的端口
12 sbit LCD_E = P1^7;
13 uint num,temp;
14
15 uchar code dis_7[]={0XC0, 0XF9,0XA4,0XB0,0X99,0X92,0X83, 0XF8,0X80,0X98,0xa0,0x83,0xa7,0xa1,0x84,0x8e,0xbf
-,0x7f };
16 //数码管显示编码"0" ——————“9”,“a"-----"f"
17 void delay(uint z) //延时程序,约7.6us
18 {
19 1 uint x,y;
20 1 for(x=z;x>0;x--)
21 1 for(y=110;y>0;y--);
22 1 }
23
24 uchar keyscan()
25 {
26 1 P2=0xfe; //1111 1110,P2.0置"0"扫描第四列(K4--K16),P2口高位4位置“1”,准备接受数据
27 1 temp=P2;
28 1 temp=temp&0xf0;
29 1 while(temp!=0xf0) //如果P2口高四位不为1111,说明有键按下
30 1 {
31 2 delay(5); //延时去抖动
32 2 temp=P2;
33 2 temp=temp&0xf0;
34 2 while(temp!=0xf0) //进一步确定是否有键按下
35 2 {
36 3 temp=P2;
37 3 switch(temp) //进一步确定是第四列的哪一行键按下
38 3 {
39 4 case 0xee:num=0; //如果是第一个行(第四列)
40 4 break;
41 4 case 0xde:num=12; //如果是第二行(第四列)
42 4 break;
43 4 case 0xbe:num=8;
44 4 break;
45 4 case 0x7e:num=4;
46 4 break;
47 4 }
48 3 while(temp!=0xf0)
49 3 {
50 4 temp=P2;
51 4 temp=temp&0xf0;
52 4 }
53 3 }
54 2 }
C51 COMPILER V8.02 TEST 03/05/2009 15:26:54 PAGE 2
55 1
56 1 P2=0xfd; //扫描第三列
57 1 temp=P2;
58 1 temp=temp&0xf0;
59 1 while(temp!=0xf0)
60 1 {
61 2 delay(5);
62 2 temp=P2;
63 2 temp=temp&0xf0;
64 2 while(temp!=0xf0)
65 2 {
66 3 temp=P2;
67 3 switch(temp)
68 3 {
69 4 case 0xed:num=15; //如果是第一个行(第三列)
70 4 break;
71 4 case 0xdd:num=11; //如果是第二行(第三列)
72 4 break;
73 4 case 0xbd:num=7;
74 4 break;
75 4 case 0x7d:num=3;
76 4 break;
77 4 }
78 3 while(temp!=0xf0)
79 3 {
80 4 temp=P2;
81 4 temp=temp&0xf0;
82 4 }
83 3 }
84 2 }
85 1
86 1
87 1 P2=0xfb; //扫描第二列
88 1 temp=P2;
89 1 temp=temp&0xf0;
90 1 while(temp!=0xf0)
91 1 {
92 2 delay(5);
93 2 temp=P2;
94 2 temp=temp&0xf0;
95 2 while(temp!=0xf0)
96 2 {
97 3 temp=P2;
98 3 switch(temp)
99 3 {
100 4 case 0xeb:num=14;
101 4 break;
102 4 case 0xdb:num=10;
103 4 break;
104 4 case 0xbb:num=6;
105 4 break;
106 4 case 0x7b:num=2;
107 4 break;
108 4 }
109 3 while(temp!=0xf0)
110 3 {
111 4 temp=P2;
112 4 temp=temp&0xf0;
113 4 }
114 3 }
115 2 }
116 1
C51 COMPILER V8.02 TEST 03/05/2009 15:26:54 PAGE 3
117 1
118 1 P2=0xf7; //扫描第一列
119 1 temp=P2;
120 1 temp=temp&0xf0;
121 1 while(temp!=0xf0)
122 1 {
123 2 delay(5);
124 2 temp=P2;
125 2 temp=temp&0xf0;
126 2 while(temp!=0xf0)
127 2 {
128 3 temp=P2;
129 3 switch(temp)
130 3 {
131 4 case 0xe7:num=13;
132 4 break;
133 4 case 0xd7:num=9;
134 4 break;
135 4 case 0xb7:num=5;
136 4 break;
137 4 case 0x77:num=1;
138 4 break;
139 4 }
140 3 while(temp!=0xf0)
141 3 {
142 4 temp=P2;
143 4 temp=temp&0xf0;
144 4 }
145 3 }
146 2 }
147 1 return num; //返回扫描的键值
148 1
149 1 }
150
151 main()
152 {
153 1 while(1)
154 1 {
155 2 LCD_E = 0;
156 2 keyscan(); // 调用键盘扫描程序
157 2 PL1=0; // 只选通数码管的最低位
158 2 P0=dis_7[num]; //查找数组中(扫描键值对应的)编码,并赋给P0口(数码管的数据端口)
159 2 delay(1);
160 2 }
161 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 580 ----
CONSTANT SIZE = 18 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 ----
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 + -