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

📄 set.h

📁 和泰公司的实时时钟RTC IC HT1381的读写程序,使用的是AVR 的M16.
💻 H
字号:
//set_bit ,功能选择键,用以改变set_bit_flag的值
//set_bit_flag=0,正常状态.set_bit_flag=1,设置状态.
//key_set_move,按键,移动选择
//key_add,按键,加.
//key_subtract,按键,减.
//key_set_ok,按键,设置确定键,设置好年月日,时分秒按此键方能确定送出显示
//time_temp[0]-time_temp[5]分别对应年月日,时分秒,用以暂存

unsigned char time_temp[6];
unsigned char set_bit_move; 
//bit display_flag=0;
bit set_bit_flag=0;

#define   set_bit       PIND.3
#define   key_set_move  PIND.4
#define   key_add       PIND.5
#define   key_subtract  PIND.6
#define   key_set_ok    PIND.7


#define Buzzer PORTB.6               //嘀一声报警
void tone(unsigned int Buzzer_time)  //X定义为报警时间的长短
{
unsigned int i;
  for(i=0;i<Buzzer_time;i++)
   {      
     Buzzer=~Buzzer;
     delay_us(250);
     }
}

unsigned char BCD_Convert(unsigned char x_data)
{ 
  unsigned char x_temp;
  x_temp=((x_data/10)<<4)|(x_data%10);
  return x_temp;
} 

void settime_writteninto1381(void)
{

	HT1381_write_byte(HT1381_control_add,0x00);		//关闭写保护 
	HT1381_write_byte(HT1381_sec_add,0x80);			//暂停 

	HT1381_write_byte(HT1381_year_add,BCD_Convert(time_temp[0]));	//年 
	HT1381_write_byte(HT1381_month_add,BCD_Convert(time_temp[1]));	//月 
	HT1381_write_byte(HT1381_date_add,BCD_Convert(time_temp[2]));	//日 

	HT1381_write_byte(HT1381_hr_add,BCD_Convert(time_temp[3]));		//时 
	HT1381_write_byte(HT1381_min_add,BCD_Convert(time_temp[4]));		//分
	HT1381_write_byte(HT1381_sec_add,BCD_Convert(time_temp[5]));		//秒
	//HT1381_write_byte(HT1381_day_add,time_temp[6]);	//周

        HT1381_write_byte(HT1381_sec_add,0x00);			//使能振荡
	HT1381_write_byte(HT1381_control_add,0x80);		//打开写保护 
    
   //   display_flag=0;          //清显示标志位,以返回到正常显示状态   
      set_bit_flag=0;
      tone(400);               //嘀一声长报警
}
   
void key_scan(void)
{
if(set_bit==0)
  {
    delay_ms(50);
    if(set_bit==0)
      {
        tone(70);
        display_clear(); //先清屏,再转换状态,以免LCD上字符显示重复/叠加
        set_bit_flag=!set_bit_flag; 
       }
   } 
   
if(set_bit_flag==1)
  {
      if(key_set_move==0)
         {
           delay_ms(50);
           if(key_set_move==0)
             {
              tone(70);
              set_bit_move+=1;
              if(set_bit_move>5) set_bit_move=0;
              }
          }

    switch(set_bit_move)
      {
       case 0:
            {
             if(key_add==0)
               {
                delay_ms(50);
                 if(key_add==0)
                   {
                  tone(70);
                  time_temp[0]+=1;
                  if(time_temp[0]>99) time_temp[0]=0;
                   }
                }
             if(key_subtract==0)
               {
                delay_ms(50);
                if(key_subtract==0)
                  {
                 tone(70);
                 time_temp[0]-=1;
                 if(time_temp[0]==0) time_temp[0]=0;
                 }
               }
             } break;       //年


       case 1:
            {
             if(key_add==0)
               {
                delay_ms(50);
                 if(key_add==0)
                   {
                  tone(70);
                  time_temp[1]+=1;
                  if(time_temp[1]>12) time_temp[1]=0;
                   }
                }
             if(key_subtract==0)
               {
                delay_ms(50);
                if(key_subtract==0)
                  {
                 tone(70);
                 time_temp[1]-=1;
                 if(time_temp[1]==0) time_temp[1]=0;
                }
               }
             } break;         //月

       case 2:
            {
             if(key_add==0)
               {
                delay_ms(50);
                 if(key_add==0)
                   {
                  tone(70);
                  time_temp[2]+=1;
                  if(time_temp[2]>31) time_temp[2]=0;
                   }
                }
             if(key_subtract==0)
               {
                delay_ms(50);
                if(key_subtract==0)
                  {
                 tone(70);
                 time_temp[2]-=1;
                 if(time_temp[2]==0) time_temp[2]=0;
                  }
               }
             } break;         //日

       case 3:
            {
             if(key_add==0)
               {
                delay_ms(50);
                 if(key_add==0)
                   {
                  tone(70);
                  time_temp[3]+=1;
                  if(time_temp[3]>23) time_temp[3]=0;
                   }
                }
             if(key_subtract==0)
               {
                delay_ms(50);
                if(key_subtract==0)
                  {
                 tone(70);
                 time_temp[3]-=1;
                 if(time_temp[3]==0) time_temp[3]=0;
                }
               }
             } break;           //时

       case 4:
            {
             if(key_add==0)
               {
                delay_ms(50);
                 if(key_add==0)
                   {
                  tone(70);
                  time_temp[4]+=1;
                  if(time_temp[4]>60) time_temp[4]=0;
                   }
                }
             if(key_subtract==0)
               {
                delay_ms(50);
                if(key_subtract==0)
                  {
                 tone(70);
                 time_temp[0]-=1;
                 if(time_temp[4]==0) time_temp[4]=0;
                  }
                }                  
             } break;          //分

       case 5:
            {
             if(key_add==0)
               {
                delay_ms(50);
                 if(key_add==0)
                   {
                  tone(70);
                  time_temp[5]+=1;
                  if(time_temp[5]>59) time_temp[5]=0;
                   }
                }
             if(key_subtract==0)
               {
                delay_ms(50);
                if(key_subtract==0)
                  {
                 tone(70);
                 time_temp[5]-=1;
                 if(time_temp[5]==0) time_temp[5]=0;
                  }             //秒
                }
             } break;
       }
//key_set_ok,设置确定键,设置好年月日,时分秒按此键方能确定送出显示
if(key_set_ok==0)
   {
   delay_ms(50);
   if(key_set_ok==0)
     {
       tone(70);
       display_clear();
       settime_writteninto1381();
     }             
   }
 }
}

void time_display(void)
{  
//display_clear();
// switch(display_flag)
switch(set_bit_flag)
  {
case 0:{ 
Written_char(0,2,(time_buf[0]>>4));
Written_char(0,3,(time_buf[0]&0x0f)); 
Written_char(0,4,Char_mark);
Written_char(0,5,(time_buf[1]>>4));
Written_char(0,6,(time_buf[1]&0x0f)); 
Written_char(0,7,Char_mark);
Written_char(0,8,(time_buf[2]>>4));
Written_char(0,9,(time_buf[2]&0x0f)); 
Written_char(1,2,(time_buf[3]>>4));
Written_char(1,3,(time_buf[3]&0x0f));
Written_char(1,4,Char_mark);
Written_char(1,5,(time_buf[4]>>4));
Written_char(1,6,(time_buf[4]&0x0f));
Written_char(1,7,Char_mark);
Written_char(1,8,(time_buf[5]>>4));
Written_char(1,9,(time_buf[5]&0x0f));
           } break;
case 1:{ 
 
Written_char(0,0,Char_S); 
Written_char(0,1,Char_e);
Written_char(0,2,Char_t);

Written_char(1,1,set_bit_move); 

Written_char(0,3,(time_temp[0]/10));
Written_char(0,4,(time_temp[0]%10)); 
Written_char(0,5,Char_mark);
Written_char(0,6,(time_temp[1]/10));
Written_char(0,7,(time_temp[1]%10)); 
Written_char(0,8,Char_mark);
Written_char(0,9,(time_temp[2]/10));
Written_char(0,10,(time_temp[2]%10)); 

Written_char(1,3,(time_temp[3]/10));
Written_char(1,4,(time_temp[3]%10));
Written_char(1,5,Char_mark);
Written_char(1,6,(time_temp[4]/10));
Written_char(1,7,(time_temp[4]%10));
Written_char(1,8,Char_mark);
Written_char(1,9,(time_temp[5]/10));
Written_char(1,10,(time_temp[5]%10));
       } break;
  }
}

⌨️ 快捷键说明

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