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

📄 ds12cr887mnl.c

📁 基于DS12887的多功能电子智能时钟
💻 C
📖 第 1 页 / 共 2 页
字号:
	if ( month == 10 && date ==  1 ){ lcm_w_word("  中国国庆节    "); }//10
	if ( month == 10 && date ==  4 ){ lcm_w_word("  世界动物日    "); }
	if ( month == 10 && date == 24 ){ lcm_w_word("    联合国日    "); }
	if ( month == 10 && date == 12 ){ lcm_w_word("明天是国际教师节"); }
	if ( month == 10 && date == 13 ){ lcm_w_word("  国际教师节    "); }

	if ( month == 11 && date == 10 ){ lcm_w_word("  世界青年节    "); }//11
	if ( month == 11 && date == 17 ){ lcm_w_word("  世界学生节    "); }

	if ( month == 12 && date ==  1 ){ lcm_w_word("  世界艾滋病日  "); }//12
	if ( month == 12 && date == 23 ){ lcm_w_word("  明晚平安夜    "); }
	if ( month == 12 && date == 24 ){ lcm_w_word("  今晚平安夜    "); }
	if ( month == 12 && date == 25 ){ lcm_w_word("    圣诞快乐    "); }
	if ( month == 12 && date == 31 ){ lcm_w_word("    明日新年    "); }
	else{ 
			if ( hour >=  4 && hour <   6 ){ lcm_w_word("★★__▲▲__凌晨"); }
			if ( hour >=  6 && hour <   8 ){ lcm_w_word("☆○__▲△__早晨"); }
			if ( hour >=  8 && hour <  12 ){ lcm_w_word("__●__▲▲__上午"); }
			if ( hour == 12)               { lcm_w_word("____▲●▲__中午"); }
			if ( hour >= 13 && hour <  18 ){ lcm_w_word("__▲▲__●__下午"); }
			if ( hour >= 18 && hour <  22 ){ lcm_w_word("△▲__●☆__晚上"); }
			if ( hour >= 22 && hour <= 23 ){ lcm_w_word("△▲__★☆__夜里"); }
			if ( hour >= 0  && hour <   4 ){ lcm_w_word("__★▲▲★__深夜"); }
		}
}


/*电子时钟在液晶屏上显示驱动程序---------------------------------------------*/

//往液晶屏填写 年 数据
void lcm_w_year(void)
{
	year=ds_read(9);
	lcm_w_test(0,0x80);//在液晶屏上显示的位置
	lcm_w_word("现在时间是20");
	lcm_w_test(0,0x86);//在LCM上的写入位置
	lcm_w_test(1,(year/10)+0x30);	
	lcm_w_test(1,year%10+0x30);
	lcm_w_word("年");	
}	

//往液晶屏填写 月 数据
void lcm_w_month(void)
{
	month=ds_read(8);
	lcm_w_test(0,0x90);	//月份在液晶屏上显示的位置
	if(month/10 != 0){lcm_w_test(1,(month/10)+0x30);}	//十位消隐
		else{lcm_w_test(1,0x20);}//十位消隐		
	lcm_w_test(1,month%10+0x30);
	lcm_w_test(0,0x91);//在LCM上的写入位置
	lcm_w_word("月");	
}

//将星期处理并送入液晶屏的指定区域显示
void lcm_w_day(void)
{
	uchar sel;
	day = ds_read(6);
	sel = ds_read(6); 
	lcm_w_test(0,0x97);//写入指定区域(97H 第二行第8个字)在液晶屏上显示的位置
	if(sel==7)  {lcm_w_word("日");}    
  	if(sel==6)  {lcm_w_word("六");}    
  	if(sel==5)  {lcm_w_word("五");}    
  	if(sel==4)  {lcm_w_word("四");}   
	if(sel==3)  {lcm_w_word("三");}
  	if(sel==2)  {lcm_w_word("二");}    
  	if(sel==1)  {lcm_w_word("一");}    //星期一
	lcm_w_test(0,0x95);	  //在LCM上的写入位置
	lcm_w_word("星期");
}

//往液晶屏填写 日 数据
void lcm_w_date(void)
{
	date=ds_read(7);
	lcm_w_test(0,0x92);	//日期在液晶屏上显示的位置
	if(date/10 != 0){lcm_w_test(1,(date/10)+0x30);}	//十位消隐
		else{lcm_w_test(1,0x20);}//十位消隐
	lcm_w_test(1,date%10+0x30);
	lcm_w_test(0,0x93);	//在LCM上的写入位置
	lcm_w_word("日");
					
}

//往液晶屏填写 小时 数据
void lcm_w_hour(void)
{
	hour=ds_read(4);//读取DS12CR887的小时
	lcm_w_test(0,0x88);	//小时在液晶屏上显示的位置
	lcm_w_test(1,(hour/10)+0x30);
	lcm_w_test(1,hour%10+0x30);			
}

//往液晶屏填写 分钟 数据
void lcm_w_min(void)
{
	min=ds_read(2);//读取DS12CR887的分				
	lcm_w_test(0,0x89);	  //分钟在液晶屏上显示的位置
	lcm_w_test(1,0x3a);	  //小时与分钟之间显示":"
	lcm_w_test(1,(min/10)+0x30);
	lcm_w_test(1,min%10+0x30);	
	lcm_w_test(1,0x3a);	 //分钟与小时之间显示":"	
}

//往液晶屏填写 秒 数据
void lcm_w_sec(void)
{
	uint i=0;
	uchar a=0,b=0,c=0;
	sec=ds_read(0);//读取DS12CR887的秒
	lcm_w_test(0,0x8b);		//秒钟在液晶屏上显示的位置
	lcm_w_test(1,(sec/10)+0x30);	//写十位//对10求余分解出十位		
	lcm_w_test(1,sec%10+0x30);	//写个位

	lcm_w_test(0,0x8d);		//温度在液晶屏上显示的位置		
	i=ReadTemperature();//读温度并送显
	a=i/100;
	lcm_w_test(1,a+0x30);	//显示温度十位
	b=i/10-a*10;
	lcm_w_test(1,b+0x30);	//个位
	lcm_w_test(1,0x2e);	 //"."
	c=i-a*100-b*10;
	lcm_w_test(1,c+0x30); //小数点位1位		
	lcm_w_word("℃");	//度C

}

/*调整时间、日期程序---------------------------------------------------------*/
void Set_time(uchar sel)  
{ 
	signed char address,item;
	signed char max,mini; 
	lcm_w_test(0,0x9a);
	lcm_w_word("调整");  
	if(sel==5)  {lcm_w_word("分钟");address=2; max=59;mini=0;}  //分钟2 
	if(sel==4)  {lcm_w_word("小时");address=4; max=23;mini=0;}  //小时4  
	if(sel==3)  {lcm_w_word("星期");address=6; max=7; mini=1;}   //星期6   
	if(sel==2)  {lcm_w_word("日期");address=7; max=31;mini=1;}  //日期7  
	if(sel==1)  {lcm_w_word("月份");address=8; max=12;mini=1;}  //月份8  
	if(sel==0)  {lcm_w_word("年份");address=9; max=99; mini=0;} //年份9   
	
	//读取DS12CR887某地址上的数值赋给item 	
	item=ds_read(address);
	if(K3 == 0)//K3-加
	{
		item++;//数加 1  
	}
	if(K4 == 0)//K4-减
	{
		item--;//数减 1 
	}
	if(item>max) 
		item=mini;//查看数值有效范围   
	if(item<mini) 
		item=max;
	
	//将调整好的item值写入DS12CR887           
	ds_write(address,item);//+
	lcm_w_year();   //年
	lcm_w_month();	//月 
	lcm_w_date();	//日
	lcm_w_day();	//星期
	lcm_w_hour();	//时
	lcm_w_min();	//分
}

/*显示欢迎信息---------------------------------------------------------------*/

void welcome(void)
{								  
	write_com(0x81);//第一行(如果是地址是:80H,即LCD的第一行的第一个位置显示)
	lcm_w_word("电子智能时钟"); 

	write_com(0x90);//第二行(如果是地址是:90H,即LCD的第二行的第一个位置显示) 
	lcm_w_word("DS12887+LCM12864"); 
	
	write_com(0x88);//第三行(如果是地址是:88H,即LCD的第二行的第一个位置显示) 
	lcm_w_word("※程序设计: 七品"); 
	
	write_com(0x98);//第四行(如果是地址是:98H,即LCD的第二行的第一个位置显示)	 
	lcm_w_word("☆2009年02月11日");	
}

/*主程序---------------------------------------------------------------------*/

main() 
{
	uchar e=0;
	K1=1;K2=1;K3=1;K4=1;
	ds_int();     //初始化DS12CR887
	lcm_init();   //初始化液晶显示器
	lcm_clr();    //清屏
	welcome();    //显示欢迎信息
	DelayM(3000); //显示停留3秒
	lcm_clr();    //清屏
	while(1)
	{
		if (w == 0)	//正常走时
		{   
			lcm_w_year();   //显示年
			lcm_w_month();	//显示月 
			lcm_w_date();	//显示日
			lcm_w_day();	//显示星期
			lcm_w_hour();	//显示时
			lcm_w_min();	//显示分
			lcm_w_sec();	//显示秒
			days();         //显示节日提示
		}
		else {}//否则启动调时
	
		if (K1 == 0) // 设置时间
	    {
	    	DelayM(20);	   //按键消抖
			if(K1 == 0 && w == 1)  //当是调时状态 本键用于调整下一项
			{
				e++;
				if (e >= 6 )
				{
					e = 0;  
				}
				Set_time(e);//调整				
			}			
			if(K1 == 0 && w == 0)  //当是正常状态时就进入调时状态
			{
				lcm_clr();//清屏
				w=1;	  //进入调时				
				Set_time(e);//调整
			}
	       	while(K1 == 0);//等待键松开 
		}
	
		if (K2 == 0) // 当在调时状态时就退出调时
	    {
			DelayM(20);//按键消抖
			if(K2 == 0 && w == 1)
			{				
				w = 0;	  //退出调时
				e = 0;		//"下一项"计数器清0								
			}
			if(K2 == 0 && w == 0) 
			{				
				lcm_clr();//清屏
	         	welcome();//显示欢迎字				
				while(K2 == 0);//等待键松开  
			}
			lcm_clr();//清屏				
			lcm_w_year();   //年
			lcm_w_month();	//月 
			lcm_w_date();	//日
			lcm_w_day();	//星期
			lcm_w_hour();	//时
			lcm_w_min();	//分
			lcm_w_sec();	//秒
			days();         //显示节日提示
	 		while(K2 == 0);//等待键松开  
		}
	
		if (K3 == 0 && w == 1)//加调整
		{ 
	   		DelayM(20);//按键消抖
	   		if(K3 == 0 && w == 1)
			{				
				Set_time(e);//调整
			}
	   		while(K3 == 0);//等待键松开
		}
	
		if (K4 == 0 && w == 1) //减调整
		{       	
	   		DelayM(20);//按键消抖
	   		if(K4 == 0 && w == 1)
			{				
				Set_time(e);//调整
			}
	   		while(K4 == 0);//等待键松开
		}
	}	
}

/*----------------------------文件结束-------------------------*/

⌨️ 快捷键说明

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