📄 wnl.c
字号:
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 + -