📄 wannianli.lst
字号:
227 2 DQ = 0; // 给脉冲信号
228 2 dat>>=1;
229 2 DQ = 1; // 给脉冲信号
230 2 if(DQ)
231 2 dat|=0x80;
232 2 Delay(4);
233 2 }
234 1 return(dat);
235 1 }
236 /******************************************************************************/
237 void WriteOneChar(unsigned char dat)//写一个字节
238 {
239 1 unsigned char i=0;
240 1 for (i=8; i>0; i--)
241 1 {
C51 COMPILER V6.12 WANNIANLI 06/20/2007 19:29:13 PAGE 5
242 2 DQ = 0;
243 2 DQ = dat&0x01;
244 2 Delay(5);
245 2 DQ = 1;
246 2 dat>>=1;
247 2 }
248 1 }
249 /******************************************************************************/
250 unsigned int ReadTemperature(void)//读取温度
251 {
252 1 unsigned char a=0;
253 1 unsigned char b=0;
254 1 unsigned int t=0;
255 1 float tt=0;
256 1 Init_DS18B20();
257 1 WriteOneChar(0xCC); // 跳过读序号列号的操作
258 1 WriteOneChar(0x44); // 启动温度转换
259 1 Init_DS18B20();
260 1 WriteOneChar(0xCC); //跳过读序号列号的操作
261 1 WriteOneChar(0xBE); //读取温度寄存器
262 1 a=ReadOneChar(); //读低8位
263 1 b=ReadOneChar(); //读高8位
264 1 t=b;
265 1 t<<=8;
266 1 t=t|a;
267 1 tt=t*0.0625;
268 1 t= tt*10+0.5; //放大10倍输出并四舍五入
269 1 return(t);
270 1 }
271 /******************************************************************************/
272 uchar printTemperature(void){//写一个字节
273 1 unsigned int i=0;
274 1 unsigned char a=0,b=0,c=0;
275 1 i=ReadTemperature();//读温度并送显
276 1 a=i/100;
277 1 b=i/10-a*10;
278 1 i = a*10 + b;
279 1 return i;
280 1 }
281 /**********************************************************************************************/
282 void Beeplll(void){//BELL 闹钟声音
283 1 uint a;//定义变量用于发声的长度设置
284 1 Led_EA = 1;//关列显示驱动,防止屏幕出现乱码
285 1 for(a=2500;a>0;a--){//第一个声音的长度
286 2 Bell_Out = ~Bell_Out;//取反扬声器驱动口,以产生音频
287 2 Delay(10);//音调设置延时
288 2 }
289 1 for(a=100;a>0;a--){//同上
290 2 Bell_Out = ~Bell_Out; //
291 2 Delay(6);//音调设置延时
292 2 }
293 1 Bell_Out = 1;
294 1 }
295 /**********************************************************************************************/
296 void Beep(void){//BELL-扬声器--整点报时
297 1 uchar a;//定义变量用于发声的长度设置
298 1 Led_EA = 1;//关列显示驱动,防止屏幕出现乱码
299 1 for(a=60;a>0;a--){//第一个声音的长度
300 2 Bell_Out = ~Bell_Out;//取反扬声器驱动口,以产生音频
301 2 Delay(100);//音调设置延时
302 2 }
303 1 for(a=100;a>0;a--){//同上
C51 COMPILER V6.12 WANNIANLI 06/20/2007 19:29:13 PAGE 6
304 2 Bell_Out = ~Bell_Out;
305 2 Delay(80);//
306 2 }
307 1 for(a=100;a>0;a--){//同上
308 2 Bell_Out = ~Bell_Out;
309 2 Delay(30);//
310 2 }
311 1 }
312 /**********************************************************************************************/
313 void Beep_set(void){//BELL -扬声器--确定设置
314 1 uchar a;//定义变量用于发声的长度设置
315 1 Led_EA = 1;//关列显示驱动,防止屏幕出现乱码
316 1 for(a=250;a>0;a--){//第一个声音的长度
317 2 Bell_Out = ~Bell_Out;//取反扬声器驱动口,以产生音频
318 2 Delay(20);//音调设置延时
319 2 }
320 1 for(a=100;a>0;a--){//同上
321 2 Bell_Out = ~Bell_Out;
322 2 Delay(80);//
323 2 }
324 1 }
325 /**********************************************************************************************/
326 void Beep_key(void){//-扬声器--按键音
327 1 uchar a;//定义变量用于发声的长度设置
328 1 Led_EA = 1;//关列显示驱动,防止屏幕出现乱码
329 1 for(a=100;a>0;a--){//声音的长度
330 2 Bell_Out = ~Bell_Out;
331 2 Delay(50);//音调设置延时
332 2 }
333 1 }
334 /**********************************************************************************************/
335 void clock_out(unsigned char dd){ //-1302驱动程序(底层协议)
336 1 ACC=dd;
337 1 clock_dat=a0; clock_clk=1; clock_clk=0;
338 1 clock_dat=a1; clock_clk=1; clock_clk=0;
339 1 clock_dat=a2; clock_clk=1; clock_clk=0;
340 1 clock_dat=a3; clock_clk=1; clock_clk=0;
341 1 clock_dat=a4; clock_clk=1; clock_clk=0;
342 1 clock_dat=a5; clock_clk=1; clock_clk=0;
343 1 clock_dat=a6; clock_clk=1; clock_clk=0;
344 1 clock_dat=a7; clock_clk=1; clock_clk=0;
345 1 }
346 /**********************************************************************************************/
347 unsigned char clock_in(void){ //-DS1302写入字节(底层协议)
348 1 clock_dat=1;
349 1 a0=clock_dat;
350 1 clock_clk=1; clock_clk=0; a1=clock_dat;
351 1 clock_clk=1; clock_clk=0; a2=clock_dat;
352 1 clock_clk=1; clock_clk=0; a3=clock_dat;
353 1 clock_clk=1; clock_clk=0; a4=clock_dat;
354 1 clock_clk=1; clock_clk=0; a5=clock_dat;
355 1 clock_clk=1; clock_clk=0; a6=clock_dat;
356 1 clock_clk=1; clock_clk=0; a7=clock_dat;
357 1 return(ACC);
358 1 }
359 /**********************************************************************************************/
360 uchar read_clock(uchar ord){ //-DS1302读数据(底层协议)
361 1 uchar dd=0;
362 1 clock_clk=0;
363 1 clock_Rst=0;
364 1 clock_Rst=1;
365 1 clock_out(ord);
C51 COMPILER V6.12 WANNIANLI 06/20/2007 19:29:13 PAGE 7
366 1 dd=clock_in();
367 1 clock_Rst=0;
368 1 clock_clk=1;
369 1 return(dd);
370 1 }
371 /**********************************************************************************************/
372 void write_clock(uchar ord, uchar dd){ //-DS1302写数据(底层协议)
373 1 clock_clk=0;
374 1 clock_Rst=0;
375 1 clock_Rst=1;
376 1 clock_out(ord);
377 1 clock_out(dd);
378 1 clock_Rst=0;
379 1 clock_clk=1;
380 1 }
381 /**********************************************************************************************/
382 void Set_time(unsigned char sel,unsigned char a){ //根据选择调整的相应项目加1并写入DS1302-调时用加1程序
383 1 signed char address,item;
384 1 signed char max,mini;
385 1 //if(sel==7) {address=0x80; max=0;mini=0;} //秒7
386 1 if(sel==6) {address=0x82; max=59;mini=0;} //分钟6
387 1 if(sel==5) {address=0x84; max=23;mini=0;} //小时5
388 1 if(sel==3) {address=0x86; max=31;mini=1;} //日3
389 1 if(sel==2) {address=0x88; max=12;mini=1;} //月2
390 1 if(sel==1) {address=0x8c; max=99; mini=0;} //年1
391 1 if(sel==4) {address=0x8a; max=7;mini=1;} //星期4
392 1 if(sel==200) {address=0xc2+a*6; max=6;mini=0;} //MODE
393 1 if(sel==201) {address=0xc2+a*6+2; max=23;mini=0;} //星期4
394 1 if(sel==202) {address=0xc2+a*6+4; max=59;mini=0;} //星期4
395 1
396 1 //读取1302某地址上的数值转换成10进制赋给item
397 1 item=((read_clock(address+1))/16)*10 + (read_clock(address+1))%16;
398 1 if(Add_Key == 0){ key_off ();//等待键放开
399 2 item++;//数值加1
400 2 Beep_key();//调时提示音
401 2 }
402 1 if(Add2_Key == 0){ key_off ();//等待键放开
403 2 item--;//数值减1
404 2 Beep_key();//调时提示音
405 2 }
406 1 if(item>max) item=mini;//查看数值有效范围
407 1 if(item<mini) item=max;
408 1 write_clock(0x8e,0x00);//允许写操作
409 1 write_clock(address,(item/10)*16+item%10);//转换成16进制写入1302
410 1 if(sel == 6 && (Add_Key == 0 || Add2_Key == 0)){
411 2 write_clock(0x80,0x00);//秒值=0
412 2 }
413 1 write_clock(0x8e,0x80);//写保护,禁止写操作
414 1 }
415 /**********************************************************************************************/
416 void Init_1302(void){//-设置1302的初始时间(2007年1月1日00时00分00秒星期一)
417 1 uchar f;
418 1 if(read_clock(0xc1) != 0xaa){
419 2 write_clock(0x8e,0x00);//允许写操作
420 2 write_clock(0x8c,0x07);//年
421 2 write_clock(0x8a,0x01);//星期
422 2 write_clock(0x88,0x01);//月
423 2 write_clock(0x86,0x01);//日
424 2 write_clock(0x84,0x00);//小时
425 2 write_clock(0x82,0x00);//分钟
426 2 write_clock(0x80,0x00);//秒
427 2 write_clock(0x90,0xa5);//充电
C51 COMPILER V6.12 WANNIANLI 06/20/2007 19:29:13 PAGE 8
428 2 write_clock(0xc0,0xaa);//写入初始化标志RAM(第00个RAM位置)
429 2 for(f=0;f<60;f=f+2){//清除闹钟RAM位为0
430 3 write_clock(0xc2+f,0x00);
431 3 }
432 2 write_clock(0x8e,0x80);//禁止写操作
433 2 }
434 1 }
435 /**********************************************************************************************/
436 void clearRAM (void){//寄存器清空函数-32个寄存器清空(0x00)
437 1 uchar a;//定义变量用于清空数据指针
438 1 for(a=0;a<32;a++){//指向32个寄存器
439 2 Ledplay[a] = 0;//将指向的寄存器清空
440 2 }
441 1 }
442 /**********************************************************************************************/
443 void putin (uchar u){//字符载入函数-将字符装入显示寄存器
444 1 uchar a = 0;//定义变量用于数据提取指针
445 1 do{
446 2 Ledplay[bn] = no[u][a];//将二维数组中的一组数据放入显示缓冲区
447 2 a++;//换下一个提取字节
448 2 bn++;//换下一个显示缓冲字节
449 2 }
450 1 while(no[u][a] != 0);//当显示数据为0时结束循环
451 1 bn++;//换下一个显示缓冲字节
452 1 Ledplay[bn] = 0;//显示一列的空位,便于字符区分
453 1 }
454 /**********************************************************************************************/
455 void display (void){//点阵屏驱动函数-32*8点阵显示驱动
456 1 uchar ac,aa=7;//定义两个数据变量
457 1 for(ac=0x28;ac<0x30;ac++){//扫描后两块LED屏(由于P1.5接扬声器所以高4位为2,旨在关声音)
458 2 Led_E = ac;//用ac值驱动使能列信号
459 2 Led_24 = DL(Ledplay[aa+8]);//将显示寄存器数据写入2、4屏(嵌入DL汇编是为了翻转字节数据,如果接线正确可省
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -