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

📄 时钟ds1302lcd.lst

📁 一些51单片机基础模块的程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   时钟DS1302LCD                                                         04/10/2009 19:42:50 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE 时钟DS1302LCD
OBJECT MODULE PLACED IN 时钟DS1302LCD.OBJ
COMPILER INVOKED BY: E:\Program Files\Keil\C51\BIN\C51.EXE 时钟DS1302LCD.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /********************************************************************
   2          * 文件名  : 时钟DS1302LCD.c
   3          * 描述    :  该文件实现用DS1302来实现日历和时钟功能,液晶1602上显示出来。
   4          * 创建人  : 东流,2009年4月10日
   5          * 版本号  : 2.0
   6          * 技术支持论坛:www.zidh.com/bbs(请进入“赞助商板块”中的“东流电子工作室”)
   7          * 感谢“中国自动化资讯网”对本工作室的大力支持。
   8          ***********************************************************************/
   9          #include<reg52.h>
  10          #include<intrins.h>
  11          
  12          #define uchar unsigned char
  13          #define uint  unsigned int
  14          
  15          sbit ACC0 = ACC^0;
  16          sbit ACC7 = ACC^7;
  17          sbit P3_2 = P3^2;
  18          sbit P3_5 = P3^4;
  19          
  20          sbit T_CLK = P1^2; /*实时时钟时钟线引脚 */
  21          sbit T_IO = P1^3; /*实时时钟数据线引脚 */
  22          sbit T_RST = P1^4; /*实时时钟复位线引脚 */
  23          
  24          //这三个引脚参考资料
  25          sbit E=P2^7;            //1602使能引脚
  26          sbit RW=P2^6;           //1602读写引脚  
  27          sbit RS=P2^5;           //1602数据/命令选择引脚
  28          
  29          /********************************************************************
  30          * 名称 : delay()
  31          * 功能 : 延时,延时时间大概为140US。
  32          * 输入 : 无
  33          * 输出 : 无
  34          ***********************************************************************/
  35          
  36          void delay()
  37          {
  38   1              int i,j;
  39   1              for(i=0; i<=10; i++)
  40   1              for(j=0; j<=2; j++)
  41   1      ;
  42   1      }
  43          
  44          /********************************************************************
  45          * 名称 : Convert(uchar In_Date)
  46          * 功能 : 因为电路设计时,P0.0--P0.7接法刚好了资料中的相反,所以设计该函数。
  47          * 输入 : 1602资料上的值
  48          * 输出 : 送到1602的值
  49          ***********************************************************************/
  50          uchar Convert(uchar In_Date)
  51          {
  52   1          uchar i, Out_Date = 0, temp = 0;
  53   1          for(i=0; i<8; i++)
  54   1          {
  55   2              temp = (In_Date >> i) & 0x01;
C51 COMPILER V7.50   时钟DS1302LCD                                                         04/10/2009 19:42:50 PAGE 2   

  56   2              Out_Date |= (temp << (7 - i));
  57   2          }
  58   1          return Out_Date;
  59   1      }
  60          /********************************************************************
  61          * 名称 : enable(uchar del)
  62          * 功能 : 1602命令函数
  63          * 输入 : 输入的命令值
  64          * 输出 : 无
  65          ***********************************************************************/
  66          
  67          void enable(uchar del)
  68          {
  69   1              P0 = Convert(del);
  70   1              RS = 0;
  71   1              RW = 0;
  72   1              E = 0;
  73   1              delay();
  74   1              E = 1;
  75   1              delay();
  76   1      }
  77          
  78          /********************************************************************
  79          * 名称 : write(uchar del)
  80          * 功能 : 1602写数据函数
  81          * 输入 : 需要写入1602的数据
  82          * 输出 : 无
  83          ***********************************************************************/
  84          
  85          void write(uchar del)
  86          {
  87   1              P0 = Convert(del);
  88   1              RS = 1;
  89   1              RW = 0;
  90   1              E = 0;
  91   1              delay();
  92   1              E = 1;
  93   1              delay();
  94   1      }
  95          
  96          /********************************************************************
  97          * 名称 : L1602_init()
  98          * 功能 : 1602初始化,请参考1602的资料
  99          * 输入 : 无
 100          * 输出 : 无
 101          ***********************************************************************/
 102          void L1602_init(void)
 103          {
 104   1              enable(0x01);
 105   1              enable(0x38);
 106   1              enable(0x0c);
 107   1              enable(0x06);
 108   1              enable(0xd0);
 109   1      }
 110          
 111          /********************************************************************
 112          * 名称 : L1602_char(uchar hang,uchar lie,char sign)
 113          * 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符显示"b" ,调用该函数如下
 114                           L1602_char(1,5,'b')
 115          * 输入 : 行,列,需要输入1602的数据
 116          * 输出 : 无
 117          ***********************************************************************/
C51 COMPILER V7.50   时钟DS1302LCD                                                         04/10/2009 19:42:50 PAGE 3   

 118          void L1602_char(uchar hang,uchar lie,char sign)
 119          {
 120   1              uchar a;
 121   1              if(hang == 1) a = 0x80;
 122   1              if(hang == 2) a = 0xc0;
 123   1              a = a + lie - 1;
 124   1              enable(a);
 125   1              write(sign);
 126   1      }
 127          
 128          /********************************************************************
 129          * 名称 : L1602_string(uchar hang,uchar lie,uchar *p)
 130          * 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下
 131                           L1602_string(1,5,"ab cd ef;")
 132          * 输入 : 行,列,需要输入1602的数据
 133          * 输出 : 无
 134          ***********************************************************************/
 135          void L1602_string(uchar hang,uchar lie,uchar *p)
 136          {
 137   1              uchar a;
 138   1              if(hang == 1) a = 0x80;
 139   1              if(hang == 2) a = 0xc0;
 140   1              a = a + lie - 1;
 141   1              enable(a);
 142   1              while(1)
 143   1              {
 144   2                      if(*p == '\0') break;
 145   2                      write(*p);
 146   2                      p++;
 147   2              }
 148   1      }
 149          
 150          /********************************************************************
 151          * 名称 :  v_RTInputByte()
 152          * 功能 :  往DS1302写入1Byte数据
 153          * 输入 :  ucDa 写入的数据
 154          * 输出 :  无
 155          ***********************************************************************/
 156          void v_RTInputByte(uchar ucDa)
 157          {
 158   1              uchar i;
 159   1              ACC = ucDa;
 160   1              T_RST = 1;
 161   1              for(i=8; i>0; i--)
 162   1              {
 163   2                      T_IO = ACC0;
 164   2                      T_CLK = 1;
 165   2                      T_CLK = 0;
 166   2                      ACC = ACC >> 1;
 167   2              }
 168   1      }
 169          
 170          /********************************************************************
 171          * 名称  :   uc_RTOutputByte()
 172          * 功能  :   从DS1302读取1Byte数据
 173          * 输入  :       无
 174          * 返回值:   ACC
 175          ***********************************************************************/
 176          uchar uc_RTOutputByte(void) 
 177          {
 178   1              uchar i;
 179   1              T_RST = 1;
C51 COMPILER V7.50   时钟DS1302LCD                                                         04/10/2009 19:42:50 PAGE 4   

 180   1              for(i=8; i>0; i--)
 181   1              {
 182   2                      ACC = ACC >>1;
 183   2                      T_IO=1;
 184   2                      ACC7 = T_IO;
 185   2                      T_CLK = 1;
 186   2                      T_CLK = 0;
 187   2              }
 188   1              return(ACC);
 189   1      }
 190          
 191          /********************************************************************
 192          * 名称   :   v_W1302(uchar ucAddr, uchar ucDa)
 193          * 功能   :   往DS1302写入数据
 194          * 输入   :   ucAddr: DS1302地址, ucDa: 要写的数据
 195          * 返回值 :   无
 196          ***********************************************************************/
 197          void v_W1302(uchar ucAddr, uchar ucDa)
 198          {
 199   1              T_RST = 0;
 200   1              T_CLK = 0;
 201   1              T_RST = 1;
 202   1              v_RTInputByte(ucAddr);   // 写地址 
 203   1              _nop_();
 204   1              _nop_();
 205   1              v_RTInputByte(ucDa);     // 写1Byte数据
 206   1              T_CLK = 1;
 207   1              T_RST = 0;
 208   1      }
 209          
 210          /********************************************************************
 211          * 名称   :  uc_R1302(uchar ucAddr)
 212          * 功能   :  读取DS1302某地址的数据
 213          * 输入   :  ucAddr: DS1302地址
 214          * 返回值 :  ucDa :读取的数据
 215          ***********************************************************************/
 216          uchar uc_R1302(uchar ucAddr)
 217          {
 218   1              uchar ucDa;
 219   1              T_RST = 0;
 220   1              T_CLK = 0;
 221   1              T_RST = 1;
 222   1              v_RTInputByte(ucAddr);    //写地址,命令
 223   1              _nop_();
 224   1              _nop_();
 225   1              ucDa = uc_RTOutputByte(); //读1Byte数据
 226   1              T_CLK = 1;
 227   1              T_RST = 0;
 228   1              return(ucDa);
 229   1      }
 230          
 231          /********************************************************************
 232          * 名称   :  v_BurstW1302T
 233          * 功能   :  往DS1302写入时钟数据(多字节方式)
 234          * 输入   :  pSecDa: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年 控制
 235          *                                                  8Byte (BCD码) 1B 1B 1B 1B 1B 1B  1B  1B
 236          * 返回值 :  无
 237          ***********************************************************************/
 238          void v_BurstW1302T(uchar *pSecDa)
 239          {
 240   1              uchar i;
 241   1              v_W1302(0x8e, 0x00);          //控制命令,WP=0,写操作
C51 COMPILER V7.50   时钟DS1302LCD                                                         04/10/2009 19:42:50 PAGE 5   

 242   1              T_RST = 0;
 243   1              T_CLK = 0;

⌨️ 快捷键说明

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