📄 jisuanqi.lst
字号:
C51 COMPILER V7.07 JISUANQI 02/29/2008 19:52:43 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE JISUANQI
OBJECT MODULE PLACED IN jisuanqi.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE jisuanqi.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //----键盘扫描法程序-------
2 //----用数码管显示相应的键值-----
3 //P1.0--P1.3接行-------
4 //P1.4---P1.7接列-------
5 #include<reg51.h>
6
7 unsigned char key,c,k,s;
8 unsigned int *i,j;
9 unsigned int anjian=0xff,iob,r3,address,add_data=0x00,temp=0x01;
10 unsigned char code a[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0到F的16个键植
11 unsigned int b[4]={0x01,0x02,0x04,0x08} ;
12 unsigned int buffer[5]={0x73,0x00,0x00,0x00,0x00};
13 unsigned int tab[5]={0x00,0x00,0x00,0x00,0x00};
14 unsigned int add[3]={0x00};
15 unsigned int flag=0x00;
16 void cheng();
17 void updata(unsigned int j);
18 void buffer_data(void);
19 void clear_data(void);
20 void cancell();
21 void disp();
22 void clear();
23 void getkey();
24 void write();
25 void sure();
26 void jia(void);
27 void chu(void);
28 void jian(void);
29 void Delay(unsigned char t);//延时函数
30
31 void main(void)
32 {
33 1 clear();
34 1 while(1)
35 1 {
36 2 disp();
37 2 clear();
38 2 getkey();
39 2 write();
40 2 Delay(200);
41 2 }
42 1
43 1 }
44
45 void Delay(unsigned char t)//延时函数
46 {
47 1 unsigned char i;
48 1 for(t=0;i<=t;t++)
49 1 for(i=0;i<255;i++);
50 1 }
51
52
53
54 void disp(void)
55 {
C51 COMPILER V7.07 JISUANQI 02/29/2008 19:52:43 PAGE 2
56 1 for(iob=0;iob<4;iob++)
57 1 {
58 2 P2 = 0x0;
59 2 switch(iob)
60 2 {
61 3 case 0: P0=buffer[0];break;
62 3 case 1: P0=buffer[1];break;
63 3 case 2: P0=buffer[2];break;
64 3 case 3: P0=buffer[3];break;
65 3 default:break;
66 3 }
67 2 P2=b[iob];
68 2 Delay(50);
69 2 }
70 1 }
71 /////////////////////////////////////////////////////////////////////////////////////////////////////
72 void clear()//////////////////////////////////清屏子程序,
73 {
74 1 for(iob=0;iob<4;iob++)
75 1 {
76 2 P2=b[iob] ; //扫描4个led端口,显示黑屏代码
77 2 P0=0x00;
78 2 Delay(10);
79 2 }
80 1 }
81 bit pkey(void)//判断键的否被按下,通过返回值确定
82 {
83 1 P1=0xf0;
84 1 if(P1!=0xf0)
85 1 {
86 2 Delay(100);
87 2 if(P1!=0xf0)
88 2 return 1;
89 2 else
90 2
91 2 return 0;
92 2 }
93 1 else
94 1 return 0;
95 1 }//1
96 void getkey( )
97
98 {//1
99 1
100 1
101 1
102 1
103 1 while(1)
104 1 {
105 2 if(pkey()==1)
106 2 {
107 3 P1=0xfe;
108 3 k=0xfe;
109 3 for(c=0;c<4;c++)
110 3 {
111 4 s=P1&0xf0;
112 4 switch(s)
113 4 {
114 5 case 0xe0: key=4*c+0; break;
115 5 case 0xd0: key=4*c+1; break;
116 5 case 0xb0: key=4*c+2; break;
117 5 case 0x70: key=4*c+3; break;
C51 COMPILER V7.07 JISUANQI 02/29/2008 19:52:43 PAGE 3
118 5 default: break;
119 5 }
120 4 k=(k<<1)|0x01;
121 4 P1=k;
122 4 }//for
123 3 //if
124 3 //if((P1&0xf0)==0xf0)
125 3 switch(key)
126 3
127 3
128 3 {//5
129 4 case 0x00 :anjian=7; break;
130 4 case 0x01 :anjian=8; break;
131 4 case 0x02 :anjian=9; break;
132 4 case 0x03 :flag=0x03;buffer_data();clear_data();break;
133 4 case 0x04 :anjian=4; break;
134 4 case 0x05 :anjian=5; break;
135 4 case 0x06 :anjian=6; break;
136 4 case 0x07 :flag=0x04;buffer_data();clear_data();break;
137 4 case 0x08 :anjian=1; break;
138 4 case 0x09 :anjian=2; break;
139 4 case 0x0a :anjian=3; break;
140 4 case 0x0b :flag=0x02;buffer_data();clear_data();break;
141 4 case 0x0c :cancell(); break;
142 4 case 0x0d :anjian=0; break;
143 4 case 0x0e :sure(); break;
144 4 case 0x0f :flag=0x01;buffer_data();clear_data();break;
145 4
146 4 default:anjian=0xff; break;
147 4 }//5
148 3 while(pkey()==1);
149 3 }else
150 2 break;
151 2 }
152 1 }
153
154 //////////////////////////////////////////////////////////////////////////////////////////////////////
155 void write()
156 {
157 1
158 1 if(anjian != 0xff)
159 1 {///////////////////////////////////////////////////////////////////////////////////////////
160 2 tab[0]=tab[1];
161 2 tab[1]=tab[2];
162 2 tab[2]=tab[3];
163 2 tab[3]=anjian; //扫描按键数据送往数据缓冲区
164 2 ////////////////////////////////////////////////////////////
165 2 buffer[0]=a[tab[0]];
166 2 buffer[1]=a[tab[1]];
167 2 buffer[2]=a[tab[2]];
168 2 buffer[3]=a[tab[3]];//输出数据送到缓冲区
169 2
170 2 /////////////////
171 2 address=(tab[0]*8*8*8)+(tab[1]*8*8)+(tab[2]*8)+tab[3];
172 2
173 2 }
174 1 anjian=0xff;
175 1
176 1
177 1
178 1
179 1 }
C51 COMPILER V7.07 JISUANQI 02/29/2008 19:52:43 PAGE 4
180 void cancell()
181 {
182 1 buffer[3]=buffer[2];
183 1 buffer[2]=buffer[1];
184 1 buffer[1]=buffer[0];
185 1 buffer[0]=0x3f;//输出数据送到缓冲区
186 1 ///////////////////////////////////////////////////////////////////////////////////////////
187 1 tab[3]=tab[2];
188 1 tab[2]=tab[1];
189 1 tab[1]=tab[0];
190 1 tab[0]=0x00; //扫描按键数据送往数据缓冲区
191 1 //////////////////////////////////////////////////////////////////////////////////////////
192 1 }
193 ////////////////////////////////////////////////////////////
194
195
196 void sure()
197 {
198 1 //////////////////////////////////////////////
199 1 switch(flag)
200 1
201 1 { case 0x01 :jia() ; break;
202 2 case 0x02 :jian(); break;
203 2 case 0x03 :chu(); break;
204 2 case 0x04 :cheng();break;
205 2 default:anjian=0xff; break;
206 2 }
207 1 }
208 //////////////////////////////////////////////
209
210 //////////////////////////////////////////////////////////////////////////////////////////////////////
211 //加法功能键子程序
212 void jia(void)
213 { buffer_data();
214 1 add[2]=add[0]+add[1];
215 1 updata(add[2]);
216 1 }
217 void jian(void)
218 { buffer_data();
219 1 add[2]=add[0]-add[1];
220 1 updata(add[2]);
221 1 }
222 void chu(void)
223 { buffer_data();
224 1 add[2]=add[0]/add[1];
225 1 updata(add[2]);
226 1 }
227 void cheng()
228 { buffer_data();
229 1 add[2]=add[0]*add[1];
230 1 updata(add[2]);
231 1 }
232 void updata(unsigned int j)
233 {
234 1 tab[3]=j%10;
235 1 j=j/10;
236 1 tab[2]=j%10;
237 1 j=j/10;
238 1 tab[1]=j%10;
239 1 j=j/10;
240 1 tab[0]=j%10;
241 1 ///////////////////////
C51 COMPILER V7.07 JISUANQI 02/29/2008 19:52:43 PAGE 5
242 1 buffer[0]=a[tab[0]];
243 1 buffer[1]=a[tab[1]];
244 1 buffer[2]=a[tab[2]];
245 1 buffer[3]=a[tab[3]];//
246 1 }
247
248 ////////////////////////////void updata(unsigned int j)
249 void clear_data(void)
250 {
251 1 tab[0]=0x00;
252 1 tab[1]=0x00;
253 1 tab[2]=0x00;
254 1 tab[3]=0x00;
255 1 ////////////////////////////////////////////////////////////
256 1 buffer[0]=a[tab[0]];
257 1 buffer[1]=a[tab[1]];
258 1 buffer[2]=a[tab[2]];
259 1 buffer[3]=a[tab[3]];
260 1
261 1 }
262 ////////////////////////////
263 void buffer_data(void)
264 {
265 1 add_data=(tab[0]*10*10*10)+(tab[1]*10*10)+(tab[2]*10)+tab[3];
266 1 add[0]=add[1];
267 1 add[1]=add_data;
268 1 }
269
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1041 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 57 ----
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 + -