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

📄 main.c

📁 使用凌阳61单片机和1302时间芯片完成时钟功能并使用CH451LS芯片显示(程序中只在0号LED上显示秒)。是使用时
💻 C
字号:
#include "SPCE061A.h"
#include "CH451LS0811.h"

#define CMD_LENGTH_1302 8
#define RST 0x0400//0x0004//0x4000//0x8000//0x0020//0x0010//0x0008//0x0040//0x0080//
#define IO 	0x0200//0x0002//0x2000//0x4000//0x0010//0x0008//0x0004//0x0020//0x0040//
#define CLK 0x0100//0x0001//0x1000//0x2000//0x0008//0x0004//0x0002//0x0010//0x0020//

#define IO_Data   *P_IOA_Data
#define IO_Attrib *P_IOA_Attrib
#define IO_Dir    *P_IOA_Dir

const int mask_1302[]={
	0x0001,0x0002,0x0004,0x0008,
	0x0010,0x0020,0x0040,0x0080
};

typedef enum {
	YEAR=0,MONTH=1,DATE=2,DAY=3,
	HOUR=4,MINUTE=5,SECOND=6,CONTROL=7,RAM0=8
} CLOCK;

int wrt[]={0x008c,0x0088,0x0086,0x008a,
			0x0084,0x0082,0x0080,0x008e,0x00c0};//写时的寄存器地址

//
void write(CLOCK c,int data){
	int i;
	int out;
	int t1;
	IO_Dir=RST|IO|CLK;
	IO_Attrib=RST|IO|CLK;
	IO_Data=0x0000;
	
	t1=wrt[c];
	for(i=0;i<CMD_LENGTH_1302;i++){
		out=RST;
		if(mask_1302[i]&t1){
			out|=IO;
		}
		IO_Data=out;
		out|=CLK;
		IO_Data=out;
	}
	
	t1=data;
	for(i=0;i<CMD_LENGTH_1302;i++){
		out=RST;
		if(mask_1302[i]&t1){
			out|=IO;
		}
		IO_Data=out;
		out|=CLK;
		IO_Data=out;
	}
	
	IO_Data=0x0000;
}

//
int read(CLOCK c){
	int i;
	int out;
	int rslt=0;
	int tmp;
	int t1;
	IO_Dir=RST|IO|CLK;
	IO_Attrib=RST|IO|CLK;
	IO_Data=0x0000;
	
	t1=wrt[c]|0x0001;
	for(i=0;i<CMD_LENGTH_1302;i++){
		out=RST;
		if(mask_1302[i]&t1){
			out|=IO;
		}
		IO_Data=out;
		out|=CLK;
		IO_Data=out;
	}
	
	IO_Dir=RST|CLK;
	IO_Attrib=RST|IO|CLK;
	for(i=0;i<CMD_LENGTH_1302;i++){
		out=RST;
		IO_Data=out;
		tmp=IO_Data;
		if(tmp&IO){
			rslt|=mask_1302[i];
		}
		out=RST|CLK;
		IO_Data=out;
	}
	
	IO_Data=0x0000;
	return rslt;
}

//
int main(){
	int t1;
	int t2;
	init_61_with_A_out();
	init_CH451LS();
	write(CONTROL,0x00);		//enable Write
	//write(0x90,0xAA);		//TCS=1010b  DS=10b  Rout=10b
	write(YEAR,0x08);		//year 2008
	write(DAY,0x03);		//day 3
	write(MONTH,0x06);		//month 06
	write(DATE,0x14);		//date 14
	write(HOUR,0x24);		//hour 14
	write(MINUTE,0x58);		//minute 58
	write(SECOND,0x00);		//seconds 00(and start Clk)
	t2=SECOND;
	while(1){
		
		//for(t2=YEAR;t2<=CONTROL;t2++){
			t1=read(t2);
			wrt_digit(1,(t1>>4)&0x07);
			wrt_digit(0,t1&0x0f);
			*P_Watchdog_Clear=1;
		//	DELAY
		//}	
	}
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -