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

📄 task.lst.svn-base

📁 单片机驱动32X64点阵资料
💻 SVN-BASE
字号:
C51 COMPILER V8.08   TASK                                                                  09/06/2012 18:00:01 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE TASK
OBJECT MODULE PLACED IN task.OBJ
COMPILER INVOKED BY: D:\Program Files\keil_51\C51\BIN\C51.EXE task.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include "NEW_8051.H"
   2          #include"task.h"
   3          #include <intrins.h>
   4          #include"sbit.h"
   5          //#include " uart.h"
   6          /*****************************************************
   7                 4字LED点阵屏+DS1302万年历电子钟 C 程序
   8          
   9          *******************************************************
  10          
  11           DS1302 接线图
  12          
  13                   Vcc2  CLK I/O  /RST 
  14                     
  15                      |   |   |   |
  16                     -------------------
  17                    | 8   7   6   5  |
  18                    |   DS1302       |
  19                    |                |
  20                    | 1   2   3   4  |
  21                     -------------------
  22                      |   |   |   |
  23                   VCC1           GND
  24          
  25          1 脚接+5V    2,3脚32768HZ晶振  4脚接地  5脚接S51的P02 6脚接S51的P01 7接S51的P00
  26          8脚接后备电源,可以接老计算机主板上的3.6V电池,也可以通过二级管隔离接一个大容量电解电容
  27          电压在2.5V以上即可维持
  28                                                                                                                   
  29          
  30          595连级输出数据,138行驱动。*/
  31          
  32          uchar Move;  //时间温度变量
  33          uchar Speed;
  34          uchar Flicker;
  35          uchar line;
  36          uint zimuo;
  37          uchar ucLastSec;
  38          bit c_moon;
  39          bit ri;
  40          bit r;
  41          bit zz=0;
  42          bit rr;
  43          bit nn;
  44          bit w;
  45          bit Can=1;
  46          void start(void)
  47          {
  48   1          Move=0;  
  49   1      //    E=0;                 //595使能
  50   1          zimuo=0;
  51   1          //IP=0x04;     //设置优先级 外部中断1为优先级
  52   1          TMOD=0x21;  //定时器1   0 
  53   1          TH1=0x00;   //定时50us 晶振18.432M 定时器1方式1 16位模式初始化
  54   1          TL1=0x00;    
  55   1          ET1=1;
C51 COMPILER V8.08   TASK                                                                  09/06/2012 18:00:01 PAGE 2   

  56   1              //TR1=1;        
  57   1              TH0 = 0x92;     //18.432M  18.2ms
  58   1          TL0 = 0x0CD;
  59   1          ET0=1;
  60   1              TR0=1;
  61   1          //外部中断
  62   1          IT0=1;      //下降沿触发中断
  63   1          EX0=1;      //开外中断1
  64   1      //    RCAP2H = 0x7D;
  65   1      //    RCAP2L = 0x0CB;
  66   1      //    ET2 = 1;
  67   1      //    TR2=1;
  68   1          CMOD = 0x80;
  69   1          CL = 0;
  70   1          CH = 0;
  71   1          CCON = 0x00;   //清中断标志
  72   1              CCAPM0 = 0x49;
  73   1              CCAP0H = 0x0E2;
  74   1          CCAP0L = 0x00;  
  75   1              CCAPM0 = 0x49; //设置PCA0为16位定时器,允许PCA模块0中断 
  76   1          
  77   1          CR = 1;
  78   1              EA=1;            
  79   1          ri=1;
  80   1          r=1;
  81   1          zz=0;
  82   1          rr=1;
  83   1              P1M0=0X1C;
  84   1              P1M1=0X00;
  85   1              //P3M0=0X18;
  86   1              //P3M0=0X00;    
  87   1      }
  88          /*主函数*/
  89          void main()
  90          {
  91   1          start();      
  92   1          while(1)             //重复(无限)循环显示
  93   1          {
  94   2              if(irokk==1)
  95   2              {  
  96   3                  Ircordpro();
  97   3                  irokk=0;
  98   3              }
  99   2      
 100   2                      if((resget==0)||(IRcord[0]==0x4a))
 101   2              {  
 102   3                  DelayMs();
 103   3                  if((resget==0)||(IRcord[0]==0x4a))
 104   3                      {
 105   4                           Set1302(starts_time);    //初始化 
 106   4                           W1302(0x8e,0x00);            //控制命令,WP=0,写操作                
 107   4                           W1302(0x90,0xa5);            //打开充电二级管  一个二级管串联一个2K电阻
 108   4                                               IRcord[0]=0x00;
 109   4                      } 
 110   3              }
 111   2              /************************/         
 112   2              du1302();         //读取 秒 分 时 日 月 星期 年
 113   2                      if((Hour==0)&&(Cent==0)&&(Sec==48)&&(Can==1)&&( AddTime ))
 114   2                      {                                                       
 115   3                              Sec=Sec/16*10+Sec%16;
 116   3                              AddTime=AddTime/16*10+AddTime%16;
 117   3                              if( !UpdateMode )
C51 COMPILER V8.08   TASK                                                                  09/06/2012 18:00:01 PAGE 3   

 118   3                              {
 119   4                                      AddTime=AddTime+Sec;                            
 120   4                              }
 121   3                              else
 122   3                              {
 123   4                                      AddTime=Sec-AddTime;
 124   4                                      Can=0;  
 125   4                              }
 126   3                              W1302(0x8e,0x00);
 127   3                              W1302(0x80,AddTime/10*16+AddTime%10);            
 128   3                              W1302(0x8e,0x80);
 129   3                      }
 130   2                      
 131   2                      if((Hour==0)&&(Cent==1))
 132   2                      {
 133   3                              Can=1;
 134   3                      }
 135   2              /****************************/
 136   2              if(Sec!=ucLastSec)
 137   2              {       
 138   3                  ucLastSec=Sec;
 139   3                  w=~w;
 140   3              }       
 141   2              c_sun=0;
 142   2              //y=R1302(0x8c+1)/16*10+R1302(0x8c+1)%16 ;        
 143   2              nian_sun=Year;
 144   2              // y=R1302(0x88+1)/16*10+R1302(0x88+1)%16       ;
 145   2              yue_sun=Month;
 146   2              //       y=R1302(0x86+1)/16*10+R1302(0x86+1)%16 ;
 147   2              ri_sun=Day;
 148   2              Conver_xingqi(c_sun,nian_sun,yue_sun,ri_sun);   //农历星期转换
 149   2              Conversion(c_sun,nian_sun,yue_sun,ri_sun);              //农历转换        
 150   2              zimuo=0;                                        
 151   2              if ((key_moda==0)||(IRcord[0]==0x15))                    //设置和选择项目键
 152   2              { 
 153   3                  DelayMs();
 154   3                  if((key_moda==0)||(IRcord[0]==0x15))
 155   3                  {
 156   4                      if(id++==12) 
 157   4                      {
 158   5                          id=0;
 159   5                      }
 160   4                      ha=0;
 161   4                      msec=0;            //清闪烁标志
 162   4                      while((key_moda==0)||(IRcord[0]==0x15))
 163   4                      {
 164   5                          Show_word();
 165   5                          IRcord[0]=0x00;                               
 166   5                      }    
 167   4                  }
 168   3                                         
 169   3              }        
 170   2              if(id!=0)
 171   2              {
 172   3                  if ((key_up==0)||(IRcord[0]==0x40))                  //增加
 173   3                  {
 174   4                       DelayMs();
 175   4                      if((key_up==0)||(IRcord[0]==0x40))
 176   4                      {
 177   5                          while((key_up==0)||(IRcord[0]==0x40))
 178   5                          {
 179   6                              Show_word();
C51 COMPILER V8.08   TASK                                                                  09/06/2012 18:00:01 PAGE 4   

 180   6                              IRcord[0]=0x00;                 
 181   6                          }    //调用显示
 182   5                          ha=0;
 183   5                          msec=0;            //清闪烁标志            
 184   5                          Set(id,0);
 185   5                               //调用时间调调整
 186   5                      }
 187   4                      
 188   4                  }
 189   3                  
 190   3                  if ((key_Down==0)||(IRcord[0]==0x19))  //减少
 191   3                  {
 192   4                      DelayMs();
 193   4                      if((key_Down==0)||(IRcord[0]==0x19))
 194   4                      {
 195   5                          while((key_Down==0)||(IRcord[0]==0x19))
 196   5                          {
 197   6                              Show_word();
 198   6                              IRcord[0]=0x00;                
 199   6                          }   //调用显示
 200   5                          ha=0;
 201   5                          msec=0;    //清闪烁标志
 202   5                          Set(id,1);     //调用时间调调整
 203   5                      }
 204   4                       
 205   4                  }
 206   3              }
 207   2              else
 208   2              {
 209   3                  if ((key_up==0)||(IRcord[0]==0x40))                  //增加
 210   3                  {
 211   4                      DelayMs();
 212   4                      if((key_up==0)||(IRcord[0]==0x40))
 213   4                      {
 214   5                          while((key_up==0)||(IRcord[0]==0x40))
 215   5                          {
 216   6                              Show_word();
 217   6                              IRcord[0]=0x00;                   
 218   6                          }    //调用显示
 219   5                          ha=0;
 220   5                          msec=0;            //清闪烁标志  
 221   5                          if(b!=0)                             //手动调整显示的内容
 222   5                          { 
 223   6                              if(f++==6)                       //f为显示转换标志
 224   6                                  f=0;
 225   6                          }
 226   5                      }
 227   4                      
 228   4                  }
 229   3              }
 230   2              //------------------------
 231   2              if (nn==1)         //调用温湿度读取子程序 
 232   2              {
 233   3                  RH(); 
 234   3              }
 235   2              //串口显示程序 
 236   2              //--------------------------  
 237   2              Show_word();      //待机显示按三秒间隔分别显示年、月日、星期、时分秒。       
 238   2              IRcord[0]=0x00;
 239   2          
 240   2          
 241   2          }      
C51 COMPILER V8.08   TASK                                                                  09/06/2012 18:00:01 PAGE 5   

 242   1      }
 243          /****************************************************************************/  
 244          void timer_0(void) interrupt 1  //中断入口,闪烁
 245          {
 246   1      
 247   1              TH0 = 0x92;     //18.432M  18.2ms
 248   1          TL0 = 0x0CD; 
 249   1              zz=1;
 250   1              TR0=0;
 251   1                
 252   1      }
 253          /******************************************************************/
 254          void PCA_interrupt(void)  interrupt 7 //PCA0引起此中断
 255          {       
 256   1      
 257   1          if(CCF0)
 258   1          {
 259   2              CCF0 = 0;
 260   2                      if(msec++==18)//1s
 261   2              {
 262   3                  msec=0;
 263   3                  if(mm++==3)
 264   3                  {
 265   4                      nn=1;
 266   4                  }
 267   3                  x++;                            
 268   3                  if(x>=a)
 269   3                  { 
 270   4                      x=0;
 271   4                      if(b==0)                    //自动模式
 272   4                      {
 273   5                          if(f++==6) 
 274   5                              f=0;          //f显示转换计数器 ,d为用户设置的自动转换时间的值。
 275   5                      }
 276   4                  }
 277   3                  if(ha++==10)                    //5秒后进入正常走时。
 278   3                  {
 279   4                      id=0;
 280   4                      ha=0;
 281   4                  }
 282   3              }       
 283   2          if(msec<10)
 284   2              Flicker=0;       //闪烁标志反转          
 285   2          else
 286   2              Flicker=1; 
 287   2                 
 288   2          }
 289   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    653    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      7    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      8    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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