📄 时钟2.lst
字号:
C51 COMPILER V7.06 蔩钟2 11/01/2006 17:13:00 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE 蔩钟2
OBJECT MODULE PLACED IN 时钟2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 时钟2.c BROWSE DEBUG OBJECTEXTEND
stmt level source
*** WARNING C500 IN LINE 1 OF 时钟2.C: MISSING DEVICE (SECURITY KEY NOT FOUND)
1 //////////////////////////////////////////////////
2 // //
3 // AT89C51时钟程序 //
4 // //
5 // 作者: 吴鹏 //
6 // 时间;2006年2月3日 //
7 // 大年初六 完成 //
8 //////////////////////////////////////////////////
9 #include <reg52.H>
10 #define uchar unsigned char
11 //typedef unsigned char uchar
12 sbit P3_6=P3^6;
13 sbit P3_7=P3^7;
14 sbit P2_6=P2^6;
15 sbit P2_7=P2^7;
16
17 //sbit rect_wave=P1^0;
18 //void timelover(void);
19
20 uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};// 0-9 十个数字显示
21 uchar code dispbit[]={0x7f,0xbf,0xf7,0xfb,0xfd,0xfe};// 点亮 数码管
22 uchar code rjg[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};// 点亮 跑马灯
23 uchar buffer[]={0,0,0,0,0,0};// 时钟显示置0
24 //uchar dbuffer[]={0,0,0,0,0,0};//闹钟显示置0
25 uchar hour,minute,second,count;
26 uchar dhour=0,dminute=0,dsecond=0;
27 uchar i,a,b,j=0,R,T;
28 void ding(void) ;
29 void delay(uchar c,uchar d) //延时程序
30 {for(a=c;a>0;a--)
31 1 for(b=d;b>0;b--);
32 1 }
33
34 void warning(void) //闹钟报警程序
35 {
36 1 uchar p=2;
37 1 // TR0=0;
38 1 while(p--!=0)
39 1 { P1=0;
40 2 P0=0;
41 2 delay(100,100);
42 2 P1=0xff;
43 2 P0=0xff;
44 2 delay(100,100);
45 2 }
46 1 // TR0=1;
47 1 }
48 void main(void)
49 {
50 1 TMOD=0x11;//选择定时器的模式
51 1 TH0=0xd8; //定的时间高8位
52 1 TL0=0xf0; //定的时间低8位
53 1 // TH1=0xff; //定的时间高8位,想想为什么?
54 1 // TL1=0xff; //定的时间低8位,想想为什么?
C51 COMPILER V7.06 蔩钟2 11/01/2006 17:13:00 PAGE 2
55 1 IE=0x82; //中断触发的设定
56 1 //IP=0X04;
57 1 TR0=1; //TIMER0开始计时
58 1 count=0;
59 1 second=0;
60 1 minute=0;
61 1 hour=0;
62 1 while(1)
63 1 {if(P3_7==0) //按下P3_7?
64 2 {delay(1,100); //延时
65 3 hour++;
66 3 if(hour==24)
67 3 hour=0;
68 3 while(P3_7==0);//判断是否被按下
69 3 }
70 2 if(P2_7==0)
71 2 {delay(1,100);
72 3 minute++;
73 3 if(minute==60)
74 3 {minute=0;}
75 3 while(P2_7==0);
76 3 }
77 2 if(P2_6==0)
78 2 {delay(1,100);
79 3 second++;
80 3 if(second==60)
81 3 {second=0;}
82 3 while(P2_6==0);
83 3 }
84 2
85 2 if(P3_6==0)
86 2 {delay(1,100);
87 3 // TR0=0; //???????????????
88 3 while(P3_6==0);
89 3 T=1;
90 3 R=1;
91 3 }
92 2 if(T==1)
93 2 ding();
94 2 }
95 1 }
96
97 void tim(void) interrupt 1 //int0 t0 int1 t1 rs
98 { // 0 1 2 3 4
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;
C51 COMPILER V7.06 蔩钟2 11/01/2006 17:13:00 PAGE 3
117 4 hour++;
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)
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)
138 1 {for(i=0;i<6;i++)
139 2 {
140 3 P2=dispbit[i];
141 3 P0=table[buffer[i]];
142 3 for(a=4;a>0;a--)
143 3 for(b=248;b>0;b--);
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 void ding(void) //interrupt 3 //int0 t0 int1 t1 rs
151 { int ii,aa,bb; // 0 1 2 3 4
152 1 //R=1;
153 1 P2=0xff;
154 1 while(1) //闹钟调时
155 1 {
156 2 if(P3_7==0)
157 2 {delay(1,100);
158 3 dhour++;
159 3 if(dhour==24)
160 3 {dhour=0;}
161 3 while(P3_7==0);
162 3 }
163 2 if(P2_7==0)
164 2 {delay(1,100);
165 3 dminute++;
166 3 if(dminute==60)
167 3 {dminute=0;}
168 3 while(P2_7==0);
169 3 }
170 2 if(P2_6==0)
171 2 {delay(1,100);
172 3 dsecond++;
173 3 if(dsecond==60)
174 3 {dsecond=0;}
175 3 while(P2_6==0);
176 3 }
177 2 // display();
178 2 if(R==1)
C51 COMPILER V7.06 蔩钟2 11/01/2006 17:13:00 PAGE 4
179 2 {
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(ii=0;ii<6;ii++)
188 2 {
189 3 P2=dispbit[ii];
190 3 P0=table[buffer[ii]];
191 3 for(aa=4;aa>0;aa--)
192 3 for(bb=248;bb>0;bb--);
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;
199 3 R=0;
200 3 break;
201 3 }
202 2 } //TR0=1; //TIME0开始计时
203 1 }
204
205
206
207
208 /*void timelover(void)
209 {
210 TH1=0xff;
211 TL1=0xff;
212 TF1=0;
213 rect_wave=!rect_wave;
214 }*/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 602 ----
CONSTANT SIZE = 24 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 19 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -