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

📄 多功能电子时钟 c程序.c

📁 ourdev_479323
💻 C
📖 第 1 页 / 共 5 页
字号:
void lcm_w_word(uchar *s)
{
	while(*s>0)
	{					
    	write_data(*s); 
    	s++;
    }
}

//写指令或数据(被调用层)
void lcm_w_test(bit i,uchar word)
{
	if(i == 0)
	{
		write_com(word);//写指令或数据(0,指令)
	}
	else
	{
		write_data(word);//写指令或数据(1,数据)
	}
}

//清屏函数
void lcm_clr(void)
{
	lcm_w_test(0,0x01);	
}

/*DS18B20驱动程序------------------------------------------------------------*/
//初始化ds1820函数
void Init_DS18B20(void)
{
	uchar x=0;
	DQ = 1;    //DQ复位
	Delay(8);  //稍做延时
	DQ = 0;    //单片机将DQ拉低
	Delay(80); //精确延时 大于 480us
	DQ = 1;    //拉高总线
	Delay(14);
	x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
	Delay(20);
}

//读一个字节函数
uchar ReadOneChar(void)
{
	uchar i=0;
	uchar dat = 0;
	for (i=8;i>0;i--)
	{
		DQ = 0; // 给脉冲信号
		dat>>=1;
		DQ = 1; // 给脉冲信号
		if(DQ)
		dat|=0x80;
		Delay(4);
	}
	return(dat);
}

//写一个字节函数
void WriteOneChar(uchar dat)
{
	uchar i=0;
	for (i=8; i>0; i--)
	{
		DQ = 0;
		DQ = dat&0x01;
		Delay(5);
		DQ = 1;
		dat>>=1;
	}
}

//读取温度函数
uint ReadTemperature(void)
{
	uchar a=0;
	uchar b=0;
	uint t=0;
	float tt=0;
	Init_DS18B20();
	WriteOneChar(0xCC); // 跳过读序号列号的操作
	WriteOneChar(0x44); // 启动温度转换
	Init_DS18B20();
	WriteOneChar(0xCC); //跳过读序号列号的操作
	WriteOneChar(0xBE); //读取温度寄存器
	a=ReadOneChar();  //读低8位
	b=ReadOneChar(); //读高8位
	t=b;
	t<<=8;
	t=t|a;
	tt=t*0.0625;
	t= tt*10+0.5; //放大10倍输出并四舍五入
	return(t);
}
// 节假日 提示
void days(void)
{
	lcm_w_test(0,0x98);
	if ( cen == 0x20 && year ==  0x9 && month == 0x0 && date == 0x0 ){ lcm_w_word("Happy birthday!!");   if(hour==0x7 && min==0x0 && sec==0x0){Play(Music_happy,0,3,300);}}
	
	else
	{
		if ( month_moon == 0x0 && date_moon == 0x0 )   { lcm_w_word("祝你生日快乐!!  "); if(hour==0x7 && min==0x0 && sec==0x0){Play(Music_happy,0,3,300);}}
		if ( month_moon == 0x0 && date_moon == 0x0 )   { lcm_w_word("妹妹的生日!!  "); }
		if ( month_moon == 0x0 && date_moon == 0x0 )   { lcm_w_word("弟弟的生日!!  "); }
		if ( month_moon == 0x0 && date_moon == 0x0 )   { lcm_w_word("    的生日!!  "); }
		else
		{
		if (month_moon== 0x1 && date_moon == 0x1 ){ lcm_w_word("    今日春节    ");  }                                                  
		if (month_moon== 0x1 && date_moon == 0x15 ){ lcm_w_word("  元宵节快乐    "); } 
		if (month_moon== 0x2 && date_moon == 0x2 ){ lcm_w_word("    青龙节      "); } 
		if (month_moon== 0x5 && date_moon == 0x5 ){ lcm_w_word("    端午节      "); }  	
		if (month_moon== 0x7 && date_moon == 0x7 ){ lcm_w_word("七七中国情人节  "); }  
		if (month_moon== 0x7 && date_moon == 0x15 ){ lcm_w_word("    中元节      "); }  		
		if (month_moon== 0x8 && date_moon == 0x15 ){ lcm_w_word("  中秋节快乐    "); }  
		if (month_moon== 0x9 && date_moon == 0x9 ){ lcm_w_word("  今日重阳节    "); }  
		if (month_moon== 0x12 && date_moon == 0x8 ){ lcm_w_word("  今日腊八节    "); }  
		if (month_moon== 0x12 && date_moon == 0x15 ){ lcm_w_word("  过小年        "); }  
		if (month_moon== 0x12 && date_moon == 0x29 ){ lcm_w_word("  腊月二十九    "); }  
		if (month_moon== 0x12 && date_moon == 0x30 ){ lcm_w_word("  大年三十(^o^) "); }

		if ( month == 0x1 && date ==  0x1 ){ lcm_w_word("    元旦快乐    "); }//1月
		if ( month == 0x1 && date == 0x28 ){ lcm_w_word("  世界麻风日    "); }
		  
		if ( month == 0x2 && date ==  0x2 ){ lcm_w_word("  世界湿地日    "); }//2月
		if ( month == 0x2 && date == 0x13 ){ lcm_w_word("  明天情人节了  "); }		
		if ( month == 0x2 && date == 0x14 ){ lcm_w_word("  今天是情人节  "); }
					
		if ( month == 0x3 && date ==  0x1 ){ lcm_w_word("  国际海豹日    "); }//3月		
		if ( month == 0x3 && date ==  0x3 ){ lcm_w_word("  全国爱耳日    "); }		
		if ( month == 0x3 && date ==  0x8 ){ lcm_w_word("国际劳动妇女节  "); }		
		if ( month == 0x3 && date == 0x12 ){ lcm_w_word("    植树节      "); }		
		if ( month == 0x3 && date == 0x14 ){ lcm_w_word("  国际警察日    "); }		
		if ( month == 0x3 && date == 0x15 ){ lcm_w_word("  消费者权益日  "); }		
		if ( month == 0x3 && date == 0x17 ){ lcm_w_word("  国际航海日    "); }		
		if ( month == 0x3 && date == 0x21 ){ lcm_w_word("  世界森林日    "); }		
		if ( month == 0x3 && date == 0x22 ){ lcm_w_word("    世界水日    "); }		
		if ( month == 0x3 && date == 0x23 ){ lcm_w_word("  世界气象日    "); }		
		if ( month == 0x3 && date == 0x24 ){ lcm_w_word("世界防治结核病日"); }
				
		if ( month == 0x4 && date ==  0x1 ){ lcm_w_word("愚人节  小心上当"); }//4		
		if ( month == 0x4 && date ==  0x7 ){ lcm_w_word("  世界卫生日    "); }		
		if ( month == 0x4 && date ==  0x8 ){ lcm_w_word("    复活节      "); }		
		if ( month == 0x4 && date == 0x13 ){ lcm_w_word("  黑色星期五    "); }
		  		
		if ( month == 0x5 && date ==  0x1 ){ lcm_w_word("五一国际劳动节  "); }//5		
		if ( month == 0x5 && date ==  0x4 ){ lcm_w_word("    青年节      "); }		
		if ( month == 0x5 && date ==  0x8 ){ lcm_w_word("  世界红十字日  "); }		
		if ( month == 0x5 && date == 0x12 ){ lcm_w_word("  国际护士节    "); }		
		if ( month == 0x5 && date ==  0x5 ){ lcm_w_word("近日请注意母亲节"); }		
		if ( month == 0x5 && date == 0x15 ){ lcm_w_word("  国际家庭日    "); }
		if ( month == 0x5 && date == 0x31 ){ lcm_w_word("  世界无烟日    "); }		
				
		if ( month == 0x6 && date ==  0x1 ){ lcm_w_word("  国际儿童节    "); }//6
		if ( month == 0x6 && date ==  0x5 ){ lcm_w_word("  世界环境日    "); }		
		if ( month == 0x6 && date == 0x26 ){ lcm_w_word("  国际禁毒日    "); }		
		if ( month == 0x6 && date ==  0x6 ){ lcm_w_word("  全国爱眼日    "); }		
		if ( month == 0x6 && date == 0x13 ){ lcm_w_word("近日请注意父亲节"); }
		if ( month == 0x6 && date == 0x15 ){ lcm_w_word("近日请注意父亲节"); }
		 		
		if ( month == 0x7 && date ==  0x1 ){ lcm_w_word("  七一党生日    "); }//7
		if ( month == 0x7 && date ==  0x7 ){ lcm_w_word("抗日战争纪念日  "); }
		if ( month == 0x7 && date == 0x11 ){ lcm_w_word("  世界人口日    "); }
	  
		if ( month == 0x8 && date ==  0x1 ){ lcm_w_word("  八一建军节    "); }//8
		if ( month == 0x8 && date ==  0x8 ){ lcm_w_word("  中国男子节    "); }
		if ( month == 0x8 && date == 0x15 ){ lcm_w_word("抗战胜利纪念日  "); }
	  
		if ( month == 0x9 && date == 0x10 ){ lcm_w_word("  中国教师节    "); }//9
		if ( month == 0x9 && date == 0x18 ){ lcm_w_word("九一八事变纪念日"); }
		if ( month == 0x9 && date == 0x20 ){ lcm_w_word("  国际爱牙日    "); }
		if ( month == 0x9 && date == 0x27 ){ lcm_w_word("  世界旅游日    "); }
	
		if ( month == 0x10 && date ==  0x1 ){ lcm_w_word("  中国国庆节    "); }//10
		if ( month == 0x10 && date ==  0x4 ){ lcm_w_word("  世界动物日    "); }
		if ( month == 0x10 && date == 0x24 ){ lcm_w_word("    联合国日    "); }
		if ( month == 0x10 && date == 0x12 ){ lcm_w_word("明天是国际教师节"); }
		if ( month == 0x10 && date == 0x13 ){ lcm_w_word("  国际教师节    "); }
	
		if ( month == 0x11 && date == 0x10 ){ lcm_w_word("  世界青年节    "); }//11
		if ( month == 0x11 && date == 0x17 ){ lcm_w_word("  世界学生节    "); }
	
		if ( month == 0x12 && date ==  0x1 ){ lcm_w_word("  世界艾滋病日  "); }//12
		if ( month == 0x12 && date == 0x23 ){ lcm_w_word("  明晚平安夜    "); }
		if ( month == 0x12 && date == 0x24 ){ lcm_w_word("  今晚平安夜    "); }
		if ( month == 0x12 && date == 0x25 ){ lcm_w_word("    圣诞快乐    "); }
		if ( month == 0x12 && date == 0x31 ){ lcm_w_word("    明日新年    "); }
		}
	}
}

/*电子时钟在液晶屏上显示驱动程序---------------------------------------------*/
//往液晶屏填写 年 数据
void lcm_w_year(void)
{
	cen=ds_read(32);
	lcm_w_test(0,0x80);//在液晶屏上显示的位置
	lcm_w_test(1,(cen/16)+0x30);	
	lcm_w_test(1,cen%16+0x30);
	year=ds_read(9);
	lcm_w_test(0,0x81);//在LCM上的写入位置
	lcm_w_test(1,(year/16)+0x30);	
	lcm_w_test(1,year%16+0x30);
	lcm_w_test(0,0x82);
	lcm_w_word("农");
	lcm_w_test(0,0x84);
	lcm_w_word("年");
	nl();
}	

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

//将星期处理并送入液晶屏的指定区域显示
void lcm_w_day(void)
{
	uchar sel;
	day = ds_read(6);
	sel = ds_read(6);
	lcm_w_test(0,0x90);	  
	lcm_w_word("星期"); 
	lcm_w_test(0,0x92);
	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("一");}
}

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

//往液晶屏填写 小时 数据
void lcm_w_hour(void)
{
	hour=ds_read(4);//读取DS12CR887的小时
	lcm_w_test(0,0x88);	//小时在液晶屏上显示的位置
	lcm_w_test(1,(hour/16)+0x30);
	lcm_w_test(1,hour%16+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/16)+0x30);
	lcm_w_test(1,min%16+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/16)+0x30);	//写十位//对10求余分解出十位		
	lcm_w_test(1,sec%16+0x30);	//写个位
	write_com(0x8c);
	if(r1_of==1 || r2_of==1){lcm_w_test(1,0x0e);}//闹铃开启状态

	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,0x98);
	lcm_w_word("调整");
	if(sel==6)  {lcm_w_word("分钟");address=2; max=59;mini=0;}
	if(sel==5)  {lcm_w_word("小时");address=4; max=23;mini=0;}
	if(sel==4)  {lcm_w_word("星期");address=6; max=7;mini=1;}
	if(sel==3)  {lcm_w_word("日期");address=7; max=31; mini=1;}  
	if(sel==2)  {lcm_w_word("月份");address=8; max=12;mini=1;}
	if(sel==1)  {lcm_w_word("年份");address=9; max=99;mini=0;}
	if(sel==0)  {lcm_w_word("世纪");address=32; max=20; mini=19;}
	
	//读取DS12CR887某地址上的数值赋给item 	
	item=ds_read(address);
	item=(item/16)*10+item%16;
	if(K3 == 0)//K3-加
	{
		item++;//数加 1  
	}
	if(K4 == 0)//K4-减
	{
		item--;//数减 1 
	}
	if(item>max) 
		item=mini;//查看数值有效范围   
	if(item<mini) 
		item=max;
	item=(item/10)*16+item%10;
	
	//将调整好的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 lcm_ring()              //显示闹铃设置

⌨️ 快捷键说明

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