可设置时间的日历

完整电路图:

完整代码:

#include <reg51.h>
#include <intrins.h>			//包含_nop_( )空函数指令的头文件

#define uchar unsigned char
#define uint unsigned int
#define out P2
sbit RS=P3^0; 					
sbit RW=P3^1;				
sbit E=P3^2; 
sbit RST=P1^7 ;
sbit SCLK =P1^6;
sbit DSIO=P1^5;	
sbit set=P1^0;	//设置时间按钮
sbit up=P1^1;	// 增加时间
sbit down=P1^2;	//	减小时间		

void lcd1602_initial(void);			//lcd1602初始化函数
void lcd1602_write_command(uchar com); 	//lcd1602写命令函数
void lcd1602_write_data(uchar dat);		//lcd1602写数据函数
void lcd1602_string(uchar ad ,uchar *s);//lcd1602写字符串
void delay(uint);						//延时函数
void Ds1302Write(uchar add,uchar dat);
uchar Ds1302Read(uchar add);
void Ds1302Readtime_data();
uchar bcd_decimal(uchar bcd);
void write_time(uchar add,uchar date);
void xinshi_time();	
uchar key_bcd(uchar key_decimal);
void key_set();
void key_process();
void key_up_down();

uchar code table1[]={"2021-01-24"};
uchar code table2[]={"23:59:50"};
uchar nian,zhou,yue,ri,shi,fen,miao;
uchar count=0,done=0,flag=1,flag_up=0,flag_down=0;
//---DS1302写入和读取时分秒的地址命令---//
//---秒分时日月周年 最低位读写位;-------//
uchar code read_add[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d}; 
uchar code write_add[7]= {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};

//---DS1302时钟初始化2013年1月1日星期二12点00分00秒。---//
//---存储顺序是秒分时日月周年,存储格式是用BCD码---//
uchar code time_data[7]= {0x58, 0x40, 0x14, 0x29, 0x01, 0x01, 0x21};
uchar code     xingqi1[]={"MON"};
uchar code     xingqi2[]={"TUE"};
uchar code     xingqi3[]={"WED"};
uchar code     xingqi4[]={"THU"};
uchar code     xingqi5[]={"FRI"};
uchar code     xingqi6[]={"SAT"};
uchar code     xingqi7[]={"SUN"};	 

/**************************************************************
*函数名		:delay
*函数功能	:延时函数
*函数参数	:需要延时的毫秒数:uint j
*函数返回值	:无
****************************************************************/
void delay(uint j){	 //1ms延时子程序
	uchar i=250;
	for(;j>0;j--){
		while(--i);
		i=249;
		while(--i);
		i=250;
	}
}
/**************************************************************
*函数名		:key_set
*函数功能	:按键设置
*函数参数	:无
*函数返回值	:无
****************************************************************/
void key_set(){
    if(set==0){
	    delay(5);		
		while(!set);
		    count++;  //计数,按了几次
			lcd1602_write_command(0x0f);
			if(flag==1){
			   done=1;
			   flag=0;
			   Ds1302Write(0x8e,0x00);
			   Ds1302Write(0x80,key_bcd(miao)|0x80);
			   Ds1302Write(0x8e,0x80);
			 }
			
		
	 }
}
/**************************************************************
*函数名		:key_up_down
*函数功能	:按键增加时间或者减少时间
*函数参数	:无
*函数返回值	:无
************************************************************
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值