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

📄 ds1302clock.lst

📁 数字体温计,由单片机控制现实当前的温度
💻 LST
📖 第 1 页 / 共 4 页
字号:
C51 COMPILER V7.10   DS1302CLOCK                                                           11/08/2008 19:50:12 PAGE 1   


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

line level    source

   1          /******************************************************************************
   2          文件名  :ds1302clock.c
   3          CPU: stc89c58   主频:11.0592M
   4          液晶型号:       生产厂家:1602        
   5          硬件连接:
   6          ---------------------------------------------------------------
   7          |DB0-----P0.0 | DB4-----P0.4 | RW-------P2.2 | 
   8          |DB1-----P0.1 | DB5-----P0.5 | RS-------P2.1 | 
   9          |DB2-----P0.2 | DB6-----P0.6 | E -------P2.5 |
  10          |DB3-----P0.3 | DB7-----P0.7 | Vo接1k电阻到地
  11          ---------------------------------------------------------------
  12          ******************************************************************************/
  13          #include <reg52.h>
  14          #include <string.h>
  15          #include <intrins.h>
  16          
  17          #define uchar unsigned char
  18          #define uint  unsigned int
  19          
  20          #define LCM_Data P0
  21          #define Busy 0x80 //用于检测LCM状态字中的Busy标识
  22          sbit LCM_RW = P2^3;//定义引脚
  23          sbit LCM_RS = P2^4;
  24          sbit LCM_E  = P2^5;
  25          
  26          sbit key1  = P2^0;
  27          sbit key2  = P2^1;
  28          sbit key3  = P2^2;
  29          sbit key4  = P3^2;
  30          
  31          uchar id,timecount;
  32          bit flag,sflag; //flag是时钟冒号闪烁标志,sflag是温度负号显示标志
  33          void Disp_line1(void); //显示屏幕第一行 
  34          void Disp_line2(void); //显示屏幕第二行
  35          void id_case1_key();
  36          
  37          //*********** DS1302 时间显示定义部分
  38          sbit T_CLK = P3^5;
  39          sbit T_IO  = P3^6;
  40          sbit T_RST = P3^7;
  41          sbit ACC0=ACC^0;
  42          sbit ACC7=ACC^7;
  43          void Set(uchar,uchar);     //根据选择调整相应项目
  44          void   RTInputByte(uchar);       /* 输入 1Byte */
  45          uchar  RTOutputByte(void);       /* 输出 1Byte */
  46          void   W1302(uchar, uchar);   // 向DS1302写入一个字节
  47          uchar  R1302(uchar);          // 从DS1302读出一个字节
  48          void   Set1302(uchar * ); //  设置时间 
  49          bit sec,min,hour,year,mon,day,weekk; //闪烁标志位
  50          //初始化后设置为:04年12月2日星期4 0点0分0秒
  51          uchar inittime[7]={0x01,0x01,0x01,0x02,0x01,0x11,0x08};
  52          //                          秒  分钟 小时  日   月   年  星期
  53          
  54          //***** 18B20温度显示定义部分 
  55          sbit DQ = P2^6; //18B20 接P07口
C51 COMPILER V7.10   DS1302CLOCK                                                           11/08/2008 19:50:12 PAGE 2   

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

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

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

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

⌨️ 快捷键说明

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