📄 ledv1.c
字号:
#include "STC12C2052AD.H"
extern void Read_RAM(unsigned char *s,unsigned char startbyte,unsigned char length);
extern void Write_RAM(unsigned char *s,unsigned char startbyte,unsigned char length);
extern void Read_Time(unsigned char ucCurtime[]);
extern void Set_Time(unsigned char *pSecDa);
extern void Set_Charge(void);
sbit HC138A = P3^2;
sbit HC138B = P3^3;
sbit HC138C = P3^4;
sbit HC138EN = P3^5;
sbit HC595SER=P1^6;
sbit HC595RCLK=P1^5;
sbit HC595SRCLK=P1^4;
sbit BUZ=P1^2;
sbit KEY1=P1^7;
sbit KEY2=P3^7;
//sbit KEY1 =
//sbit KEY2 =
//DS1302中RAM空间定义
#define CALLTIME1 0
#define CALLTIME2 2
#define CALLTIME3 4
unsigned char MainState;
#define DISPLAYTIME 0
#define DISPLAYDATE 1
#define DISPLAYSECOND 2
#define DISPLAYCALLTIME1 3
#define DISPLAYCALLTIME2 4
#define DISPLAYCALLTIME3 5
#define DISPLAYWEEK 6
#define DISPLAYYEAR 7
#define BDSTATE 8
#define SETTIME 0x80
#define SETDATE 0x81
#define SETSECOND 0x82
#define SETCALLTIME1 0x83
#define SETCALLTIME2 0x84
#define SETCALLTIME3 0x85
#define SETWEEK 0x86
#define SETYEAR 0x87
unsigned char MSecond;
unsigned char Second,Minute,Hour,Day,Month,Week,Year;
unsigned char c1,c2,c3,c4,c5;
unsigned char Time[8];
unsigned char Key1On;
unsigned char Key2On;
unsigned char KeyFlag;
#define NOKEY 0
#define KEY1ON 1
#define KEY2ON 2
//#define KEY1ON=1
unsigned char Cursor;
bit FlashFlag;
unsigned char BUZFlag;
unsigned char BUZTime;
unsigned char SetData[2];
unsigned char RAMBuffer[10];
unsigned char code ZF[]=
{
0x00,0x06,0x09,0x09,0x09,0x09,0x09,0x06, //0
0x00,0x02,0x06,0x02,0x02,0x02,0x02,0x07, //1
0x00,0x06,0x09,0x01,0x02,0x04,0x08,0x0f, //2
0x00,0x06,0x09,0x01,0x06,0x01,0x09,0x06, //3
0x00,0x02,0x06,0x0a,0x0a,0x0f,0x02,0x02, //4
0x00,0x0f,0x08,0x0e,0x09,0x01,0x09,0x06, //5
0x00,0x06,0x09,0x08,0x0e,0x09,0x09,0x06, //6
0x00,0x0f,0x01,0x01,0x02,0x04,0x04,0x04, //7
0x00,0x06,0x09,0x09,0x06,0x09,0x09,0x06, //8
0x00,0x06,0x09,0x09,0x07,0x01,0x09,0x06, //9
0x00,0x00,0x06,0x06,0x00,0x06,0x06,0x00, //: 10
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //空白 11
0x00,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, //- 12
0x08,0x00,0x06,0x06,0x00,0x06,0x06,0x00, //: 13
0x0c,0x00,0x06,0x06,0x00,0x06,0x06,0x00, //: 14
0x0e,0x00,0x06,0x06,0x00,0x06,0x06,0x00, //: 15
};
void Delay(unsigned int time)
{
unsigned int i;
for (i=0;i<time;i++);
}
void write595(unsigned char dd)
{
unsigned char i;
for (i=0;i<8;i++)
{
HC595SER=dd&0x01;
dd=dd/2;
HC595SRCLK=1;
HC595SRCLK=0;
}
}
void main (void)
{
unsigned char i;
unsigned char j;
unsigned char z1,z2,z3;
unsigned int x;
// unsigned int x1;
EA=1; //允许CPU中断
ET0=1; //定时器0中断打开
TMOD=0x01; //设定时器0为方式1
TH0=0xf8;
TL0=0xcd; //设定时值为20 000 μs(20 ms)
TR0=1; //开始定时
P1M0=0;
P1M1=0;
Set_Charge();
KeyFlag=0;
MainState=0;
BUZFlag=0;
Read_RAM(RAMBuffer,0,6);
while(1)
{
for (i=0;i<8;i++)
{
HC138EN=1;
HC595SER=0;
HC595RCLK=0;
HC595SRCLK=0;
x=0;
x=ZF[8*c5+i];
x=x<<5;
x=x+ZF[8*c4+i];
z1=0xff-(unsigned char)(x>>1);
x=x<<5;
x=x+ZF[8*c3+i];
x=x<<5;
x=x+ZF[8*c2+i];
z2=0xff-(unsigned char)(x>>3);
x=x<<5;
x=x+ZF[8*c1+i];
z3=(unsigned char)x;
z3=0xff-z3;
write595(z1);
write595(z2);
write595(z3);
HC595RCLK=1;
HC595RCLK=0;
HC595SER=0;
HC595SRCLK=0;
HC138A=i&0x01;
HC138B=i&0x02;
HC138C=i&0x04;
HC138EN=0;
Read_Time(Time);
if ((Time[1]!=0)&&(Time[2]!=0))
{
for(j=0;j<3;j++)
{
if (Time[2]==RAMBuffer[j*2+1])
{
if (Time[1]==RAMBuffer[j*2])
{
if (Time[0]==0)
{
BUZFlag=j+1;
BUZTime=0;
}
}
}
}
}
if (MainState>=0x80)
{
if((MainState==SETTIME)||(MainState==SETDATE)||(MainState==SETCALLTIME1)||(MainState==SETCALLTIME2)||(MainState==SETCALLTIME3))
{
if (MainState==SETDATE)
{
if ((SetData[0]&0x0f)>9) SetData[0]=SetData[0]+6;
if (SetData[0]>0x12) SetData[0]=1;
if ((SetData[1]&0x0f)>9) SetData[1]=SetData[1]+6;
if (SetData[1]>0x31) SetData[1]=1;
c3=12;
}
else
{
if ((SetData[0]&0x0f)>9) SetData[0]=SetData[0]+6;
if (SetData[0]>0x23) SetData[0]=0;
if ((SetData[1]&0x0f)>9) SetData[1]=SetData[1]+6;
if (SetData[1]>0x59) SetData[1]=0;
if (MainState==SETTIME) c3=10;
else c3=13+(MainState-SETCALLTIME1);
}
if (Cursor>2)
{
if (MainState==SETTIME)
{
// Hour=SetData[0];
// Minute=SetData[1];
Read_Time(Time);
Time[1]=SetData[1];//Minute;
Time[2]=SetData[0];//Hour;
// if (Time[0]>0x80) Time[0]=0;
Set_Time(Time);
}
else if (MainState==SETDATE)
{
// Month=SetData[0];
// Day=SetData[1];
Read_Time(Time);
Time[3]=SetData[1];//Day;
Time[4]=SetData[0];//Month;
// if (Time[0]>0x80) Time[0]=0;
Set_Time(Time);
}
else
{
RAMBuffer[(MainState-SETCALLTIME1)*2]=SetData[1];
RAMBuffer[(MainState-SETCALLTIME1)*2+1]=SetData[0];
Write_RAM(RAMBuffer,0,6);
}
Cursor=0;
MainState=MainState-0x80;
}
else if (Cursor==1)
{
c4=11;
c5=11;
if (FlashFlag==1)
{
c4=SetData[0]%16;
c5=SetData[0]/16;
// MSecond=0;
}
// else
// {
// c4=11;
// c5=11;
// MSecond=0;
// }
c1=SetData[1]%16;
c2=SetData[1]/16;
}
else if (Cursor==2)
{
c4=SetData[0]%16;
c5=SetData[0]/16;
if (FlashFlag==1)
{
c1=SetData[1]%16;
c2=SetData[1]/16;
// MSecond=0;
}
else
{
c1=11;
c2=11;
// MSecond=0;
}
}
}
else if ((MainState==SETSECOND)||(MainState==SETWEEK)||(MainState==SETYEAR))
{
if (MainState==SETSECOND)
{
if ((SetData[0]&0x0f)>9) SetData[0]=SetData[0]+6;
if (SetData[0]>0x59) SetData[0]=0;
}
else if (MainState==SETWEEK)
{
if (SetData[0]>7) SetData[0]=1;
}
else
{
if ((SetData[0]&0x0f)>9) SetData[0]=SetData[0]+6;
if (SetData[0]>0x99) SetData[0]=0;
}
if (Cursor>1)
{
Read_Time(Time);
if(MainState==SETSECOND)
{
// Second=SetData[0];
Time[0]=SetData[0];
}
else if (MainState==SETWEEK)
{
Time[5]=SetData[0];
}
else
{
Time[6]=SetData[0];
}
Set_Time(Time);
SetData[1]=0;
Cursor=0;
MainState=MainState-0x80;
}
else if (Cursor==1)
{
c5=11;
c3=11;
c4=11;
if (MainState==SETYEAR)
{
c4=2;
c3=0;
}
// c1=11;
// c2=11;
if (FlashFlag==1)
{
c1=SetData[0]%16;
c2=SetData[0]/16;
if (MainState==SETWEEK) c2=11;
}
else
{
c1=11;
c2=11;
// MSecond=0;
}
}
}
Delay(300);
}
else
{
if (MainState==DISPLAYTIME)
{
Read_Time(Time);
if (Second!=Time[0])
{
Second=Time[0];
c3=10;
MSecond=0;
FlashFlag=0;
}
if (FlashFlag==1) c3=11;
Minute=Time[1];
Hour=Time[2];
// Day=Time[3];
// Month=Time[4];
// Week=Time[5];
// Year=Time[6];
c4=Hour%16;
c5=Hour/16;
c1=Minute%16;
c2=Minute/16;
}
else if ((MainState==DISPLAYCALLTIME1)||(MainState==DISPLAYCALLTIME2)||(MainState==DISPLAYCALLTIME3))
{
// Read_RAM(RAMBuffer,0,6);
Minute=RAMBuffer[(MainState-DISPLAYCALLTIME1)*2];
Hour=RAMBuffer[(MainState-DISPLAYCALLTIME1)*2+1];
c3=13+MainState-DISPLAYCALLTIME1;
c4=Hour%16;
c5=Hour/16;
c1=Minute%16;
c2=Minute/16;
}
else if (MainState==DISPLAYWEEK)
{
Read_Time(Time);
Week=Time[5];
c3=11;
c4=11;
c5=11;
c1=Week%16;
c2=11;
}
else if (MainState==DISPLAYYEAR)
{
Read_Time(Time);
Year=Time[6];
c3=0;
c4=2;
c5=11;
c1=Year%16;
c2=Year/16;
}
else if (MainState==DISPLAYDATE)
{
Read_Time(Time);
Day=Time[3];
Month=Time[4];
c4=Month%16;
c5=Month/16;
c1=Day%16;
c2=Day/16;
c3=12;
}
else if (MainState==DISPLAYSECOND)
{
Read_Time(Time);
if (Second!=Time[0])
{
Second=Time[0];
if (Second==0) SetData[1]++;
}
c4=SetData[1]%10;
c5=SetData[1]/10;
c1=Second%16;
c2=Second/16;
c3=10;
}
}
}
}
}
void Time0Interrupt(void) interrupt 1 using 1
{
TH0=0xf8; //20 ms断点 (1)
TL0=0xcd; //设定时值
MSecond=MSecond+1;
if (KEY1==0)
{
Key1On++;
if (Key1On==3) KeyFlag=KEY1ON;
if (Key1On>250) Key1On=251;
}
else Key1On=0;
if (KEY2==0)
{
Key2On++;
if (Key2On==3) KeyFlag=KEY2ON;
if (Key2On>250) Key2On=251;
}
else Key2On=0;
if (KeyFlag==KEY1ON)
{
if (MainState<0x80)
{
MainState++;
SetData[1]=0;
if (MainState>=BDSTATE) MainState=0;
}
else
{
SetData[Cursor-1]++;
}
}
else if (KeyFlag==KEY2ON)
{
if(MainState<0x80)
{
MainState=MainState+0x80;
if ((MainState==SETTIME)||(MainState==SETCALLTIME1)||(MainState==SETCALLTIME2)||(MainState==SETCALLTIME3))
{
SetData[0]=Hour;
SetData[1]=Minute;
}
else if (MainState==SETDATE)
{
SetData[0]=Month;
SetData[1]=Day;
}
else if (MainState==SETSECOND)
{
SetData[0]=Second;
}
else if (MainState==SETWEEK)
{
SetData[0]=Week;
}
else
{
SetData[0]=Year;
}
Cursor=1;
}
else
{
Cursor++;
}
}
KeyFlag=NOKEY;
if (MSecond==150)
{
FlashFlag=~FlashFlag;
MSecond=0;
BUZTime++;
}
if (BUZFlag>0)
{
if (BUZTime<10)
{
if (MSecond==0) BUZ=0;
else if (MSecond==20) BUZ=1;
if (BUZFlag>1)
{
if (MSecond==50) BUZ=0;
else if (MSecond==70) BUZ=1;
if (BUZFlag>2)
{
if (MSecond==100) BUZ=0;
else if (MSecond==120) BUZ=1;
}
}
}
else
{
BUZFlag=0;
}
}
// if ((BUZFlag>(MSecond>>5))&&((MSecond%0x1f)==0)) BUZ=0;
// if ((BUZFlag>(MSecond>>5))&&((MSecond%0x1f)==0)) BUZ=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -