⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds130218b20.c

📁 时钟温度
💻 C
📖 第 1 页 / 共 2 页
字号:

uchar R1302(uchar address) 
{
 uchar da;
 T_rst=0;T_clk=0;T_rst=1;
 v_RTinputByte(address);
 da=v_RToutputByte();
 delay(4);
 T_clk=1;T_rst=0;
 return (da);
 }


//------向1302某个地址写入某数据--------
void W1302(uchar address,uchar da) 
{
  T_rst=0;T_clk=0;T_rst=1;
  v_RTinputByte(address);
  v_RTinputByte(da);
  delay(4);
  T_clk=1;T_rst=0;
}

//------获取1302的年月日,时分秒,星期---
void getYMD_HMS()                
{
 sec_1302=R1302(0x81);delay(3);
 min_1302=R1302(0x83);delay(3);
 hour_1302=R1302(0x85);delay(3);
 day_1302=R1302(0x87);delay(3);
 month_1302=R1302(0x89);delay(3);
 year_1302=R1302(0x8d);delay(3);
 week_1302=R1302(0x8b);delay(3);
}

//----BCD转换到disp[]中
void clktodisp(uchar j,uchar xx)
{
disp[j]=(xx>>4)&0x0f;
disp_set[j]=disp[j];
j++;
disp[j]=xx&0x0f;
disp_set[j]=disp[j];
}

//---年、月、日、时、分、秒的转换
void YMD_HMS_TO_led()
{
 getYMD_HMS();
 clktodisp(0,year_1302); clktodisp(2,month_1302); 
 clktodisp(4,day_1302); clktodisp(6,week_1302-1);
 clktodisp(8,hour_1302); clktodisp(10,min_1302);
 clktodisp(12,sec_1302);
}

//---正常时间显示
void display_1302()
{
 lcd_disonechar(1,0,'2');
 lcd_disonechar(2,0,'0');
 lcd_disonechar(3,0,disp[0]|0x30);
 lcd_disonechar(4,0,disp[1]|0x30);
 lcd_disonechar(5,0,'.');

 lcd_disonechar(6,0,disp[2]|0x30);
 lcd_disonechar(7,0,disp[3]|0x30);
 lcd_disonechar(8,0,'.');

 lcd_disonechar(9,0,disp[4]|0x30);
 lcd_disonechar(10,0,disp[5]|0x30);
 
// lcd_disonechar(10,0,' ');
 lcd_disonechar(11,0,' ');
 lcd_disonechar(12,0,'-');
 lcd_disonechar(13,0,'-');
 lcd_disonechar(14,0,'-');
 
 lcd_disonechar(15,0,disp[7]|0x30);
 

 lcd_disonechar(0,1,disp[8]|0x30);
 lcd_disonechar(1,1,disp[9]|0x30);
 lcd_disonechar(2,1,':');

 lcd_disonechar(3,1,disp[10]|0x30);
 lcd_disonechar(4,1,disp[11]|0x30);
 lcd_disonechar(5,1,':');

 lcd_disonechar(6,1,disp[12]|0x30);
 lcd_disonechar(7,1,disp[13]|0x30);
 
 }



//--修改时间显示
void display_ch_1302()
{
  static uchar a=0;
  a=!a;


 lcd_disonechar(0,0,'2');
 lcd_disonechar(1,0,'0');
 
 if(set_no==0&&a==1)  lcd_disonechar(2,0,' ');
 else                 lcd_disonechar(2,0,disp_set[0]|0x30);
 
 if(set_no==1&&a==1)  lcd_disonechar(3,0,' ');
 else                 lcd_disonechar(3,0,disp_set[1]|0x30);
 lcd_disonechar(4,0,'.');

 if(set_no==2&&a==1)   lcd_disonechar(5,0,' ');
 else                  lcd_disonechar(5,0,disp_set[2]|0x30);

 if(set_no==3&&a==1)   lcd_disonechar(6,0,' ');
 else                  lcd_disonechar(6,0,disp_set[3]|0x30);
 lcd_disonechar(7,0,'.');
 
 if(set_no==4&&a==1)   lcd_disonechar(8,0,' ');
 else                  lcd_disonechar(8,0,disp_set[4]|0x30);
  
 if(set_no==5&&a==1)   lcd_disonechar(9,0,' ');
 else                  lcd_disonechar(9,0,disp_set[5]|0x30);

 lcd_disonechar(10,0,' ');
 lcd_disonechar(11,0,' ');
 lcd_disonechar(12,0,'-');
 lcd_disonechar(13,0,'-');
 lcd_disonechar(14,0,'-');
 
 if(set_no==7&&a==1)   lcd_disonechar(15,0,' ');
 else                  lcd_disonechar(15,0,disp_set[7]|0x30);
 
 if(set_no==8&&a==1)   lcd_disonechar(0,1,' ');
 else                  lcd_disonechar(0,1,disp_set[8]|0x30);
 
 if(set_no==9&&a==1)   lcd_disonechar(1,1,' ');
 else                  lcd_disonechar(1,1,disp_set[9]|0x30);
 lcd_disonechar(2,1,':');
 
 if(set_no==10&&a==1)   lcd_disonechar(3,1,' ');
 else                  lcd_disonechar(3,1,disp_set[10]|0x30);

 if(set_no==11&&a==1)   lcd_disonechar(4,1,' ');
 else                   lcd_disonechar(4,1,disp_set[11]|0x30);
 lcd_disonechar(5,1,':');

 if(set_no==12&&a==1)   lcd_disonechar(6,1,' ');
 else                   lcd_disonechar(6,1,disp_set[12]|0x30);
 
 if(set_no==13&&a==1)   lcd_disonechar(7,1,' ');
 else                   lcd_disonechar(7,1,disp_set[13]|0x30);

}

void disp_settoclk()
{
 set_year=disp_set[0]*16+disp_set[1];
 set_month=disp_set[2]*16+disp_set[3];
 set_day=disp_set[4]*16+disp_set[5];
 set_week=disp_set[6]*16+disp_set[7];
 set_hour=disp_set[8]*16+disp_set[9];
 set_min=disp_set[10]*16+disp_set[11];
}
//----向1302写入的年月日,时分秒,星期---

void sendYMD_HMS()
{
 disp_settoclk();
 W1302(0x8e,0);delay(2);
 W1302(0x80,sec_1302&0x7f);delay(2);
 W1302(0x80,set_sec);delay(2);
 W1302(0x82,set_min);delay(2);
 W1302(0x84,set_hour);delay(2);
 W1302(0x86,set_day);delay(2);
 W1302(0x88,set_month);delay(2);
 W1302(0x8c,set_year);delay(2);
 W1302(0x8a,set_week+1);delay(2);
}

/**************************1302程序****************************/

/**************************74165程序****************************/
//----键盘扫描74165----
uchar scankeyboard()
{
  
 uchar i,d=0;

 sh_ld=0; delay(2);sh_ld=1;
 for(i=0;i<8;i++)
 {
  if(in==1) d=d*2+1;
  else      d=d*2;
  clk_165=0;clk_165=1;
 }
 dd[0]=dd[1];dd[1]=d;
 return(d);
}
 
//----键值处理----
void keyfuntion(uchar key_value)
{

 switch(key_value)
 {
  case 0: break;
  case 1: if(dd[0]!=dd[1]) {set_no=0; set_flag=!set_flag;}break;
 
  case 2: if(set_flag==1&&(dd[0]!=dd[1])) 
          { 
		    set_no++;
		    if(set_no==14) set_no=0;
		  }  
		 break;
  
  case 4: if(set_flag==1&&(dd[0]!=dd[1]))  
          {   
		      disp_set[set_no]++; 
              if(set_no==0&&disp_set[set_no]==10) disp_set[set_no]=0;
		      if(set_no==1&&disp_set[set_no]==10) disp_set[set_no]=0;
              if(set_no==2&&disp_set[set_no]==2)  disp_set[set_no]=0;
             
			  if(set_no==3&&disp_set[set_no]==10)  disp_set[set_no]=0;
			     
		     
			  if(set_no==4&&disp_set[set_no]==4)  disp_set[set_no]=0;
              if(set_no==5&&disp_set[set_no]==10) disp_set[set_no]=0; 
  			  if(set_no==6) disp_set[6]=0;
			  if(set_no==7&&disp_set[set_no]==8) disp_set[set_no]=1;
			  if(set_no==8&&disp_set[set_no]==3) disp_set[set_no]=0;
			  if(set_no==9&&disp_set[set_no]==4) disp_set[set_no]=0;
			  if(set_no==10&&disp_set[set_no]==6) disp_set[set_no]=0;
			  if(set_no==11&&disp_set[set_no]==10) disp_set[set_no]=0;
			  if(set_no==12&&disp_set[set_no]==6) disp_set[set_no]=0;
			  if(set_no==13&&disp_set[set_no]==10) disp_set[set_no]=0;

          }
          break;
  case 8: if(set_flag==1)
           {
		    set_flag=0;
		    sendYMD_HMS();
		    }
		   break;
  default :break;
 }
}

/**************************74165程序****************************/
  void time0() interrupt 1
  {
   
    
    static uchar m,n;  
    
    m++;
    n++;
    a++;

  keyfuntion(scankeyboard());

   if(set_flag==1&&m==2)  {m=0;display_ch_1302();}
  
   else if(set_flag==0&&n==20)
                     { 	
				       n=0; 
      				   keyfuntion(scankeyboard());
                       YMD_HMS_TO_led(); 
                       display_1302();
		    		  }

    
  if(a==30) {   dis_flag=1;
                a=0;                 
            }

  else   dis_flag=0;

  if(m==5)  m=0;
  if(n==20) n=0;
  
   TH0=0X3C;
   TL0=0XB0;

  }


 /* void time1() interrupt 3
  {
   
    
   static uchar a;   
   
   a++;

  keyfuntion(scankeyboard());
 
  
 
  if(a==30) {    Display_18b20();
                 dis_flag=1;
                 a=0;                 
            }

  else dis_flag=0;

  if(a==16) {
                if(disp[8]==1&&disp[9]==0&&disp[10]==0&&disp[11]==6)  alarm=1;
                 else                                                { alarm=0;p27=1;}
            }
   
  
   TH0=0X3C;
   TL0=0XB0;

  }

*/


void main()
{
  
  EA=1;
  ET0=1;
  //ET1=1;
  TMOD=0X01;
  TH0=0x3C;
  TL0=0xB0;
 // TH1=0x3C;
  //TL1=0xB0;
  TR0=1;
 // TR1=1;
  lcdreset();
  W1302(0x8e,0);delay(2);
  sec_1302=R1302(0x81);delay(3);
  W1302(0x80,sec_1302&0x7f);delay(3);  
  W1302(0x80,sec_1302&0x7f);
  covert_18b20();
  Display_18b20();


   while(1)
 {   
   if(dis_flag)
     {
	  covert_18b20();
      Display_18b20();
	 }
	 

   // if(alarm==1) p27=!p27;
 }                 

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -