📄 main.c
字号:
//ICC-AVR application builder : 2007-5-12 23:12:06
// Target : M16
// Crystal: 1.0000Mhz
#include <iom16v.h>
#include <macros.h>
#include <eeprom.h>
//#include <math.h>
#define uint unsigned int
#define uchar unsigned char
#define TRUE 1
#define FALSE 0
#define VERSION_CONTROL 1
#define YEAR_SETUP 0x07
#define MONTH_SETUP 0x06
#define DAY_SETUP 0x10
#define INIT_YEAR 0x07
#define INIT_MONTH 0x06
#define INIT_DATE 0x10
#define INIT_DAY 0x07
#define INIT_HOUR 0x19
#define INIT_MINUTE 0x07
#define INIT_SECOND 0x00
#if 1
#define KEY_FUNCTION 0x43 //pc7 ,K1
#define KEY_UP 0x83 //pc6 ,K2
#define KEY_DOWN 0xc2 //pc0 ,K3
#define KEY_K4 0xc1 //pc1 ,K4
#define KEY_K1K4RST 0x41 //k1k4
#define KEY_K3K4RST 0xc0 //k3k4
#else
#define KEY_UP 0xc2 //pc0 ,K2
#define KEY_DOWN 0xc1 //pc1 ,K3
#define KEY_FUNCTION 0x83 //pc6 ,K1
#define KEY_K4 0x43 //pc7 ,K4
#define KEY_K1K4RST 0x03 //k1k4
#define KEY_K3K4RST 0x41 //k3k4
#endif
#define KEY_RESET 0xd
#define MAXVAL_LENGHT 9999
//#define MINVAL_LENGHT 8
#define MINVAL_LENGHT 4
#define MAXVAL_KIND 112
#define MINVAL_KIND 0
#define MODE_NOMALE 1
#define MODE_LENGHT 2
#define MODE_KIND 3
#define MODE_PASSWORD 4
//#define CLASSNUMBER 32
#define CLASSNUMBER 4
//从前向后,正向。
#define DIR0 0x00
//从后向前,反向。
#define DIR1 0x04
//从中间向两边。
#define DIR2 0x08
//从两边向中间。
#define DIR3 0x0c
//整体
//#define DIR4 0x40
//全彩
#define KIND0 0x00
//慧星拖尾
#define KIND1 0x10
//红-青-红
#define KIND2 0x20
//六色刷色
#define KIND3 0x30
//混合色
#define KIND4 0x40
//三路交叠
#define KIND5 0x50
//多彩
#define KIND6 0x60
#define KIND7 0x70
#define ALLBLACK 0x95 //10010101
#define UNLOCKDATA 0x15 //00010101
#define SPEED0 0x00
#define SPEED1 0x01
#define SPEED2 0x02
#define SPEED3 0x03
#define PASSWORDLENGHT 6
#define PASS_DISABLE 0xff
#define PASSWORD_SETUP 0x11
#define DATE_SETUP 0x22
#define INVALE_SETUP 0x33
//#define PASSWORD_ENTER 0x44
#define MAXDATE 250
#define MAXNUMBER 99
//typedef struct {
char ModeStatus;
char CurrentKey;
char BackKey;
char K1Count;
uchar K4Count;
char CurrentKind;
char val_kind;
uchar Password_alarm;
uchar Password_Enable;
uchar PassDate_flag; //0x11 : password setup ; 0x22 : date setup
uint val_lenght;
uint BLenghtCount;
uint FLenghtCount;
uint HalfLenght;
uint left;
uint right;
uint PwModify_flag;
//}WORKLED;
//WORKLED WorkLed;
unsigned char KindData[MAXVAL_KIND];
uchar PasswordData[PASSWORDLENGHT];
uchar DateValue[4];
uchar DayData[2];
uchar Oneday;
//uchar tc1,tc2;
uchar color1,color2,SI_Count;
/*
KindDataStr[MAXVAL_KIND][2]:
mode data 8bit; dir data 4bit + speed data 4bit
1 byte 2byte
speed data:
0 -->speed 1
1 -->speed 2
2 -->speed 3
3 -->speed 4
dir data:
0 --> 正向
1 --> 反向
2 -->中间向两边
3 -->两边向中间
*/
#define RBASE 0x94 //D2D1
#define GBASE 0x85 //D6D5
#define BBASE 0x91 //D4D3
#define YBASE 0xbf&RBASE&GBASE
#define WBASE 0xbf&RBASE&GBASE&BBASE
#define RBBASE 0xbf&RBASE&BBASE
#define GBBASE 0xbf&GBASE&BBASE
//亮00
#define SDATA0 0x00
//灭01
#define SDATA1 0x01
//渐暗10
#define SDATA2 0x02
//渐明11
#define SDATA3 0x03
#define BDATA 0x80
#define GBIT 4
#define BBIT 2
#define RBIT 0
//全彩
#define ALLCOLOR BDATA |(SDATA3<<GBIT)|(SDATA1<<BBIT)|(SDATA0<<RBIT) //0xb1
#define SEVENCOLOR0 BDATA |(SDATA3<<GBIT)|(SDATA1<<BBIT)|(SDATA2<<RBIT)
#define SEVENCOLOR1 BDATA |(SDATA2<<GBIT)|(SDATA1<<BBIT)|(SDATA3<<RBIT)
#define SEVENCOLOR2 BDATA |(SDATA3<<GBIT)|(SDATA2<<BBIT)|(SDATA1<<RBIT)
#define SEVENCOLOR3 BDATA |(SDATA2<<GBIT)|(SDATA3<<BBIT)|(SDATA1<<RBIT)
#define SEVENCOLOR4 BDATA |(SDATA1<<GBIT)|(SDATA3<<BBIT)|(SDATA2<<RBIT)
#define SEVENCOLOR5 BDATA |(SDATA1<<GBIT)|(SDATA2<<BBIT)|(SDATA3<<RBIT)
#define THREECOLORR BDATA |(SDATA1<<GBIT)|(SDATA1<<BBIT)|(SDATA2<<RBIT)
#define THREECOLORG BDATA |(SDATA2<<GBIT)|(SDATA1<<BBIT)|(SDATA1<<RBIT)
#define THREECOLORB BDATA |(SDATA1<<GBIT)|(SDATA2<<BBIT)|(SDATA1<<RBIT)
#define THREECOLORR1 BDATA |(SDATA3<<GBIT)|(SDATA1<<BBIT)|(SDATA2<<RBIT)
#define THREECOLORG1 BDATA |(SDATA1<<GBIT)|(SDATA3<<BBIT)|(SDATA2<<RBIT)
#define THREECOLORB1 BDATA |(SDATA2<<GBIT)|(SDATA3<<BBIT)|(SDATA1<<RBIT)
#define ALLCOLOR0 BDATA |(SDATA3<<GBIT)|(SDATA1<<BBIT)|(SDATA0<<RBIT)
#define ALLCOLOR4 BDATA |(SDATA1<<GBIT)|(SDATA0<<BBIT)|(SDATA3<<RBIT)
#define ALLCOLOR3 BDATA |(SDATA0<<GBIT)|(SDATA3<<BBIT)|(SDATA1<<RBIT)
#define ALLCOLOR2 BDATA |(SDATA3<<GBIT)|(SDATA0<<BBIT)|(SDATA1<<RBIT)
#define ALLCOLOR1 BDATA |(SDATA0<<GBIT)|(SDATA1<<BBIT)|(SDATA3<<RBIT)
#define ALLCOLOR5 BDATA |(SDATA1<<GBIT)|(SDATA3<<BBIT)|(SDATA0<<RBIT)
#if 1
#define ALLSTAR0 BDATA |(SDATA1<<GBIT)|(SDATA1<<BBIT)|(SDATA2<<RBIT) //red
#define ALLSTAR1 BDATA |(SDATA2<<GBIT)|(SDATA1<<BBIT)|(SDATA1<<RBIT) //green
#define ALLSTAR2 BDATA |(SDATA1<<GBIT)|(SDATA2<<BBIT)|(SDATA1<<RBIT) //blue
#define ALLSTAR3 BDATA |(SDATA1<<GBIT)|(SDATA2<<BBIT)|(SDATA2<<RBIT) //0xb1
#define ALLSTAR4 BDATA |(SDATA2<<GBIT)|(SDATA1<<BBIT)|(SDATA2<<RBIT) //0xb1
#define ALLSTAR5 BDATA |(SDATA2<<GBIT)|(SDATA2<<BBIT)|(SDATA1<<RBIT) //0xb1
#define ALLSTAR6 BDATA |(SDATA2<<GBIT)|(SDATA2<<BBIT)|(SDATA2<<RBIT) //0xb1
#else
#define ALLSTAR0 BDATA |(SDATA1<<GBIT)|(SDATA1<<BBIT)|(SDATA0<<RBIT) //red
#define ALLSTAR1 BDATA |(SDATA0<<GBIT)|(SDATA1<<BBIT)|(SDATA1<<RBIT) //green
#define ALLSTAR2 BDATA |(SDATA1<<GBIT)|(SDATA0<<BBIT)|(SDATA1<<RBIT) //blue
#define ALLSTAR3 BDATA |(SDATA1<<GBIT)|(SDATA0<<BBIT)|(SDATA0<<RBIT) //0xb1
#define ALLSTAR4 BDATA |(SDATA0<<GBIT)|(SDATA1<<BBIT)|(SDATA0<<RBIT) //0xb1
#define ALLSTAR5 BDATA |(SDATA0<<GBIT)|(SDATA0<<BBIT)|(SDATA1<<RBIT) //0xb1
#endif
//#define UNITEC0 BDATA |(SDATA1<<GBIT)|(SDATA3<<BBIT)|(SDATA2<<RBIT) //red
//#define UNITEC1 BDATA |(SDATA3<<GBIT)|(SDATA1<<BBIT)|(SDATA2<<RBIT) //green
//#define UNITEC2 BDATA |(SDATA2<<GBIT)|(SDATA1<<BBIT)|(SDATA3<<RBIT) //blue
#define UNITEC0 BDATA |(SDATA1<<GBIT)|(SDATA1<<BBIT)|(SDATA0<<RBIT) //red
#define UNITEC1 BDATA |(SDATA0<<GBIT)|(SDATA1<<BBIT)|(SDATA1<<RBIT) //green
#define UNITEC2 BDATA |(SDATA1<<GBIT)|(SDATA0<<BBIT)|(SDATA1<<RBIT) //blue
#define UNITEC3 BDATA |(SDATA2<<GBIT)|(SDATA3<<BBIT)|(SDATA1<<RBIT) //0xb1
#define UNITEC4 BDATA |(SDATA1<<GBIT)|(SDATA2<<BBIT)|(SDATA3<<RBIT) //0xb1
#define UNITEC5 BDATA |(SDATA3<<GBIT)|(SDATA2<<BBIT)|(SDATA1<<RBIT) //0xb1
#define ALL_ID 0
#define STAR_ID 1
#define SIX_ID 2
#define SEVEN_ID 3
//整体三路交叠渐变
#define THREE_ID 4
//三路交叠飘动
#define THREE1_ID 5
//整体全彩渐变
#define ALLCOLOR_ID 6
//混合色交叠渐变
#define UNITEC_ID 7
const unsigned char KindGroudData[8][7]=
{
//全彩
{ALLCOLOR0,ALLCOLOR1,ALLCOLOR2,ALLCOLOR3,ALLCOLOR4,ALLCOLOR5,0x00},
//慧星拖尾
{ALLSTAR0,ALLSTAR1,ALLSTAR2,ALLSTAR3,ALLSTAR4,ALLSTAR5,0x00},
// {ALLSTAR0,ALLSTAR1,ALLSTAR2,0x00,0x00,0x00,0x00},
//六色刷色: 红 绿 兰 黄 紫 青
{RBASE,GBASE,BBASE,YBASE,RBBASE,GBBASE,0x00},
//多彩: 红 绿 兰 黄 紫 青 白
{SEVENCOLOR0,SEVENCOLOR1,SEVENCOLOR2,SEVENCOLOR3,SEVENCOLOR4,SEVENCOLOR5,0x00},
//整体三路交叠渐变: 红 绿 兰
{THREECOLORR,THREECOLORG,THREECOLORB,0x00,0x00,0x00,0x00},
//三路交叠飘动: 红 绿 兰
{THREECOLORR1,THREECOLORB1,THREECOLORG1,0x00,0x00,0x00,0x00},
//整体全彩渐变
{ALLCOLOR0,ALLCOLOR1,ALLCOLOR2,ALLCOLOR3,ALLCOLOR4,ALLCOLOR5,0x00},
//混合色交叠渐变
{UNITEC0,0x00,0x00,0x00,0x00,0x00,0x00},
// {UNITEC0,UNITEC1,UNITEC2,UNITEC3,UNITEC4,UNITEC5,0x00},
};
const unsigned char KindDataValue[60][2]=
{
//0 -->52
{GBBASE ,RBASE},{GBBASE ,RBASE},{GBBASE ,RBASE},{GBBASE ,RBASE},
//-->56
{GBBASE ,RBASE},{GBBASE ,GBASE},{GBBASE ,GBASE},{GBBASE ,GBASE},
//8 -->60
{GBBASE,GBASE},{GBBASE,GBASE},{WBASE,YBASE},{WBASE,YBASE},
//12-->64
{WBASE,YBASE},{WBASE,YBASE},{WBASE,YBASE},{RBBASE,BBASE},
//16-->68
{RBBASE,BBASE},{RBBASE,BBASE},{RBBASE,BBASE},{RBBASE,BBASE},
//20-->72
{YBASE,GBASE},{YBASE,GBASE},{YBASE,GBASE},{YBASE,GBASE},
//24-->76
{YBASE,GBASE},{WBASE,GBBASE},{WBASE,GBBASE},{WBASE,GBBASE},
//28-->80 v
{WBASE,GBBASE},{WBASE,GBBASE},{GBBASE,BBASE},{GBBASE,BBASE},
//32-->84
{GBBASE,BBASE},{GBBASE,BBASE},{GBBASE,BBASE},{YBASE,RBASE},
//36-->88
{YBASE,RBASE},{YBASE,RBASE},{YBASE,RBASE},{YBASE,RBASE},
//40-->92
{WBASE,RBBASE},{WBASE,RBBASE},{WBASE,RBBASE},{WBASE,RBBASE},
//44-->96
{WBASE,RBBASE},{WBASE,GBASE},{WBASE,GBASE},{WBASE,GBASE},
//48-->100
{WBASE,GBASE},{WBASE,GBASE},{WBASE,RBASE},{WBASE,RBASE},
//52-->104
{WBASE,RBASE},{WBASE,RBASE},{WBASE,RBASE},{WBASE,BBASE},
//56-->108
{WBASE,BBASE},{WBASE,BBASE},{WBASE,BBASE},{WBASE,BBASE}
};
const unsigned char KindDataStr[MAXVAL_KIND][2]=
{
//0 v
{ALL_ID,KIND0|DIR0|SPEED0},{ALL_ID,KIND0|DIR0|SPEED1},{ALL_ID,KIND0|DIR0|SPEED2},{ALL_ID,KIND0|DIR0|SPEED3},
// 4 v
{ALL_ID,KIND0|DIR1|SPEED0},{ALL_ID,KIND0|DIR1|SPEED1},{ALL_ID,KIND0|DIR2|SPEED0},{ALL_ID,KIND0|DIR2|SPEED1},
//8 v
{ALL_ID,KIND0|DIR3|SPEED0},{ALL_ID,KIND0|DIR3|SPEED1},{STAR_ID,KIND1|DIR0|SPEED0},{STAR_ID,KIND1|DIR0|SPEED1},
//12
{STAR_ID,KIND1|DIR0|SPEED2},{STAR_ID,KIND1|DIR1|SPEED0},{STAR_ID,KIND1|DIR1|SPEED1},{STAR_ID,KIND1|DIR2|SPEED0},
//16
{STAR_ID,KIND1|DIR2|SPEED1},{STAR_ID,KIND1|DIR3|SPEED0},{STAR_ID,KIND1|DIR3|SPEED1},{ALLCOLOR_ID,KIND0|DIR0|SPEED0},
//20v
{SIX_ID,KIND3|DIR0|SPEED0},{SIX_ID,KIND3|DIR0|SPEED1},{SIX_ID,KIND3|DIR0|SPEED2},{SIX_ID,KIND3|DIR0|SPEED3},
//24v
{SIX_ID,KIND3|DIR1|SPEED0},{SIX_ID,KIND3|DIR1|SPEED1},{SIX_ID,KIND3|DIR2|SPEED0},{SIX_ID,KIND3|DIR2|SPEED1},
//28v
{SIX_ID,KIND3|DIR3|SPEED0},{SIX_ID,KIND3|DIR3|SPEED1},{THREE_ID,KIND0|DIR0|SPEED0},{UNITEC_ID,KIND0|DIR0|SPEED0},
//32
{UNITEC_ID,KIND0|DIR0|SPEED1},{UNITEC_ID,KIND0|DIR0|SPEED2},{UNITEC_ID,KIND0|DIR0|SPEED3},{UNITEC_ID,KIND0|DIR1|SPEED0},
//36
{UNITEC_ID,KIND0|DIR1|SPEED1},{UNITEC_ID,KIND0|DIR2|SPEED0},{UNITEC_ID,KIND0|DIR2|SPEED1},{UNITEC_ID,KIND0|DIR3|SPEED0},
//40
{UNITEC_ID,KIND0|DIR3|SPEED1},{THREE1_ID,KIND0|DIR0|SPEED0},{THREE1_ID,KIND0|DIR0|SPEED1},{THREE1_ID,KIND0|DIR0|SPEED2},
//44 v
{THREE1_ID,KIND0|DIR1|SPEED0},{THREE1_ID,KIND0|DIR1|SPEED1},{SEVEN_ID,KIND0|DIR0|SPEED0},{SEVEN_ID,KIND0|DIR0|SPEED1},
//48 v
{SEVEN_ID,KIND0|DIR0|SPEED2},{SEVEN_ID,KIND0|DIR0|SPEED3},{SEVEN_ID,KIND0|DIR1|SPEED0},{SEVEN_ID,KIND0|DIR1|SPEED1},
//52
{RBASE,KIND2|DIR0|SPEED0},{RBASE,KIND2|DIR0|SPEED1},{RBASE,KIND2|DIR0|SPEED2},{RBASE,KIND2|DIR1|SPEED0},
//56
{RBASE,KIND2|DIR1|SPEED1},{GBASE,KIND2|DIR0|SPEED0},{GBASE,KIND2|DIR0|SPEED1},{GBASE,KIND2|DIR0|SPEED2},
//60
{GBASE,KIND2|DIR1|SPEED0},{GBASE,KIND2|DIR1|SPEED1},{YBASE,KIND2|DIR0|SPEED0},{YBASE,KIND2|DIR0|SPEED1},
//64
{YBASE,KIND2|DIR0|SPEED2},{YBASE,KIND2|DIR1|SPEED0},{YBASE,KIND2|DIR1|SPEED1},{BBASE,KIND2|DIR0|SPEED0},
//68
{BBASE,KIND2|DIR0|SPEED1},{BBASE,KIND2|DIR0|SPEED2},{BBASE,KIND2|DIR1|SPEED0},{BBASE,KIND2|DIR1|SPEED1},
//72
{GBASE,KIND2|DIR0|SPEED0},{GBASE,KIND2|DIR0|SPEED1},{GBASE,KIND2|DIR0|SPEED2},{GBASE,KIND2|DIR1|SPEED0},
//76
{GBASE,KIND2|DIR1|SPEED1},{GBBASE,KIND2|DIR0|SPEED0},{GBBASE,KIND2|DIR0|SPEED1},{GBBASE,KIND2|DIR0|SPEED2},
//80
{GBBASE,KIND2|DIR1|SPEED0},{GBBASE,KIND2|DIR1|SPEED1},{BBASE,KIND2|DIR0|SPEED0},{BBASE,KIND2|DIR0|SPEED1},
//84
{BBASE,KIND2|DIR0|SPEED2},{BBASE,KIND2|DIR1|SPEED0},{BBASE,KIND2|DIR1|SPEED1},{RBASE,KIND2|DIR0|SPEED0},
//88
{RBASE,KIND2|DIR0|SPEED1},{RBASE,KIND2|DIR0|SPEED2},{RBASE,KIND2|DIR1|SPEED0},{RBASE,KIND2|DIR1|SPEED1},
//92
{RBBASE,KIND2|DIR0|SPEED0},{RBBASE,KIND2|DIR0|SPEED1},{RBBASE,KIND2|DIR0|SPEED2},{RBBASE,KIND2|DIR1|SPEED0},
//96
{RBBASE,KIND2|DIR1|SPEED1},{GBASE,KIND2|DIR0|SPEED0},{GBASE,KIND2|DIR0|SPEED1},{GBASE,KIND2|DIR0|SPEED2},
//100
{GBASE,KIND2|DIR1|SPEED0},{GBASE,KIND2|DIR1|SPEED1},{RBASE,KIND2|DIR0|SPEED0},{RBASE,KIND2|DIR0|SPEED1},
//104
{RBASE,KIND2|DIR0|SPEED2},{RBASE,KIND2|DIR1|SPEED0},{RBASE,KIND2|DIR1|SPEED1},{BBASE,KIND2|DIR0|SPEED0},
//108
{BBASE,KIND2|DIR0|SPEED1},{BBASE,KIND2|DIR0|SPEED2},{BBASE,KIND2|DIR1|SPEED0},{BBASE,KIND2|DIR1|SPEED1}
};
#define SIZE 20
unsigned char SPI_rx_buff[SIZE];
unsigned char SPI_tx_buff[SIZE];
unsigned char rx_wr_index,rx_rd_index,rx_counter,rx_buffer_overflow;
unsigned char tx_wr_index,tx_rd_index,tx_counter;
char DispBuffer[6];
const char CharFont[20]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf,0xc7,0x8c,0xa1};
// 0 1 2 3 4 5 6 7 8 9 a b c d e f - L P d
long val;
unsigned char KeyCode;
void Display(void);
void Display_Fast(void);
char PressKeyProcess(void);
void spi_init(void);
void putSPIchar(char c);
unsigned char getSPIchar(void);
void spi_stc_isr(void);
void WatchDog(char tim);
unsigned char SendKindData(char kind);
void EepromICnumberWr(void);
void EepromICnumberRd(void);
void FactorySetup(void);
void EepromViewModeWr(void);
void EepromViewModeRd(void);
void EepromPasswordRd(void);
void EepromPasswordWr(void);
void EepromDateValueRd(void);
void EepromDateValueWr(void);
void EepromDayDataRd(void);
void EepromDayDataWr(void);
int CompareDate(void);
int CalMonthDay(uchar month,uchar day);
uchar ProcessEdgeToMiddle(char data,uchar mode,uchar BC,uchar class);
uchar ProcessMiddleToEdge(char data,uchar mode,uchar BC,uchar class );
void AllClearICBuffer(void);
void DelayNs(char tim);
uchar SendFirstToEnd(uchar kind,uchar mode,uchar si_flag,uchar ss_flag);
char SpeedDelay(uchar speed);
void AllStarRight(uchar da1,uchar da2,uchar da3,uchar da4,uint init);
uchar AllStarMiddleToEdge(uchar da1,uchar da2,uchar da3,uchar da4,uchar mode);
void timer0_init(void) ;
void Enable_Time0_Interrupt(void);
void Disable_Time0_Interrupt(void);
void FullProcess(uchar fullflag,uchar looplenght,uchar *data);
void Delay(char tim)
{
unsigned char i,j;
for(j=0;j<tim;j++)
{
for(i=200;i>0;i--)
{
asm("nop");
asm("nop");
asm("nop");
}
#ifdef VERSION_CONTROL
/* WDT 复位*/
_WDR();
#endif
}
}
void DelayNs(char tim)
{
unsigned char j;
for(j=0;j<tim;j++)
{
asm("nop");
asm("nop");
asm("nop");
}
#ifdef VERSION_CONTROL
/* WDT 复位*/
_WDR();
#endif
}
void SendSS(uchar loop )
{
if(loop==0) return;
PORTB |= 0x10; //SS output high 电平
DelayNs(20);
PORTB &=(~0x10); //SS output low 电平
}
void SendSI(uchar loop)
{
uchar i;
if(loop==0) return;
for(i=0;i<loop;i++)
{
PORTB |= 0x08; //S_I output high 电平
Display_Fast();
PORTB &=(~0x08); //S_I output low 电平
Display_Fast();
}
}
uint hmod(uint source,uint dest)
{
uchar i,src;
src=source;
if(src<dest) return src;
for(i=0;i<source;i++)
{
src=src-dest;
if(src<dest) break;
}
return src;
}
void Send_Data(uchar dat,uchar loop )
{
uchar i;
for(i=0;i<loop;i++)
{
putSPIchar(dat);
DelayNs(50);
}
}
void PasswordCannel(void)
{
PasswordData[0]=PASS_DISABLE;
PasswordData[1]=PASS_DISABLE;
PasswordData[2]=PASS_DISABLE;
PasswordData[3]=PASS_DISABLE;
PasswordData[4]=PASS_DISABLE;
PasswordData[5]=0x00;
Password_alarm=FALSE;
Password_Enable=FALSE;
}
//mega16 7.3728MHz石英晶体 iccavr6.31a
/*
去掉电池:
year/mon/day =00/01/01
hour/min/second=00/00/00
去掉芯片:
year/mon/day =ff/1f/3f
hour/min/second=3f/7f/7f
重新扦入芯片,永远为:
year/mon/day =00/01/01
hour/min/second=00/00/00
*/
//相关定义:
#define DS1302_RST 2 //pd2
#define DS1302_SDA 0 //pd0
#define DS1302_SCLK 1 //pd1
//ds1302相关
//DS1302_RST=1
#define Set_DS1302_RST() PORTD|=1<<DS1302_RST
//DS1302_RST=0
#define Clr_DS1302_RST() PORTD&=~(1<<DS1302_RST)
//DS1302_SDA=1
#define Set_DS1302_SDA() PORTD|=1<<DS1302_SDA
//DS1302_SDA=0
#define Clr_DS1302_SDA() PORTD&=~(1<<DS1302_SDA)
//DS1302_SCLK=1
#define Set_DS1302_SCLK() PORTD|=1<<DS1302_SCLK
//DS1302_SCLK=0
#define Clr_DS1302_SCLK() PORTD&=~(1<<DS1302_SCLK)
//DS1302的SDA置为输出脚
#define Set_DS1302_DDRSDA() DDRD|=1<<DS1302_SDA
//DS1302的SDA置为输入脚
#define Clr_DS1302_DDRSDA() DDRD&=~(1<<DS1302_SDA)
#define DS1302_SEC_Reg 0x80
#define DS1302_MIN_Reg 0x82
#define DS1302_HR_Reg 0x84
#define DS1302_DATE_Reg 0x86
#define DS1302_MONTH_Reg 0x88
#define DS1302_DAY_Reg 0x8a
#define DS1302_YEAR_Reg 0x8c
#define DS1302_CONTROL_Reg 0x8e
#define DS1302_CHARGER_Reg 0x90
#define DS1302_CLKBURST_Reg 0xbe
//全局变量
//为了方便,我把个位和十位分开了
uchar year1=0x88;
uchar year0=0x88;
uchar month1=0x88;
uchar month0=0x88;
uchar date0=0x88;
uchar date1=0x88;
uchar day=0x88;
uchar hour1=0x88;
uchar hour0=0x88;
uchar minute1=0x88;
uchar minute0=0x88;
uchar second1=0x88;
uchar second0=0x88;
void DS1302_Init(void);
uchar Check_DS1302(void);
uchar DS1302_Read(uchar reg);
void DS1302_Write(uchar reg,uchar data);
void ReadTime(void);
//////////////////////////////////////////////
void port_init(void)
{
PORTA = 0x00;
DDRA = 0xff;//PORTA0-PORTA7 ==> OUTPUT CHAR DATA
PORTB = 0x00;
DDRB = 0x00;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -