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

📄 12887-1.c

📁 液晶显示程序
💻 C
字号:
/***************************************

时钟芯片12887
陈雷
2005--5--28

****************************************/

#include <reg51.h>

/***************************************/

unsigned char xdata *adr_12887;

/***************************************/

sbit CS_12887=P2^7;
sbit WR_12887=P3^6;
sbit RD_12887=P3^7;

sbit key0=P1^1;             //设定
sbit key1=P1^2;             //增加
sbit key2=P1^3;             //减少

sbit P17=P1^7;

sbit load=P3^4;

sbit led1=P1^7;
sbit led2=P1^6;
sbit led3=P1^5;

/*******************************************************************************/

void write(w_sec, w_min,w_hour,w_week,w_day,w_moth,w_yera);
void read();
unsigned char key_press();
void key_con() ;
void write_key( r_sec, r_min, r_hour, r_week, r_day, r_moth, r_year);
void display();
void key_sec();
void key_min();
void key_hour();

/********************************************************************************/

unsigned char r_sec, r_min, r_hour, r_week, r_day, r_moth, r_year;
unsigned char w_sec, w_min, w_hour, w_week, w_day, w_moth, w_year;
unsigned char j;

/***************************************************/

unsigned char code Disbuf[]= {0x03,0x9f,0x25,0x0d,
	                      0x99,0x49,0x41,0x1f,
	                      0x01,0x09,0x11,0xc1,
	                      0x63,0x85,0x61,0x71};

/***************************************************/

void delay()
{
  unsigned char i,j;
  for(i=0;i<100;i++)
  for(j=0;j<100;j++);
}

/*****************************************************/

void delay1(unsigned char x)
{
 unsigned char j;
 while(x--)
  {for (j=0;j<125;j++)
    {;}
  }
}

/*****************************************************/

void initial()
{
	int i;
	adr_12887=0X7F0B;                 //写寄存器B
	*adr_12887=0x7fa6;
	write( w_sec, w_min, w_hour, w_week, w_day, w_moth, w_year);      //写时间
	adr_12887=0x7f0a;                 //写寄存器A
	*adr_12887=0x20;
	adr_12887=0x7f0c;                 //写寄存器C
	*adr_12887=0x70;
	adr_12887=0x7f0d;                 //写寄存器D
	i=*adr_12887;
        adr_12887=0X7F0B;                 //写寄存器B
	*adr_12887=0x7f26;
}

/***************************************/

void initial_key()
{
	int i;
	adr_12887=0X7F0B;                 //写寄存器B
	*adr_12887=0x7fa6;
	write_key( r_sec, r_min, r_hour, r_week, r_day, r_moth, r_year);      //写时间
	adr_12887=0x7f0a;                 //写寄存器A
	*adr_12887=0x20;
	adr_12887=0x7f0c;                 //写寄存器C
	*adr_12887=0x70;
	adr_12887=0x7f0d;                 //写寄存器D
	i=*adr_12887;
        adr_12887=0X7F0B;                 //写寄存器B
	*adr_12887=0x7f26;
}

/**************************************/

void write(w_sec,w_min,w_hour,w_week,w_day,w_moth,w_year)
{
	adr_12887=0x7f00;
	*adr_12887=w_sec;             //写秒
	adr_12887++;
	*adr_12887=0x00;            //写秒报警无效
	adr_12887++;
	*adr_12887=w_min;             //写分
	adr_12887++;
	*adr_12887=0x00;            //写分报警无效
	adr_12887++;
	*adr_12887=w_hour;            //写时
	adr_12887++;
	*adr_12887=0x00;            //写时报警无效
	adr_12887++;
	*adr_12887=w_week;            //写星期
	adr_12887++;
	*adr_12887=w_day;             //写日
	adr_12887++;
	*adr_12887=w_moth;            //写月
	adr_12887++;
	*adr_12887=w_year;            //写年
}

/***************************************/

void write_key( r_sec, r_min, r_hour, r_week, r_day, r_moth, r_year)
{
	adr_12887=0x7f00;
	*adr_12887=r_sec;             //写秒
	adr_12887++;
	*adr_12887=0x00;            //写秒报警无效
	adr_12887++;
	*adr_12887=r_min;             //写分
	adr_12887++;
	*adr_12887=0x00;            //写分报警无效
	adr_12887++;
	*adr_12887=r_hour;            //写时
	adr_12887++;
	*adr_12887=0x00;            //写时报警无效
	adr_12887++;
	*adr_12887=r_week;            //写星期
	adr_12887++;
	*adr_12887=r_day;             //写日
	adr_12887++;
	*adr_12887=r_moth;            //写月
	adr_12887++;
	*adr_12887=r_year;            //写年
}

/**************************************/

void read()
{
	unsigned char i;
	adr_12887=0x7f0a;          //读寄存器A
	i=*adr_12887;
	while(i&0x80==0x80)
	{
        i=*adr_12887;
        }
	adr_12887=0x7f00;           //读秒
	r_sec=*adr_12887;
	adr_12887++;
	adr_12887++;                //读分
	r_min=*adr_12887;
	adr_12887++;
	adr_12887++;                //读时
	r_hour=*adr_12887;
	adr_12887++;
	adr_12887++;                //读星期
	r_week=*adr_12887;
	adr_12887++;                //读日
	r_day=*adr_12887;
	adr_12887++;                //读月
	r_moth=*adr_12887;
	adr_12887++;                //读年
	r_year=*adr_12887;
}


/****************************************/
/*
void wride_alarm()
{
   adr_12887=0x01;
   *adr_12887=0x09;
   adr_12887=0x03;
   *adr_12887=0x00;
   adr_12887=0x05;
   *adr_12887=0x00;
	}
*/
/***************************************/

void alarm() interrupt 0
{
  int i;
  P17=!P17;
  delay();
  P17=!P17;
  delay();
  adr_12887=0x7f0c;                 //写寄存器C
  i=*adr_12887;
}

/**************************************/

void key_sec()
{
 while(key0==1)
{
led1=!led1;
delay();
if(key1==0)
{r_sec++;
if(r_sec==60)
r_sec=0;
while(key1==0);
}
if(key2==0)
{r_sec--;
if(r_sec==0)
r_sec=59;
while(key2==0);
}
initial_key();
display();
}
 }
/**************************************/

void key_min()
{
while(key0==1)
{
led2=!led2;
delay();
if(key1==0)
{r_min++;
if(r_min==60)
r_min=0;
while(key1==0);
}
if(key2==0)
{r_min--;
if(r_min==0)
r_min=59;
while(key2==0);
 }
 initial_key();
 display();
}
}
/**************************************/

void key_hour()
{
while(key0==1)
{
led3=!led3;
delay();
if(key1==0)
{r_hour++;
if(r_hour>=24)
r_hour=0;
while(key1==0);
}
if(key2==0)
{r_hour--;
if(r_hour==0)
r_hour=24;
while(key2==0);
 }
 initial_key();
 display();
}
}
/**************************************/

void key_con()
{
 if(key0==0)
 {if(j<3)
  j++;
  else j=0;
  	}
while(key0==0);
switch(j)
{case 1: key_sec() ;  break;
case  2: key_min() ;  break;
case  3: key_hour();  break;
}
}

/**************************************/

void alam()
{
	P17=!P17;
	delay();
	P17=!P17;
	delay();
	P17=!P17;
	delay();
	P17=!P17;
	delay();
	P17=!P17;
	delay();
	}

/****************************************/

void display()
{
	SBUF=Disbuf[r_sec%10];while(!TI);TI=0;
	SBUF=Disbuf[r_sec/10];while(!TI);TI=0;
	SBUF=Disbuf[r_min%10];while(!TI);TI=0;
	SBUF=Disbuf[r_min/10];while(!TI);TI=0;
	SBUF=Disbuf[r_hour%10];while(!TI);TI=0;
	SBUF=Disbuf[r_hour/10];while(!TI);TI=0;
  load=0;
  load=1;
}

/****************************************/

void main()
{

  EA  =1;
  EX0 =1;
	IT0 =1;
//	initial();
  while(1)
  {
	read();
	display();
//	if(r_sec==15)
//	alam();
 if(key0==0)
 key_con();
	}
}

⌨️ 快捷键说明

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