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

📄 ds1302clock.lst

📁 89C52控制1302和18B20和1602的时钟和温度的实时显示
💻 LST
📖 第 1 页 / 共 4 页
字号:
C51 COMPILER V8.01   DS1302CLOCK                                                           08/16/2008 15:50:11 PAGE 1   


C51 COMPILER V8.01, COMPILATION OF MODULE DS1302CLOCK
OBJECT MODULE PLACED IN DS1302clock.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE DS1302clock.C ROM(COMPACT) DEBUG OBJECTEXTEND

line level    source

   1          /******************************************************************************
   2          Copyright 2007 
   3          All rights reserved.
   4          
   5          文件名  :ds1302clock.c
   6          模块名称:
   7          功能概要:
   8          
   9          取代版本:0.0.1
  10          修改人  :pulan
  11          完成日期:2007.07.08
  12          升级说明:create
  13          CPU: stc89c58   主频:11.0592M
  14          液晶型号:       生产厂家:        驱动芯片:
  15          硬件连接:
  16          ---------------------------------------------------------------
  17          |DB0-----P0.0 | DB4-----P0.4 | RW-------P2.2 | 
  18          |DB1-----P0.1 | DB5-----P0.5 | RS-------P2.1 | 
  19          |DB2-----P0.2 | DB6-----P0.6 | E -------P2.5 |
  20          |DB3-----P0.3 | DB7-----P0.7 | Vo接1k电阻到地
  21          ---------------------------------------------------------------
  22          ******************************************************************************/
  23          #include <reg52.h>
  24          #include <string.h>
  25          #include <intrins.h>
  26          
  27          #define uchar unsigned char
  28          #define uint  unsigned int
  29          
  30          #define LCM_Data P0
  31          #define Busy 0x80 //用于检测LCM状态字中的Busy标识
  32          sbit LCM_RW = P2^2;//定义引脚
  33          sbit LCM_RS = P2^1;
  34          sbit LCM_E  = P2^5;
  35          
  36          sbit key1  = P1^5;
  37          sbit key2  = P1^6;
  38          sbit key3  = P1^7;
  39          sbit key4  = P3^2;
  40          
  41          uchar id,timecount;
  42          bit flag,sflag; //flag是时钟冒号闪烁标志,sflag是温度负号显示标志
  43          void Disp_line1(void); //显示屏幕第一行 
  44          void Disp_line2(void); //显示屏幕第二行
  45          void id_case1_key();
  46          
  47          //*********** DS1302 时间显示定义部分
  48          sbit T_CLK = P3^5;
  49          sbit T_IO  = P3^6;
  50          sbit T_RST = P3^7;
  51          sbit ACC0=ACC^0;
  52          sbit ACC7=ACC^7;
  53          void Set(uchar,uchar);     //根据选择调整相应项目
  54          void   RTInputByte(uchar);       /* 输入 1Byte */
  55          uchar  RTOutputByte(void);       /* 输出 1Byte */
C51 COMPILER V8.01   DS1302CLOCK                                                           08/16/2008 15:50:11 PAGE 2   

  56          void   W1302(uchar, uchar);   // 向DS1302写入一个字节
  57          uchar  R1302(uchar);          // 从DS1302读出一个字节
  58          void   Set1302(uchar * ); //  设置时间 
  59          bit sec,min,hour,year,mon,day,weekk; //闪烁标志位
  60          //初始化后设置为:04年12月2日星期4 0点0分0秒
  61          uchar inittime[7]={0x00,0x00,0x00,0x02,0x12,0x04,0x04};
  62          //                          秒  分钟 小时  日   月   年  星期
  63          
  64          //***** 18B20温度显示定义部分 
  65          sbit DQ = P1^4; //18B20 接P07口
  66          typedef unsigned char byte;
  67          typedef unsigned int  word;
  68          Read_Temperature(char,char);
  69          void mychar(void);
  70          void adjust_res(char res); //res 分别等于 0x1f, 0x3f, 0x5f 温度读数分辨率分别对应
  71                                     //              0.5, 0.25, 0.125   
  72          //******* 1602LCD驱动 **********************************************************
  73          void WriteDataLCM(uchar WDLCM);
  74          void WriteCommandLCM(uchar WCLCM,BuysC);
  75          uchar ReadStatusLCM(void);
  76          void LCMInit(void);
  77          void DisplayOneChar(uchar X, uchar Y, uchar DData);
  78          void DisplayListChar(uchar X, uchar Y, uchar code *DData);
  79          void Delay5Ms(void);
  80          void Delay400Ms(void);
  81          uchar code week[]={"Week."};
  82          /******************************************************************************************
  83          * 函数名称    :
  84          * 功能描述    :
  85          * 参数        :  参数名称:    输入/输出?     类型            描述
  86          * 
  87          * 返回值      :
  88          * 作者        :
  89          * 创建日期    :2006-12-19
  90          * 全局变量    :
  91          * 全局静态变量:
  92          * 局部静态变量:
  93          *----------------------------------------修改历史------------------------------------------
  94          * 当前版本    :                         修改人:                  修改日期:
  95          * 修改说明    :
  96          ******************************************************************************************/
  97          void main(void)
  98          {  
  99   1              Delay400Ms(); //启动等待,等LCM讲入工作状态
 100   1              LCMInit(); //LCM初始化
 101   1              Delay5Ms(); //延时片刻(可不要)
 102   1              mychar(); //显示自定义字符
 103   1      
 104   1              TMOD=0x01;
 105   1              TH0=(65535-50000)/256;
 106   1              TL0=(65535-50000)%256;
 107   1              EA=1;
 108   1              TR0=1;
 109   1              ET0=1;  
 110   1              W1302(0x90,0xa5);//打开充电二级管  一个二级管串联一个2K电阻 
 111   1              W1302(0x8e,0x80);//写保护,禁止写操作 
 112   1              adjust_res(0x1f); //调整18B20的分辨率 0x1f:0.5; 0x3f:0.25; 0x5f:0.125
 113   1              while(1)
 114   1              {              
 115   2              if ((key1|key2)==0) //初始化
 116   2              {
 117   3                      Delay5Ms();
C51 COMPILER V8.01   DS1302CLOCK                                                           08/16/2008 15:50:11 PAGE 3   

 118   3                      if ((key1|key2)==0) 
 119   3                              Set1302(inittime);
 120   3              }
 121   2              if (key3==0) // 设置和选择项目键
 122   2              {
 123   3                      Delay5Ms();
 124   3                      if(key3==0)
 125   3                      {
 126   4                              id++;
 127   4                              if(id>7) 
 128   4                                      id=0;
 129   4                      }
 130   3              while(key3==0);    
 131   3              }
 132   2           switch(id)
 133   2            {
 134   3                      case 0:
 135   3                              sec=0;
 136   3                              Disp_line1();
 137   3                              Disp_line2();
 138   3                              break;
 139   3                      case 1://年
 140   3                              year=1;
 141   3                              Disp_line1(); 
 142   3                              Disp_line2();                  
 143   3                              id_case1_key();
 144   3                              break;
 145   3                      case 2://月
 146   3                              year=0;
 147   3                              mon=1;
 148   3                              Disp_line1(); 
 149   3                              Disp_line2();                 
 150   3                              id_case1_key();
 151   3                              break;
 152   3                      case 3://日
 153   3                              mon=0;
 154   3                              day=1;
 155   3                              Disp_line1(); 
 156   3                              Disp_line2();
 157   3                              id_case1_key();
 158   3                              break;             
 159   3                      case 4://星期
 160   3                              day=0;
 161   3                              weekk=1;
 162   3                              Disp_line1(); 
 163   3                              Disp_line2();         
 164   3                              id_case1_key();
 165   3                              break;
 166   3                      case 5://小时
 167   3                              weekk=0;
 168   3                              hour=1;
 169   3                              Disp_line1(); 
 170   3                              Disp_line2(); 
 171   3                              id_case1_key();      
 172   3                              break;       
 173   3                      case 6://分钟
 174   3                              hour=0;
 175   3                              min=1;
 176   3                              Disp_line1(); 
 177   3                              Disp_line2(); 
 178   3                              id_case1_key();
 179   3                              break;
C51 COMPILER V8.01   DS1302CLOCK                                                           08/16/2008 15:50:11 PAGE 4   

 180   3                      case 7://秒
 181   3                              min=0;
 182   3                              sec=1;
 183   3                              Disp_line1(); 
 184   3                              Disp_line2();             
 185   3                              id_case1_key();
 186   3                              break;              
 187   3            }
 188   2          }
 189   1      }
 190          /******************************************************************************************
 191          * 函数名称    :
 192          * 功能描述    :中断入口,冒号闪烁
 193          * 参数        :  参数名称:    输入/输出?     类型            描述
 194          * 
 195          * 返回值      :
 196          * 作者        :
 197          * 创建日期    :2006-12-19
 198          * 全局变量    :
 199          * 全局静态变量:
 200          * 局部静态变量:
 201          *----------------------------------------修改历史------------------------------------------
 202          * 当前版本    :                         修改人:                  修改日期:
 203          * 修改说明    :
 204          ******************************************************************************************/
 205          void t0(void) interrupt 1 using 0
 206          {
 207   1              TH0=(65535-50000)/256; //50ms定时
 208   1              TL0=(65535-50000)%256;  
 209   1              timecount++;
 210   1              if(timecount>9)
 211   1              {
 212   2              timecount=0;    
 213   2              flag=~flag;             
 214   2              }  
 215   1      }
 216          /******************************************************************************************
 217          * 函数名称    :id_case1_key
 218          * 功能描述    :id为1时的下一级选择
 219          * 参数        :  参数名称:    输入/输出?     类型            描述
 220          * 
 221          * 返回值      :
 222          * 作者        :
 223          * 创建日期    :2006-12-19
 224          * 全局变量    :
 225          * 全局静态变量:
 226          * 局部静态变量:
 227          *----------------------------------------修改历史------------------------------------------
 228          * 当前版本    :                         修改人:                  修改日期:
 229          * 修改说明    :
 230          ******************************************************************************************/
 231          void id_case1_key()
 232          {
 233   1              if(key2==0) //增加
 234   1            {
 235   2              Delay5Ms();
 236   2              if(key2==0) 
 237   2                      Set(id,0);  
 238   2              if(id!=7)  
 239   2                      while(key2==0);    
 240   2            }
 241   1              if(key1==0)  //减少
C51 COMPILER V8.01   DS1302CLOCK                                                           08/16/2008 15:50:11 PAGE 5   

 242   1            {
 243   2              Delay5Ms();
 244   2              if(key1==0) 
 245   2                      Set(id,1);          
 246   2              if(id!=7) 
 247   2                      while(key1==0);    
 248   2            }
 249   1      }
 250          
 251          /******************************************************************************************
 252          * 函数名称    :Set
 253          * 功能描述    :根据选择调整相应项目并写入DS1302
 254          * 参数        :  参数名称:    输入/输出?     类型            描述
 255          * 
 256          * 返回值      :
 257          * 作者        :
 258          * 创建日期    :2006-12-19
 259          * 全局变量    :
 260          * 全局静态变量:
 261          * 局部静态变量:
 262          *----------------------------------------修改历史------------------------------------------
 263          * 当前版本    :                         修改人:                  修改日期:
 264          * 修改说明    :
 265          ******************************************************************************************/
 266          void Set(uchar sel,uchar sel_1) 
 267          {
 268   1              signed char address,item;
 269   1              signed char max,mini;
 270   1              if(sel==7)  
 271   1                      {
 272   2                              address=0x80; 
 273   2                              max=0;
 274   2                              mini=0;
 275   2                      }     //秒
 276   1              if(sel==6)  
 277   1                      {

⌨️ 快捷键说明

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