📄 main.lst
字号:
C51 COMPILER V7.06 MAIN 10/29/2006 14:31:11 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 <stdio.h>
2 #include <absacc.h>
3 #include <./Atmel/at89x52.h>
4 extern void start_t2imer(void);
5 unsigned char scankey;
6 bit Timerout=0;
7 bit keypress;
8 #define KR0 P1_0
9 #define KR1 P1_1
10 #define KR2 P1_2
11 #define KR3 P1_3
12 #define KC0 P1_4
13 #define KC1 P1_5
14 #define KC2 P1_6
15 #define KC3 P1_7
16 #define KBD_PORT P1
17 #define FSM_INIT 0X00
18 #define FSM_WAIT_PRESS 0X01
19 #define FSM_VERFY1 0X02
20 #define FSM_VERFY2 0X03
21 #define FSM_WAIT_RELESE 0X04
22 #define KBD_VAL_VAILD 0X80
23 main(){
24 1 unsigned char fsm_key=0;
25 1 unsigned char kbd_col;
26 1 unsigned char kbd_row;
27 1 unsigned char key_val;
28 1 IE=0X40;
29 1 start_t2imer();
30 1 EA=1; /* Enable interrupts */
31 1 while(1){
32 2 if(Timerout){
33 3 Timerout=0;
34 3 switch(fsm_key){
35 4 case FSM_INIT:
36 4 KR0=1;
37 4 KR1=1;
38 4 KR2=1;
39 4 KR3=1;
40 4 fsm_key=FSM_WAIT_PRESS;
41 4 break;
42 4 case FSM_WAIT_PRESS:
43 4 if(keypress){
44 5 key_val=0;
45 5 if(KC0){
46 6 KC0=1;
47 6 kbd_col=1;
48 6 }
49 5 else if(KC1){
50 6 KC1=1;
51 6 kbd_col=2;
52 6 }
53 5 else if(KC2){
54 6 KC2=1;
55 6 kbd_col=3;
C51 COMPILER V7.06 MAIN 10/29/2006 14:31:11 PAGE 2
56 6 }
57 5 else if(KC3){
58 6 KC3=1;
59 6 kbd_col=4;
60 6 }
61 5 else{
62 6 fsm_key=FSM_INIT;
63 6 }
64 5
65 5 kbd_row =KBD_PORT;
66 5 kbd_row >>=4;
67 5 if(kbd_row){
68 6 if(KR0){
69 7 kbd_row=0;
70 7 fsm_key=FSM_VERFY1;
71 7 }
72 6 else if(KR1){
73 7 kbd_row=4;
74 7 fsm_key=FSM_VERFY1;
75 7 }
76 6 else if(KR2){
77 7 kbd_row=8;
78 7 fsm_key=FSM_VERFY1;
79 7 }
80 6 else if(KR3){
81 7 kbd_row=12;
82 7 fsm_key=FSM_VERFY1;
83 7 }
84 6 else{
85 7 fsm_key=FSM_INIT;
86 7 }
87 6 }
88 5 else{
89 6 fsm_key=FSM_INIT;
90 6 }
91 5 }
92 4 break;
93 4 case FSM_VERFY1:
94 4 switch(kbd_row){
95 5 case 0:
96 5 if(KR0) fsm_key=FSM_VERFY2;
97 5 else fsm_key=FSM_INIT;
98 5 break;
99 5 case 4:
100 5 if(KR1) fsm_key=FSM_VERFY2;
101 5 else fsm_key=FSM_INIT;
102 5 break;
103 5 case 8:
104 5 if(KR2) fsm_key=FSM_VERFY2;
105 5 else fsm_key=FSM_INIT;
106 5 break;
107 5 case 12:
108 5 if(KR3) fsm_key=FSM_VERFY2;
109 5 else fsm_key=FSM_INIT;
110 5 break;
111 5 default:
112 5 fsm_key=FSM_INIT;
113 5 break;
114 5 }
115 4 break;
116 4 case FSM_VERFY2:
117 4 switch(kbd_row){
C51 COMPILER V7.06 MAIN 10/29/2006 14:31:11 PAGE 3
118 5 case 0:
119 5 if(KR0) key_val=(kbd_row+kbd_col)|KBD_VAL_VAILD;
120 5 break;
121 5 case 4:
122 5 if(KR1) key_val=(kbd_row+kbd_col)|KBD_VAL_VAILD;
123 5 break;
124 5 case 8:
125 5 if(KR2) key_val=(kbd_row+kbd_col)|KBD_VAL_VAILD;
126 5 break;
127 5 case 12:
128 5 if(KR3) key_val=(kbd_row+kbd_col)|KBD_VAL_VAILD;
129 5 break;
130 5 default:
131 5 break;
132 5 }
133 4 KR0=1;
134 4 KR1=1;
135 4 KR2=1;
136 4 KR3=1;
137 4 fsm_key=FSM_WAIT_RELESE;
138 4 break;
139 4 case FSM_WAIT_RELESE:
140 4 if(!keypress){
141 5 fsm_key=FSM_INIT;
142 5 }
143 4 break;
144 4 default:
145 4 fsm_key=FSM_INIT;
146 4 break;
147 4 }
148 3 }
149 2 }
150 1 }
151 void time2()interrupt 5 {//base 10 ms
152 1 TF2=0;
153 1 Timerout=1;
154 1 scankey=KBD_PORT;
155 1 if(scankey&0x0f){
156 2 keypress=1;
157 2 }
158 1 else{
159 2 keypress=0;
160 2 }
161 1
162 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 310 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 4
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -