📄 key.lst
字号:
C51 COMPILER V7.50 KEY 09/11/2008 08:45:57 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 DEBUG OBJECTEXTEND
line level source
1 #define SET 0x20
2 #define LEFT 0x10
3 #define RIGHT 0x08
4 #define UP 0x04
5 #define DOWN 0x02
6 #define OK 0x01
7
8 #include <reg51.h>
9 extern unsigned char sec,min,hour;
10 extern unsigned char code table[16]; // 字形数据
11 extern unsigned char DispBuf[6];
12 unsigned char sec1,min1,hour1; //闹钟值
13 unsigned char Alarmsec,Alarmmin,Alarmhour;
14 unsigned char Alarm;
15 bit p1,p2; //12.24时转换标志位
16
17 unsigned char EditSec,EditMin,EditHour;
18 extern unsigned char KeyVal;
19 unsigned char CurKey,LastKey;
20 unsigned char KeySts;
21 void DisplayEdit()
22 {
23 1 DispBuf[0] = table[EditSec % 10];
24 1 DispBuf[1] = table[EditSec / 10];
25 1 DispBuf[2] = table[EditMin % 10];
26 1 DispBuf[3] = table[EditMin / 10];
27 1 DispBuf[4] = table[EditHour % 10];
28 1 DispBuf[5] = table[EditHour / 10];
29 1 DispBuf[6-KeySts] &= 0x7F;
30 1 } // 编辑期间的显示
31 void DisplayEditAlarm() //编辑闹钟期间的显示
32 {
33 1 DispBuf[0] = table[Alarmsec % 10];
34 1 DispBuf[1] = table[Alarmsec/ 10];
35 1 DispBuf[2] = table[Alarmmin % 10];
36 1 DispBuf[3] = table[Alarmmin / 10];
37 1 DispBuf[4] = table[Alarmhour % 10];
38 1 DispBuf[5] = table[Alarmhour / 10];
39 1 DispBuf[12-KeySts] &= 0x7F;
40 1 }
41 void Copy()
42 {
43 1 sec =EditSec;
44 1 min =EditMin;
45 1 hour =EditHour;
46 1 } // 编辑值刷新当前时间
47 void CopyAlarm()
48 {
49 1 sec1=Alarmsec;
50 1 min1=Alarmmin;
51 1 hour1=Alarmhour;
52 1 } // 编辑值刷新当前闹钟时间
53 void KeyPro(void)
54 {
55 1 unsigned char KeyPressed;
C51 COMPILER V7.50 KEY 09/11/2008 08:45:57 PAGE 2
56 1
57 1 LastKey = CurKey;
58 1 CurKey = KeyVal;
59 1 KeyPressed = CurKey^LastKey;
60 1
61 1 if(KeyPressed==0) return; //检测键的变化
62 1 if(CurKey==0) return;// 键释放忽略
63 1 switch(KeySts)
64 1 {
65 2 case 0: // Set Key pressed while running
66 2 p1=p2=0;
67 2 if(KeyPressed==SET)
68 2 {
69 3 KeySts++;
70 3
71 3 }
72 2 EditSec = sec;
73 2 EditMin = min;
74 2 EditHour = hour;
75 2 if(KeyPressed==UP)
76 2 {
77 3 p1=1;
78 3 }
79 2 if(KeyPressed==DOWN)
80 2 {
81 3 p2=1;
82 3 }
83 2 break;
84 2 case 1: // hourHi edit status;
85 2 switch(KeyPressed)
86 2 {
87 3 case SET:KeySts+=6; Alarmsec =sec1;Alarmmin=min1;Alarmhour=hour1;break;//进入闹钟设定状态
88 3 case RIGHT: KeySts++; break;
89 3 case UP: if(EditHour<13) EditHour += 10;
90 3 else EditHour = 23;
91 3 break;
92 3 case DOWN: if(EditHour>10) EditHour -= 10;
93 3 else EditHour = 0;
94 3 break;
95 3 case OK: Copy();
96 3 KeySts=0;
97 3 break;
98 3 }
99 2 break;
100 2
101 2 case 2: // hourLo edit status;
102 2 switch(KeyPressed)
103 2 {
104 3 case RIGHT: KeySts++;
105 3 break;
106 3 case LEFT: KeySts--;
107 3 break;
108 3 case UP: if(EditHour<23) EditHour++;
109 3 break;
110 3 case DOWN: if(EditHour>0) EditHour--;
111 3 break;
112 3 case OK: Copy();
113 3 KeySts=0;
114 3 break;
115 3 }
116 2 break;
117 2
C51 COMPILER V7.50 KEY 09/11/2008 08:45:57 PAGE 3
118 2 case 3: // minHi edit status;
119 2 switch(KeyPressed)
120 2 {
121 3 case RIGHT: KeySts++;
122 3 break;
123 3 case LEFT: KeySts--;
124 3 break;
125 3 case UP: if(EditMin<49) EditMin+=10;
126 3 else EditMin = 59;
127 3 break;
128 3 case DOWN: if(EditMin>10) EditMin-=10;
129 3 else EditMin = 0;
130 3 break;
131 3 case OK: Copy();
132 3 KeySts=0;
133 3 break;
134 3 } break;
135 2 case 4: // minLo edit status;
136 2 switch(KeyPressed)
137 2 {
138 3 case RIGHT: KeySts++;
139 3 break;
140 3 case LEFT: KeySts--;
141 3 break;
142 3 case UP: if(EditMin<59) EditMin++;
143 3 break;
144 3 case DOWN: if(EditMin>0) EditMin--;
145 3 break;
146 3 case OK: Copy();
147 3 KeySts=0;
148 3 break;
149 3 }
150 2 break;
151 2
152 2
153 2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -