📄 clock626.lst
字号:
C51 COMPILER V8.02 CLOCK626 06/27/2008 10:51:22 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE CLOCK626
OBJECT MODULE PLACED IN CLOCK626.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE CLOCK626.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg51.h>
2
3 sbit led1=P1^3; /* 4位数码管选通引脚 */
4 sbit led2=P1^4;
5 sbit led3=P1^6;
6 sbit led4=P1^7;
7 sbit led2dz=P1^5; /*小数点 */
8
9 sbit ls164_ab=P3^0; /*74LS164数据线 */
10 sbit ls164_clk=P3^1; /*74LS164时钟线 */
11
12 sbit key1=P3^5; /*按键1 */
13 sbit key2=P3^7; /*按键2 */
14
15 unsigned int DispFlag; /*显示标识 */
16
17 sbit key1flag=P3^2;
18 sbit key2flag=P3^3;
19
20 sbit beep=P1^0;
21
22 unsigned int MSCNT; /*中断次数 */
23
24 unsigned char SecondBuf=25;
25 unsigned char MinuteBuf=34;
26 unsigned char HourBuf=16;
27 unsigned char MonthBuf=10;
28 unsigned char DayBuf=15;
29
30 unsigned char DispBuf[15]; //显示缓冲
31 /************************************************************/
32 //DispBuf[1]-DispBuf[2]--DispBuf[3]-DispBuf[4]--DispBuf[5]-DispBuf[6]
33 //分 钟 ------- 小 时 ------- 天
34 //DispBuf[7]-DispBuf[8]--DispBuf[9]-DispBuf[10]
35 //月 ------- 秒
36 /************************************************************/
37
38 /* led1查表 */
39 unsigned char Sag_led1[10]=
40 {0x50,0xF9,0x34,0xB0,0x99,0x92,0x12,0xF8,0x10,0x90};
41 /* led2查表 */
42 unsigned char Sag_led234[10]=
43 {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
44
45 /* 延时 */
46 void Delay(unsigned int val)
47 {
48 1 while (val!=0) val--;
49 1 }
50 void ClearDispBuf()
51 {
52 1 char i;
53 1 for(i=0;i<15;i++)
54 1 {
55 2 DispBuf[0]=0;
C51 COMPILER V8.02 CLOCK626 06/27/2008 10:51:22 PAGE 2
56 2 }
57 1 }
58
59
60 /* 74ls164工作原理子程序 */
61 void Send74ls164(unsigned char sag)
62 {
63 1 char i;
64 1 for(i=1;i<9;i++)
65 1 {
66 2 sag=sag<<1 ;
67 2 if(CY==1)
68 2 ls164_ab=1;
69 2 else
70 2 ls164_ab=0;
71 2 ls164_clk=1;
72 2 ls164_clk=0 ;
73 2 }
74 1 }
75
76 //选定led1
77 void Select_led1()
78 {
79 1 led1=0;
80 1 led2=1;
81 1 led3=1;
82 1 led4=1;
83 1 }
84 //选定led2
85 void Select_led2()
86 {
87 1 led2=0;
88 1 led1=1;
89 1 led3=1;
90 1 led4=1;
91 1 }
92 //选定led3
93 void Select_led3()
94 {
95 1 led3=0;
96 1 led1=1;
97 1 led2=1;
98 1 led4=1;
99 1 }
100 //选定led4
101 void Select_led4()
102 {
103 1 led4=0;
104 1 led1=1;
105 1 led2=1;
106 1 led3=1;
107 1 }
108
109 //更新显示缓冲子程序
110 int UpdateDispBuf()
111 { //更新"秒"显示缓冲
112 1 DispBuf[10]=SecondBuf/10;
113 1 DispBuf[9] =SecondBuf%10;
114 1 //更新"分钟"显示缓冲
115 1 DispBuf[2]=MinuteBuf/10;
116 1 DispBuf[1]=MinuteBuf%10;
117 1 //更新"小时"显示缓冲
C51 COMPILER V8.02 CLOCK626 06/27/2008 10:51:22 PAGE 3
118 1 DispBuf[4]=HourBuf/10;
119 1 DispBuf[3]=HourBuf%10;
120 1 //更新"月"显示缓冲
121 1 DispBuf[8]=MonthBuf/10;
122 1 DispBuf[7]=MonthBuf%10;
123 1 //更新"日"显示缓冲
124 1 DispBuf[6]=DayBuf/10;
125 1 DispBuf[5]=DayBuf%10;
126 1 }
127
128 //4位数码管显示子程序
129 void Disp(void) //2位 5000,4位 2500
130 {
131 1 UpdateDispBuf();
132 1
133 1 switch(DispFlag)
134 1 {
135 2 case 0: //0x0: //显示 时,分
136 2 Select_led4();
137 2 Send74ls164(Sag_led234[DispBuf[1]]);
138 2 Delay(2500);
139 2
140 2 Select_led3();
141 2 Send74ls164(Sag_led234[DispBuf[2]]);
142 2 Delay(2500);
143 2
144 2 Select_led2();
145 2 Send74ls164(Sag_led234[DispBuf[3]]);
146 2 Delay(2500);
147 2
148 2 Select_led1();
149 2 Send74ls164(Sag_led1[DispBuf[4]]);
150 2 Delay(2500);
151 2 break;
152 2
153 2 case 0x1: //显示 月,日
154 2 Select_led4();
155 2 Send74ls164(Sag_led234[DispBuf[5]]);
156 2 Delay(2500);
157 2
158 2 Select_led3();
159 2 Send74ls164(Sag_led234[DispBuf[6]]);
160 2 Delay(2500);
161 2
162 2 Select_led2();
163 2 Send74ls164(Sag_led234[DispBuf[7]]);
164 2 Delay(2500);
165 2
166 2 Select_led1();
167 2 Send74ls164(Sag_led1[DispBuf[8]]);
168 2 Delay(2500);
169 2 break;
170 2
171 2 case 0x2: //显示 秒
172 2 Select_led4();
173 2 Send74ls164(Sag_led234[DispBuf[9]]);
174 2 Delay(2500);
175 2
176 2 Select_led3();
177 2 Send74ls164(Sag_led1[DispBuf[10]]);
178 2 Delay(2500);
179 2 break;
C51 COMPILER V8.02 CLOCK626 06/27/2008 10:51:22 PAGE 4
180 2
181 2 case 0x3: //显示 月
182 2 Select_led2();
183 2 Send74ls164(Sag_led234[DispBuf[7]]);
184 2 Delay(2500);
185 2
186 2 Select_led1();
187 2 Send74ls164(Sag_led1[DispBuf[8]]);
188 2 Delay(2500);
189 2 break;
190 2
191 2 case 0x6: //显示 日
192 2 Select_led4();
193 2 Send74ls164(Sag_led234[DispBuf[5]]);
194 2 Delay(2500);
195 2
196 2 Select_led3();
197 2 Send74ls164(Sag_led234[DispBuf[6]]);
198 2 Delay(2500);
199 2 break;
200 2
201 2 case 0x9: //显示 时
202 2 Select_led2();
203 2 Send74ls164(Sag_led234[DispBuf[3]]);
204 2 Delay(2500);
205 2
206 2 Select_led1();
207 2 Send74ls164(Sag_led1[DispBuf[4]]);
208 2 Delay(2500);
209 2 break;
210 2
211 2 case 12: //0x0C: //显示 分
212 2 Select_led4();
213 2 Send74ls164(Sag_led234[DispBuf[1]]);
214 2 Delay(2500);
215 2
216 2 Select_led3();
217 2 Send74ls164(Sag_led234[DispBuf[2]]);
218 2 Delay(2500);
219 2 break;
220 2
221 2 default:
222 2 break;
223 2
224 2 }
225 1 }
226
227 void KeyScan()
228 {
229 1 if(key1flag==0)
230 1 {
231 2 if(key2flag==0)
232 2 {
233 3 if(key1==0)
234 3 { //key1子程序
235 4 DispFlag+=3;
236 4 key1flag=1;
237 4 if(DispFlag>12)//0x0C)
238 4 {
239 5 DispFlag=0;
240 5 }
241 4 }
C51 COMPILER V8.02 CLOCK626 06/27/2008 10:51:22 PAGE 5
242 3 else if(key2==0)
243 3 {
244 4 //key2子程序
245 4 switch(DispFlag)
246 4 {
247 5 case 0: //显示"月,日"
248 5 DispFlag+=1;
249 5 key2flag=1;
250 5 break;
251 5
252 5 case 1: //显示"秒"
253 5 DispFlag+=1;
254 5 key2flag=1;
255 5 break;
256 5
257 5 case 2: //返回显示"时,分"
258 5 DispFlag=0;
259 5 key2flag=1;
260 5 break;
261 5
262 5 case 3: //"月"+1
263 5 MonthBuf+=1;
264 5 break;
265 5
266 5 case 6: //"日"+1
267 5 DayBuf+=1;
268 5 break;
269 5
270 5 case 9: //"时"+1
271 5 HourBuf+=1;
272 5 break;
273 5
274 5 case 12://"分"+1
275 5 MinuteBuf+=1;
276 5 break;
277 5
278 5 default:
279 5 break;
280 5 }
281 4
282 4 //返回
283 4 }
284 3 }
285 2 else if(key2==1)
286 2 {
287 3 key2flag=0;
288 3 }
289 2 }
290 1 else if(key1==1)
291 1 {
292 2 key1flag=0;
293 2 }
294 1 }
295 void main(void)
296 {
297 1 ClearDispBuf();
298 1 TMOD=0x01;
299 1 TH0=0x0;
300 1 TL0=0x0;
301 1 MSCNT=15;
302 1
303 1 ls164_ab=0;
C51 COMPILER V8.02 CLOCK626 06/27/2008 10:51:22 PAGE 6
304 1 ls164_clk=0;
305 1
306 1 DispFlag=0;
307 1 loop:
308 1 Disp();
309 1 KeyScan();
310 1 goto loop;
311 1
312 1 }
313
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 512 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 44 ----
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 + -