📄 main.lst
字号:
C51 COMPILER V8.08 MAIN 06/03/2007 14:20:58 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: E:\keil c51\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2 #define uchar unsigned char
3 #define uint unsigned int
4
5 sbit P1_0 =P1^0;
6 sbit P1_1 =P1^1;
7 sbit P1_2 =P1^2;
8 sbit P1_3 =P1^3;
9 sbit P1_7 =P1^7;
10 sbit P1_6 =P1^6;
11
12 typedef struct
13 { uchar hour;
14 uchar minute;
15 uchar second;
16 }time;
17
18 time now={0,0,0};
19 time dingshi={0,0,0};
20
21 uchar code num_tab1[]={0x80,0x40,0x20,0x10,0x08,0x04};
22 uchar code num_tab2[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳极显示
23 uchar state=0;
24 uchar count=100;
25 uchar flag=0; //调整时间/定时的标志
26 uchar recount=0;
27 uchar recount1=0;
28
29
30 void delay(uint time1) //延时子程序
31 {
32 1 int i;
33 1 int k;
34 1 for(i=0;i<time1;i++)
35 1 for(k=0;k<100;k++);
36 1 }
37
38
39 void display(time disnum) //显示子程序
40 {
41 1 int hour_shi,hour_ge,min_shi,min_ge,sec_shi,sec_ge,i;
42 1 int num[6]={0,0,0,0,0,0};
43 1 hour_shi=disnum.hour/10;
44 1 hour_ge=disnum.hour%10;
45 1 min_shi=disnum.minute/10;
46 1 min_ge=disnum.minute%10;
47 1 sec_shi=disnum.second/10;
48 1 sec_ge=disnum.second%10;
49 1 num[0]=hour_shi;
50 1 num[1]=hour_ge;
51 1 num[2]=min_shi;
52 1 num[3]=min_ge;
53 1 num[4]=sec_shi;
54 1 num[5]=sec_ge;
55 1 for(i=0;i<6;i++)
C51 COMPILER V8.08 MAIN 06/03/2007 14:20:58 PAGE 2
56 1 {
57 2 P2=num_tab1[i];
58 2 P0=num_tab2[num[i]];
59 2 delay(1);
60 2 }
61 1
62 1 }
63
64
65 void display_1(uchar wei,uchar k) //显示子程序1
66 {
67 1 uchar wei1,wei2;
68 1 wei1=wei/10;
69 1 wei2=wei%10;
70 1
71 1 P2=num_tab1[k];
72 1 P0=num_tab2[wei1];
73 1 delay(1);
74 1 P2=num_tab1[k+1];
75 1 P0=num_tab2[wei2];
76 1 delay(1);
77 1 }
78
79
80 void interrupt_init(void)
81 {
82 1 EA=0;
83 1 TMOD=0x01;
84 1 TH0=0xd8;
85 1 TL0=0xf0;
86 1 IT0=1;
87 1 ET0=1;
88 1 EX0=1;
89 1 EA=1;
90 1 TR0=1;
91 1 }
92
93 void interrup0(void) interrupt 0 using 3
94 {
95 1 uchar i=0;
96 1 delay(1);
97 1 if(P1_0==0) //调时
98 1 {
99 2 if(flag==1) //定时的调节
100 2 {
101 3 state++;
102 3 if(state==9)
103 3 { state=0;}
104 3 }
105 2 else
106 2 {
107 3 TR0=0;
108 3 state++;
109 3 if(state==4)
110 3 {
111 4 state=0;
112 4 TR0=1;
113 4 }
114 3 }
115 2 }
116 1 if(P1_1==0) //加
117 1 {
C51 COMPILER V8.08 MAIN 06/03/2007 14:20:58 PAGE 3
118 2 switch(state)
119 2 {
120 3 case 0: break;
121 3 case 1: {
122 4 now.hour++;
123 4 if(now.hour==24)
124 4 now.hour=0;
125 4 break;
126 4 }
127 3 case 2: {
128 4 now.minute++;
129 4 if(now.minute==60)
130 4 now.minute=0;
131 4 break;
132 4 }
133 3 case 3: {
134 4 now.second++;
135 4 if(now.second==60)
136 4 now.second=0;
137 4 break;
138 4 }
139 3 case 4: break;
140 3 case 5: {
141 4 dingshi.hour++;
142 4 if(dingshi.hour==60)
143 4 dingshi.hour=0;
144 4 break;
145 4 }
146 3
147 3 case 6: {
148 4 dingshi.minute++;
149 4 if(dingshi.minute==60)
150 4 now.minute=0;
151 4 break;
152 4 }
153 3 case 7: {
154 4 dingshi.second++;
155 4 if(dingshi.second==60)
156 4 dingshi.second=0;
157 4 break;
158 4 }
159 3 case 8: break;
160 3 }
161 2 }
162 1 if(P1_2==0) //减
163 1 {
164 2 switch(state)
165 2 {
166 3 case 0: break;
167 3 case 1: {
168 4 if(now.hour==0)
169 4 now.hour=23;
170 4 else
171 4 now.hour--;
172 4 break;
173 4 }
174 3 case 2: {
175 4 if(now.minute==0)
176 4 now.minute=59;
177 4 else
178 4 now.minute--;
179 4 break;
C51 COMPILER V8.08 MAIN 06/03/2007 14:20:58 PAGE 4
180 4 }
181 3 case 3: {
182 4 if(now.second==0)
183 4 now.second=59;
184 4 else
185 4 now.second--;
186 4 break;
187 4 }
188 3 case 4: break;
189 3 case 5: {
190 4 if(dingshi.hour==0)
191 4 dingshi.hour=23;
192 4 else
193 4 dingshi.hour--;
194 4 break;
195 4 }
196 3
197 3 case 6: {
198 4 if(dingshi.minute==0)
199 4 now.minute=59;
200 4 else
201 4 dingshi.minute--;
202 4 break;
203 4 }
204 3 case 7: {
205 4 if(dingshi.second==0)
206 4 dingshi.second=59;
207 4 else
208 4 dingshi.second--;
209 4 break;
210 4 }
211 3 case 8: break;
212 3 }
213 2 }
214 1 if(P1_3==0) // 定时/取消定时
215 1 {
216 2 if(flag==0) // 定时
217 2 {
218 3 flag=1;
219 3 state=4;
220 3 }
221 2 else //取消定时
222 2 {
223 3 flag=0;
224 3 state=0;
225 3 dingshi.hour=0;
226 3 dingshi.minute=0;
227 3 dingshi.second=0;
228 3 }
229 2 }
230 1 }
231
232 void interrup1(void) interrupt 1 using 3
233 {
234 1 TR0=0;
235 1 TH0=0xd8;
236 1 TL0=0xf0;
237 1 TR0=1;
238 1 if(count==0)
239 1 {
240 2 count=100;
241 2 now.second++;
C51 COMPILER V8.08 MAIN 06/03/2007 14:20:58 PAGE 5
242 2 if(now.second==60)
243 2 {
244 3 now.minute++;
245 3 now.second=0;
246 3 if(now.minute==60)
247 3 {
248 4 recount=(now.hour+1)*2; //整点提示
249 4 now.hour++;
250 4 now.minute=0;
251 4 if(now.hour==24)
252 4 {
253 5 now.hour=0;
254 5 }
255 4 }
256 3
257 3 }
258 2 if(flag==1 )
259 2 {
260 3 if(dingshi.hour==now.hour && dingshi.minute==now.minute && dingshi.second==now.second )
261 3 recount1=18;
262 3 }
263 2 if(recount!=0)
264 2 {
265 3 P1_7=~P1_7;
266 3 recount--;
267 3 }
268 2 else
269 2 { P1_7=0;}
270 2 if(recount1!=0)
271 2 {
272 3 P1_6=~P1_6;
273 3 recount1--;
274 3 }
275 2 else
276 2 { P1_6=0;}
277 2 }
278 1 else
279 1 {
280 2 count--;
281 2 }
282 1
283 1 }
284
285
286 void main(void)
287 {
288 1 uchar j=0;
289 1 flag=0;
290 1 interrupt_init(); //中断初始化
291 1 P1_6=0;
292 1 P1_7=0;
293 1 while(1)
294 1 {
295 2 switch(state)
296 2 {
297 3 case 0: display(now);break;
298 3 case 1: display_1(now.hour,0);break;
299 3 case 2: display_1(now.minute,2);break;
300 3 case 3: display_1(now.second,4);break;
301 3 case 4: display(dingshi);break; //显示定时初值00:00:00
302 3 case 5: display_1(dingshi.hour,0);break;
303 3 case 6: display_1(dingshi.minute,2);break;
C51 COMPILER V8.08 MAIN 06/03/2007 14:20:58 PAGE 6
304 3 case 7: display_1(dingshi.second,4);break;
305 3 case 8: display(dingshi);break; //显示定时时间
306 3 }
307 2
308 2 }
309 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 827 ----
CONSTANT SIZE = 28 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 11 26
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 + -