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

📄 1302_2.lst

📁 这是一称的项目原文件,包括T9汉字输入,打印机,24C512,已经引用到产品上
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.08   1302_2                                                                03/05/2007 16:38:05 PAGE 1   


C51 COMPILER V7.08, COMPILATION OF MODULE 1302_2
OBJECT MODULE PLACED IN 1302_2.OBJ
COMPILER INVOKED BY: D:\程序\keil c\C51\BIN\C51.EXE 1302_2.C LARGE INCDIR(c:|keil) DEBUG OBJECTEXTEND

line level    source

   1          #include <1302_2.h>
   2          #include <keyboard451.h>
   3          #include <set.h>
   4          
   5          static int m;
   6          data_1302 default_date_time ={
   7                  0x80,  //秒,第七位初始为1,停止计数
   8              0x00,  //分
   9                  0x00,  //时,第七位为零,24小时模式,第六位固定为0,第五位为20小时位,第四位为20小时以下位(1or0),后四位
             -为小时数个位的BCD码
  10                  0x02,  //日,7,6固定为0,5,4位表示数字十位的BCD码,3,2,1,0位为数字的个位BCD码
  11                  0x11,  //月 
  12                  0x04,  //星期
  13                  0x06   //年
  14                  };
  15          data_1302 data_to_1302 = {0};
  16          ////////////////////////////////////////////////
  17          set_struct  set_pinyin_struct = {
  18             //&data_to_1302,
  19             0,
  20             0
  21          };
  22          //---------------------------------------//
  23          set_struct  set_code_struct = {
  24             //&data_to_1302,
  25             0,
  26             0
  27          };
  28          //---------------------------------------//
  29          set_struct  set_name_struct = {
  30             //&data_to_1302,
  31             0,
  32             0
  33          };
  34          //---------------------------------------//
  35          set_struct  code_flag_struct = {
  36             //&data_to_1302,
  37             0,
  38             0
  39          };
  40          //------------------------------------//
  41          
  42          //////////////////////////////////////////
  43          set_struct  set_time_struct = {
  44             &data_to_1302,
  45             0
  46          };
  47          
  48          set_struct  set_date_struct = {
  49             &data_to_1302,
  50             0
  51          };
  52          
  53          static void Input_Byte_1302(BYTE d)            //向1302写入数据,按位
  54          { 
C51 COMPILER V7.08   1302_2                                                                03/05/2007 16:38:05 PAGE 2   

  55   1          BYTE i;
  56   1          ACC = d;
  57   1          for(i=8; i>0; i--)
  58   1          {
  59   2              T_IO = ACC0;         
  60   2              T_CLK = 1;
  61   2              T_CLK = 0;
  62   2              ACC = ACC >> 1; 
  63   2          } 
  64   1      }
  65          
  66          static BYTE Output_Byte_1302(void)            //从1302读数据,按位   
  67          { 
  68   1          BYTE i;
  69   1          for(i=8; i>0; i--)
  70   1          {
  71   2              ACC = ACC >>1;      
  72   2              ACC7 = T_IO;
  73   2              T_CLK = 1;
  74   2              T_CLK = 0;
  75   2          } 
  76   1          return(ACC); 
  77   1      }
  78          
  79          static void write_1302(BYTE ucAddr, BYTE ucDa)  //写1302
  80          {
  81   1          T_RST = 0;
  82   1          T_CLK = 0;
  83   1          T_RST = 1;
  84   1          Input_Byte_1302(ucAddr);       /* 地址,命令 */
  85   1          Input_Byte_1302(ucDa);       /* 写1Byte数据*/
  86   1          T_CLK = 1;
  87   1          T_RST = 0;
  88   1      } 
  89          
  90          static BYTE read_1302(BYTE ucAddr)                //读1302
  91          {
  92   1          BYTE ucData;
  93   1          T_RST = 0;
  94   1          T_CLK = 0;
  95   1          T_RST = 1;
  96   1          Input_Byte_1302(ucAddr);             /* 地址,命令 */
  97   1          ucData = Output_Byte_1302();         /* 读1Byte数据 */
  98   1          T_CLK = 1;
  99   1          T_RST = 0;
 100   1          return(ucData);
 101   1      }
 102          /******************************************************************** 
 103           功    能:往DS1302写入时钟数据(多字节方式)
 104           说    明:先写地址,后写命令/数据
 105           入口参数:pWClock: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年 控制
 106                                      8Byte (BCD码)1B 1B 1B 1B 1B  1B  1B 1B
 107          ***********************************************************************/
 108          void Burstwrite_1302T(BYTE *pWClock)                      //写1302,多字节
 109          {
 110   1          BYTE i;
 111   1          write_1302(0x8e,0x00);         /* 控制命令,WP=0,写操作?*/
 112   1          T_RST = 0;
 113   1          T_CLK = 0;
 114   1          T_RST = 1;
 115   1          Input_Byte_1302(0xbe);        /* 0xbe:时钟多字节写命令 */
 116   1          for (i = 8; i>0; i--)     /*8Byte = 7Byte 时钟数据 + 1Byte 控制*/
C51 COMPILER V7.08   1302_2                                                                03/05/2007 16:38:05 PAGE 3   

 117   1          {
 118   2              Input_Byte_1302(*pWClock); /* 写1Byte数据*/
 119   2              pWClock++;
 120   2          }
 121   1          T_CLK = 1;
 122   1          T_RST = 0;
 123   1      } 
 124          /******************************************************************** 
 125           功    能:读取DS1302时钟数据
 126           说    明:先写地址/命令,后读数据(时钟多字节方式)
 127           入口参数:pRClock: 读取时钟数据地址 格式为: 秒 分 时 日 月 星期 年
 128                                         7Byte (BCD码)1B 1B 1B 1B 1B  1B  1B
 129          ***********************************************************************/
 130          void Burstread_1302T(BYTE *pRClock)                      //读1302,多字节 
 131          {
 132   1          BYTE i;
 133   1          write_1302(0x8e,0x00);
 134   1          T_RST = 0;
 135   1          T_CLK = 0;
 136   1          T_RST = 1;
 137   1          Input_Byte_1302(0xbf);             /* 0xbf:时钟多字节读命令 */
 138   1          for (i=8; i>0; i--) 
 139   1          {
 140   2             *pRClock = Output_Byte_1302();   /* 读1Byte数据 */
 141   2             pRClock++;
 142   2          }
 143   1          T_CLK = 1;
 144   1          T_RST = 0;
 145   1      }
 146          /******************************************************************** 
 147           功    能:往DS1302寄存器数写入数据(多字节方式)
 148           说    明:先写地址,后写数据(寄存器多字节方式)
 149           入口参数:pWReg: 寄存器数据地址
 150          ***********************************************************************/
 151          void Burstwrite_1302R(BYTE *pWReg)                            //写1302寄存器,多字节
 152          {
 153   1          BYTE i;
 154   1          write_1302(0x8e,0x00);         /* 控制命令,WP=0,写操作*/
 155   1          T_RST = 0;
 156   1          T_CLK = 0;
 157   1          T_RST = 1;
 158   1          Input_Byte_1302(0xfe);         /* 0xbe:时钟多字节写命令 */
 159   1          for (i=31; i>0; i--)       /* 31Byte 寄存器数据 */
 160   1          {
 161   2              Input_Byte_1302(*pWReg);    /* 写1Byte数据*/
 162   2              pWReg++;
 163   2          }
 164   1          T_CLK = 1;
 165   1          T_RST = 0;
 166   1      } 
 167          /******************************************************************** 
 168           功    能:读取DS1302寄存器数据
 169           说    明:先写地址,后读命令/数据(寄存器多字节方式)
 170           入口参数:pRReg: 寄存器数据地址 
 171          ***********************************************************************/
 172          void Burstread_1302R(BYTE *pRReg)                        //读1302寄存器,多字节
 173          {
 174   1          BYTE i;
 175   1          T_RST = 0;
 176   1          T_CLK = 0;
 177   1          T_RST = 1;
 178   1          Input_Byte_1302(0xff);            /* 0xff:时钟多字节读命令 */
C51 COMPILER V7.08   1302_2                                                                03/05/2007 16:38:05 PAGE 4   

 179   1          for (i=31; i>0; i--)          /*31Byte 寄存器数据 */
 180   1          {
 181   2              *pRReg = Output_Byte_1302();  /* 读1Byte数据 */
 182   2              pRReg++;
 183   2          }
 184   1          T_CLK = 1;
 185   1          T_RST = 0;
 186   1      }
 187          
 188          void Set_1302(data_1302 *pClock)                         //设置1302                                 
 189          {
 190   1          BYTE i;
 191   1              BYTE ucAddr = 0x80;
 192   1              BYTE *j;
 193   1              BYTE tem;
 194   1         j = (BYTE*)pClock;
 195   1         write_1302(0x8e,0x00); 
 196   1         for(i =7; i>0; i--)
 197   1         {  
 198   2            tem = *j;
 199   2                write_1302(ucAddr, tem);
 200   2            j++;
 201   2            ucAddr +=2;
 202   2         }
 203   1         write_1302(0x8e,0x80); 
 204   1      }
 205          
 206          void Get_1302(data_1302 *ucCurtime)                        //读取1302数据
 207          {
 208   1          
 209   1          BYTE ucAddr = 0x81;
 210   1      
 211   1              ucCurtime->second = read_1302(ucAddr);
 212   1              ucAddr += 2;
 213   1              ucCurtime->minute = read_1302(ucAddr);
 214   1              ucAddr += 2;
 215   1              ucCurtime->hour = read_1302(ucAddr);
 216   1              ucAddr += 2;
 217   1              ucCurtime->day = read_1302(ucAddr);
 218   1              ucAddr += 2;
 219   1              ucCurtime->month = read_1302(ucAddr);
 220   1              ucAddr += 2;
 221   1              ucCurtime->week = read_1302(ucAddr);
 222   1              ucAddr += 2;
 223   1              ucCurtime->year = read_1302(ucAddr);
 224   1          
 225   1      }
 226          
 227          
 228          void Write_Enable_1302(void)                              //1302写保护,允许
 229          {
 230   1        write_1302(0x8e, 0x00);
 231   1      }
 232          
 233          
 234          void Write_Disbale_1302(void)                             //1302写保护,禁止
 235          {
 236   1        write_1302(0x8e, 0x80);
 237   1      }
 238          
 239          void Work_Start_1302(void)                               //1302工作,允许
 240          {
C51 COMPILER V7.08   1302_2                                                                03/05/2007 16:38:05 PAGE 5   

 241   1        BYTE val;
 242   1        val = read_1302(0x81);
 243   1        val &= 0x7f;                                           //最高位置零,保留低位数值
 244   1        Write_Enable_1302();
 245   1        write_1302(0x80, val);
 246   1        write_1302(0x90, 0xa5);                                //涓流充电
 247   1        Write_Disbale_1302();
 248   1      }
 249          
 250          void get_second_from_1302_data(data_1302 *get_data)      //从1302读取秒数据
 251          {
 252   1         BYTE second_data ;
 253   1         second_data = (get_data->second);
 254   1         second_buffer.shiwei = 0x30 + ((second_data >> 4) & 0x07);
 255   1         second_buffer.gewei = 0x30 + ((get_data->second) & 0x0F);
 256   1      }
 257          
 258          void get_minute_from_1302_data(data_1302 *get_data)           //从1302读取分钟数据
 259          {
 260   1         BYTE minute_data ;
 261   1         minute_data = (get_data->minute);
 262   1         minute_buffer.shiwei = 0x30 + ((minute_data >> 4) & 0x07);
 263   1         minute_buffer.gewei =  0x30 + (minute_data & 0x0F);
 264   1      }
 265          //注意指定24小时制,小时的十位可以取11否?还是只能是00,01,10,现在的程序是不能取11
 266          void get_hour_from_1302_data(data_1302 *get_data)             //从1302读取小时数据
 267          {
 268   1         BYTE hour_data ;
 269   1         hour_data = (get_data->hour);
 270   1         hour_buffer.gewei  = 0x30 + (hour_data& 0x0F);
 271   1         hour_data = ((hour_data >> 4) & 0x03);
 272   1         /*
 273   1         if (hour_data < 2)
 274   1            hour_buffer.shiwei = 0x30 + hour_data;
 275   1         else  
 276   1            hour_buffer.shiwei = 0x30 + 2;
 277   1         */
 278   1         hour_buffer.shiwei = 0x30 + hour_data;
 279   1      }
 280          
 281          void get_time_from_1302_data(data_1302 *get_data)            //读取1302时间数据
 282          {
 283   1         get_second_from_1302_data(get_data);
 284   1         get_minute_from_1302_data(get_data);
 285   1         get_hour_from_1302_data(get_data);
 286   1      }
 287          
 288          static void get_day_from_1302_data(data_1302 *get_data)        //读取1302天数据

⌨️ 快捷键说明

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