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

📄 new.c

📁 LCD12864和DS18B20与DS1302实现温度测试
💻 C
📖 第 1 页 / 共 3 页
字号:
  		write_com(Col_Add+0);
  		for(j=64;j<128;j++)
	    {
			write_data(img[k*128+j]);
		}
 	}
}

/*******************************************************************************/
void Disp_Chinese(unsigned char pag,unsigned char col,  char code *hzk)
{   //指定位置显示汉字16*16
	unsigned char j=0,i=0;

	for(j=0;j<2;j++)
	{
		write_com(Page_Add+pag+j);
		write_com(Col_Add+col);
		for(i=0;i<16;i++) 
		{
			write_data(hzk[16*j+i]);
		}
	}
}

/*******************************************************************************/
void Disp_Digit(unsigned char pag,unsigned char col, unsigned char code *hzk)
{   //指定位置显示字母或数字8*16
	unsigned char j=0, i=0;

	for(j=0;j<2;j++)
	{
		write_com(Page_Add+pag+j);
		write_com(Col_Add+col);
		for(i=0;i<8;i++) 
		{
			write_data(hzk[8*j+i]);
		}
	}
}

/********************************************************************************/
void Init_lcd(void)//初始化LCD屏
{
	Lcd_Rst=0;
	Delay12864(100);
	Lcd_Rst=1;
	Delay12864(100);

	Mcs=1;	Scs=1;

	Delay12864(100);
	write_com(Disp_Off);
	write_com(Page_Add+0);
	write_com(Start_Line+0);
	write_com(Col_Add+0);
	write_com(Disp_On);
}
	
/*******************************************************************************/
void Init_DS18B20(void)//初始化ds1820
{
	unsigned char 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);
}

/******************************************************************************/
unsigned char ReadOneChar(void)//读一个字节
{
	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)
{
 unsigned char i;
	ACC=dd;
	for(i=8;i>0;i--)
	{
	 clock_dat=a0;
	 clock_clk=1;
     clock_clk=0;
	 ACC=ACC>>1;
	 }
}

/******************************************************************************/
unsigned char clock_in(void)
{
	 unsigned char i;
	for(i=8;i>0;i--)
	{
	 ACC=ACC>>1;
	 a7=clock_dat;
     clock_clk=1;
     clock_clk=0;
	 }
	return(ACC);
}

/******************************************************************************/
unsigned char read_clock(unsigned char ord)
{
	unsigned char dd=0;
	clock_Rst=0;
	clock_clk=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_Rst=0;	clock_clk=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;                我的邮箱是qings_yu@asustek.com.cn或者yqs89@163.com  谢谢
	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);//读秒
		d=((d&0x70)>>4)*10+(d&0x0f);
		e=d;
		d=d/10;
		e=e%10;
			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);//读秒
	d=((d&0x70)>>4)*10+(d&0x0f);
		e=d;
		d=d/10;
		e=e%10;
		Mcs=0;Scs=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;
		Disp_Digit(3,16,zero+d*16);
		Disp_Digit(3,24,zero+e*16);         
    } 

  	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

⌨️ 快捷键说明

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