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

📄 ds1302clock.c

📁 数字体温计,由单片机控制现实当前的温度
💻 C
📖 第 1 页 / 共 3 页
字号:
       }
     else
       {
        DisplayOneChar(4,0,0x20); //显示分钟
        DisplayOneChar(5,0,0x20);    
       }
    } 
  else
    {
     DisplayOneChar(4,0,R1302(0x83)/16+0x30); //显示分钟
     DisplayOneChar(5,0,R1302(0x83)%16+0x30);         
    } 

  if(hour==1)  //小时闪烁标志位
    {
     if(flag==1)
       {    
        DisplayOneChar(1,0,R1302(0x85)/16+0x30);//显示小时
        DisplayOneChar(2,0,R1302(0x85)%16+0x30); 
       }
     else
       {
        DisplayOneChar(1,0,0x20); //显示小时
        DisplayOneChar(2,0,0x20);    
       }
    } 
  else
   { 
    DisplayOneChar(1,0,R1302(0x85)/16+0x30);//显示小时
    DisplayOneChar(2,0,R1302(0x85)%16+0x30);
   }
}

/******************************************************************************************
* 函数名称    :Disp_line2
* 功能描述    :屏幕显示第二行  日期和星期  
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/ 
void Disp_line2(void)
{
  	DisplayOneChar(3,1,0x2f); //显示固定字符
  	DisplayOneChar(6,1,0x2f);
  	DisplayListChar(10,1,week);
    
  	if(year==1)  //年闪烁标志位
    	{
     if(flag==1)
       {    
        DisplayOneChar(1,1,R1302(0x8d)/16+0x30);//显示年
        DisplayOneChar(2,1,R1302(0x8d)%16+0x30);
       }
     else
       {
        DisplayOneChar(1,1,0x20); //显示年
        DisplayOneChar(2,1,0x20);    
       }
    } 
  else
    { 
      DisplayOneChar(1,1,R1302(0x8d)/16+0x30);//显示年
      DisplayOneChar(2,1,R1302(0x8d)%16+0x30);
    }
     
  if(mon==1)  //月闪烁标志位
    {
     if(flag==1)
       {    
        DisplayOneChar(4,1,R1302(0x89)/16+0x30);//显示月 
        DisplayOneChar(5,1,R1302(0x89)%16+0x30);
       }
     else
       {
        DisplayOneChar(4,1,0x20); //显示月
        DisplayOneChar(5,1,0x20);    
       }
    } 
  else
    { 
      DisplayOneChar(4,1,R1302(0x89)/16+0x30);//显示月 
      DisplayOneChar(5,1,R1302(0x89)%16+0x30);
    }   

  if(day==1)  //日闪烁标志位
    {
     if(flag==1)
       {    
         DisplayOneChar(7,1,R1302(0x87)/16+0x30);//显示日
         DisplayOneChar(8,1,R1302(0x87)%16+0x30);
       }
     else
       {
        DisplayOneChar(7,1,0x20); //显示日
        DisplayOneChar(8,1,0x20);    
       }
    } 
  else
    { 
      DisplayOneChar(7,1,R1302(0x87)/16+0x30);//显示日
      DisplayOneChar(8,1,R1302(0x87)%16+0x30);
    }
    
   if(weekk==1)  //星期闪烁标志位
    {
     if(flag==1)
       {    
         DisplayOneChar(15,1,R1302(0x8b)%16+0x30);//显示星期
       }
     else
       {
        DisplayOneChar(15,1,0x20); //显示星期          
       }
    } 
  else
    { 
      DisplayOneChar(15,1,R1302(0x8b)%16+0x30);//显示星期
    }     
}

/******************************************************************************************
* 函数名称    :WriteDataLCM
* 功能描述    :写数据
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void WriteDataLCM(uchar WDLCM)
{
  	ReadStatusLCM(); //检测忙
  	LCM_Data = WDLCM;
  	LCM_RS = 1;
  	LCM_RW = 0;
  	LCM_E = 0; //若晶振速度太高可以在这后加小的延时
  	LCM_E = 0; //延时
  	LCM_E = 1;
}

/******************************************************************************************
* 函数名称    :写指令
* 功能描述    :
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void WriteCommandLCM(uchar WCLCM,BuysC) //BuysC为0时忽略忙检测
{
  	if(BuysC) ReadStatusLCM(); //根据需要检测忙
  	LCM_Data = WCLCM;
  	LCM_RS = 0;
  	LCM_RW = 0; 
  	LCM_E = 0;
  	LCM_E = 0;
  	LCM_E = 1; 
}

/******************************************************************************************
* 函数名称    :ReadStatusLCM
* 功能描述    :读状态
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
uchar ReadStatusLCM(void)
{
  	LCM_Data = 0xFF; 
  	LCM_RS = 0;
  	LCM_RW = 1;
  	LCM_E = 0;
  	LCM_E = 0;
  	LCM_E = 1;
  	while (LCM_Data & Busy); //检测忙信号
  	return(LCM_Data);
}

/******************************************************************************************
* 函数名称    :LCMInit
* 功能描述    :LCM初始化
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void LCMInit(void) 
{
  	LCM_Data = 0;
  	WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号
  	Delay5Ms(); 
  	WriteCommandLCM(0x38,0);
  	Delay5Ms(); 
  	WriteCommandLCM(0x38,0);
  	Delay5Ms(); 
  	WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号
  	WriteCommandLCM(0x08,1); //关闭显示
  	WriteCommandLCM(0x01,1); //显示清屏
  	WriteCommandLCM(0x06,1); // 显示光标移动设置
  	WriteCommandLCM(0x0C,1); // 显示开及光标设置
}

/******************************************************************************************
* 函数名称    :DisplayOneChar
* 功能描述    :按指定位置显示一个字符
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void DisplayOneChar(uchar X, uchar Y, uchar DData)
{
  	Y &= 0x1;
  	X &= 0xF; //限制X不能大于15,Y不能大于1
  	if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;
  	X |= 0x80; //算出指令码
  	WriteCommandLCM(X, 0); //这里不检测忙信号,发送地址码
  	WriteDataLCM(DData);
}

/******************************************************************************************
* 函数名称    :DisplayListChar
* 功能描述    :按指定位置显示一串字符  ***原来的遇到空格0x20就不显示***
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void DisplayListChar(uchar X, uchar Y, uchar code *DData)
{
  	uchar ListLength,j;
  	ListLength = strlen(DData);
  	Y &= 0x1;
  	X &= 0xF; //限制X不能大于15,Y不能大于1
    if (X <= 0xF) //X坐标应小于0xF
      { 
		    for(j=0;j<ListLength;j++)
		      {
             DisplayOneChar(X, Y, DData[j]); //显示单个字符
             X++;
           }
       }
}

/******************************************************************************************
* 函数名称    :
* 功能描述    :
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void Delay5Ms(void)
{
  	uint TempCyc = 5552;
  	while(TempCyc--);
}
//400ms延时
/******************************************************************************************
* 函数名称    :
* 功能描述    :
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void Delay400Ms(void)
{
  	uchar TempCycA = 5;
  	uint TempCycB;
  	while(TempCycA--)
   	{
    	TempCycB=7269;
    	while(TempCycB--);
   	};
}

/******************************************************************************************
* 函数名称    :RTInputByte
* 功能描述    :
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void RTInputByte(uchar d) 
{ 
    uchar i;
    ACC = d;
    for(i=8; i>0; i--)
    {
        T_IO = ACC0;           /*相当于汇编中的 RRC */
        T_CLK = 1;
        T_CLK = 0;
        ACC = ACC >> 1; 
    } 
}
/******************************************************************************************

⌨️ 快捷键说明

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