📄 clock.lst
字号:
C51 COMPILER V7.20 CLOCK 02/25/2008 16:04:37 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE CLOCK
OBJECT MODULE PLACED IN clock.OBJ
COMPILER INVOKED BY: E:\Keil C\C51\BIN\C51.EXE clock.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2 #define u8 unsigned char
3 #define u16 unsigned int
4 sbit mode=P3^0;
5 sbit up=P3^1;
6 sbit down=P3^2;
7 u8 a=0x00,flag;
8 char seconddi,secondgao,minutedi,minutegao,hourdi,hourgao,daydi,daygao,
9 monthdi,monthgao,yeardi,yeardiyi,yeardier,yeargao;
10 u16 tick;
11 u8 code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
12 u8 code dayofmonth[]={31,28,31,30,31,30,31,31,30,31,30,31};
13
14
15 typedef struct {
16 char hour;
17 char minute;
18 char second;
19 }time;
20
21 typedef struct {
22 int year;
23 char month;
24 char day;
25 }date;
26 date today={2008,02,25};
27 time now={23,59,00};
28
29
30
31 void delay(u16 z)
32 {
33 1 u16 x,y;
34 1 for(x=z;x>0;x--)
35 1 for(y=110;y>0;y--);
36 1 }
37
38 void display(u16 year,u8 month,u8 day,u8 hour,u8 minute,u8 second)
39 {
40 1 seconddi=second%10;
41 1 secondgao=second/10;
42 1 minutedi=minute%10;
43 1 minutegao=minute/10;
44 1 hourdi=hour%10;
45 1 hourgao=hour/10;
46 1 daydi=day%10;
47 1 daygao=day/10;
48 1 monthdi=month%10;
49 1 monthgao=month/10;
50 1 yeardi=year%10;
51 1 yeardiyi=year/10%10;
52 1 yeardier=year/100%10;
53 1 yeargao=year/1000;
54 1
55 1 if(flag==1)
C51 COMPILER V7.20 CLOCK 02/25/2008 16:04:37 PAGE 2
56 1 {
57 2 P0=table[seconddi];
58 2 P1=0x04&a;
59 2 delay(1);
60 2 P0=0xff;//每次送完段码后如果不关闭显示,就不能正常的仿真(很重要)
61 2 P0=table[secondgao];
62 2 P1=0x08&a;
63 2 delay(1);
64 2 P0=0xff;
65 2 }
66 1 else
67 1 {
68 2 P0=table[seconddi];
69 2 P1=0x04;
70 2 delay(1);
71 2 P0=0xff;//每次送完段码后如果不关闭显示,就不能正常的仿真(很重要)
72 2 P0=table[secondgao];
73 2 P1=0x08;
74 2 delay(1);
75 2 P0=0xff;
76 2 }
77 1 if(flag==2)
78 1 {
79 2 P0=table[minutedi];
80 2 P1=0x10&a;
81 2 delay(1);
82 2 P0=0xff;
83 2 P0=table[minutegao];
84 2 P1=0x20&a;
85 2 delay(1);
86 2 P0=0xff;
87 2 }
88 1 else
89 1 {
90 2 P0=table[minutedi];
91 2 P1=0x10;
92 2 delay(1);
93 2 P0=0xff;
94 2 P0=table[minutegao];
95 2 P1=0x20;
96 2 delay(1);
97 2 P0=0xff;
98 2 }
99 1 if(flag==3)
100 1 {
101 2 P0=table[hourdi];
102 2 P1=0x40&a;
103 2 delay(1);
104 2 P0=0xff;
105 2 P0=table[hourgao];
106 2 P1=0x80&a;
107 2 delay(1);
108 2 P1=0x00;//必须加上这一句否则时显示8
109 2 P0=0xff;
110 2 }
111 1 else
112 1 {
113 2 P0=table[hourdi];
114 2 P1=0x40;
115 2 delay(1);
116 2 P0=0xff;
117 2 P0=table[hourgao];
C51 COMPILER V7.20 CLOCK 02/25/2008 16:04:37 PAGE 3
118 2 P1=0x80;
119 2 delay(1);
120 2 P1=0x00;//必须加上这一句否则时显示8
121 2 P0=0xff;
122 2 }
123 1 if(flag==4)
124 1 {
125 2 P0=table[daydi];//日低
126 2 P2=0x01&a;
127 2 delay(1);
128 2 P0=0xff;
129 2 P0=table[daygao];//日高
130 2 P2=0x02&a;
131 2 delay(1);
132 2 P0=0xff;
133 2 }
134 1 else
135 1 {
136 2 P0=table[daydi];//日低
137 2 P2=0x01;
138 2 delay(1);
139 2 P0=0xff;
140 2 P0=table[daygao];//日高
141 2 P2=0x02;
142 2 delay(1);
143 2 P0=0xff;
144 2 }
145 1 if(flag==5)
146 1 {
147 2 P0=table[monthdi];//月低
148 2 P2=0x04&a;
149 2 delay(1);
150 2 P0=0xff;
151 2 P0=table[monthgao];//月高
152 2 P2=0x08&a;
153 2 delay(1);
154 2 P0=0xff;
155 2 }
156 1 else
157 1 {
158 2 P0=table[monthdi];//月低
159 2 P2=0x04;
160 2 delay(1);
161 2 P0=0xff;
162 2 P0=table[monthgao];//月高
163 2 P2=0x08;
164 2 delay(1);
165 2 P0=0xff;
166 2 }
167 1 if(flag==6)
168 1 {
169 2 P0=table[yeardi];//年
170 2 P2=0x10&a;
171 2 delay(1);
172 2 P0=0xff;
173 2 P0=table[yeardiyi];
174 2 P2=0x20&a;
175 2 delay(1);
176 2 P0=0xff;
177 2 P0=table[yeardier];
178 2 P2=0x40&a;
179 2 delay(1);
C51 COMPILER V7.20 CLOCK 02/25/2008 16:04:37 PAGE 4
180 2 P0=0xff;
181 2 P0=table[yeargao];
182 2 P2=0x80&a;
183 2 delay(1);
184 2 P2=0x00;//必须加上这一句否则年最高位显示8
185 2 P0=0xff;
186 2 }
187 1 else
188 1 {
189 2 P0=table[yeardi];//年
190 2 P2=0x10;
191 2 delay(1);
192 2 P0=0xff;
193 2 P0=table[yeardiyi];
194 2 P2=0x20;
195 2 delay(1);
196 2 P0=0xff;
197 2 P0=table[yeardier];
198 2 P2=0x40;
199 2 delay(1);
200 2 P0=0xff;
201 2 P0=table[yeargao];
202 2 P2=0x80;
203 2 delay(1);
204 2 P2=0x00;//必须加上这一句否则年最高位显示8
205 2 P0=0xff;
206 2 }
207 1 }
208
209 char monthofday(char year,char month)
210 {
211 1 if(month==2&&year%4==0)
212 1 {
213 2 return(29);
214 2 }
215 1 else
216 1 {
217 2 return(dayofmonth[month-1]);
218 2 }
219 1 }
220 void timer0()interrupt 1
221 {
222 1 TMOD=0x01;
223 1 TH0=(65536-20000)/256;
224 1 TL0=(65536-20000)%256;
225 1 TR0=1;
226 1 tick++;
227 1 display(today.year,today.month,today.day,now.hour,now.minute,now.second);
228 1 if(tick==50)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -