📄 时钟over.lst
字号:
C51 COMPILER V7.02b 蔩钟OVER 02/27/2006 17:06:07 PAGE 1
C51 COMPILER V7.02b, COMPILATION OF MODULE 蔩钟OVER
OBJECT MODULE PLACED IN 时钟OVER.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 时钟OVER.C DB SB OE
stmt level source
1 //////////////////////////////////////////////////
2 // //
3 // AT89C51时钟程序 //
4 // //
5 // 作者: 吴鹏 //
6 // 时间;2006年2月3日 //
7 // 大年初六 完成 //
8 //////////////////////////////////////////////////
9 #include <reg52.H>
10 #define uchar unsigned char
11 sbit P3_6=P3^6;
12 sbit P3_7=P3^7;
13 sbit P2_6=P2^6;
14 sbit P2_7=P2^7;
15
16 uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};// 0-9 十个数字显示
17 uchar code dispbit[]={0x7f,0xbf,0xf7,0xfb,0xfd,0xfe};// 点亮 数码管
18 uchar code rjg[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};// 点亮 跑马灯
19 uchar buffer[]={0,0,0,0,0,0};// 时钟and定时显示置
20 uchar hour,minute,second,count;
21 uchar dhour=0,dminute=0,dsecond=0;
22 uchar j=0,R,T;
23
24 void ding(void) ; //定时程序
25
26 void delay(uchar c,uchar d) //延时程序
27 {uchar x,y;
28 1 for(x=c;x>0;x--)
29 1 for(y=d;y>0;y--);
30 1 }
31
32 void warning(void) //闹钟报警程序
33 {
34 1 uchar p=2;
35 1 while(p--!=0)
36 1 { P1=0;
37 2 P0=0;
38 2 delay(100,100);
39 2 P1=0xff;
40 2 P0=0xff;
41 2 delay(100,100);
42 2 }
43 1 }
44
45
46 void main(void)
47 {
48 1 TMOD=0x11;//选择定时器的模式
49 1 TH0=0xd8; //定的时间高8位
50 1 TL0=0xf0; //定的时间低8位
51 1 IE=0x82; //中断触发的设定
52 1 TR0=1; //TIMER0开始计时
53 1 count=0;
54 1 second=0;
55 1 minute=0;
C51 COMPILER V7.02b 蔩钟OVER 02/27/2006 17:06:07 PAGE 2
56 1 hour=0;
57 1 while(1)
58 1 {if(P3_7==0) //按下P3_7?
59 2 {delay(1,100); //延时
60 3 hour++;
61 3 if(hour==24)
62 3 hour=0;
63 3 while(P3_7==0);//判断是否被按下
64 3 }
65 2 if(P2_7==0)
66 2 {delay(1,100);
67 3 minute++;
68 3 if(minute==60)
69 3 {minute=0;}
70 3 while(P2_7==0);
71 3 }
72 2 if(P2_6==0)
73 2 {delay(1,100);
74 3 second++;
75 3 if(second==60)
76 3 {second=0;}
77 3 while(P2_6==0);
78 3 }
79 2
80 2 if(P3_6==0)
81 2 {delay(1,100);
82 3 // TR0=0; //??? //注意: 在做显示时,要慎用全局变量,如在做本程序的两个显示部分时,
83 3 // 原来都统一用的是一个全局变量,那么这就会出现冲突,后来两部分
84 3 // 分别改为局部变量,这就OK了!!!!
85 3 while(P3_6==0);
86 3 T=1; //作标志,使其进入"ding()"
87 3 R=1; //作标志,因为两部分显示都存在"buffer[]"里,所以加以区分,否则会出现冲突
88 3 }
89 2 if(T==1) //检测T值
90 2 ding();
91 2 }
92 1 }
93
94
95 void tim(void) interrupt 1 //int0 t0 int1 t1 rs
96 {
97 1 // 0 1 2 3 4
98 1 uchar a1,b1,i1; //这里我使用局部变量
99 1 TH0=0xd8;
100 1 TL0=0xf0;
101 1 count++; //由于其是全局函数,当程序运行100次后,秒加1
102 1 R=0;
103 1
104 1 if (count==100)
105 1 {
106 2 count=0;
107 2 second++;
108 2 j++;
109 2 P1=rjg[j%8]; //由于有8个LED所以对8取余,使其逐个且有序的亮起来,很巧吧!!
110 2 if(second>=60)
111 2 {
112 3 second=0;
113 3 minute++;
114 3 if (minute>=60)
115 3 {
116 4 minute=0;
117 4 hour++;
C51 COMPILER V7.02b 蔩钟OVER 02/27/2006 17:06:07 PAGE 3
118 4 if (hour>=24)
119 4 {
120 5 second=0;
121 5 hour=0;
122 5 minute=0;
123 5 }
124 4 }
125 3 }
126 2
127 2 if(R==0) //检测R值
128 2 {
129 3 buffer[0]=second%10;
130 3 buffer[1]=second/10;
131 3 buffer[2]=minute%10;
132 3 buffer[3]=minute/10;
133 3 buffer[4]=hour%10;
134 3 buffer[5]=hour/10;
135 3 }
136 2 }
137 1 if(R==0) //检测R值
138 1 {for(i1=0;i1<6;i1++)
139 2 {
140 3 P2=dispbit[i1];
141 3 P0=table[buffer[i1]];
142 3 for(a1=4;a1>0;a1--)
143 3 for(b1=248;b1>0;b1--);
144 3 }
145 2 }
146 1 if((hour==dhour && minute==dminute && second==dsecond)&&(hour!=0||minute!=0||second!=0))
147 1 {warning();} //闹钟报警部分
148 1 }
149
150
151 void ding(void) //interrupt 3 //int0 t0 int1 t1 rs
152 { // 0 1 2 3 4
153 1 int i2,a2,b2;
154 1 P2=0xff;
155 1 while(1) //闹钟调时
156 1 {
157 2 if(P3_7==0)
158 2 {delay(1,100);
159 3 dhour++;
160 3 if(dhour==24)
161 3 {dhour=0;}
162 3 while(P3_7==0);
163 3 }
164 2 if(P2_7==0)
165 2 {delay(1,100);
166 3 dminute++;
167 3 if(dminute==60)
168 3 {dminute=0;}
169 3 while(P2_7==0);
170 3 }
171 2 if(P2_6==0)
172 2 {delay(1,100);
173 3 dsecond++;
174 3 if(dsecond==60)
175 3 {dsecond=0;}
176 3 while(P2_6==0);
177 3 }
178 2 if(R==1) //检测R值
179 2 {
C51 COMPILER V7.02b 蔩钟OVER 02/27/2006 17:06:07 PAGE 4
180 3 buffer[0]=dsecond%10;
181 3 buffer[1]=dsecond/10;
182 3 buffer[2]=dminute%10;
183 3 buffer[3]=dminute/10;
184 3 buffer[4]=dhour%10;
185 3 buffer[5]=dhour/10;
186 3 }
187 2 for(i2=0;i2<6;i2++)
188 2 {
189 3 P2=dispbit[i2];
190 3 P0=table[buffer[i2]];
191 3 for(a2=4;a2>0;a2--)
192 3 for(b2=248;b2>0;b2--);
193 3 }
194 2
195 2 if (P3_6==0) //定时退出部分
196 2 {delay(1,100);
197 3 while (P3_6==0);
198 3 T=0; //使T归0
199 3 R=0; //使R归0
200 3 break; //从while(1)循环中跳出
201 3 }
202 2 }
203 1 }
C51 COMPILER V7.02b 蔩钟OVER 02/27/2006 17:06:07 PAGE 5
NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====
second . . . . . . . . . . . . . . . . PUBLIC DATA U_CHAR 0000H 1
P0 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0080H 1
P1 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0090H 1
P2 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00A0H 1
P3 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B0H 1
table. . . . . . . . . . . . . . . . . PUBLIC CODE ARRAY 0000H 10
IE . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00A8H 1
minute . . . . . . . . . . . . . . . . PUBLIC DATA U_CHAR 0001H 1
P2_6 . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A6H 1
P2_7 . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A7H 1
P3_6 . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B6H 1
IP . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B8H 1
P3_7 . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B7H 1
ding . . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
i2 . . . . . . . . . . . . . . . . . * REG * DATA INT 0006H 2
a2 . . . . . . . . . . . . . . . . . * REG * DATA INT 0004H 2
b2 . . . . . . . . . . . . . . . . . * REG * DATA INT 0002H 2
dhour. . . . . . . . . . . . . . . . . PUBLIC DATA U_CHAR 0002H 1
main . . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
count. . . . . . . . . . . . . . . . . PUBLIC DATA U_CHAR 0003H 1
SCON . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0098H 1
TMOD . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0089H 1
TCON . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0088H 1
hour . . . . . . . . . . . . . . . . . PUBLIC DATA U_CHAR 0004H 1
rjg. . . . . . . . . . . . . . . . . . PUBLIC CODE ARRAY 0010H 8
tim. . . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
a1 . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0006H 1
b1 . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1
i1 . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
TH0. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 008CH 1
TL0. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 008AH 1
R. . . . . . . . . . . . . . . . . . . PUBLIC DATA U_CHAR 0005H 1
T. . . . . . . . . . . . . . . . . . . PUBLIC DATA U_CHAR 0006H 1
TR0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 008CH 1
dsecond. . . . . . . . . . . . . . . . PUBLIC DATA U_CHAR 0007H 1
T2CON. . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00C8H 1
j. . . . . . . . . . . . . . . . . . . PUBLIC DATA U_CHAR 0008H 1
_delay . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0004H -----
c. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
d. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1
x. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
y. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0006H 1
dispbit. . . . . . . . . . . . . . . . PUBLIC CODE ARRAY 000AH 6
warning. . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
p. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0004H 1
dminute. . . . . . . . . . . . . . . . PUBLIC DATA U_CHAR 0009H 1
PSW. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00D0H 1
buffer . . . . . . . . . . . . . . . . PUBLIC DATA ARRAY 000AH 6
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 592 ----
CONSTANT SIZE = 24 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 16 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
C51 COMPILER V7.02b 蔩钟OVER 02/27/2006 17:06:07 PAGE 6
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -