📄 key.lst
字号:
C51 COMPILER V8.08 KEY 09/30/2008 16:39:08 PAGE 1
C51 COMPILER V8.08, 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 #include <reg52.h>
2 #include "key.h"
3 #include "delay.h"
4
5 unsigned char ledfast=0; //LED每秒闪烁3次时使用的中间变量
6 unsigned char ledslow=0; //LED每秒闪烁1次时使用的中间变量
7 unsigned char keyvalue=0X03; //键值0-短按,1-长按,2-亮,3-灭
8 unsigned char count=0; //按键长按、短按计数值
9 /*
10 KEY =P0^4;
11 MICKEY =P0^5;
12 MICLED =P2^0;
13 */
14 /*MICKEY\KEY状态检测函数*/
15 void KeyStatus(void)
16 {
17 1 unsigned char temp,temp1,temp2;
18 1
19 1 temp=P0&0x30;
20 1 Delay(500); //消除抖动
21 1 temp1=P0&0X30;
22 1
23 1 if((temp!=0x30)&&(temp1==temp))//有按键按下
24 1 {
25 2 DelayMs(20); //延时等待按键抬起
26 2 temp2=P0&0x30;
27 2 switch(temp1)
28 2 {
29 3 case 0x10:
30 3 if(temp2!=0x10)//按键抬起
31 3 {
32 4 if(MICLED==OFF) keyvalue=2;
33 4 else keyvalue=3;
34 4 }
35 3 break;
36 3
37 3 case 0x20:
38 3 if(temp2!=0x20)//按键抬起
39 3 {
40 4 if(count!=10) keyvalue=0;//KEY短按抬起
41 4 else count=0; //长按抬起,计数清零
42 4 }
43 3 else
44 3 {
45 4 if(count==10) keyvalue=1; //长按
46 4 else count++;
47 4 }
48 3 break;
49 3
50 3 default: break;
51 3 }
52 2 }
53 1 }
54
55 /*键值处理函数*/
C51 COMPILER V8.08 KEY 09/30/2008 16:39:08 PAGE 2
56 void KeyDeal(void)
57 {
58 1 switch(keyvalue)
59 1 {
60 2 case 0: MICLED=ledfast;break;
61 2 case 1: MICLED=ledslow;break;
62 2 case 2: MICLED=ON;break;
63 2 case 3: MICLED=OFF;break;
64 2 default:break;
65 2 }
66 1 }
67
68 /*设置键值函数*/
69 void Setkeyvalue(unsigned char value)
70 {
71 1 keyvalue=value;
72 1 }
73
74
75 /*T2中断函数,用作控制1秒内D4闪烁的次数*/
76 void Timer2_INTR() interrupt 5 //35ms
77 {
78 1 static unsigned char time2_counter; //静态变量,用于计算T2的溢出次数
79 1 time2_counter++;
80 1 if(time2_counter%7==0) ledfast=~ledfast; //溢出5次为约为1/3秒,改变LED快闪的临时变量
81 1 if(time2_counter==22)
82 1 {
83 2 time2_counter=0; //溢出次数清零.重新计数
84 2 ledslow=~ledslow; //溢出16次为约为1秒,改变LED慢闪的临时变量
85 2 }
86 1 RCAP2H=0x00; //定时器置初值
87 1 RCAP2L=0x00;
88 1 TF2=0; //T2定时器需手动清除溢出标志
89 1 }
90
91 /*T2初始函数*/
92 void InitTimer2()
93 {
94 1 RCAP2H=0x00; //定时器置初值
95 1 RCAP2L=0x00;
96 1 EA=1; //打开中断总开关
97 1 ET2=1; //允许T2中断
98 1 TR2=1; //启动T2中断
99 1 }
100
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 190 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 5 2
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 + -