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

📄 ds1302.lst

📁 用ds18b20+ds1302+89s52做的时钟
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.06   DS1302                                                                06/27/2008 11:23:52 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN DS1302.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DS1302.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /************************************/
   2          /*杭州电子&计算机工作室                         */
   3          /*http://www.hificat.com                        */
   4          /*DS1302测试程序                                        */
   5          /*目标器件:AT89S51                                     */
   6          /*晶振:11.0592MHZ                                       */
   7          /*编译环境:Keil 7.50A                          */
   8          /************************************/
   9          
  10          /*********************************包含头文件********************************/
  11          #include "reg51.h"
  12          #include <intrins.h>
  13          
  14          /*********************************端口定义**********************************/
  15          sbit DS1302_CLK = P1^0;
  16          sbit DS1302_IO  = P1^1;
  17          sbit DS1302_RST = P1^2;
  18          
  19          /*******************************共阳LED段码表*******************************/
  20          unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  21          
  22          /******************************定义全局变量*********************************/
  23          unsigned char second,minute,hour,week,day,month,year;           //秒、分、时、星期、日、月、年
  24          //unsigned char minute1,hour1;
  25          unsigned char second1,minute1,hour1,week1,day1,month1,year1;
  26          unsigned char t1,t2,i;
  27          unsigned char time[]={0x08,0x06,0x19,0x04,0x09,0x30,0x00};      //初始时间数组
  28          
  29          //P=8C
  30          
  31          unsigned  char secondchar,minutechar,hourchar,weekchar,daychar,monthchar,yearchar;
  32          
  33          unsigned char keysum ;
  34          
  35          sbit    K1 = P3^2;
  36          sbit    K2 = P3^3;
  37          
  38          unsigned char key_s, key_v, tmp;
  39          unsigned char key_s1, key_v1;
  40          //int kk;
  41          
  42          /////////////////////温度/////
  43          sbit DQ=P3^3;                                   //数据传输线接单片机的相应的引脚
  44          
  45          /*********************************定义全局变量******************************/
  46          unsigned char tempL=0;                  //临时变量低位
  47          unsigned char tempH=0;                  //临时变量高位
  48          float temperature;                      //温度值
  49          
  50          
  51          
  52          /****************************************************************************
  53          函数功能:延时子程序
  54          入口参数:k
  55          出口参数:
C51 COMPILER V7.06   DS1302                                                                06/27/2008 11:23:52 PAGE 2   

  56          ****************************************************************************/
  57          void delayy(unsigned int k)
  58          {         
  59   1              unsigned int n;     
  60   1              n=0;       
  61   1              while(n < k)      
  62   1              {n++;}        
  63   1              return;       
  64   1      }    
  65          
  66          
  67          void delay1(void)
  68          {
  69   1              int k;
  70   1              for(k=0;k<400;k++);
  71   1      }     
  72          
  73          /****************************************************************************
  74          函数功能:数码管扫描延时子程序
  75          入口参数:
  76          出口参数:
  77          ****************************************************************************/
  78          
  79          
  80          /****************************************************************************
  81          函数功能:数码管显示子程序
  82          入口参数:k
  83          出口参数:
  84          ****************************************************************************/
  85          void displayy(int k)
  86          {
  87   1      //      P2=0xfe;                        
  88   1      //      P0=tab[k/1000];
  89   1      //      delay1();
  90   1      //      P2=0xfd;
  91   1      //      P0=tab[k%1000/100];
  92   1      //      delay1();
  93   1              P2=0xfb;
  94   1              P0=tab[k%100/10];
  95   1              delay1();
  96   1              P2=0xf7;
  97   1              P0=tab[k%10];
  98   1              delay1();
  99   1          P2=0xef;
 100   1              P0=0xc6;
 101   1              delay1();
 102   1      
 103   1      }
 104          
 105          /****************************************************************************
 106          函数功能:DS18B20初始化子程序
 107          入口参数:
 108          出口参数:
 109          ****************************************************************************/
 110          Init_DS18B20(void)
 111          {
 112   1              unsigned char x=0;
 113   1              DQ=1;                           //DQ先置高
 114   1              delayy(8);              //延时
 115   1              DQ=0;                           //发送复位脉冲
 116   1              delayy(85);                     //延时(>480ms)
 117   1              DQ=1;                           //拉高数据线
C51 COMPILER V7.06   DS1302                                                                06/27/2008 11:23:52 PAGE 3   

 118   1              delayy(14);                     //等待(15~60ms) 
 119   1      }
 120          
 121          /****************************************************************************
 122          函数功能:向DS18B20读一字节数据
 123          入口参数:
 124          出口参数:dat
 125          ****************************************************************************/
 126          ReadOneChar(void)                       
 127          {
 128   1              unsigned char i=0;              
 129   1              unsigned char dat=0;
 130   1          for (i=8;i>0;i--)           
 131   1                      {
 132   2                              DQ=1;
 133   2                      delayy(1);
 134   2                      DQ=0;      
 135   2                      dat>>=1;
 136   2                              DQ=1;
 137   2                      if(DQ)
 138   2                              dat|=0x80;
 139   2                      delayy(4);
 140   2                      }
 141   1          return(dat);
 142   1      }
 143          
 144          /****************************************************************************
 145          函数功能:向DS18B20写一字节数据
 146          入口参数:dat
 147          出口参数:
 148          ****************************************************************************/
 149          WriteOneChar(unsigned char dat)
 150          { 
 151   1              unsigned char i=0;              
 152   1              for(i=8;i>0;i--)        
 153   1              {
 154   2                      DQ=0;           
 155   2                      DQ=dat&0x01;
 156   2                      delayy(5);
 157   2                      DQ=1;
 158   2                      dat>>=1;
 159   2              }
 160   1              delayy(4);
 161   1      }
 162          
 163          /****************************************************************************
 164          函数功能:向DS18B20读温度值
 165          入口参数:
 166          出口参数:temperature
 167          ****************************************************************************/
 168          ReadTemperature(void)
 169          {  
 170   1              Init_DS18B20();                         //初始化
 171   1              WriteOneChar(0xcc);             //跳过读序列号的操作
 172   1              WriteOneChar(0x44);             //启动温度转换
 173   1              delayy(125);                            //转换需要一点时间,延时
 174   1              Init_DS18B20();                         //初始化
 175   1              WriteOneChar(0xcc);             //跳过读序列号的操作
 176   1              WriteOneChar(0xbe);             //读温度寄存器(头两个值分别为温度的低位和高位)
 177   1              tempL=ReadOneChar();            //读出温度的低位LSB
 178   1              tempH=ReadOneChar();            //读出温度的高位MSB  
 179   1              //温度转换,把高低位做相应的运算转化为实际温度
C51 COMPILER V7.06   DS1302                                                                06/27/2008 11:23:52 PAGE 4   

 180   1              temperature=((tempH*256)+tempL)*0.0625; 
 181   1              delayy(200);
 182   1              return(temperature);
 183   1      }
 184          
 185          /****************************************************************************
 186          函数功能:主程序
 187          入口参数:
 188          出口参数:
 189          ****************************************************************************/     
 190          ////////////////////////////////////////////////////////////////////////////////////////////////
 191          
 192          
 193          /****************************************************************************
 194          函数功能:数码管扫描延时子程序
 195          入口参数:
 196          出口参数:
 197          ****************************************************************************/
 198          
 199          
 200          void delayms(unsigned char ms)  
 201          // 延时子程序
 202          {                                               
 203   1              unsigned char i;
 204   1              while(ms--)
 205   1              {
 206   2                      for(i = 0; i < 120; i++);
 207   2              }
 208   1      }
 209          
 210          
 211          void delayms1(unsigned char ms) 
 212          // 延时子程序
 213          {                                               
 214   1              unsigned char i;
 215   1              while(ms--)
 216   1              {
 217   2                      for(i = 0; i < 120; i++);
 218   2              }
 219   1      }
 220          
 221          
 222          void displayhour(void)
 223          {
 224   1              P2=0xfe;
 225   1          P0=0x8c;
 226   1              delayms1(1);
 227   1                              
 228   1              P2=0xfd;
 229   1          P0=tab[5];
 230   1              delayms1(1);
 231   1      
 232   1          P2=0xf7;
 233   1          P0=tab[hour1/10];
 234   1              delayms1(1);
 235   1      
 236   1      //      P2=0xfd;
 237   1          P2=0xef;
 238   1              P0=tab[hour1%10];
 239   1              delayms1(1);
 240   1      }
 241          
C51 COMPILER V7.06   DS1302                                                                06/27/2008 11:23:52 PAGE 5   

 242          void displayminuite(void)
 243          {
 244   1      
 245   1              P2=0xfe;
 246   1          P0=0x8c;
 247   1              delayms1(1);
 248   1                              
 249   1              P2=0xfd;
 250   1          P0=tab[6];
 251   1              delayms1(1);
 252   1      
 253   1              P2=0xf7;
 254   1              P0=tab[minute1/10];
 255   1              delayms1(1);
 256   1      
 257   1              P2=0xef;
 258   1              P0=tab[minute1%10];
 259   1              delayms1(1);
 260   1      
 261   1      }
 262          
 263          
 264          void displayyear(void)
 265          {
 266   1          P2=0xff;
 267   1      
 268   1              P2=0xfe;
 269   1          P0=0x8c;
 270   1              delayms1(1);

⌨️ 快捷键说明

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