📄 main.c
字号:
level++;
if(level>5)
{
level=0;
fullflag++;
FLenghtCount=0;
two_l=0;
three_l=0;
four_l=0;
five_l=0;
six_l=0;
}
if(SpeedDelay(mode & 0x03)==1) return ;
}
}
void SixColorProcess(uchar kind,uchar mode)
{
uchar tim,i,value;
for(i=0;i<7;i++)
{
value=KindGroudData[kind][i];
if(value!=0x00)
{
for(tim=0;tim<val_lenght ;tim++)
{
if(SendFirstToEnd(value,mode & 0x0f,0,1)==1) return;
}
}
}
}
void SixColorProcess_1(uchar kind,uchar mode)
{
uchar tim,i,value;
for(i=0;i<7;i++)
{
value=KindGroudData[kind][i];
if(value!=0x00)
{
FLenghtCount=0;
// SendEndToFirst(value,mode & 0x0f,ALLBLACK);
SendEndToFirst(value,mode & 0x0f,UNLOCKDATA,CLASSNUMBER,1);
for(tim=1;tim<val_lenght;tim++)
{
FLenghtCount++;
// if(SendEndToFirst(value,mode & 0x0f,ALLBLACK)==1) break;
if(SendEndToFirst(value,mode & 0x0f,UNLOCKDATA,CLASSNUMBER,1)==1) return;
}
}
}
}
void SixColorProcess_2(uchar kind,uchar mode,uchar class)
{
uchar tim,i,value;
for(i=0;i<7;i++)
{
value=KindGroudData[kind][i];
if(value!=0x00)
{
// for(tim=0;tim<val_lenght;tim++)
{
if(ProcessMiddleToEdge(value,mode,UNLOCKDATA,class)==1) return;
}
}
if(SpeedDelay(mode & 0x03)) return;
}
}
void SixColorProcess_3(uchar kind,uchar mode,uchar class)
{
uchar tim,i,value;
for(i=0;i<7;i++)
{
value=KindGroudData[kind][i];
if(value!=0x00)
{
// for(tim=0;tim<val_lenght;tim++)
{
if(ProcessEdgeToMiddle(value,mode,UNLOCKDATA,class)==1) return;
}
}
if(SpeedDelay(mode & 0x03)) return;
}
}
char SendKindData(char kind)
{
uchar mode,tim,i,diff,j=0;
uchar c1,c2,c3,data;
mode =KindDataStr[kind][1];
data =KindDataStr[kind][0];
switch(mode & 0x0c)
{
case DIR0:
//从前向后,正向。
switch(data)
{
case SIX_ID:
SixColorProcess(SIX_ID,mode);
break;
case ALL_ID:
// SevenColorProcess(ALL_ID,mode);
AllStarProcess(ALL_ID,mode,16,4);
break;
case STAR_ID:
AllStarProcess(STAR_ID,mode,10,21);
break;
case SEVEN_ID:
AllStarProcess(SEVEN_ID,mode,16,4);
// SevenColorProcess(SEVEN_ID,mode);
break;
case THREE_ID:
ThreeColorProcess(THREE_ID,mode);
break;
case THREE1_ID:
Three1ColorProcess(THREE1_ID,mode);
break;
case ALLCOLOR_ID:
AllColorProcess(ALLCOLOR_ID,mode);
break;
case UNITEC_ID:
UniteColorProcess(UNITEC_ID,mode);
break;
default:
break;
}
break;
case DIR1:
//从后向前,反向。
BLenghtCount=val_lenght;
switch(data)
{
case SIX_ID:
SixColorProcess_1(SIX_ID,mode);
break;
case ALL_ID:
SevenColorProcess_1(ALL_ID,mode,8,5);
break;
case STAR_ID:
SevenColorProcess_1(STAR_ID,mode,10,21);
break;
case SEVEN_ID:
SevenColorProcess_1(SEVEN_ID,mode,8,5);
break;
case THREE1_ID:
Three1ColorProcess_1(THREE1_ID,mode);
break;
case UNITEC_ID:
UniteColorProcess_1(UNITEC_ID,mode);
break;
default:
break;
}
break;
case DIR2:
//从中间向两边。
switch(data)
{
case SIX_ID:
SixColorProcess_2(SIX_ID,mode,0);
break;
case ALL_ID:
AllStarProcess_2(ALL_ID,mode,8,5);
break;
case STAR_ID:
AllStarProcess_2(STAR_ID,mode,10,21);
break;
case UNITEC_ID:
UniteColorProcess_2(UNITEC_ID,mode);
break;
default:
break;
}
break;
case DIR3:
//从两边向中间。
switch(data)
{
case SIX_ID:
SixColorProcess_3(SIX_ID,mode,0);
break;
case ALL_ID:
AllStarProcess_3(ALL_ID,mode,8,5);
break;
case STAR_ID:
AllStarProcess_3(STAR_ID,mode,10,21);
break;
case UNITEC_ID:
UniteColorProcess_3(UNITEC_ID,mode);
break;
default:
break;
}
break;
default:
break;
}
return 0;
}
uchar ProcessMiddleToEdge(char data,uchar mode,uchar BC,uchar cclass )
{
//从中间向两边。
uint i,one_l,one,j;
//芯片数为双数, 为单数
HalfLenght=val_lenght;
BLenghtCount=val_lenght;
one=0;
one_l=0;
for(i=0;i<BLenghtCount;i++)
{
if(one<BLenghtCount)
one++;
Send_Data(data,1);
for(j=1;j<one;j++)
{
Send_Data(UNLOCKDATA,1);
}
////////////////////////////////
if(one_l<BLenghtCount)
one_l++;
for(j=1;j<one_l;j++)
{
Send_Data(UNLOCKDATA,1);
}
Send_Data(data,1);
for(j=one_l;j<BLenghtCount;j++)
{
Send_Data(UNLOCKDATA,1);
}
SendSS(1);
// SendSI(cclass);
Display();
}
// if(SpeedDelay(mode & 0x03)==1) return 1;
return 0;
}
uchar ProcessEdgeToMiddle(char data,uchar mode,uchar BC,uchar cclass)
{
//从两边向中间。
uint i,one_l,one,j;
//芯片数为双数, 为单数
FLenghtCount=val_lenght;
BLenghtCount=val_lenght;
one=0;
one_l=0;
for(i=0;i<BLenghtCount;i++)
{
if(one_l<BLenghtCount)
one_l++;
for(j=1;j<one_l;j++)
{
Send_Data(UNLOCKDATA,1);
}
Send_Data(data,1);
for(;j<BLenghtCount;j++)
{
Send_Data(UNLOCKDATA,1);
}
FLenghtCount--;
Send_Data(UNLOCKDATA,FLenghtCount);
if(one<BLenghtCount)
one++;
Send_Data(data,1);
for(j=1;j<one;j++)
{
Send_Data(UNLOCKDATA,1);
}
SendSS(1);
Display();
// SendSI(cclass);
}
return 0;
}
#if 0
void EEPROM_write1(unsigned int uiAddress, unsigned char ucData)
{
/* 等待上一次写操作结束 */
while(EECR & (1<<EEWE)) ;
/* 设置地址和数据寄存器*/
EEAR = uiAddress;
EEDR = ucData;
/* 置位EEMWE */
EECR |= (1<<EEMWE);
/* 置位EEWE 以启动写操作*/
EECR |= (1<<EEWE);
}
unsigned char EEPROM_read1(unsigned int uiAddress)
{
/* 等待上一次写操作结束 */
while(EECR & (1<<EEWE));
/* 设置地址寄存器*/
EEAR = uiAddress;
/* 设置EERE 以启动读操作*/
EECR |= (1<<EERE);
/* 自数据寄存器返回数据 */
return EEDR;
}
void EepromTest(void)
{
unsigned char temp1,temp2; /*定义变量*/
unsigned char buffer[10]; /*定义数组*/
unsigned char buf[]="AVR与虚拟仪器"; /*定义字符串*/
EEPROMwrite(0x10,'a'); /*单字符写入到0x10,注意是单引号*/
temp1 = EEPROMread(0x10); /*读一个字符到temp1*/
EEPROM_WRITE(0x20,"abcdefg"); /*写字符串到0x20*/
EEPROM_READ(0x20,temp2); /*读字符到temp2,temp2=a*/
EEPROM_READ(0x20,buffer); /*读字符串到数组中 buffer[10]=abcdefg */
EEPROM_WRITE(0x30,buf); /*数组中的值写到EEPROM中:0X30开始为"AVR与虚拟仪器"*/
}
#endif
void EepromICnumberWr(void)
{
//use 4 bytes save IC number
//address: 0x02,0x03,0x04,0x05
unsigned char bit; /*定义变量*/
unsigned char buffer[5]; /*定义数组*/
long loop;
if(val_lenght > MAXVAL_LENGHT) val_lenght = MINVAL_LENGHT;
loop=val_lenght;
bit=loop/1000;
buffer[0]=bit;
loop=loop-bit *1000;
bit=loop/100;
buffer[1]=bit;
loop=loop-bit *100;
bit=loop/10;
buffer[2]=bit;
loop=loop-bit *10;
buffer[3]=loop;
buffer[4]=0x00;
EEPROM_WRITE(0x02,buffer); /*数组中的值写到EEPROM中:0X02开始为*/
}
void EepromICnumberRd(void)
{
//use 4 bytes save IC number
//address: 0x02,0x03,0x04,0x05
unsigned char buffer[5]; /*定义数组*/
EEPROM_READ(0x02,buffer); /*读字符串到数组中 buffer[10]=abcdefg */
val_lenght=buffer[0] * 1000+buffer[1] * 100+buffer[2] * 10+buffer[3];
if(val_lenght > MAXVAL_LENGHT) val_lenght = MINVAL_LENGHT;
}
void FactorySetup(void)
{
uchar i;
ModeStatus=MODE_NOMALE;
CurrentKey=KEY_FUNCTION;
BackKey=KEY_FUNCTION;
CurrentKind=KIND0;
K1Count=0;
val_kind=0;
Oneday=0xff;
// val_lenght=MINVAL_LENGHT;
for(i=0;i<MAXVAL_KIND;i++)
{
KindData[i]=FALSE;//TRUE;
}
DayData[0]=200;
DayData[1]=0;
}
void EepromViewModeWr(void)
{
//use 112 bytes save View mode
//address: 0x20,0x21,0x22, ... , 0x20+112
EEPROM_WRITE(0x20,KindData); /*数组中的值写到EEPROM中:0X10开始为*/
}
void EepromViewModeRd(void)
{
//use 112 bytes save View mode
//address: 0x20,0x21,0x22, ... , 0x20+112
// unsigned char buffer[5]; /*定义数组*/
EEPROM_READ(0x20,KindData); /*读字符串到数组中 buffer[10]=abcdefg */
}
void EepromPasswordRd(void)
{
//use 5 bytes save password
//address: 0x08,0x09,0x0a,0x0b,0x0c;
uchar i;
EEPROM_READ(0x08,PasswordData); /*读字符串到数组中 buffer[10]=abcdefg */
for(i=0;i<(PASSWORDLENGHT-1);i++)
{
if(PasswordData[i] !=PASS_DISABLE)
{
Password_Enable=TRUE;
return;
}
}
Password_Enable=FALSE;
}
void EepromPasswordWr(void)
{
//use 5 bytes save password
//address: 0x08,0x09,0x0a,0x0b,0x0c;
EEPROM_WRITE(0x08,PasswordData); /*数组中的值写到EEPROM中:0X10开始为*/
}
void EepromDayDataRd(void)
{
//use 2 bytes save date value
//address: 0x0d,0e;
EEPROM_READ(0x0d,DayData); /*读字符串到数组中 buffer[10]=abcdefg */
}
void EepromDayDataWr(void)
{
//use 2 bytes save date value
//address: 0x0d,0e;
EEPROM_WRITE(0x0d,DayData); /*数组中的值写到EEPROM中:0X10开始为*/
}
void EepromDateValueRd(void)
{
//use 6 bytes save date value
//address: 0x10,0x11,0x12,0x13,0x14,0x15;
EEPROM_READ(0x10,DateValue); /*读字符串到数组中 buffer[10]=abcdefg */
}
void EepromDateValueWr(void)
{
//use 6 bytes save date value
//address: 0x10,0x11,0x12,0x13,0x14,0x15;
DateValue[0]=(YEAR_SETUP & 0x0f)+((YEAR_SETUP & 0xf0) >>4) *10;
DateValue[1]=(MONTH_SETUP & 0x0f)+((MONTH_SETUP & 0x10) >>4) *10;
DateValue[2]=(DAY_SETUP & 0x0f)+((DAY_SETUP & 0x30) >>4) *10;
DateValue[3]=0x0;
EEPROM_WRITE(0x10,DateValue); /*数组中的值写到EEPROM中:0X10开始为*/
}
//////////////////////////////////////////////
//程序开始
void DS1302_Write(uchar reg,uchar data)
{
uchar i;
Set_DS1302_DDRSDA();
Clr_DS1302_RST();
asm("nop");
asm("nop");
Clr_DS1302_SCLK();
asm("nop");
asm("nop");
Set_DS1302_RST();
asm("nop");
asm("nop");
for(i=8;i>0;i--)
{
if(reg&0x01) Set_DS1302_SDA();
else Clr_DS1302_SDA();
asm("nop");
asm("nop");
Set_DS1302_SCLK();
asm("nop");
asm("nop");
Clr_DS1302_SCLK();
asm("nop");
asm("nop");
reg>>=1;
}
for(i=8;i>0;i--)
{
if(data&0x01) Set_DS1302_SDA();
else Clr_DS1302_SDA();
asm("nop");
asm("nop");
Set_DS1302_SCLK();
asm("nop");
asm("nop");
Clr_DS1302_SCLK();
asm("nop");
asm("nop");
data>>=1;
}
Clr_DS1302_RST();
asm("nop");
asm("nop");
Clr_DS1302_DDRSDA();
}
uchar DS1302_Read(uchar reg)
{
uchar data=0,i;
reg+=1;//读标志
Set_DS1302_DDRSDA();
Clr_DS1302_RST();
asm("nop");
asm("nop");
Clr_DS1302_SCLK();
asm("nop");
asm("nop");
Set_DS1302_RST();
asm("nop");
asm("nop");
for(i=8;i>0;i--)
{
if(reg&0x01) Set_DS1302_SDA();
else Clr_DS1302_SDA();
asm("nop");
asm("nop");
Set_DS1302_SCLK();
asm("nop");
asm("nop");
Clr_DS1302_SCLK();
asm("nop");
asm("nop");
reg>>=1;
}
Clr_DS1302_DDRSDA();
for(i=8;i>0;i--)
{
data>>=1;
if((PIND&(1<<DS1302_SDA))==(1<<DS1302_SDA)) data|=0x80;
Set_DS1302_SCLK();
asm("nop");
asm("nop");
Clr_DS1302_SCLK();
asm("nop");
asm("nop");
}
Clr_DS1302_RST();
asm("nop");
asm("nop");
return(data);
}
uchar Check_DS1302(void)
{
DS1302_Write(DS1302_CONTROL_Reg,0x80);
if(DS1302_Read(DS1302_CONTROL_Reg)==0x80) return 1;
return 0;
}
void DS1302_Init(void)
{
DS1302_Write(DS1302_CONTROL_Reg,0x00);//关闭
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -