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

📄 wnl.c

📁 12864 LCD万年历芯片 驱动芯片KS0108
💻 C
📖 第 1 页 / 共 2 页
字号:
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;
		}
}

/******************************************************************************************
* 函数名称    :ReadTemperature
* 功能描述    :读取温度
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
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();
		b=ReadOneChar();
		t=b;
		t<<=8;
		t=t|a;
		tt=t*0.0625;
		t= tt*10+0.5; //放大10倍输出并四舍五入
		return(t);
}
/******************************************************************************************
* 函数名称    :clock_out
* 功能描述    :
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void clock_out(uchar 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;
}
/******************************************************************************************
* 函数名称    :clock_in
* 功能描述    :
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
uchar 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);
}
/******************************************************************************************
* 函数名称    :read_clock
* 功能描述    :
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
uchar read_clock(uchar ord)
{
		uchar 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);
}
/******************************************************************************************
* 函数名称    :write_clock
* 功能描述    :
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void write_clock(uchar ord, uchar dd)
{
		clock_clk=0;
		clock_rst=0;
		clock_rst=1;
		clock_out(ord);
		clock_out(dd);
		clock_rst=0;
		clock_clk=1;
}
/******************************************************************************************
* 函数名称    :Serial_Ini
* 功能描述    :设置串行口,波特率为4800
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void Serial_Ini()
{
		TMOD=0x20;
		TH1=TL1=0xF3;
		PCON=0x80;
		EA=1;
		ES=1;
		TR1=1;
		SCON=0x50;
}

/******************************************************************************************
* 函数名称    :Delay
* 功能描述    :
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
main()
{
		unsigned int i=0,k;
		unsigned char a=0,b=0,c=0,d,e,f=0;

		lcd_init();//设置液晶显示器
		Serial_Ini();//初始化串行口

	//在预定的位置上写入汉字
		write_chinese(0,4,dang);
		write_chinese(16,4,qian);
		write_chinese(32,4,shi);
		write_chinese(48,4,wen);
		write_digit(80,4,point);
		write_chinese(96,4,sheshidu);
		write_chinese(80,6,jian);
		write_chinese(96,6,zhi);
		write_chinese(112,6,wu);
		write_digit(72,2,maohao);
		write_digit(96,2,maohao);
		write_chinese(0,2,xing);
		write_chinese(16,2,qi);
		write_chinese(32,0,nian);
	//设置时钟的初始值
		write_clock(0x8e,0x00);//protect
		write_clock(0x8c,0x05);//year
		write_clock(0x8a,0x01);//day
		write_clock(0x88,0x03);//month
		write_clock(0x86,0x12);//date
		write_clock(0x84,0x12);//hour
		write_clock(0x82,0x00);//minute
		write_clock(0x80,0x00);//second
		write_clock(0x8e,0x80);//protect	

		while(1)//主循环
 		{   
			i=ReadTemperature();//读温度
			a=i/100;
			write_digit(64,4,zero+a*16);
			b=i/10-a*10;
			write_digit(72,4,zero+b*16);
			c=i-a*100-b*10;
			write_digit(88,4,zero+c*16);
			d=read_clock(0x8d);//读年
			e=d;
			d=d>>4;
			e=e&0xf;
			write_digit(0,0,two);
			write_digit(8,0,zero);
			write_digit(16,0,zero+d*16);
			write_digit(24,0,zero+e*16);
			d=read_clock(0x89);//读月
			e=d;
			d=d>>4;
			e=e&0x0f;
			write_digit(56,0,zero+d*16);
			write_digit(64,0,zero+e*16);
			write_chinese(72,0,yue);
			d=read_clock(0x87);//读日
			e=d;
			d=d>>4;
			e=e&0x0f;
			write_digit(88,0,zero+d*16);
			write_digit(96,0,zero+e*16);
			write_chinese(104,0,ri);
			d=read_clock(0x8b);//读星期
			write_chinese(32,2,cone+(d-1)*32);//写入星期的汉字
			d=read_clock(0x85);//读小时
			e=d;
			d=d>>4;
			e=e&0x0f;
			write_digit(56,2,zero+d*16);
			write_digit(64,2,zero+e*16);
			d=read_clock(0x83);//读分钟
			e=d;
			d=d>>4;
			e=e&0x0f;
			write_digit(80,2,zero+d*16);
			write_digit(88,2,zero+e*16);
			d=read_clock(0x81);//读秒
			e=d;
			d=d>>4;
			e=e&0x0f;
			write_digit(104,2,zero+d*16);
			write_digit(112,2,zero+e*16);
			if(f==5)//闪烁控制
				{
					write_flashcn(80,6,jian);
					write_flashcn(96,6,zhi);
					write_flashcn(112,6,wu);
					m=!m;
					f=0;
				}
			f=f+1;
			k=100;
			while(k)//延时
 			{
				k--;
			}
			if(num==7||num==2)//控制字的格式
			{
				write_clock(0x8e,0x00);//解除ds1302的写保护
				if(rec[0]=='1')//用户写年月日
				{
					a=rec[1]-'0';
					b=rec[2]-'0';
					b=(a<<4)|b;
					write_clock(0x8c,b);//写年
					a=rec[3]-'0';
					b=rec[4]-'0';
					b=(a<<4)|b;
					write_clock(0x88,b);//写月
					a=rec[5]-'0';
					b=rec[6]-'0';
					b=(a<<4)|b;
					write_clock(0x86,b);//写日
				}
			else if(rec[0]=='2')
				{
					a=rec[1]-'0';
					b=rec[2]-'0';
					b=(a<<4)|b;
					write_clock(0x84,b);//写小时
					a=rec[3]-'0';
					b=rec[4]-'0';
					b=(a<<4)|b;
					write_clock(0x82,b);//写分钟
					a=rec[5]-'0';
					b=rec[6]-'0';
					b=(a<<4)|b;
					write_clock(0x80,b);//写秒
				}
			else if(rec[0]=='3')
				{
					a=rec[1]-'0';
					write_clock(0x8a,a);//写星期
				}
			write_clock(0x8e,0x80);//加入写保护
		}
		num=0;//指令序号归零
   }
}
/******************************************************************************************
* 函数名称    :serial
* 功能描述    :
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void serial() interrupt 4//串行口的中断服务函数
{
	rec[num]=SBUF;
	num++;
	RI=0;
}

⌨️ 快捷键说明

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