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

📄 zdbwnl.c

📁 万年历+温度+闹钟.dan单片机应用上的一些小代码。
💻 C
📖 第 1 页 / 共 3 页
字号:
	unsigned char i=0;
	unsigned char dat = 0;
	for (i=8;i>0;i--)
	{
		DQ = 0; // 给脉冲信号
		dat>>=1;
		DQ = 1; // 给脉冲信号
		if(DQ)
		dat|=0x80;
		Delay(4);
	}
	return(dat);
}

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

/******************************************************************************/
unsigned int ReadTemperature(void)//读取温度
{
	unsigned char a=0;
	unsigned char b=0;
	unsigned int 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);
}

/******************************************************************************/
//1302驱动程序
void clock_out(unsigned char dd)
{
	ACC=dd;
	clock_dat=a0; clock_clk=1; clock_clk=0;
	clock_dat=a1; clock_clk=1; clock_clk=0;
	clock_dat=a2; clock_clk=1; clock_clk=0;
	clock_dat=a3; clock_clk=1; clock_clk=0;
	clock_dat=a4; clock_clk=1; clock_clk=0;
	clock_dat=a5; clock_clk=1; clock_clk=0;
	clock_dat=a6; clock_clk=1; clock_clk=0;
	clock_dat=a7; clock_clk=1; clock_clk=0;
}

/******************************************************************************/
unsigned char clock_in(void)
{
	clock_dat=1;
	a0=clock_dat;
	clock_clk=1; clock_clk=0; a1=clock_dat;
	clock_clk=1; clock_clk=0; a2=clock_dat;
	clock_clk=1; clock_clk=0; a3=clock_dat;
	clock_clk=1; clock_clk=0; a4=clock_dat;
	clock_clk=1; clock_clk=0; a5=clock_dat;
	clock_clk=1; clock_clk=0; a6=clock_dat;
	clock_clk=1; clock_clk=0; a7=clock_dat;
	return(ACC);
}

/******************************************************************************/
unsigned char read_clock(unsigned char ord)
{
	unsigned char dd=0;
	clock_clk=0;
	clock_Rst=0;
	clock_Rst=1;
	clock_out(ord);
	dd=clock_in();
	clock_Rst=0;
	clock_clk=1;
	return(dd);
}

/******************************************************************************/
void write_clock(unsigned char ord, unsigned char dd)
{
	clock_clk=0;
	clock_Rst=0;
	clock_Rst=1;
	clock_out(ord);
	clock_out(dd);
	clock_Rst=0;
	clock_clk=1;
}

/******************************************************************************/
void Disp(void)//显示和闪烁函数!
{
	unsigned int i=0;
	unsigned char a=0,b=0,c=0,f=0;

	i=ReadTemperature();//读温度并送显
	a=i/100;
	Mcs=1;Scs=0;
	Disp_Digit(5,40,zero+a*16);
	b=i/10-a*10;
	Mcs=1;Scs=0;
	Disp_Digit(5,48,zero+b*16);
	c=i-a*100-b*10;
	Mcs=0;Scs=1;
	Disp_Digit(5,0,zero+c*16);

	if(sec==1)  //秒闪烁标志位
 	{
    	if(flag==1)
       	{    
        	d=read_clock(0x81);//读秒
			e=d;
			d=d>>4;
			e=e&0x0f;
			Mcs=0;Scs=1;
			Disp_Digit(3,40,zero+d*16);//送显示
			Disp_Digit(3,48,zero+e*16);   
       }
	   else
       {
	   	Mcs=0;Scs=1;
		Disp_Digit(3,40,space); //显示空格
        Disp_Digit(3,48,space);    
       }
    } 
  	else
    {
     	d=read_clock(0x81);//读秒
		e=d;
		d=d>>4;
		e=e&0x0f;
		Mcs=0;Scs=1;
/********************************************************************************/		
		if(d == 0 && e == 0)
		{
			flag_sec = 1;//秒标志位设定
		}
/********************************************************************************/    
		Disp_Digit(3,40,zero+d*16);
		Disp_Digit(3,48,zero+e*16);      
    }    
   
  	if(min==1)  //分钟闪烁标志位
    {
    	if(flag==1)
       	{    
       		d=read_clock(0x83);//读分钟
			e=d;
			d=d>>4;
			e=e&0x0f;
			Mcs=0;Scs=1;
			Disp_Digit(3,16,zero+d*16);
			Disp_Digit(3,24,zero+e*16);     
       	}
     	else
       	{	
			Mcs=0;Scs=1;
        	Disp_Digit(3,16,space); //显示空格
	        Disp_Digit(3,24,space);    
       	}
    } 
  	else
    {
    	d=read_clock(0x83);//读分钟
		e=d;
		d=d>>4;
		e=e&0x0f;
		Mcs=0;Scs=1;
/******************************************************************************/		
		if(d == 0 && e == 0)
		{
			flag_min = 1;//分标志位设定
		}
/******************************************************************************/
		Disp_Digit(3,16,zero+d*16);
		Disp_Digit(3,24,zero+e*16);         
    } 

	if(flag_sec == 1 && flag_min == 1)
	{
		Beep();//整点报警
		flag_sec = 0;//清除标志位
		flag_min = 0;
	}

  	if(hour==1)  //小时闪烁标志位
    {
    	if(flag==1)
       	{    
      		d=read_clock(0x85);//读小时
			e=d;
			d=d>>4;
			e=e&0x0f;
			Mcs=1;Scs=0;
			Disp_Digit(3,56,zero+d*16);
			Mcs=0;Scs=1;
			Disp_Digit(3,0,zero+e*16);
       	}
     	else
       	{
			Mcs=1;Scs=0;
        	Disp_Digit(3,56,space); //显示空格
			Mcs=0;Scs=1;
	        Disp_Digit(3,0,space);    
    	}
    } 
  	else
   	{ 
    	d=read_clock(0x85);//读小时
		e=d;
		d=d>>4;
		e=e&0x0f;
		Mcs=1;Scs=0;
		Disp_Digit(3,56,zero+d*16);
		Mcs=0;Scs=1;
		Disp_Digit(3,0,zero+e*16);
   	}

   	if(year==1)  //年闪烁标志位
    {
    	if(flag==1)
       	{    
        	d=read_clock(0x8d);//读年
			e=d;
			d=d>>4;
			e=e&0x0f;
			Mcs=1;Scs=0;
			Disp_Digit(1,8,two);
			Disp_Digit(1,16,zero);
			Disp_Digit(1,24,zero+d*16);
			Disp_Digit(1,32,zero+e*16);
       	}
     	else
       	{
			Mcs=1;Scs=0;
        	Disp_Digit(1,24,space); //显示空格
        	Disp_Digit(1,32,space);    
       	}
    } 
  	else
    { 
    	d=read_clock(0x8d);//读年
		e=d;
		d=d>>4;
		e=e&0x0f;
		Mcs=1;Scs=0;
		Disp_Digit(1,8,two);
		Disp_Digit(1,16,zero);
		Disp_Digit(1,24,zero+d*16);
		Disp_Digit(1,32,zero+e*16);
    }
     
  	if(mon==1)  //月闪烁标志位
    {
    	if(flag==1)
       	{    
        	d=read_clock(0x89);//读月
			e=d;
			d=d>>4;
			e=e&0x0f;
			Mcs=1;Scs=0;
			Disp_Digit(1,56,zero+d*16);
			Mcs=0;Scs=1;
			Disp_Digit(1,0,zero+e*16);
			Disp_Chinese(1,8,yue);
       	}
     	else
       	{
			Mcs=1;Scs=0;
        	Disp_Digit(1,56,space); //显示空格
			Mcs=0;Scs=1;
        	Disp_Digit(1,0,space);    
       	}
    } 
  	else
    { 
      	d=read_clock(0x89);//读月
		e=d;
		d=d>>4;
		e=e&0x0f;
		Mcs=1;Scs=0;
		Disp_Digit(1,56,zero+d*16);
		Mcs=0;Scs=1;
		Disp_Digit(1,0,zero+e*16);
		Disp_Chinese(1,8,yue);
    }   

  	if(day==1)  //日闪烁标志位
    {
    	if(flag==1)
       	{  
	   		d=read_clock(0x87);//读日
			e=d;
			d=d>>4;
			e=e&0x0f;
			Mcs=0;Scs=1;
			Disp_Digit(1,24,zero+d*16);
			Disp_Digit(1,32,zero+e*16);
			Disp_Chinese(1,40,ri);
    	}
    	else
   	 	{
			Mcs=0;Scs=1;
        	Disp_Digit(1,24,space); //显示空格
        	Disp_Digit(1,32,space);    
    	}
    } 
  	else
    { 
    	d=read_clock(0x87);//读日
		e=d;
		d=d>>4;
		e=e&0x0f;
		Mcs=0;Scs=1;
		Disp_Digit(1,24,zero+d*16);
		Disp_Digit(1,32,zero+e*16);
		Disp_Chinese(1,40,ri);
    }
    
    if(weekk==1)  //星期闪烁标志位
    {
    	if(flag==1)
       	{    
        	d=read_clock(0x8b);//读星期
			Mcs=1;Scs=0;
			Disp_Chinese(3,40,cone+(d-1)*32);//写入星期的汉字
       	}
     	else
       	{
			Mcs=1;Scs=0;
        	Disp_Chinese(3,40,spaces); //显示空格        
       	}
    } 
  	else
    { 
     	d=read_clock(0x8b);//读星期
		Mcs=1;Scs=0;
		Disp_Chinese(3,40,cone+(d-1)*32);//写入星期的汉字
    }     
}

/******************************************************************************/
void Disp2(void)//显示和闪烁函数
{
	if(Kgb==1)  //开关闪烁标志位
 	{
    	if(flag==1)
       	{
			if(Bell_Swh == 0)//0为关
			{
				Mcs=0;Scs=1;
				Disp_Chinese(2,32,guan);//显示关
			}
			else
			{
				Mcs=0;Scs=1;
				Disp_Chinese(2,32,kai);//显示开
			}
        }
	   else
       {
	   		Mcs=0;Scs=1;
			Disp_Chinese(2,32,spaces); //显示空格
       }
    } 
  	else
    {
     	if(Bell_Swh == 0)//关
		{
			Mcs=0;Scs=1;
			Disp_Chinese(2,32,guan);
		}
		else
		{
			Mcs=0;Scs=1;
			Disp_Chinese(2,32,kai);
		}
    }    
   
  	if(Hourb==1)  //时闪烁标志位
    {
    	if(flag==1)
       	{ 
   	    	d=read_clock(0xc3);//读闹钟小时的数值
			e=d;
			d=d>>4;
			e=e&0x0f;
			Mcs=1;Scs=0;
			Disp_Digit(4,48,zero+d*16);
			Disp_Digit(4,56,zero+e*16);   
       	}
     	else
       	{
			Mcs=1;Scs=0;

⌨️ 快捷键说明

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