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

📄 使用1602液晶显示ds1302+c51时钟.txt

📁 使用1602液晶显示DS1302+c51时钟,实现1302时钟的准确显示
💻 TXT
📖 第 1 页 / 共 2 页
字号:
/*============================================================  
使用1602液晶显示DS1302+c51时钟   
  
功能:  
        (1) 显示时间           完成时间:2006/03/29  
    (2) 1302初始设置         完成时间:2006/03/29  
        (3) 显示日期           完成时间:2006/03/29  
    (4) 背光灯设置      完成时间:2006/04/1  
        (5) 闹铃设置           完成时间:2006/04/02  
      
       
==============================================================   
1602接线图:   
---------------------------------------------------  
|LCM-----51  | LCM-----51  | LCM------51 |  
---------------------------------------------|  
|DB0-----P0.0 | DB4-----P1.4 | RW-------P2_5 |  
|DB1-----P0.1 | DB5-----P0.5 | RS-------P2_7 |  
|DB2-----P0.2 | DB6-----P0.6 | E-------P2_6  |  
|DB3-----P0.3 | DB7-----P0.7 | VLCD接1K电阻到GND|  
---------------------------------------------------  
DS1302 接线图  
  
         Vcc2  CLK I/O  /RST   
             
            |   |   |   |  
           --------------  
          | 8   7   6   5|  
          |   DS1302     |  
          |              |  
          | 1   2   3   4|  
           --------------  
            |   |   |   |  
  
         VCC1           GND  
  
1 脚接+5V    2,3脚32768HZ晶振  4脚接地  5脚接S51的P02 6脚接S51的P01 7接S51的P00  
8脚接后备电源可以通过二级管隔离接一个大容量电解电容  
  
  
按键说明:1. 共三个键,低电平有效  
          2. P10 端口按键:选择要调整的项目  
          3. P11 端口按键:增加;  
          4. P12 端口按键:减少  
  
  
[注:AT89C51使用12M晶振]  
=============================================================*/   
   
#include <AT89X51.H>    
#include <STRING.H>    
   
#define LCM_RW P2_1 //定义引脚    
#define LCM_RS P2_0    
#define LCM_E P2_2    
#define LCM_Data P0    
#define Busy 0x80          //用于检测LCM状态字中的Busy标识    
#define uchar unsigned char    
   
sbit T_CLK=P2^5;   
sbit T_IO =P2^7;   
sbit T_RST=P2^6;   
sbit ACC0=ACC^0;   
sbit ACC7=ACC^7;   
sbit LED=P3^7;           //背光灯输出    
sbit system=P1^0;        //模式    
sbit TimerUp=P1^1;       //时间加    
sbit TimerDown=P1^2;     //时间减    
sbit Speaker=P2^3;       //蜂鸣器    
   
   
void   Set(uchar,uchar);      //根据选择调整相应项目    
void   RTInputByte(uchar);    //输入 1Byte */    
uchar  RTOutputByte(void);    //输出 1Byte */    
void   W1302(uchar, uchar);   //向DS1302写入一个字节    
uchar  R1302(uchar);          //从DS1302读出一个字节    
void   Set1302(uchar * );     //设置时间     
void   KeySound();            //按键音    
void   ClockSound();          //闹铃蜂鸣声    
   
   
uchar id,msec,model,LedTime,d;   
bit a,b;                      //闪烁标志位    
   
                           
uchar inittime[7]={0x00,0x10,0x19,0x29,0x03,0x04,0x06}; //初始化后设置为:06年3月29日星期3 19点10分0秒    
void  Out_LCM(void);     //显示屏幕    
void  model0(void);                        //显示输出    
void  model1(void);   
void  model2(void);   
void  model3(void);   
void  model4(void);   
void  model5(void);   
void  model6(void);   
   
    
void  id_case1_key();   //项目调整    
void  Modset();          //模式键处理    
   
void  WriteDataLCM(uchar WDLCM);   
void  WriteCommandLCM(uchar WCLCM,BuysC);   
uchar ReadStatusLCM(void);   
void  LCMInit(void);   
void  OutputInformation(uchar X, uchar Y, uchar DData);   
void  DisplayListChar(uchar X, uchar Y, uchar code *DData);   
   
void  Delay5Ms(void);   
void  Delay400Ms(void);   
void  systemsetup(void);                 //进入系统设置    
   
uchar code systemp[]={"System.setup"};  //字符串输出(系统设定)    
uchar code TIMER[]={"Time"};            //字符串输出(时间)    
uchar code DATE[]={"Date"};             //字符串输出(日期)    
uchar code alarmclock[]={"Clock"};      //字符串输出(闹铃)    
uchar code lamp[]={"Lamp"};             //字符串输出(背光灯)    
uchar code reset[]={"Reset"};           //字符串输出(时间归零)    
uchar code exit[]={"Exit"};             //字符串输出(退出)    
uchar code set[]={"Set"};               //字符串输出(设置)    
uchar code sec[]={"sec"};               //字符串输出(秒)    
uchar code ClockSet[]={"ClockSet"};     //字符串输出(闹铃设置)    
uchar code ClockOn[]={"ON"};            //字符串输出(ON)    
uchar code ClockOff[]={"OFF"};          //字符串输出(OFF)    
   
void  timesetup(void);                   //时间设置    
void  datesetup(void);                   //日期设置    
void  alarmclockset(void);               //闹铃设置    
void  lampsetup(void);                   //背光灯设置                                           
void  timereset(void);                   //时间清零    
   
void main(void)   
{   
  Speaker=1;    //关闭蜂鸣器    
  LED=0;        //打开LED ,低电平有效,外接9012驱动    
  Delay400Ms(); //启动等待,等LCM讲入工作状态    
  LCMInit();    //LCM初始化    
  TMOD=0x01;    //16位定时    
  TH0=0x3c;     //50ms    
  TL0=0xb0;   
  EA=1;   
  TR0=1;   
  ET0=1;     
      
  while(1)   
  {   
     if(TimerDown==0)         //左移键按下后把背光灯打开    
      {Delay5Ms();   
      if(TimerDown==0)   
       {KeySound();           //蜂鸣声    
        LED=0;                //打开背光灯    
        LedTime=R1302(0xc1)/16*10+R1302(0xc1)%16;} //取出背光灯时间并转换为十进制数             
       }   
     b=1;                     //模式键是否动作标志。为1时不动作,为0时动作。    
     Modset();                //调用模式键处理程序判断按键是否按下。    
     if(b==0)   
      {   
       KeySound();            //蜂鸣声    
       LED=0;                 //打开背光灯    
       systemsetup();         //进入系统设置模式    
       LedTime=R1302(0xc1)/16*10+R1302(0xc1)%16; //取出背光灯时间并转换为十进制数    
       }   
     if((LED==0)&&LedTime==0)  //延时间是否到    
        LED=1;                 //关闭背光灯      
     if(R1302(0xc3)==1)        //闹铃是否打开,0xc3为读闹铃寄存器地址。    
       {if((R1302(0x85)==R1302(0xc5))&&(R1302(0x83)==R1302(0xc7))) //判断闹铃时间是否到,    
          ClockSound();        //发出闹铃蜂鸣声,无按键动作蜂鸣一分钟。    
        }         
     model0();                //输出显示屏幕    
    }                          
}   
   
void KeySound()                 //按键音    
{   
 Speaker=0;                     //开蜂鸣声    
 Delay5Ms();   
 Speaker=1;                     //关蜂鸣声    
 }   
void ClockSound()               //闹铃蜂鸣声    
{   
 if(a==0)   
  {   
   Speaker=0;                   //开蜂鸣声    
   Delay5Ms();   
   Delay5Ms();   
   Delay5Ms();   
   Speaker=1;                   //关蜂鸣声    
  }   
}   
   
void Modset()                   //模式键处理    
{ if(system==0)                  
   {   
    Delay5Ms();   
    if(system==0)   
     {while(system==0);   
       KeySound();            //蜂鸣声    
       a=0;msec=0;b=0;        //a、msec为闪烁标志,按键有动作时清零,不闪烁。    
     }                        //b为模式键确认动作。其它程判断b是否为零时来确定模式键是否动作。    
   }   
}   
   
void systemsetup(void)          //系统设置    
{    
  model=1;   
  while(model!=0)   
  {    
  Out_LCM();    
  if (TimerUp==0)             //设置项目左移    
      {Delay5Ms();   
       if(TimerUp==0)   
       {a=0;msec=0;KeySound();//蜂鸣声    
        if(model--==1)        //6种系统设置项目    
         model=6;   
        }      
       while(TimerUp==0);       
      }   
   if (TimerDown==0)         //设置项目右移    
      {   
       Delay5Ms();   
       if(TimerDown==0)    
         {a=0;msec=0;KeySound();//蜂鸣声    
         if(model++==6)   
             model=1;    
         }            
       while(TimerDown==0);       
      }   
     b=1;           //模式键是否动作标志。为1时不动作,为0时动作。    
     Modset();      //调用模式键处理程序判断按键是否按下。    
     if(b==0)   
       {KeySound();            //蜂鸣声    
        switch(model)          //进入进个项目设置    
          {   
           case 1:   
                timesetup(); break;   //时间设置    
           case 2:   
                datesetup();break;    //日期设置    
           case 3:   
                alarmclockset();break;//闹铃设置    

⌨️ 快捷键说明

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