📄 ht1380key.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 + -