?? clock.lst
字號:
C51 COMPILER V7.50 CLOCK 11/06/2005 11:42:29 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE CLOCK
OBJECT MODULE PLACED IN Clock.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Clock.c ROM(SMALL) BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <REGX52.H>
2
3 //==========變量定義===========
4 int data msAdd=0;//ms累加
5 char data dispCode[8]=0,timeNum[3]=0;//時間量的字形碼//具體時間量
6 char data whatLed=7;//當前顯示的數碼管
7 int data i=0,j=0,k=0,stepAdd=0;//循環變量//時標變量
8 char data select=3,keyNum=0;//設置位指示//鍵號
9
10 //==========函數定義===========
11 void setDisp(void);//計算字形碼
12 void runKey(void);//執行鍵盤功能
13
14 void main(void)
15 {
16 1
17 1 //==========T0/T1定時3ms/1ms==========
18 1 EA=1;
19 1 ET0=1;
20 1 ET1=1;
21 1 TMOD=0x11;
22 1 TH0=0xfc;
23 1 TL0=0x67;
24 1 TH1=0xf5;
25 1 TL1=0x33;
26 1 TR0=1;
27 1 TR1=1;
28 1 //=============================
29 1
30 1 P2=0x7f;
31 1 P3_6=1;
32 1 P3_7=1;
33 1
34 1 dispCode[6]=0xbf;//顯示"-"
35 1
36 1 while(1){;}
37 1
38 1 return;
39 1 }
40
41 //==========時間/顯示==========
42 void Disp(void) interrupt 1 using 1
43 {
44 1 bit data P2_H;
45 1 char data P2_ALL;
46 1
47 1 ET0=0;
48 1
49 1 if(select==3)
50 1 {
51 2 if(msAdd==625)
52 2 {
53 3 msAdd=0;
54 3
55 3 //========循環彩燈閃爍=========
C51 COMPILER V7.50 CLOCK 11/06/2005 11:42:29 PAGE 2
56 3 if(P1==0x00)
57 3 {
58 4 P1=0xff;
59 4 }
60 3 else
61 3 {
62 4 P1>>=1;
63 4 }
64 3
65 3 //=========時間累加============
66 3 if(timeNum[0]==59)
67 3 {
68 4 timeNum[0]=0;
69 4
70 4 if(timeNum[1]==59)
71 4 {
72 5 timeNum[1]=0;
73 5
74 5 if(timeNum[2]==23)
75 5 {
76 6 timeNum[2]=0;
77 6 }
78 5 else
79 5 {
80 6 timeNum[2]++;
81 6 }
82 5 }
83 4 else
84 4 {
85 5 timeNum[1]++;
86 5 }
87 4 }
88 3 else
89 3 {
90 4 timeNum[0]++;
91 4 }
92 3 }
93 2 else
94 2 {
95 3 msAdd++;
96 3 }
97 2 }
98 1
99 1 //=========按鍵識別============
100 1 if(P3_6==0||P3_7==0)
101 1 {
102 2 if(P3_6==0)
103 2 {
104 3 keyNum=P2+1;
105 3 runKey();
106 3 }
107 2 else if(P3_7==0)
108 2 {
109 3 keyNum=P2+2;
110 3 runKey();
111 3 }
112 2 }
113 1
114 1 //=========上午/下午===========
115 1 if(timeNum[2]>=12)
116 1 {
117 2 dispCode[7]=0x8c;//顯示"P"
C51 COMPILER V7.50 CLOCK 11/06/2005 11:42:29 PAGE 3
118 2 }
119 1 else
120 1 {
121 2 dispCode[7]=0x88;//顯示"A"
122 2 }
123 1
124 1 //==========拆字/顯示==========
125 1 i=2;
126 1 for(j=5;j>=0;j-=2)
127 1 {
128 2 dispCode[j]=timeNum[i]/10;
129 2 dispCode[j-1]=timeNum[i]-dispCode[j]*10;
130 2 i--;
131 2 }
132 1 setDisp();
133 1
134 1 //========循環顯示數值=========
135 1 P2_ALL=P2;
136 1 P2_H=P2_0;
137 1 P2=0xff;
138 1
139 1 if(whatLed>0)
140 1 {
141 2 whatLed--;
142 2 }
143 1 else
144 1 {
145 2 whatLed=7;
146 2 }
147 1 P0=dispCode[whatLed];
148 1
149 1 //=========P2循環右移==========
150 1 P2_ALL=P2_ALL>>1;
151 1 P2=P2_ALL;
152 1 P2_7=P2_H;
153 1 //=============================
154 1
155 1 TH0=0xfc;
156 1 TL0=0x67;
157 1 TR0=1;
158 1 ET0=1;
159 1
160 1 return;
161 1 }
162
163 //=========計算字形碼==========
164 void setDisp()
165 {
166 1 for(i=5;i>=0;i--)
167 1 {
168 2 switch(dispCode[i])
169 2 {
170 3 case 0:dispCode[i]=0xc0;
171 3 break;
172 3 case 1:dispCode[i]=0xf9;
173 3 break;
174 3 case 2:dispCode[i]=0xa4;
175 3 break;
176 3 case 3:dispCode[i]=0xb0;
177 3 break;
178 3 case 4:dispCode[i]=0x99;
179 3 break;
C51 COMPILER V7.50 CLOCK 11/06/2005 11:42:29 PAGE 4
180 3 case 5:dispCode[i]=0x92;
181 3 break;
182 3 case 6:dispCode[i]=0x82;
183 3 break;
184 3 case 7:dispCode[i]=0xf8;
185 3 break;
186 3 case 8:dispCode[i]=0x80;
187 3 break;
188 3 case 9:dispCode[i]=0x90;
189 3 break;
190 3 default:dispCode[i]=0xff;
191 3 }
192 2 }
193 1
194 1 if(select!=3)
195 1 {
196 2 if(stepAdd>150)
197 2 {
198 3 dispCode[select*2]=0xff;
199 3 dispCode[select*2+1]=0xff;
200 3 }
201 2 }
202 1
203 1 dispCode[2]&=0x7f;
204 1 dispCode[4]&=0x7f;
205 1
206 1 return;
207 1 }
208
209 //========執行鍵盤功能=========
210 void runKey(void)
211 {
212 1 switch(keyNum)
213 1 {
214 2 case 0x80:
215 2 if(stepAdd%50==0)
216 2 {
217 3 if(select>0)
218 3 {
219 4 select--;
220 4 }
221 3 else
222 3 {
223 4 select=3;
224 4 }
225 3 }
226 2 break;
227 2
228 2 case 0xc0:
229 2 if(stepAdd%50==0)
230 2 {
231 3 if(select!=3)
232 3 {
233 4 if(select!=0)
234 4 {
235 5 timeNum[select]++;
236 5 }
237 4 else if (timeNum[0]>=30)
238 4 {
239 5 timeNum[select]=0;
240 5 timeNum[1]++;
241 5 }
C51 COMPILER V7.50 CLOCK 11/06/2005 11:42:29 PAGE 5
242 4 else
243 4 {
244 5 timeNum[select]=0;
245 5 }
246 4
247 4 if (timeNum[1]==60){timeNum[select]=0;}
248 4 if (timeNum[2]==24){timeNum[select]=0;}
249 4 }
250 3 }
251 2 break;
252 2 }
253 1
254 1 return;
255 1 }
256
257 //=========輔助時標產生=========
258 void step(void) interrupt 3 using 2
259 {
260 1 ET1=0;
261 1
262 1 if(stepAdd<333)
263 1 {
264 2 stepAdd++;
265 2 }
266 1 else
267 1 {
268 2 stepAdd=0;
269 2 }
270 1
271 1 TH1=0xf5;
272 1 TL1=0x33;
273 1 TR1=1;
274 1 ET1=1;
275 1
276 1 return;
277 1 }
278
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 708 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 24 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -