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

📄 ds1302+lcd1602-c51.lst

📁 这是一个基于51单片机的DS1302_实时时钟驱动程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   DS1302_LCD1602_C51                                                    11/26/2007 14:43:04 PAGE 1   


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

line level    source

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

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

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

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

⌨️ 快捷键说明

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