📄 testkey.lst
字号:
C51 COMPILER V6.12 TESTKEY 07/25/2005 18:56:22 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE TESTKEY
OBJECT MODULE PLACED IN E:\C51\P1\TESTKEY.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE E:\C51\P1\TESTKEY.C DB SB OE
stmt level source
1 #include<reg51.h>
2 #include<math.h>
3 static const char tab[16]={0x01,0x02,0x03,0x0c, /*键盘码00,01,02,03,*/
4 0x04,0x05,0x06,0x0d, /*键盘码04,05,06,07,*/
5 0x07,0x08,0x09,0x0e, /*键盘码08,09,0a,0b,*/
6 0x0a,0x00,0x0b,0x0f};/*键盘码0c,0d,0e,0f*/
7
8 unsigned char scan(void);
9 void delay1ms();
10
11 void main()
12 {
13 1 unsigned char data a1 ,a2 ,m,k,falg_dian; //k as a flag of num end
14 1 unsigned int i;
15 1
16 1 /* a1=4;
17 1 a2=a1;
18 1 a1=2;
19 1 //a1=0xf7;
20 1
21 1 a1=0x40;
22 1 m=0x00;
23 1
24 1
25 1 P0=0x22;
26 1 P0=0x33;
27 1 P0=0x44;
28 1 P0=0x55;
29 1
30 1 */
31 1 i=0;
32 1 k=1;
33 1 falg_dian=0;
34 1 while(k!=0)
35 1 {
36 2 // a1=scan();
37 2 if(tab[a1]==0x0b)
38 2 k=0;
39 2 else if(tab[a1]>=0&& tab[a1]<=9)
40 2 {
41 3 if(falg_dian==0)
42 3 i=i*10+tab[a1]*100;
43 3 else
44 3 i=i*10+tab[a1];
45 3 i=100;
46 3 P0= ( unsigned char )(i%10);
47 3 P0= ( unsigned char )(0x10+((i/10)%10));
48 3 P0= ( unsigned char )(0x20+((i/100)%10));
49 3 P0= ( unsigned char )(0x30+((i/1000)%10));
50 3 }
51 2 else if(tab[a1]==10 )
52 2 falg_dian=1;
53 2 }
54 1
55 1 while(1);
C51 COMPILER V6.12 TESTKEY 07/25/2005 18:56:22 PAGE 2
56 1
57 1
58 1 }
*** WARNING C280 IN LINE 13 OF E:\C51\P1\TESTKEY.C: 'a2': unreferenced local variable
*** WARNING C280 IN LINE 13 OF E:\C51\P1\TESTKEY.C: 'm': unreferenced local variable
59
60 unsigned char scan(void) /*扫描键盘副程式*/
61 {
62 1 unsigned char data a1,i; /*A1=0XF7列扫描初值,I行*/
63 1 unsigned char data m;
64 1 unsigned char FLAG0; /*设按键回应旗号为0,键盘扫描计数指标为0*/
65 1 unsigned char data ptr;
66 1 a1=0xf0 ;
67 1 FLAG0=0;
68 1 ptr=0;
69 1 m=0xf0 ;
70 1 while(m==0xf0)
71 1 {
72 2 P1=0xff;
73 2 a1=0xf0;
74 2 P1=a1; /*列扫描输出,读入P1存入M,以便侦测行与侦测按键是否放开*/
75 2 m=P1;
76 2 }
77 1 for(i=0;i<4;i++)
78 1 delay1ms();
79 1 a1=0xf0;
80 1 m=0xf0 ;
81 1 while(m==0xf0)
82 1 {
83 2 P1=0xff;
84 2 a1=0xf0;
85 2 P1=a1; /*列扫描输出,读入P1存入M,以便侦测行与侦测按键是否放开*/
86 2 m=P1;
87 2 }
88 1 a1=0xf7;
89 1 for(i=0;i<4;i++) /*键盘4个扫描列*/
90 1 {
91 2 P1=a1; /*列扫描输出,读入P1存入M,以便侦测行与侦测按键是否放开*/
92 2 m=P1;
93 2 switch(m&0xf0) /*取行的高4位元,侦测那一行被按*/
94 2 {
95 3 case 0x70: ptr=i*4; /*第一行被按否?是则扫描指标=列X4*/
96 3 FLAG0=1; /*是则设FLAG0=1表有按键输入*/
97 3 break; /*跳出此循环*/
98 3 case 0xb0: ptr=i*4+1; /*第二行被按否?是则扫描指标=列X4+1*/
99 3 FLAG0=1; /*是则设FLAG0=1表有按键输入*/
100 3 break; /*跳出此循环*/
101 3 case 0xd0: ptr=i*4+2; /*第三行被按否?是则扫描指标=列X4+2*/
102 3 FLAG0=1; /*是则设FLAG0=1表有按键输入*/
103 3 break; /*跳出此循环*/
104 3 case 0xe0: ptr=i*4+3; /*第四行被按否?是则扫描指标=列X4+3*/
105 3 FLAG0=1; /*是则设FLAG0=1表有按键输入*/
106 3 default: break; /*跳出此循环*/
107 3 }
108 2 if(FLAG0==1)break; /*不为1,则扫描列右移,扫描下一列*/
109 2 a1=a1>>1|0x80;
110 2 /*高位补1,由于P1.7~P1.4未接+5V,而是由指令加载高电平*/
111 2 }
112 1 a1=0xf0;
113 1 while(m!=0xf0)
114 1 {
115 2 P1 =0xff;
C51 COMPILER V6.12 TESTKEY 07/25/2005 18:56:22 PAGE 3
116 2 a1=0xf0;
117 2 P1=a1; /*列扫描输出,读入P1存入M,以便侦测行与侦测按键是否放开*/
118 2 m=P1;
119 2 }
120 1
121 1 if(FLAG0==1)
122 1 return ptr;
123 1 else return 0x40;
124 1 } /*返回主程式*/
125 void delay1ms()
126 {
127 1 IE=00;
128 1 TMOD=0x10;
129 1 TH1=0xfc;
130 1 TL1=0x23;
131 1 TR1=1;
132 1
133 1 while(!TF1);
134 1 TF1=0;
135 1 }
C51 COMPILER V6.12 TESTKEY 07/25/2005 18:56:22 PAGE 4
NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====
P0 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0080H 1
P1 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0090H 1
T0 . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B4H 1
AC . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00D6H 1
T1 . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B5H 1
EA . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00AFH 1
IE . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00A8H 1
RD . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B7H 1
ES . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00ACH 1
RI . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0098H 1
INT0 . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B2H 1
CY . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00D7H 1
TI . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0099H 1
INT1 . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B3H 1
PS . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00BCH 1
delay1ms . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
OV . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00D2H 1
main . . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
a1 . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1
a2 . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0001H 1
m. . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0002H 1
k. . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0003H 1
falg_dian. . . . . . . . . . . . . . AUTO DATA U_CHAR 0004H 1
i. . . . . . . . . . . . . . . . . . AUTO DATA U_INT 0005H 2
scan . . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
a1 . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1
i. . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0001H 1
m. . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0002H 1
FLAG0. . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0003H 1
ptr. . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0004H 1
WR . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B6H 1
TMOD . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0089H 1
tab. . . . . . . . . . . . . . . . . . STATIC DATA ARRAY 0000H 16
IE0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0089H 1
IE1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 008BH 1
ET0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A9H 1
ET1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00ABH 1
TF0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 008DH 1
TF1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 008FH 1
RB8. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 009AH 1
EX0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A8H 1
IT0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0088H 1
TH1. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 008DH 1
TB8. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 009BH 1
EX1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00AAH 1
IT1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 008AH 1
P. . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00D0H 1
SM0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 009FH 1
SM1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 009EH 1
TL1. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 008BH 1
SM2. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 009DH 1
PT0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B9H 1
PT1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00BBH 1
RS0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00D3H 1
TR0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 008CH 1
RS1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00D4H 1
TR1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 008EH 1
C51 COMPILER V6.12 TESTKEY 07/25/2005 18:56:22 PAGE 5
NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====
PX0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B8H 1
PX1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00BAH 1
REN. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 009CH 1
RXD. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B0H 1
TXD. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B1H 1
F0 . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00D5H 1
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 462 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 16 12
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 2 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -