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

📄 ht1380key.c

📁 用52单片机驱动HT1380的C语言程序,肯定是好的,请站长审批.
💻 C
字号:
#include<reg51.h>
sbit sclk=0x90;
sbit sdata=0x91;
sbit rest=0x92;
sbit beep=0x97;
unsigned char d[4],n;
unsigned char year,month,day,hour,minute,second;
bit distime,set;
unsigned char code tab[11]={0x3f,6,0x5b,0x4f,
            0x66,0x6d,0x7d,7,0x7f,0x6f,0};
unsigned char code digit[4]={0xf8,0xf4,0xf2,0xf1};
//-------------------d_time------------------
void delay(unsigned char dy)
{
   while(--dy);
}
//------------- sent_char to ht1380----------
void sent_char(unsigned char sentchar)
{
 unsigned char ii;  

 for(ii=0;ii<8;ii++)
    {
      sclk=0;
      if ((sentchar & 1)!=0) sdata=1;
      else sdata=0;
      sclk=1;
      sentchar=sentchar>>1;
    }
}
//------------- get_char from ht1380---------
unsigned char get_char()
{
 unsigned char getchar,ii,temp;
    getchar=0;temp=1;
    for(ii=0;ii<8;ii++)
      {
       sclk=0;
       sdata=1;
       if(sdata==1) getchar=getchar |temp;
       sclk=1;
       temp=temp<<1;
      }
    return(getchar);
}
 
//-------------set_wp_off------------------
void set_wp_off()
{
    rest=1;
    sent_char(0x8e);     //10001110b
    sent_char(0);        //00000000b
    sclk=0;
    rest=0;
}
//-----------set_wp_on--------------------
void set_wp_on()
{
  rest=1;
  sent_char(0x8e);       //10001110b
  sent_char(0x80);       //10000000b
  sclk=0;
  rest=0;
}
//----------read_time --------------------
void read_time()
 {
  unsigned char temp;
    rest=1;
    sent_char(0xbf);      //10111111b
    second=get_char();
    minute=get_char();
    hour=  get_char();
    day=   get_char();
    month= get_char();
    temp=  get_char();   /* week day */
    year=  get_char();
    temp=  get_char();            
    sclk=0;
    rest=0;
   
 }
//--------------set time-----------------
void set_time()
 {
   set_wp_off();
   rest=1;
   sent_char(0xbe);      //10111110b
   sent_char(second);
   sent_char(minute);
   sent_char(hour);
   sent_char(day);
   sent_char(month);
   sent_char(1);         /* week  day */
   sent_char(year);
   sent_char(0);
   sclk=0;
   rest=0;
   set_wp_on();
 }


timer() interrupt 1 using 1
{
    TH0=(65536-1000)/256;
    TL0=(65536-1000)%256;
    n=n++;
    if(n>3) n=0;
    P2=digit[n];
    P0=tab[d[n]]; 
    if(distime==1 && n==1)
       P0=tab[d[n]]+0x80;
     
 }

unsigned char getkey()
{    unsigned char k,tem,keytem;
     keytem=0;
     tem=P2 & 0xf0;
     if(tem!=0xf0)
     {   beep=0;
         for(k=0;k<40;k++)
         delay(250);
         tem=P2 & 0xf0;
         if(tem!=0xf0)
         {    if(tem==0x70) keytem=1;
              else if(tem==0xb0) keytem=2;
              else if(tem==0xd0) keytem=3;
              else if(tem==0xe0) keytem=4;
         }
      }
      
      while(tem!=0xf0)
      tem=P2 & 0xf0;  
      beep=1;
      return(keytem);
}


main()
{    unsigned char i,w,distem,key;
     
     TMOD=0X21;
     TR0=1;
     ET0=1;
     EA=1;
     n=0;
     distime=1;
     set=0;
     w=3;
     rest=0;sclk=0;
     year=05;
     month=05;
     day=0x11;
     
  while(1)
     {  if(set==0)
        {
           read_time();
           d[0]=hour/16;
           d[1]=hour %16;
           d[2]=minute/16;
           d[3]=minute %16;
        }
        else
        {
           distem=d[w];
           d[w]=10;
           for(i=0;i<200;i++)
               delay(250);
           d[w]=distem;
           for(i=0;i<200;i++)
               delay(250);
        }
        key=getkey();
        if(key==1)
        {   set=1;
            w++;
            if(w>3) w=0; 
        }
        else if(key==2)
        {   d[w]++;
            if(d[w]>9) d[w]=0;
        }
        else if(key==3)
        {   if(d[w]>0) d[w]--; }
        else if(key==4)
        {    hour=d[0]*16+d[1];
             minute=d[2]*16+d[3];
             second=0;
             set_time();
             set=0;
        }
     }
}

⌨️ 快捷键说明

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