📄 quan.c
字号:
}
else if((month==0x09)&(date==0x13))
{
CS1=1;CS2=0;
hz_disp16(6,0,kongbai2);
hz_disp16(6,16,jin); //今
hz_disp16(6,32,tian); //天
hz_disp16(6,48,shi1); //是
CS1=0;CS2=1;
hz_disp16(6,0,ni); //你
hz_disp16(6,16,shen); //生
hz_disp16(6,32,xq7); //日
hz_disp16(6,48,kongbai2);
}
else
{
dis_bir(birthday);
dis_pre(present);
}
}
/*------------------初始化LCD屏--------------------------*/
void init_lcd()
{
CS2=1;
CS1=1;
delay(100);
write_command(Disp_Off);
write_command(Page_Add+0);
write_command(Start_Line+0);
write_command(Col_Add+0);
write_command(Disp_On);
}
/*-------------------------- 开机信息显示------------------------*/
void StartMsg(void)
{
Clr_Scr(); // 先清屏 //
CS2=0;CS1=1;
hz_disp16(0,0,xian); // 献
delays(200);
hz_disp16(0,16,gei); // 给
delays(200);
hz_disp16(0,32,jing); // 靖
delays(200);
hz_disp16(0,48,de); // 的
delays(200);
CS2=1;CS1=0;
hz_disp16(0,0,shen); // 生
delays(200);
hz_disp16(0,16,xq7); // 日
delays(200);
hz_disp16(0,32,li); // 礼
delays(200);
hz_disp16(0,48,wu); // 物
delays(200);
CS2=0;CS1=1;
hz_disp32(2,0,sheng); // 生
hz_disp32(2,32,ri); // 日
CS2=1;CS1=0;
hz_disp32(2,0,kuai); // 快
hz_disp32(2,32,le); // 乐
delays(500);
hz_disp16(6,16,lu); // 陆
delays(200);
hz_disp16(6,32,qian); // 乾
delays(200);
hz_disp16(6,48,kun); // 坤
}
/*------------------------时钟固定汉字显示-----------------------*/
void ClockMsg(void)
{
Clr_Scr(); // 先清屏 //
CS2=0;CS1=1; // 左屏
sz_disp16(0,48,shuzi[2]); // 2
sz_disp16(0,56,shuzi[0]); // 0
hz_disp16(2,16,yue); // 月
hz_disp16(2,48,xq7); // 日
sz_disp16(4,16,maohao); // 冒号
sz_disp16(4,40,maohao);
CS2=1;CS1=0; // 右屏
hz_disp16(2,16,xing); // 星
hz_disp16(2,31,qi); // 期
sz_disp16(4,32,point); // 小数点
hz_disp16(4,48,du); // 度
}
/*------------------------温度传感器部分-------------------------*/
/******************************************************************************/
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);
}
/******************************************************************************/
/*-----------------------时钟部分---------------------------*/
///////////////////////////////////////////////
///// 函数名: 写入字节子函数 //////
///// 函数功能: 写入一个字节到对应地址 //////
///// 函数参数: 有(写入的字节内容) //////
///// 返回值: 无 //////
///////////////////////////////////////////////
void InputByte(unsigned char dat)
{
unsigned char i;
ACC = dat;
for(i=8; i>0; i--)
{
IO = ACC0;
CLK = 1; //下降沿写入数据//
CLK = 0;
ACC = ACC >> 1;
}
}
/************************************************************************************///*时钟部分*/↓
///////////////////////////////////////////////
///// 函数名: 读出字节子函数 //////
///// 函数功能: 从对应地址读出一个字节 //////
///// 函数参数: 无 //////
///// 返回值: 有(读出的字节内容) //////
///////////////////////////////////////////////
OutputByte(void)
{
unsigned char i;
for(i=8; i>0; i--)
{
ACC = ACC >>1;
ACC7 = IO;
CLK = 1; //上升沿读出数据//
CLK = 0;
}
return(ACC);
}
/*************************************************************************************************/
/////////////////////////////////////////////
///// 函数名: 写入字节完整子函数 //////
///// 函数功能: 写入一个字节到DS1302 //////
///// 调用: InputByte() //////
///// 函数参数: 有(写入的地址和数据) //////
///// 返回值: 无 //////
/////////////////////////////////////////////
void WriteTo1302(unsigned char Addr,unsigned char Date)
{
RST2 = 0;
CLK = 0;
RST2 = 1;
InputByte(Addr); // 先给地址,命令 //
InputByte(Date); // 再写入一字节数据 //
CLK = 1;
RST2 =0;
}
/*************************************************************************************************/
/////////////////////////////////////////////
///// 函数名: 初始化DS1302 //////
///// 函数功能: 给DS1302设定初始值 //////
///// 调用: WriteTo1302 //////
///// 函数参数: 无 //////
///// 返回值: 无 //////
/////////////////////////////////////////////
/* void Init_1302(void){//(2008年5月5日08时55分55秒星期一)
WriteTo1302(0x8e,0x00);//允许写操作
WriteTo1302(0x8c,0x08);//年
WriteTo1302(0x8a,0x01);//星期
WriteTo1302(0x88,0x05);//月
WriteTo1302(0x86,0x05);//日
WriteTo1302(0x84,0x08);//小时
WriteTo1302(0x82,0x55);//分钟
WriteTo1302(0x80,0x00);//秒
WriteTo1302(0x90,0xa5);//充电
WriteTo1302(0x8e,0x80);//禁止写操作
} */
/*************************************************************************************************/
/////////////////////////////////////////////
///// 函数名: 读出字节完整子函数 //////
///// 函数功能: 从DS1302读出一个字节 //////
///// 调用: InputByte(); OutputByte() //////
///// 函数参数: 无 //////
///// 返回值: 有(读出的字节内容) //////
/////////////////////////////////////////////
ReadFrom1302(unsigned char Add)
{
unsigned char Date;
RST2 = 0;
CLK = 0;
RST2 = 1;
InputByte(Add); // 先给地址,命令 //
Date = OutputByte(); // 再读一字节数据 //
CLK = 1;
RST2 =0;
return(Date);
}
/*************************************************************************************************/
/////////////////////////////////////////////////////////////////////////////////
///// 函数名称: SetTime ///// /////
///// 功能: 设置初始时间 /////
///// 调用: WriteTo1302() /////
///// 输入: pSecDa: 初始时间地址。初始时间格式为: 秒 分 时 日 月 星期 年 /////
///// 返回值: 无 /////
/////////////////////////////////////////////////////////////////////////////////
void SetTime(unsigned char *pSecDa)
{
unsigned char i;
unsigned char Addr = 0x80;
WriteTo1302(0x8e,0x00); // 控制命令,WP=0,写操作 //
for(i =0;i<7;i++)
{
WriteTo1302(Addr,*pSecDa); // 秒 分 时 日 月 星期 年 //
pSecDa++;
Addr +=2;
}
WriteTo1302(0x8e,0x80); // 控制命令,WP=1,写保护 //
}
/**************************************************************************************************/
//////////////////////////////////////////////////////////////////////////////////////
///// 名称: GetTime /////
///// 说明: /////
///// 功能: 读取DS1302当前时间 /////
///// 调用: uc_R1302() /////
///// 输入: ucCurtime: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年 /////
///// 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B /////
///// 返回值: 无 /////
//////////////////////////////////////////////////////////////////////////////////////
void GetTime(void)
{
unsigned char i;
unsigned char Addr = 0x81;
for (i=0;i<7;i++)
{
Curtime[i] = ReadFrom1302(Addr); // 格式为: 秒 分 时 日 月 星期 年 //
Addr += 2;
}
sec = Curtime[0];
min = Curtime[1];
hour = Curtime[2];
date = Curtime[3];
month = Curtime[4];
day = Curtime[5];
year = Curtime[6];
}
/**************************************************************************************************/
////////////////////////////////////////////////////
///// 函数名: 定时器T0初始化子函数 //////
///// 函数功能: 初始化T0定时50ms //////
///// 调用: 无 //////
///// 函数参数: 无 //////
///// 返回值: 无 //////
////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -