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

📄 自动充电ds1302.lst

📁 dallas1302的应用非常详细,还有一个自己作的显示程序可以向我要或者自行编写是lcm1602的
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V6.02  譥动_涞鏒S1302                                                         03/21/2008 01:38:36 PAGE 1   


C51 COMPILER V6.02, COMPILATION OF MODULE 譥动_涞鏒S1302
OBJECT MODULE PLACED IN C:\DOCUME~1\DAVELO~1\桌面\电子竞赛\李大伟\DS1302_7\自动充电DS1302.OBJ
COMPILER INVOKED BY: C:\COMP51\C51.EXE C:\DOCUME~1\DAVELO~1\桌面\电子竞赛\李大伟\DS1302_7\自动充电DS1302.C DB SB OE

stmt level    source

   1          #include <lcm1602.c>
   2          
   3          #define uchar unsigned char
   4          
   5          //---------------------------定义端口--------------------------------
   6          
   7          sbit SCLK=P3^7;        //时钟
   8          sbit IO_DATA=P3^6;     //数据
   9          sbit RESET=P3^5;       //复位
  10          
  11          sbit ACC0=ACC^0;       //定义累加器最低位
  12          sbit ACC7=ACC^7;       //定义累加器最高位
  13          
  14          //--------------------------定义端口完毕-----------------------------
  15          
  16          //---------------------------时序初始化-----------------------------
  17          ds1302_init()
  18          {
  19   1       RESET=0;
  20   1       SCLK=0;
  21   1       RESET=1;
  22   1      }
  23          //----------------------------时序初始完毕----------------------------
  24          
  25          ds1302_end()  //写结束
  26          {
  27   1       RESET=0;
  28   1       SCLK=1;
  29   1      }
  30          
  31          ds1302_write(uchar position)           //写指令与数据函数
  32          {uchar i;
  33   1       ACC=position;
  34   1       for(i=1;i<9;i++)    //这里i不能从0开始循环,否则全刷0
  35   1         {
  36   2           SCLK=0;         //也可以用 IO_DATA=ACC0;
  37   2           IO_DATA=ACC0;   //         SCLK=0;       来实现,写指令时换下位置一样
  38   2           SCLK=1;         //时钟脉冲上升沿写入数据
  39   2           ACC>>=1;        //累加器值右移一位
  40   2          }
  41   1      }
  42          
  43          //-------------------------------写指令-------------------------------
  44          ds1302_write_command(uchar position,uchar ds1302_data)
  45          {
  46   1       ds1302_init();
  47   1       ds1302_write(position);       //先写指令,后写数据;
  48   1       ds1302_write(ds1302_data);
  49   1       ds1302_end();
  50   1      }
  51          //------------------------------写指令完毕----------------------------
  52          
  53          //---------------------------------读数据-----------------------------
  54          ds1302_read()
  55          {uchar i;
C51 COMPILER V6.02  譥动_涞鏒S1302                                                         03/21/2008 01:38:36 PAGE 2   

  56   1       for(i=1;i<9;i++)  //这里i不能从0开始循环,否则全刷0
  57   1       {
  58   2        ACC>>=1;         //要先把上次写的地址移走
  59   2        SCLK=1;
  60   2        SCLK=0;
  61   2        ACC7=IO_DATA;    //读数据在下降沿有效
  62   2        }
  63   1        return(ACC);
  64   1      }
  65          //--------------------------------读数据完毕--------------------------
  66          
  67          //------------------------十六进制至十进制转换----------------------------
  68          ds1302_change_16_10(uchar read_data)
  69          {uchar ten,ge,sum;     //   定义十六进制十位和个位和所合成十进制数
  70   1       ten=read_data/16;
  71   1       ge=read_data%16;
  72   1       sum=ten*10+ge;
  73   1       return(sum);
  74   1      }
  75          //-----------------------------转换完毕-----------------------------
  76          
  77          //------------------------------读函数----------------------------
  78          ds1302_read_command(uchar position)
  79          {uchar readdata;      //存放临时读出数据
  80   1       ds1302_init();
  81   1       ds1302_write(position);   //先写地址
  82   1       readdata=ds1302_read();
  83   1       readdata=ds1302_change_16_10(readdata);  //进行十六进制至十进制转换
  84   1       ds1302_end();
  85   1       return(readdata);
  86   1      }
  87          //------------------------------读完毕----------------------------
  88          
  89          //-----------------------------显示函数-----------------------------
  90          ds1302_display(uchar *display)
  91          {
  92   1        display_a_string(0,"20");
  93   1        display_a_char(0x02,(display[6]/10)|0x30);//year
  94   1        display_a_char(0x03,(display[6]%10)|0x30);
  95   1        display_a_char(0x04,'-');
  96   1        display_a_char(0x05,(display[4]/10)|0x30);//mon
  97   1        display_a_char(0x06,(display[4]%10)|0x30);
  98   1        display_a_char(0x07,'-');
  99   1        display_a_char(0x08,(display[3]/10)|0x30);//date
 100   1        display_a_char(0x09,(display[3]%10)|0x30);
 101   1      
 102   1        display_a_char(0x0d,(display[5]/10)|0x30);//day
 103   1        display_a_char(0x0e,(display[5]%10)|0x30);
 104   1      
 105   1        display_a_char(0x10,(display[2]/10)+0x30);//hr
 106   1        display_a_char(0x11,(display[2]%10)+0x30);
 107   1        display_a_char(0x12,':');
 108   1        display_a_char(0x13,(display[1]/10)+0x30);//min
 109   1        display_a_char(0x14,(display[1]%10)+0x30);
 110   1        display_a_char(0x15,':');
 111   1        display_a_char(0x16,(display[0]/10)+0x30);//sec
 112   1        display_a_char(0x17,(display[0]%10)+0x30);
 113   1      }
 114          //-----------------------------显示完毕-----------------------------
 115          main()
 116           {uchar i,position;
 117   1        uchar begin[7]={0x00,0x08,0x08,0x26,0x07,0x02,0x08}; //赋初值
C51 COMPILER V6.02  譥动_涞鏒S1302                                                         03/21/2008 01:38:36 PAGE 3   

 118   1        lcd_init();  //液晶初始化
 119   1      //ds1302_write_command(0x80,0x80);  //停止时钟震荡器 32.768M
 120   1      //ds1302_write_command(0x84,0x0*);  //24小时计时制;上午AM选择;
 121   1                                          //*号表示和前面一位共5位数构成0-23小时初值
 122   1        ds1302_write_command(0x90,0xa4);  //涓流充电打开  TCS=1010;DS=01;RS=00;
 123   1      /*  ds1302_write_command(0x8e,0x00);  //关闭写保护
 124   1        position=0x80;

⌨️ 快捷键说明

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