📄 cc.c
字号:
#include <reg52.h>
#include <absacc.h>
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
unsigned char code Tab[12]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40,0x00};
unsigned char code Tabc[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
sbit Dat=P1^3;
sbit G=P1^1;
sbit SCK=P1^2;
sbit rck=P1^4;
sbit readkey=P1^0;
sbit scs= P1^5;
//sbit beer=P2^0;
#define REG_A XBYTE[0x030A]
#define REG_B XBYTE[0x030B]
#define REG_C XBYTE[0x030C]
#define REG_D XBYTE[0x030D]
uchar xdata *DS12887=0x0300;
uchar code PIAN_YI[6]={0,2,4,7,8,9, };/*-- 年、月、日、时、分、秒-- */
uchar idata DS12887_time[6],dao_time[3];
uchar c,v,k,key,k1,k2,k3,k4,dao[8],key_count;
uchar idata Time[10];/*-----提取时间各个位数据-----*/
void key_wait();
void delay()
{
uchar i,j,h;
for(i=2;i>0;i--)
for(j=3;j>0;j--)
for(h=100;h>0;h--);
}
void delay10(void)
{
unsigned char i,j,k;
for(i=30;i>0;i--)
for(j=40;j>0;j--)
for(k=240;k>0;k--);
}
///void delayms(unsigned char a)
//{while(--a); }
void out(void)
{
rck=0;
_nop_();
rck=1;
}
void send_num(uchar num)
{
uchar j;
for(j=0;j<8;j++)
{
SCK=0;
Dat=num&0x80;
SCK=1;
num=num<<1;
}
SCK=0;
}
void seat0(uchar j,uchar i,uchar h)
{
uchar num,a;
G=1;
num=Tab[j];
send_num(Tab[h]);
send_num(num);
a=Tabc[i];
send_num(a);
G=0;
out();
}
uchar seat(uchar j,uchar i,uchar h)
{
uchar num,a,x0,x1,x2,x3;
G=1;
num=Tab[j];
send_num(Tab[h]);
send_num(num);
a=Tabc[i];
send_num(a);
G=0;
out();
delay();
if(readkey==0&&a==Tabc[0])
{
x0++;
if(x0==20)
{
x0=0;
return 1;
}
}
if(readkey==0&&a==Tabc[1])
{
x1++;
if(x1==20)
{
x1=0;
return 2;
}
}
if(readkey==0&&a==Tabc[2])
{
x2++;
if(x2==20)
{
x2=0;
return 3;
}
}
if(readkey==0&&a==Tabc[3])
{
x3++;
if(x3==20)
{
x3=0;
return 4;
}
}
}
void DS12887_Read(void) // 读取实时时间
{
uchar idata h,i;
do
{
h=REG_A;
}while(h&0x80);
for(i=0;i<6;i++)
{
DS12887_time[i]=*(DS12887+PIAN_YI[i]);
}
}
void set_p(uchar a,uchar j)
{
if( *(DS12887+a)+1>=0&&*(DS12887+a)+1<j)
{
*(DS12887+a)=*(DS12887+a)+1;
}
}
void set_m(uchar a,uchar j)
{
if( *(DS12887+a)-1>=0&&*(DS12887+a)-1<j)
{
*(DS12887+a)=*(DS12887+a)-1;
}
}
void read_timebit(uchar a)
{
DS12887_Read();
Time[0]=DS12887_time[0]%10;//秒个位0~9
Time[1]=DS12887_time[0]/10;//秒十位0~5
Time[3]=DS12887_time[1]%10;//分个位0~9
Time[4]=DS12887_time[1]/10;//分十位0~5
Time[6]=DS12887_time[2]%10;//时个位0~9
Time[7]=DS12887_time[2]/10;//时十位0~2
// Time[6]=DS12887_time[3]%10;//日个位0~9
// Time[7]=DS12887_time[3]/10;//日十位0~3
// Time[8]=DS12887_time[4]%10;//月个位0~9
// Time[9]=DS12887_time[4]/10;//月十位0~1
// Time[10]=DS12887_time[5]%10;//年个位0~9
// Time[11]=DS12887_time[5]/10;//年十位0~9
if(a==1)
{
dao[0]=dao_time[0]%10;
dao[1]=dao_time[0]/10;
dao[3]=dao_time[1]%10;
dao[4]=dao_time[1]/10;
dao[6]=dao_time[2]%10;
dao[7]=dao_time[2]/10;
}
}
void key_wait()
{
uchar m,i;
do
{
for(m=0;m<8;m++)
{
key=seat(Time[m],m,dao[m]);
}
}while(key==1);
}
void change_0()
{
uchar i,j,m,add=2,key;
REG_A=0;
for(i=0;i<3;i++)
{
dao_time[i]=0;
}
for(i=80;i>0;i--)
{
for(m=0;m<8;m++)
{
key=seat(Time[m],m,dao[m]);
if(key==1)
{
//if(key_count==1)
k++;
key_wait();
}
if(key==2)
{
set_p(add,60);
}
if(key==3)
set_m(add,60);
if(key==4)
{
REG_A=0x20;
REG_B=0x06;
c=0;
}
if(k==0)
add=0;
if(k==1)
add=2;
if(k==2)
add=4;
if(k==3)
{
c=0;
REG_A=0x20;
REG_B=0x26;
}
}
}
for(j=80;j>0;j--)
{
for(m=0;m<8;m++)
{
switch(k)
{
case 0 :if(m==0||m==1)
{
key=seat(11,m,dao[m]);
}
else
key=seat(Time[m],m,dao[m]);break;
case 1:if(m==3||m==4)
{
key=seat(11,m,dao[m]);
}
else
key=seat(Time[m],m,dao[m]);break;
case 2:if(m==6||m==7)
{
key=seat(11,m,dao[m]);
}
else
key=seat(Time[m],m,dao[m]);break;
default:for(m=0;m<8;m++)
{
key=seat(Time[m],m,dao[m]);
}
c=0;
REG_A=0x20;
REG_B=0x26;
break;
}
if(key==1)
{
//if(key_count==1)
k++;
key_wait();
}
if(key==2)
{
set_p(add,60);
}
if(key==3)
set_m(add,60);
if(key==4)
{
c=0;
REG_A=0x20;
REG_B=0x06;
}
if(k==0)
add=0;
if(k==1)
add=2;
if(k==2)
add=4;
if(k==3)
{
c=0;
REG_A=0x20;
REG_B=0x26;
}
}
}
}
void set_dao(uchar a,uchar b)
{
if(key==2)
{
dao_time[a]++;
if(dao_time[a]>59+b)
dao_time[a]=59+b;
}
if(key==3)
{
if(dao_time[a]>1)
dao_time[a]=dao_time[a]-1;
else
dao_time[a]=0;
}
}
void get_dao()
{
uchar i,j,m,a;
REG_B=0x06;
for(i=80;i>0;i--)
{
read_timebit(0);
for(j=0;j<8;j++)
{
key=seat(Time[j],j,dao[j]);
if(key==4)
k++;
set_dao(a,0);
}
if(k==0)
a=0;
if(k==1)
a=1;
if(k==2)
a=2;
if(k==3)
{
if((!dao_time[0])&&(!dao_time[1])&&(!dao_time[2]))
REG_B=0x06;
else
REG_B=0x36;
v=0;
}
}
for(i=80;i>0;i--)
{
read_timebit(0);
for(m=0;m<8;m++)
{
switch(k)
{
case 0 :if(m==0||m==1)
{
key=seat(Time[m],m,11);
}
else
key=seat(Time[m],m,dao[m]);break;
case 1:if(m==3||m==4)
{
key=seat(Time[m],m,11);
}
else
key=seat(Time[m],m,dao[m]);break;
case 2:if(m==6||m==7)
{
key=seat(Time[m],m,11);
}
else
key=seat(Time[m],m,dao[m]);break;
default:for(m=0;m<8;m++)
{
key=seat(Time[m],m,dao[m]);
}
c=0;
REG_A=0x20;
if((!dao_time[0])&&(!dao_time[1])&&(!dao_time[2]))
REG_B=0x06;
else
REG_B=0x36;
break;
}
if(key==4)
k++;
set_dao(a,0);
}
if(k==0)
a=0;
if(k==1)
a=1;
if(k==2)
a=2;
if(k==3)
{
if((!dao_time[0])&&(!dao_time[1])&&(!dao_time[2]))
REG_B=0x06;
else
REG_B=0x36;
v=0;
}
}
}
void main (void)
{
uchar i,add=2;
Time[2]= Time[5]=10;
dao[2]=dao[5]=10;
key_count=0;
TMOD=0X01;
TH0=0Xd4;
TL0=0XCC;
EA=1;
ET0=1;
EX0=1;
TR0=0;
scs=0;//DS12887片选--0有效
// DS12887_Set0();
REG_A=0x20;
REG_B=0x06;
while(1)
{
read_timebit(1);
for(i=0;i<8;i++)
{
key=seat(Time[i],i,dao[i]);
if(key==1)
{
// if(key_count==1)
//{
k=0;
c=1;
// }
key_wait();
}
if(key==4)
{
k=0;
v=1;
}
}
if(c==1)
change_0();
if(v==1)
get_dao();
}
}
void interrupt0(void) interrupt 0
{
uchar a;
if(dao_time[0]<=0)
{
dao_time[0]=60;
if(dao_time[1]<=0)
{
dao_time[1]=60;
dao_time[2]--;
if(dao_time[2]<0)
dao_time[2]=0;
}
dao_time[1]--;
}
dao_time[0]--;
if((!dao_time[0])&&(!dao_time[1])&&(!dao_time[2]))
{
dao_time[0]=0;
dao_time[1]=0;
dao_time[2]=0;
REG_B=0x0e;
REG_A=0x23;
}
a= REG_C;
}
void timer0(void) interrupt 1
{
uchar i;
TH0=0Xd4;
TL0=0XCC;
for(i=0;i<8;i++)
{
key=seat(11,i,11);
}
for(i=0;i<8;i++)
{
key=seat(Time[i],i,dao[i]);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -