📄 +
字号:
166 1 P2=7;
167 1 P0=ledmap[clock_mg];
168 1 delay(1);P0=0X00;
169 1
170 1
171 1
172 1 }
173 /***********************按键延时程序=a*1ms**************************************/
174 void delayAJ(uchar a)
175 {
176 1 uchar i;
177 1 while(a--)
178 1 {
179 2 for(i=0;i<125;i++);
C51 COMPILER V7.50 DAS1302 05/16/2010 10:01:11 PAGE 4
180 2 {
181 3 led_disp();
182 3 }
183 2 }
184 1 }
185 void key()
186 {
187 1 uchar clock_s1, clock_s2, clock_f1, clock_f2;
188 1 delayAJ(5);
189 1 if(set==0)
190 1 {
191 2 delayAJ(5);//消抖
192 2 if(set==0)
193 2 {
194 3 b++;
195 3
196 3 delayAJ(5);
197 3 }
198 2 while(!set)
199 2 {
200 3
201 3 delayAJ(5);
202 3 }
203 2
204 2 }
205 1 if(b!=0)//时分设定
206 1 {
207 2 if(up==0)
208 2 {
209 3 delayAJ(5);//消抖
210 3 if(up==0)
211 3 {
212 4
213 4 if(b==1)
214 4 {
215 5 hour++;
216 5 if(hour>=24)
217 5 {
218 6 hour=0;
219 6 }
220 5 delayAJ(10);
221 5 }
222 4
223 4 if(b==2)
224 4 {
225 5 mie++;
226 5 if(mie>=60)
227 5 {
228 6 mie=0;
229 6 }
230 5 delayAJ(10);
231 5 }//以上时钟+设定
232 4 }
233 3
234 3 }
235 2
236 2 if(down==0)
237 2 {
238 3 delayAJ(5);//消抖
239 3 if(down==0)
240 3 {
241 4 delayAJ(5);
C51 COMPILER V7.50 DAS1302 05/16/2010 10:01:11 PAGE 5
242 4 if(b==1)
243 4 {
244 5 hour--;
245 5 if(hour<0)
246 5 {
247 6 hour=23;
248 6 }
249 5 delayAJ(10);
250 5 }
251 4 if(b==2)
252 4 {
253 5 mie--;
254 5 if(mie<0)
255 5
256 5 {
257 6 mie=59;
258 6 }
259 5 delayAJ(10);
260 5 }//以上时钟-设定
261 4
262 4 }
263 3 }
264 2 //********************以下是转BCD码的程序 DS1302认BCD码
265 2 clock_s1=hour/10;
266 2 clock_s2=hour%10;
267 2 clock_s1=clock_s1&0xff;
268 2 clock_s2=clock_s2&0xff;
269 2 clock_s1<<=4;
270 2 clock_s1=clock_s1|clock_s2;// 10to16
271 2
272 2 clock_f1=mie/10;
273 2 clock_f2=mie%10;
274 2 clock_f1=clock_f1&0xff; //全1出1 与运算
275 2 clock_f2=clock_f2&0xff;
276 2 clock_f1<<=4;
277 2 clock_f1=clock_f1|clock_f2;// 10to16
278 2 //*******************************************转BCD码的程序 DS1302认BCD码
279 2 }
280 1
281 1 if(b==3)
282 1 {
283 2 b=0;
284 2
285 2
286 2 write_1302(0x8e,0x00); //WP=0 写操作
287 2 write_1302(0x80,0x01);//0x80是写秒数据此处写进"01"秒
288 2 write_1302(0x82,clock_f1);//0x82是写分数据
289 2 write_1302(0x84,clock_s1);//0x84是写时数据
290 2 write_1302(0x8e,0x80); //WP=1 写保护
291 2 delay(255);
292 2 }
293 1
294 1
295 1
296 1 }
297 /************************主程序**********************************************/
298 void main(void)
299 {
300 1
301 1
302 1 uchar temp=0x80;
303 1 uchar i;
C51 COMPILER V7.50 DAS1302 05/16/2010 10:01:11 PAGE 6
304 1 b=0;
305 1 P3=0xff;
306 1
307 1 while(1)
308 1 {
309 2
310 2
311 2 temp=0x81;//读的初始地址
312 2 for(i=0;i<3;i++)//分别把秒分时数据读出分3次读好一次地址加2" temp+=2;"
313 2 {
314 3 clk_time[i]=read_1302(temp);
315 3 temp+=2;
316 3 }
317 2 key();//键盘扫描
318 2 }
319 1 }
320
321
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 831 ----
CONSTANT SIZE = 11 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 17 3
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 + -