📄 c8155.lst
字号:
C51 COMPILER V7.07 C8155 06/21/2005 17:13:57 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE C8155
OBJECT MODULE PLACED IN C8155.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE C8155.c DEBUG OBJECTEXTEND
stmt level source
1 /* "验证式? 实验十二? 键盘扫描显示实验 */
2 #include<absacc.h>
3 #define LEDLen 6
4 #define mode 0x03;
5 #define CAddr XBYTE[0xe100]/* 控制字地址 */
6 #define OUTBIT XBYTE[0xe101]/* 位控制口 */
7 #define CLK164 XBYTE[0xe102]/* 段控制口(接164时钟位) */
8 #define DAT164 XBYTE[0xe102] /* 段控制口(接164数据位) */
9 #define IN XBYTE[0xe103] /* 键盘读入口 */
10
11
12 unsigned char LEDBuf[LEDLen]; /* 显示缓冲 */
13 code unsigned char LEDMAP[] = { /* 八段管显示码 */
14 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
15 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71
16 };
17
18 void Delay(unsigned char CNT)
19 {
20 1 unsigned char i;
21 1
22 1 while (CNT-- !=0)
23 1 for (i=100; i !=0; i--);
24 1 }
25
26 void DisplayLED()
27 {
28 1 unsigned char i, j;
29 1 unsigned char Pos;
30 1 unsigned char LED;
31 1
32 1 Pos = 0x20; /* 从左边开始显示 */
33 1 for (i = 0; i < LEDLen; i++) {
34 2 OUTBIT = 0; /* 关所有八段管 */
35 2 LED = LEDBuf[i];
36 2 for (j = 0; j < 8; j++) { /* 送164 */
37 3 if (LED & 0x80) DAT164 = 1; else DAT164 = 0;
38 3 CLK164 = CLK164|0x02;
39 3 CLK164 = CLK164&0xfd;
40 3 LED <<= 1;
41 3 }
42 2 OUTBIT = Pos; /* 显示一位八段管 */
43 2 Delay(1);
44 2 Pos >>= 1; /* 显示下一位 */
45 2 }
46 1 }
47
48 code unsigned char KeyTable[] = { /* 键码定义 */
49 0x00, 0x01, 0x04, 0x07 ,
50 0x0f, 0x02, 0x05, 0x08,
51 0x0e, 0x03, 0x06, 0x09 ,
52 0x0d, 0x0c, 0x0b, 0x0a ,
53 0x10,0x11,0x12,0x13,0x14,
54 0x15,0x16,
55 };
C51 COMPILER V7.07 C8155 06/21/2005 17:13:57 PAGE 2
56
57 unsigned char TestKey()
58 {
59 1 OUTBIT = 0; /* 输出线置为0 */
60 1 return (~IN & 0x0f); /* 读入键状态 (高四位不用) */
61 1 }
62
63 unsigned char GetKey()
64 {
65 1 unsigned char Pos;
66 1 unsigned char i;
67 1 unsigned char k;
68 1
69 1 i = 6;
70 1 Pos = 0x20; /* 找出键所在列 */
71 1 do {
72 2 OUTBIT = ~ Pos;
73 2 Pos >>= 1;
74 2 k = ~IN & 0x0f;
75 2 } while ((--i != 0) && (k == 0));
76 1
77 1 /* 键值 = 列 X 4 + 行 */
78 1 if (k != 0) {
79 2 i *= 4;
80 2 if (k & 2)
81 2 i += 1;
82 2 else if (k & 4)
83 2 i += 2;
84 2 else if (k & 8)
85 2 i += 3;
86 2
87 2 OUTBIT = 0;
88 2 do Delay(10); while (TestKey()); /* 等键释放 */
89 2
90 2 return(KeyTable[i]); /* 取出键码 */
91 2 } else return(0xff);
92 1 }
93
94 void main()
95 {
96 1 CAddr = mode;
97 1 LEDBuf[0] = 0xff;
98 1 LEDBuf[1] = 0xff;
99 1 LEDBuf[2] = 0xff;
100 1 LEDBuf[3] = 0xff;
101 1 LEDBuf[4] = 0x00;
102 1 LEDBuf[5] = 0x00;
103 1
104 1 while (1) {
105 2 DisplayLED();
106 2 if (TestKey()) LEDBuf[5] = LEDMAP[GetKey() & 0x0f];
107 2 }
108 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 239 ----
CONSTANT SIZE = 39 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 ----
IDATA SIZE = ---- ----
C51 COMPILER V7.07 C8155 06/21/2005 17:13:57 PAGE 3
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 + -