⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 用AVR atmega16做的一个完整彩色LED控制程序
💻 C
📖 第 1 页 / 共 5 页
字号:
//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 + -