随风V嗜魔 随风V嗜魔
我本如此,何须掩饰!
关注数: 0 粉丝数: 38 发帖数: 2,195 关注贴吧数: 11
一点问题 #include"reg52.h" #include"VIiC_C51.H"//包含VI2C软件包 #include "zlg7290.h" #definePCF85630xA2//定义器件地址 #defineWRADDR0x00//定义写单元首地址 #defineRDADDR0x02//定义读单元首地址 sbitKEY_INT=P3^2; sbitRST=P1^0; unsigned char disp_buf[8]={0,0,0,0,0,0,0,0};//显示缓存 unsigned char KEY;//保存键值 bitswich_date=0; unsigned char display_time(unsigned char *sd) { sd[0]=sd[0]&0x7f;//秒屏蔽保留位 sd[1]=sd[1]&0x7f;//分屏蔽保留位 sd[2]=sd[2]&0x3f;//时屏蔽保留位 disp_buf[0] =(sd[0]%16);//对16求余就是把低4位取出来,相当于个位 disp_buf[1] =(sd[0]/16);//对16整除,就是把高4位取出来,相当于10位 disp_buf[2] = 31; //不显示 disp_buf[3] =(sd[1]%16); disp_buf[4] =(sd[1]/16); disp_buf[5] = 31; disp_buf[6] =(sd[2]%16); disp_buf[7] =(sd[2]/16); ZLG7290_SendBuf(disp_buf,8); return 0; } unsigned char display_date(unsigned char *sd) { sd[0]=sd[0]&0x3f;//日屏蔽保留位 sd[2]=sd[2]&0x1f;//月屏蔽保留位 disp_buf[0] =(sd[0]%16); disp_buf[1] =(sd[0]/16); disp_buf[2] =(sd[2]%16)+0x80;//0x80相当于后面加小数点 disp_buf[3] =(sd[2]/16); disp_buf[4] =(sd[3]%16)+0x80;//后面加小数点 disp_buf[5] =(sd[3]/16); disp_buf[6] =0; disp_buf[7] =2; ZLG7290_SendBuf(disp_buf,8); return 0; } unsigned char DelayNS(unsigned char no) { unsigned char i,j;//延时参数 for(; no>0; no--) for(i=0; i<100; i++) for(j=0; j<100; j++); return 0; } voidmain() { unsigned char code td[9]={0x00,0x12,0x00,0x30,0x12,0x06,0x05,0x02,0x04};//定义初始化字 unsigned char rd[7];//定义接收缓冲区 RST=0; DelayNS(1); RST=1; ISendStr(PCF8563,WRADDR,td,0x5);//初始化PCF8563,如果需要的话可以不去掉 DelayNS(1); ISendStr(PCF8563,WRADDR+5,&td[5],0x4);//初始化PCF8563,如果需要的话可以不去掉 while(1) { DelayNS(1); IRcvStr(PCF8563,RDADDR,rd,0x7);//读现在的时、分、秒 DelayNS(1); if(swich_date) display_date(rd+3);//调显示日期子程序 else display_time(rd);//调显示时间子程序 if(KEY_INT==0) { KEY=ZLG7290_GetKey(); if(KEY==1) swich_date=~swich_date; } } } 怎么修改程序让其显示星期(按一下S1 切换到显示年月日,再按一下S1 又切换回时分秒,增加一个按键s2显示星期)或(按一下S1 切换到显示年月日,再按一下S1 又切换回时分秒,再按一下显示星期)怎么修改
1 下一页