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

📄 ds1302.lst

📁 ds1302和液晶1602写的万年历!值得下载!
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   DS1302                                                                12/20/2008 10:29:42 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          #include <at89x51.h>
   2          sbit T_CLK = P2^5; //实时时钟时钟线引脚 
   3          sbit T_IO = P2^6; //实时时钟数据线引脚 
   4          sbit T_RST = P2^7; //实时时钟复位线引脚 
   5          sbit ACC0=ACC^0;
   6          sbit ACC7=ACC^7;
   7          sbit rs=P1^2;
   8          sbit rw=P1^3;
   9          sbit e=P1^4;
  10          sbit set=P3^4; //设置
  11          sbit add=P3^5; //加
  12          sbit dec=P3^6; //减
  13          void show();
  14          void keyscan();
  15          void inishow();
  16          unsigned char hex_bcd(unsigned char hex_data);
  17          unsigned char bcd_hex(unsigned char bcd_data);
  18          unsigned char code tab[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
  19          unsigned char code buf[7]={0x00,0x00,0x0c,0x0d,0x0a,0x01,0x0a};//初始时间格式为: 秒 分 时 日 月 星期 年 
  20          unsigned char data ucCurtime[7];
  21          unsigned char a,yearh,yearl,monh,monl,dah,dal,hoh,hol,wekl,mih,mil,seh,sel;
  22          unsigned char Addr;
  23          //延时
  24          void delay()
  25          { 
  26   1              unsigned char y;
  27   1              for(y=0;y<75;y++);
  28   1      }
  29          /******************************************************************** 
  30          * 名称: InputByte
  31          * 功能: 向1302写数据
  32          ***********************************************************************/
  33          void InputByte(unsigned char ucDa) 
  34          { 
  35   1              unsigned char i;
  36   1              ACC = ucDa;
  37   1              for(i=8; i>0; i--)
  38   1              {
  39   2                      T_IO = ACC0; //相当于汇编中的 RRC 
  40   2                      T_CLK = 1;
  41   2                      T_CLK = 0;
  42   2                      ACC = ACC >> 1; 
  43   2              } 
  44   1      }
  45          /******************************************************************** 
  46          * 名称: OutputByte
  47          * 功能: 从1302读数据
  48          ***********************************************************************/
  49          unsigned char OutputByte(void) 
  50          { 
  51   1              unsigned char i;
  52   1              for(i=8; i>0; i--)
  53   1              {
  54   2                      ACC = ACC >>1; //相当于汇编中的 RRC 
  55   2                      ACC7 = T_IO;
C51 COMPILER V7.06   DS1302                                                                12/20/2008 10:29:42 PAGE 2   

  56   2                      T_CLK = 1;
  57   2                      T_CLK = 0;
  58   2              } 
  59   1              return(ACC); 
  60   1      }
  61          /******************************************************************** 
  62          * 名称: W1302
  63          * 功能: 向1302写数据
  64          ***********************************************************************/
  65          void W1302(unsigned char ucAddr, unsigned char ucDa)
  66          {
  67   1              T_RST = 0;
  68   1              T_CLK = 0;
  69   1              T_RST = 1;
  70   1              InputByte(ucAddr); // 地址,命令 
  71   1              InputByte(ucDa); // 写1Byte数据
  72   1              T_CLK = 1;
  73   1              T_RST =0;
  74   1      } 
  75          /******************************************************************** 
  76          * 名称: R1302
  77          * 功能: 从1302读数据
  78          ***********************************************************************/
  79          unsigned char R1302(unsigned char ucAddr)
  80          {
  81   1              unsigned char ucDa,a;
  82   1              T_RST = 0;
  83   1              T_CLK = 0;
  84   1              T_RST = 1;
  85   1              InputByte(ucAddr); // 地址,命令 
  86   1              a = OutputByte(); // 读1Byte数据
  87   1              ucDa=bcd_hex(a); 
  88   1              T_CLK = 1;
  89   1              T_RST =0;
  90   1              return(ucDa);
  91   1      }
  92          /******************************************************************** 
  93          * 名称: Set1302
  94          * 功能: 设置初始时间
  95          * 调用: W1302() 
  96          * 输入: pSecDa: 初始时间地址。初始时间格式为: 秒 分 时 日 月 星期 年 
  97          * 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
  98          * 返回值: 无
  99          ***********************************************************************/
 100          void set1302(unsigned char *pSecDa) 
 101          {
 102   1              unsigned char i;
 103   1              unsigned char ucAddr = 0x80; 
 104   1              W1302(0x8e,0x00); // 控制命令,WP=0,写操作?
 105   1              for(i=0;i<7;i++)
 106   1              {   
 107   2                      W1302(ucAddr,hex_bcd(*pSecDa)); // 秒 分 时 日 月 星期 年       
 108   2                      pSecDa++;
 109   2                      ucAddr +=2;
 110   2              }
 111   1              W1302(0x8e,0x80); // 控制命令,WP=1,写保护?
 112   1      }
 113          /******************************************************************** 
 114          * 名称: write_com
 115          * 功能: 写命令到1602
 116          * 返回值: 无
 117          ***********************************************************************/
C51 COMPILER V7.06   DS1302                                                                12/20/2008 10:29:42 PAGE 3   

 118          void write_com(unsigned char j)//写命令
 119          {
 120   1              e=0;
 121   1              rs=0;
 122   1              rw=0;
 123   1              e=1;
 124   1              P0=j;
 125   1              e=0;
 126   1              delay();
 127   1      }
 128          /******************************************************************** 
 129          * 名称: write_dat
 130          * 功能: 写数据到1602
 131          * 返回值: 无
 132          ***********************************************************************/
 133          void write_dat(unsigned char dat)//写数据
 134          {
 135   1              e=0;
 136   1              rs=1;
 137   1              rw=0;
 138   1              e=1;
 139   1              P0=dat;
 140   1              e=0;
 141   1              delay();
 142   1      }
 143          /******************************************************************** 
 144          * 名称: init
 145          * 功能: 初始化1602
 146          * 返回值: 无
 147          ***********************************************************************/
 148          void init()//初始化lcd
 149          {
 150   1              write_com(0x01);
 151   1              write_com(0x38);
 152   1              write_com(0x38);
 153   1              write_com(0x0e);
 154   1              write_com(0x06);
 155   1              write_com(0x0c);
 156   1      }
 157          /******************************************************************** 
 158          * 名称: write1602
 159          * 功能: 向1602指定地址写数据
 160          * 返回值: 无
 161          ***********************************************************************/
 162          void write1602(unsigned char add,unsigned char dat)//写入显示数据
 163          {
 164   1              write_com(add);
 165   1              write_dat(dat);
 166   1      }
 167          /******************************************************************** 
 168          * 名称: hex_bcd
 169          * 功能: 将16进制转成bcd码
 170          * 返回值: bcd_data
 171          ***********************************************************************/
 172          unsigned char hex_bcd(unsigned char hex_data)
 173          {
 174   1              unsigned char temp=0,bcd_data=0;        
 175   1              temp=hex_data%100;      
 176   1              bcd_data=bcd_data|temp/10<<4;   
 177   1              bcd_data=bcd_data|temp%10;
 178   1              return bcd_data;        
 179   1      }
C51 COMPILER V7.06   DS1302                                                                12/20/2008 10:29:42 PAGE 4   

 180          /******************************************************************** 
 181          * 名称: bcd_hex
 182          * 功能: 将bcd码转成16进制
 183          * 返回值: temp
 184          ***********************************************************************/
 185          unsigned char bcd_hex(unsigned char bcd_data)
 186          {
 187   1              unsigned char temp=0;
 188   1              temp=((bcd_data>>4)*10)+(bcd_data&0x0f);
 189   1              return temp;
 190   1      }
 191          /******************************************************************** 
 192          * 名称: keyscan
 193          * 功能: 键盘扫描程序
 194          * 返回值: 无
 195          ***********************************************************************/
 196          void keyscan()
 197          {
 198   1              unsigned char keynum;
 199   1              if(set==0);
 200   1              delay();
 201   1              if(set==0)
 202   1              {
 203   2                      while(!set);
 204   2                      delay();
 205   2                      while(!set);            
 206   2                      keynum++;               
 207   2                      if(keynum==1)
 208   2                      {       
 209   3                              TR0=0;
 210   3                              write_com(0x0f);
 211   3                              write_com(0xce);                                
 212   3                      }
 213   2                      if(keynum==2)
 214   2                      {
 215   3                              write_com(0xc8);                
 216   3                      }
 217   2                      if(keynum==3)
 218   2                      {
 219   3                              write_com(0xc5);                        
 220   3                      }
 221   2                      if(keynum==4)
 222   2                      {
 223   3                              write_com(0x8b);                
 224   3                      }
 225   2                      if(keynum==5)
 226   2                      {
 227   3                              write_com(0x88);                
 228   3                      }
 229   2                      if(keynum==6)
 230   2                      {
 231   3                              write_com(0x85);                                
 232   3                      }
 233   2                      if(keynum==7)
 234   2                      {
 235   3                              keynum=0;
 236   3                              write_com(0x0c);                        
 237   3                              set1302(ucCurtime);
 238   3                              TR0=1;
 239   3                      }               
 240   2      
 241   2              }
C51 COMPILER V7.06   DS1302                                                                12/20/2008 10:29:42 PAGE 5   

 242   1      
 243   1              if(keynum!=0)
 244   1              {
 245   2                      if(add==0)
 246   2                      delay();
 247   2                      if(add==0)
 248   2                      {
 249   3                              while(!add);
 250   3                              delay();
 251   3                              while(!add);
 252   3                              if(keynum==1)
 253   3                              {
 254   4                                      ucCurtime[5]++;
 255   4                                      if(ucCurtime[5]>7)
 256   4                                      ucCurtime[5]=1;
 257   4                                      write_com(0xce);
 258   4                                      write_dat(tab[ucCurtime[5]%10]);
 259   4                                      write_com(0xce);
 260   4                              }

⌨️ 快捷键说明

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