📄 key.lst
字号:
C51 COMPILER V7.50 KEY 11/15/2007 14:43:53 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE KEY
OBJECT MODULE PLACED IN key.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE key.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2 /*----------------------------- Program Overview -------------------------------
3 Device Name: AT89S52
4 ROM: 8 K bytes
5 RAM: 512 bytes
6 Chip Basic Functions: 40pin, 32I/O, 16 bit Timer *3, 8 bit UART *1, Eight Interrupt Sources
7 4.0V to 5.5V Operating Range, OSC 11.0592 MHz (0.9216 us)
8 Complier: keil C 750
9 Simulator: keil C 750
10 Programmer:
11 File Name: key.c
12 File Functtion: key function
13 Copyright: XIAZHAOJUN
14 First Version Finished Date: 2007.11.6
15 Others:
16 ------------------------------- Modified Note ----------------------------------
17 Old Version:
18 New Version:
19 New CheckSum:
20 Modifier:
21 Modified Date:
22 Modified Causation:
23 Modified Mean:
24 -------------------------------------------------------------------------------*/
25
26 //----------------------------- Include ----------------------------------------
27 #include <reg52.h>
28 //#include <stdio.h>
29 #include<intrins.h>
30 #include<com.h>
31 #include<lcm.h>
32 #include<fbuzz.h>
33 #include<cmain.h>
34
35
36 //----------------------------- SFR Definition ---------------------------------
37
38
39
40 //----------------------------- Macro Definition -------------------------------
41 #define uchar unsigned char
42 #define uint unsigned int
43
44 //----------------------------- Constant Definition ----------------------------
45
46
47
48 //----------------------------- Variable Definition ----------------------------
49 unsigned char data key_io;
50 unsigned char data keyflag;
51 unsigned char data keyedge_old;
52
53 // unsigned char keydat;
54 unsigned char data keyasic;
55 unsigned char data keytabdat;
C51 COMPILER V7.50 KEY 11/15/2007 14:43:53 PAGE 2
56 //----------------------------- Bit Definition ---------------------------------
57 unsigned char bdata keyedge;
58 //sbit flag = keyedge^7;
59 sbit b_off_fg = keyedge^6; // off
60 sbit b_on_fg = keyedge^5; // on
61 sbit b_stop_fg = keyedge^4; // stop
62 sbit b_right_fg = keyedge^3; // right
63 sbit b_left_fg = keyedge^2; // left
64 sbit b_down_fg = keyedge^1; // down
65 sbit b_up_fg = keyedge^0; // up
66
67
68 /*----------------------------- Subroutine -------------------------------------
69 Name: key_initial
70 Function:
71 Entry:
72 Exit:
73 Caution:
74 -------------------------------------------------------------------------------*/
75 void key_initial(void){
76 1
77 1 keyedge=0x00;
78 1 keyflag=0x00;
79 1 keyedge_old=0x00;
80 1 key_io=0x00;
81 1
82 1 // keydat=0x00;
83 1 keyasic=0x00;
84 1 }
85
86 /*----------------------------- Subroutine -------------------------------------
87 Name: Key_Det_col
88 Function: read io
89 Entry:
90 Exit:
91 Caution:
92 -------------------------------------------------------------------------------*/
93 uchar Key_Det_col(uchar keycol){
94 1 uchar keyio_dat;
95 1 P1=(~keycol);
96 1 _nop_();
97 1 _nop_();
98 1 keyio_dat=(~P1);
99 1 return(keyio_dat);
100 1 }
101
102 /*----------------------------- Subroutine -------------------------------------
103 Name: Key_Detect
104 Function:
105 Entry: key_io
106 Exit: keyflag,keyedge_old,keyedge
107 Caution:
108 -------------------------------------------------------------------------------*/
109 void Key_Detect(void){
110 1 static unsigned char state=2;
111 1 unsigned char keybuf;
112 1
113 1 state++;
114 1 if(state>2)
115 1 state=0x00;
116 1 if(state<2)
117 1 keybuf=Key_Det_col(state+1);
C51 COMPILER V7.50 KEY 11/15/2007 14:43:53 PAGE 3
118 1 switch (state){
119 2 case 0:
120 2 key_io&=0xf0; //first cow
121 2 key_io|=(keybuf>>4);
122 2 break;
123 2
124 2 case 1: //second cow
125 2 key_io&=0x0f;
126 2 keybuf&=0x70;
127 2 key_io|=keybuf;
128 2 break;
129 2
130 2 case 2:
131 2 keybuf=keyflag&key_io;
132 2
133 2 //方式0 限制新的按建的检测,必须等旧的按建松开,
134 2 //才去检测新的按建,更新为 方式1 ,可以解决这个问题。
135 2 //方式0
136 2 // if(keybuf==0){
137 2 // keyflag=key_io;
138 2 // keyedge_old=0x00;
139 2 // }
140 2 // else {
141 2 // keyedge|=(keybuf&(~keyedge_old));
142 2 // keyedge_old=keybuf;
143 2 // }
144 2 //方式1
145 2 keyflag=key_io;
146 2 keyedge|=(keybuf&(~keyedge_old));
147 2 keyedge_old=keybuf;
148 2
149 2 break;
150 2 }
151 1 }
152
153
154 /*----------------------------- Subroutine -------------------------------------
155 Name: key_doout
156 Function: get out key ,and set send flag, clear timer
157 Entry:
158 Exit:
159 Caution:
160 -------------------------------------------------------------------------------*/
161 void key_out_pro(void){
162 1 // unsigned char i;
163 1 keyedge&=0x7f;
164 1 if(keyedge!=0){
165 2 fbuzz_en();
166 2 comcmd=Write_COM_DATA;
167 2 b_send_fg=1;
168 2 b_disp=1;
169 2 lcm_md=0x03;
170 2 //keyright
171 2 if(b_right_fg){
172 3 keytabdat=0x04;
173 3 comdata&=0xf0;
174 3 comdata|=0x04;
175 3 }
176 2 //keyleft
177 2 if(b_left_fg){
178 3 keytabdat=0x03;
179 3 comdata&=0xf0;
C51 COMPILER V7.50 KEY 11/15/2007 14:43:53 PAGE 4
180 3 comdata|=0x03;
181 3 }
182 2 //keydown
183 2 if(b_down_fg){
184 3 keytabdat=0x02;
185 3 comdata&=0xf0;
186 3 comdata|=0x02;
187 3 }
188 2 //keyup
189 2 if(b_up_fg){
190 3 keytabdat=0x01;
191 3 comdata&=0xf0;
192 3 comdata|=0x01;
193 3 }
194 2
195 2 //keystop
196 2 if(b_stop_fg){
197 3 keytabdat=0x00;
198 3 comdata&=0xf0;
199 3 }
200 2
201 2 //keyon
202 2 if(b_on_fg){
203 3 keytabdat=0x06;
204 3 comdata&=0x0f;
205 3 comdata|=0x10;
206 3 }
207 2
208 2 //keyoff
209 2 if(b_off_fg){
210 3 keytabdat=0x05;
211 3 comdata&=0x0f;
212 3 }
213 2
214 2 keyedge=0x00;
215 2 }
216 1 }
217
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 202 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 7 ----
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 + -