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

📄 ds1302+led-c51.lst

📁 这是一个基于51单片机的DS1302_实时时钟驱动程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   DS1302_LED_C51                                                        12/16/2007 13:49:27 PAGE 1   


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

line level    source

   1          /******************************************************************
   2          /*                                                                *
   3          /* AOKE210E单片机开发系统演示程序                                                             *
   4          /*                                                                *
   5          /* 版本: V2.0 (2007/11/20)                                       *
   6          /* 作者: 高山流水 (Email: aoke999@sohu.com)                      *
   7          /* 网站: www.aokemcu.cn(奥科电子)                                *
   8          /*                                                                *
   9          /*                                                                *
  10          /******************************************************************/
  11          #include<reg51.h>
  12          #include<intrins.h>
  13          
  14          #define uchar unsigned char
  15          #define uint unsigned int
  16          
  17          sbit  K1 = P3^4;
  18          sbit  K2 = P3^5;
  19          sbit  K3 = P3^6;
  20          sbit  K4 = P3^7;
  21          
  22          sbit reset = P1^2;
  23          sbit sclk  = P1^0;
  24          sbit io    = P1^1;
  25          
  26          sbit  BEEP = P1^6;
  27          
  28          sbit dula=P2^2;
  29          sbit wela=P2^3;
  30          
  31          bit flag=1,hour=0,min=0,sec=0;
  32          bit year=0,month=0,day=0,week=0;
  33          bit alarm_flag=0;
  34          uchar  timecount=0,count=0; 
  35          
  36          uchar str1[]="  -  -   Week:  ";
  37          uchar str2[]="Time:           ";
  38          uchar str3[]="Alarm:          ";
  39          
  40          uchar init [] ={0x00,0x00,0x00,0x00,0x00,0x00,0x00};  //
  41          uchar init1[] ={0x00,0x00};
  42          uchar init2[] ={0x00,0x00,0x00,0x26,0x11,0x01,0x07}; //
  43                         //秒, 分, 时, 日, 月,星期,年
  44          uchar bj_time[] ={0x00,0x00,0x00}; 
  45                           //秒, 分, 时
  46          uchar code  mytab[8] = {0x01,0x1b,0x1d,0x19,0x1d,0x1b,0x01,0x00};//小喇叭
  47          
  48          uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,                         //数码管编码
  49                                  0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  50          
  51          /******************************************************************/
  52          
  53          /******************************************************************/
  54          void delay1(int ms)
  55          {
C51 COMPILER V7.50   DS1302_LED_C51                                                        12/16/2007 13:49:27 PAGE 2   

  56   1       unsigned char y;
  57   1        while(ms--)
  58   1       {
  59   2        for(y = 0; y<250; y++)
  60   2        {
  61   3         _nop_();
  62   3         _nop_();
  63   3         _nop_();
  64   3         _nop_();
  65   3        }
  66   2       }
  67   1      }
  68          
  69          
  70          /*********************************************************/
  71          // 
  72          /*********************************************************/
  73          void delay()
  74          {
  75   1         uchar j;
  76   1         for(j=250;j>0;j--);
  77   1      }
  78          
  79          
  80          /**********************************************************/
  81          //
  82          /**********************************************************/
  83          void write_byte(uchar inbyte)
  84          {
  85   1         uchar i;
  86   1         for(i=0;i<8;i++)
  87   1         {
  88   2          sclk=0;             //写的时候低电平改变数据
  89   2          if(inbyte&0x01)
  90   2          io=1;
  91   2          else
  92   2          io=0; 
  93   2          sclk=1;            //写的时候高电平,把数据写入ds1302
  94   2          _nop_();
  95   2          inbyte=inbyte>>1;
  96   2         }
  97   1      }
  98          
  99          /**********************************************************/
 100          
 101          /**********************************************************/
 102          uchar read_byte()    //sclk的下跳沿读数据
 103          {
 104   1         uchar i,temp=0; 
 105   1         io=1;                //设置为输入口
 106   1         for(i=0;i<7;i++)
 107   1         {
 108   2          sclk=0;
 109   2          if(io==1)
 110   2          temp=temp|0x80;
 111   2          else
 112   2          temp=temp&0x7f;
 113   2          sclk=1;             //产生下跳沿
 114   2          
 115   2          temp=temp>>1;
 116   2         }
 117   1         return (temp);
C51 COMPILER V7.50   DS1302_LED_C51                                                        12/16/2007 13:49:27 PAGE 3   

 118   1      }
 119          
 120          /**********************************************************/
 121          // 往ds1302的某个地址写入数据 
 122          /**********************************************************/
 123          void write_ds1302(uchar cmd,uchar indata)
 124          {
 125   1         sclk=0;
 126   1         reset=1;
 127   1         write_byte(cmd);        
 128   1         write_byte(indata);
 129   1         
 130   1         sclk=0;
 131   1         reset=0;
 132   1      }
 133          
 134          /**********************************************************/
 135          // 读ds1302某地址的的数据 
 136          /**********************************************************/
 137          uchar read_ds1302(uchar addr)
 138          {
 139   1         uchar backdata;
 140   1         sclk=0;
 141   1         reset=1;
 142   1      
 143   1         write_byte(addr);      //先写地址
 144   1         backdata=read_byte();  //然后读数据
 145   1        
 146   1         sclk=0;
 147   1         reset=0;
 148   1         return (backdata);
 149   1      }
 150          
 151          /**********************************************************/
 152          // 设置初始时间
 153          /**********************************************************/
 154          void set_ds1302(uchar addr,uchar *p,uchar n) //写入n个数据
 155          {
 156   1         write_ds1302(0x8e,0x00);          //写控制字,允许写操作
 157   1         for(;n>0;n--)
 158   1         {
 159   2         write_ds1302(addr,*p);
 160   2         p++;
 161   2         addr=addr+2;
 162   2         }
 163   1         write_ds1302(0x8e,0x80);          //写保护,不允许写
 164   1      }
 165          
 166          /**********************************************************/
 167          // 读取当前时间 
 168          /**********************************************************/
 169          void read_nowtime(uchar addr,uchar *p,uchar n)
 170          {
 171   1        for(;n>0;n--)
 172   1        {
 173   2          *p=read_ds1302(addr);
 174   2          p++;
 175   2          addr=addr+2;
 176   2        } 
 177   1      }
 178          
 179          /**********************************************************/
C51 COMPILER V7.50   DS1302_LED_C51                                                        12/16/2007 13:49:27 PAGE 4   

 180          // 初始化DS1302
 181          /**********************************************************/
 182          void init_ds1302()
 183          {
 184   1         reset=0;
 185   1         sclk=0;
 186   1         write_ds1302(0x80,0x00); 
 187   1         write_ds1302(0x90,0xa6); //一个二极管+4K电阻充电
 188   1         write_ds1302(0x8e,0x80); //写保护控制字,禁止写
 189   1      }
 190          
 191          /**********************************************************/
 192          /*                                                        */
 193          /* 蜂鸣器响一声                                           */
 194          /*                                                        */
 195          /**********************************************************/
 196          void beep()
 197            {
 198   1          unsigned char y;
 199   1          for (y=0;y<100;y++)
 200   1          {
 201   2            delay();
 202   2            BEEP=!BEEP;                //BEEP取反
 203   2          } 
 204   1          BEEP=1;                      //关闭蜂鸣器
 205   1              delay1(50);
 206   1        }
 207          
 208          
 209          
 210          /**********************************************************/
 211          // Time0中断函数
 212          /**********************************************************/
 213          void Time0(void) interrupt 1 using 0
 214          {
 215   1        TH0=0x4c; //50ms定时
 216   1        TL0=0x00;
 217   1        timecount++;
 218   1        if(timecount>9)
 219   1         {
 220   2          timecount=0;    
 221   2          flag=~flag;             
 222   2         }  
 223   1      }
 224          
 225          /**********************************************************/

⌨️ 快捷键说明

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