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

📄 quan.c

📁 用单片机做的数字电子钟
💻 C
📖 第 1 页 / 共 4 页
字号:
	}
	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 + -