📄 main.lst
字号:
192 1 P1MDOUT =0;
193 1 P1SKIP =0x80;//交叉开关跳过DA1输出脚
194 1 }
195 /********************************************
196 函数名: Display_LED
197 功能: 用数码管显示显示缓冲区内容,并检测键盘
198 形式参数:无
199 返回值:无
200 ********************************************/
201 void Display_LED(void) interrupt 5
202 {
203 1 unsigned char i,j,sta1,cod,key;
204 1 timer_cnt++;
205 1 if(timer_cnt==50)
206 1 {
207 2 timer_cnt=0;
208 2
209 2 key=0;
210 2 //for(k=8;k>0;k--)
211 2 //{
212 2 if(disp_cnt==0)
213 2 disp_cnt=0x08;
214 2 disp_cnt--;
215 2 cod=display[disp_cnt];
216 2 sta1=~disp_sta;
217 2 for(j=8;j>0;j--)
218 2 {
219 3 sta1<<=1;
220 3 SRCLK=0;//拉低74HC595时钟
221 3 SER=CY;//发送74HC595一位串行数据
222 3 //wait(1);//延时
223 3 SRCLK=1;//拉高74HC595时钟
224 3 //wait(1);//延时
225 3 }
226 2
227 2 for(i=8;i>0;i--)
228 2 {
229 3 cod<<=1;
230 3 SRCLK=0;//拉低74HC595时钟
231 3 SER=CY;//发送74HC595一位串行数据
232 3 //wait(1);//延时
233 3 SRCLK=1;//拉高74HC595时钟
234 3 //wait(1);//延时
235 3 }
236 2
237 2 RCK0=0;
238 2 RCK1=0;
239 2 _nop_();
240 2 RCK0=1;
241 2 RCK1=1;
C51 COMPILER V7.06 MAIN 01/03/2008 17:28:43 PAGE 5
242 2 _nop_();
243 2 RCK0=0;
244 2 RCK1=0;
245 2
246 2 if(KR==0) //检测键盘
247 2 {
248 3 curkey|=disp_sta;
249 3 curkey&=0x0f;
250 3 }
251 2 //else
252 2 // curkey=0;
253 2
254 2 disp_sta>>=1;//显示下一位
255 2 if(disp_sta==0)
256 2 {
257 3 disp_sta=0x80;
258 3 if(lastkey==curkey)
259 3 {
260 4 if(curkey==0)
261 4 {//无键按下
262 5 keyval=0;
263 5 keycount=0;
264 5 key_mov=1;
265 5 keycnt=0;
266 5 }
267 4 else
268 4 {//有键按下
269 5 keycnt++;
270 5 if(keycnt==1)
271 5 {
272 6 keycnt=0;
273 6 keyval=curkey;
274 6 keycount++;
275 6 if(keycount==100)
276 6 {
277 7 keycount=0;
278 7 key_mov*=10;
279 7 if(key_mov>100)key_mov=100;
280 7 }
281 6 }
282 5 }
283 4 }
284 3 else
285 3 lastkey=curkey;
286 3 curkey=0;
287 3 }
288 2 }
289 1 }
290
291 /********************************************
292 函数名: SMbus_ISR
293 功能: SMbus中断服务,
294 形式参数:无
295 返回值:无
296 ********************************************/
297 void SMbus_ISR(void)interrupt 7
298 {
299 1 switch (SMB0CN & 0xF0)
300 1 {
301 2 case 0xe0:
302 2 SMB0DAT=Slave;
303 2 SMB0DAT |=SMB_RW;
C51 COMPILER V7.06 MAIN 01/03/2008 17:28:43 PAGE 6
304 2 STA=0;
305 2 //wait(1);
306 2 break;
307 2
308 2 case 0xc0:
309 2 if(ACK)
310 2 {
311 3 if(RW_flag==1)//读操作
312 3 {
313 4 if(Ack1==0)
314 4 {
315 5 Ack1=1;
316 5 SMB0DAT=Dat_addr;
317 5 }
318 4 else if(Ack2==0)
319 4 {
320 5 Ack2=1;
321 5 SMB_RW=1;
322 5 STA=1;
323 5 }
324 4 else
325 4 break;
326 4 }
327 3 else //写操作
328 3 {
329 4 if(Ack1==0)
330 4 {
331 5 Ack1=1;
332 5 SMB0DAT=Dat_addr;
333 5 }
334 4 else if(Ack2==0)
335 4 {
336 5 Ack2=1;
337 5 SMB0DAT=Dat_val;
338 5 }
339 4 else
340 4 {
341 5 SMB_BUSY=0;
342 5 STO = 1;
343 5 }
344 4 }
345 3 }
346 2 else
347 2 STA=1;
348 2 break;
349 2
350 2 case 0x80:
351 2 Dat_24C02= SMB0DAT;
352 2 SMB_BUSY = 0;
353 2 ACK = 0;
354 2 STO = 1;
355 2 break;
356 2
357 2 default:
358 2 SMB0CN &= ~0x40;
359 2 SMB0CN |= 0x40;
360 2 SMB_BUSY = 0;
361 2 }
362 1 SI=0;
363 1 }
364
365 /********************************************
C51 COMPILER V7.06 MAIN 01/03/2008 17:28:43 PAGE 7
366 函数名: wait
367 功能: 延时
368 形式参数:del--延时长度
369 返回值:无
370 *********************************************/
371 void wait(unsigned char del)
372 {
373 1 unsigned char l;
374 1 for(l=0;l<del;l++);
375 1 }
376
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 657 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 1
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 + -