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

📄 080630.c

📁 DS12CR887万年历四种程序(MOTOROLA)时序和(INTEL)时序
💻 C
📖 第 1 页 / 共 2 页
字号:
		for(k=0;k<8;k++)
	{
		SH_CP=0;	
		temp_shi<<=1;		//将数据左移把最高位移入到了CY当中
		DS=CY;
		SH_CP=1;		//上升沿发生移位
	}
	SH_CP=0;
	DS=1;
	
}
/************************
函数名:write_sfm()
功能:显示子函数调时间模式下用此函数刷新显示数据

*************************/
void write_sfm(uchar sg,uchar ss,uchar fg,uchar fs,uchar mg,uchar ms,uchar ng,uchar ns,uchar yg,uchar ys,uchar rg,uchar rs,uchar xqs,uchar temp_s,uchar temp_g)
{
	uchar k;

	for(k=0;k<8;k++)
	{
		SH_CP=0;	
		mg<<=1;		//将数据左移把最高位移入到了CY当中
		DS=CY;
		SH_CP=1;		//上升沿发生移位
	}

	for(k=0;k<8;k++)
	{
		SH_CP=0;	
		ms<<=1;		//将数据左移把最高位移入到了CY当中
		DS=CY;
		SH_CP=1;		//上升沿发生移位
	}
	for(k=0;k<8;k++)
	{
		SH_CP=0;	
		fg<<=1;		//将数据左移把最高位移入到了CY当中
		DS=CY;
		SH_CP=1;		//上升沿发生移位
	}

	for(k=0;k<8;k++)
	{
		SH_CP=0;	
		fs<<=1;		//将数据左移把最高位移入到了CY当中
		DS=CY;
		SH_CP=1;		//上升沿发生移位
	}
	
	for(k=0;k<8;k++)
	{
		SH_CP=0;	
		sg<<=1;		//将数据左移把最高位移入到了CY当中
		DS=CY;
		SH_CP=1;		//上升沿发生移位
	}

	for(k=0;k<8;k++)
	{
		SH_CP=0;	
		ss<<=1;		//将数据左移把最高位移入到了CY当中
		DS=CY;
		SH_CP=1;		//上升沿发生移位
	}
	
	for(k=0;k<8;k++)
	{
		SH_CP=0;	
		rg<<=1;		//将数据左移把最高位移入到了CY当中
		DS=CY;
		SH_CP=1;		//上升沿发生移位
	}
	
	for(k=0;k<8;k++)
	{
		SH_CP=0;	
		rs<<=1;		//将数据左移把最高位移入到了CY当中
		DS=CY;
		SH_CP=1;		//上升沿发生移位
	}
	
	for(k=0;k<8;k++)
	{
		SH_CP=0;	
		yg<<=1;		//将数据左移把最高位移入到了CY当中
		DS=CY;
		SH_CP=1;		//上升沿发生移位
	}
	for(k=0;k<8;k++)
	{
		SH_CP=0;	
		ys<<=1;		//将数据左移把最高位移入到了CY当中
		DS=CY;
		SH_CP=1;		//上升沿发生移位
	}
	
		for(k=0;k<8;k++)
	{
		SH_CP=0;	
		ng<<=1;		//将数据左移把最高位移入到了CY当中
		DS=CY;
		SH_CP=1;		//上升沿发生移位
	}
		for(k=0;k<8;k++)
	{
		SH_CP=0;	
		ns<<=1;		//将数据左移把最高位移入到了CY当中
		DS=CY;
		SH_CP=1;		//上升沿发生移位
	}
	
		for(k=0;k<8;k++)
	{
		SH_CP=0;	
		xqs<<=1;		//将数据左移把最高位移入到了CY当中
		DS=CY;
		SH_CP=1;		//上升沿发生移位
	}
		for(k=0;k<8;k++)
	{
		SH_CP=0;	
		temp_g<<=1;		//将数据左移把最高位移入到了CY当中
		DS=CY;
		SH_CP=1;		//上升沿发生移位
	}
	
		for(k=0;k<8;k++)
	{
		SH_CP=0;	
		temp_s<<=1;		//将数据左移把最高位移入到了CY当中
		DS=CY;
		SH_CP=1;		//上升沿发生移位
	}
	SH_CP=0;
	DS=1;
	
}
/************************
函数名:display()
功能:显示子函数

*************************/
void display()
{
	ST_CP=0;
	write_595byte(shi,fen,miao,nian,yue,ri,xq,temp);
	ST_CP=1;	//上升沿将移位寄存器的数据送到输出锁存器并输出
	ST_CP=0;
}

////键盘扫描////
void kscan()
{
	rd=0;
	if(s1==0)
	{
		delay(5);
		if(s1==0);////功能键
		{
			
			flag=1;	//flag=1将停止显示数据的刷新
			while(!s1);//松手检测
			delay(5);	//延时去抖动
			if(s1==1)
			{
				s1num++;		//对功能键按下的次数进行计数判断要修改的数据
				if(s1num==1)//调节秒
				{
					ST_CP=0;	
					write_sfm(table[shi%10],table[shi/10],table[fen%10],table[fen/10],table[16],table[16],table[nian%10],table[nian/10],table[yue%10],table[yue/10],table[ri%10],table[ri/10],table[xq],table[temp%100/10],table[temp/100]);	
					ST_CP=1;
					ST_CP=0;
				}
				if(s1num==2)//调节分
				{
					ST_CP=0;	
					write_sfm(table[shi%10],table[shi/10],table[16],table[16],table[miao%10],table[miao/10],table[nian%10],table[nian/10],table[yue%10],table[yue/10],table[ri%10],table[ri/10],table[xq],table[temp%100/10],table[temp/100]);	
					ST_CP=1;
					ST_CP=0;	
				}
				if(s1num==3)//调节时
				{
					ST_CP=0;	
					write_sfm(table[16],table[16],table[fen%10],table[fen/10],table[miao%10],table[miao/10],table[nian%10],table[nian/10],table[yue%10],table[yue/10],table[ri%10],table[ri/10],table[xq],table[temp%100/10],table[temp/100]);	
					ST_CP=1;
					ST_CP=0;
				}
			
				if(s1num==4)//调节日
				{
					ST_CP=0;	
					write_sfm(table[shi%10],table[shi/10],table[fen%10],table[fen/10],table[miao%10],table[miao/10],table[16],table[16],table[yue%10],table[yue/10],table[ri%10],table[ri/10],table[xq],table[temp%100/10],table[temp/100]);	
					ST_CP=1;
					ST_CP=0;	
				}
				if(s1num==5)//调节月
				{
					ST_CP=0;	
					write_sfm(table[shi%10],table[shi/10],table[fen%10],table[fen/10],table[miao%10],table[miao/10],table[nian%10],table[nian/10],table[16],table[16],table[ri%10],table[ri/10],table[xq],table[temp%100/10],table[temp/100]);	
					ST_CP=1;
					ST_CP=0;	
				}
				if(s1num==6)//调节年
				{
					ST_CP=0;	
					write_sfm(table[shi%10],table[shi/10],table[fen%10],table[fen/10],table[miao%10],table[miao/10],table[nian%10],table[nian/10],table[yue%10],table[yue/10],table[16],table[16],table[xq],table[temp%100/10],table[temp/100]);	
					ST_CP=1;
					ST_CP=0;	
				}
				if(s1num==7)//调节星期
				{
					ST_CP=0;	
					write_sfm(table[shi%10],table[shi/10],table[fen%10],table[fen/10],table[miao%10],table[miao/10],table[nian%10],table[nian/10],table[yue%10],table[yue/10],table[ri%10],table[ri/10],table[16],table[temp%100/10],table[temp/100]);	
					ST_CP=1;
					ST_CP=0;	
				}
				if(s1num==8)//把调节好的数据保存下来然后恢复正常读取显示
				{
					s1num=0;
					write_ds(0,miao);
					write_ds(2,fen);
					write_ds(4,shi);
					write_ds(6,xq);
					write_ds(9,nian);
					write_ds(8,yue);
					write_ds(7,ri);
					flag=0;
				}
			}
		}
					
				}
					if(s1num!=0)///判断S1键是否按下
						{
							if(s2==0)/////加键
							{
								delay(5);
								if(s2==0)
								{
									while(!s2);
									delay(10);
									if(s2==1)
									{
											if(s1num==1)
											{
											
												miao++;
												if(miao==60)
													miao=0;
												display();
				
							
											}
											if(s1num==2)//判断光标指向的位置
											{
											
												fen++;
												if(fen==60)
													fen=0;
												display();
											
												
											}
											if(s1num==3)
											{
										
											
												shi++;
												if(shi==24)
													shi=0;
												display();
											
												
											}
											if(s1num==4)
											{
											
											nian++;
											if(nian==100)
												nian=0;
												
												display();
											}
											if(s1num==6)
											{
												ri++;
												if(ri==32)
													ri=1;
													display();
											}
											if(s1num==5)
											{
												yue++;
												if(yue==13)
													 yue=1;
												display();
											}
											if(s1num==7)
											{
												xq++;
												if(xq==8)
													xq=1;
												
													display();
											}
										}
								}
							}
							if(s3==0)//减键
							{
								delay(5);
								if(s3==0)
								{
									while(!s3);
									delay(10);
									if(s3==1)
									{
										if(s1num==1)
										{
											miao--;
											if(miao==-1)
												miao=59;
												display();
										}
										if(s1num==2)
										{
											fen--;
											if(fen==-1)
												fen=59;
												display();
										}
										if(s1num==3)
										{
											shi--;
											if(shi==-1)
												shi=23;
												display();
										}
										if(s1num==4)
										{
											nian--;
											if(nian==-1)
												nian=99;
				
												display();
										}
										if(s1num==6)
										{
											ri--;
											if(ri==0)
												ri=31;
											display();
										}
										if(s1num==5)
										{
											yue--;
											if(yue==0)
												 yue=12;
											display();
										}
										if(s1num==7)
										{
											xq--;
											if(xq==0)
												xq=7;
											
											display();
										}
									}
									
								}
							}
						}
}
/*void shanluo()
{
	d1=0;//输出低电平
	delay(621);//调用延时
	d1=1;//输出高电平
	delay(621);//调用延时
}*/
//主函数
void main()
{
	TMOD=0x01;
	TH0=(65535-50000)/256;
	TL0=(65535-50000)%256;
	EA=1;
	ET0=1;
	TR0=1;
	
	write_ds(0x0B,0x06);  
	write_ds(0x0A,0xA0);
	write_ds(0x0A,0x20);  //开启内部振荡器	//开启ds12cr887内部震荡器,因为在出厂的时候被厂家关闭了
	while(1)
	{
		kscan();			//键扫描
		if(flag==0)			
		{
			tmpchange();	//发送温度装换
			miao=read_ds(0);//读取秒
			fen=read_ds(2);//读取分
			shi=read_ds(4); //读取时
			ri=read_ds(7);//读取日
			yue=read_ds(8);//读取月
			nian=read_ds(9);//读取年
			xq=read_ds(6);//读取星期

			tmp();			//读取温度
			display();			//刷新显示数据
//			shanluo();
		}	
	}
}

void t0() interrupt 1
{
	TH0=(65535-50000)/256;
	TL0=(65535-50000)%256;
	tt++;
	if(tt==13)
	{
		tt=0;
		d1=~d1;
	}		
}

⌨️ 快捷键说明

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