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

📄 clock2.lst

📁 时钟源代码
💻 LST
字号:
C51 COMPILER V7.02a   CLOCK2                                                               12/10/2008 16:20:49 PAGE 1   


C51 COMPILER V7.02a, COMPILATION OF MODULE CLOCK2
OBJECT MODULE PLACED IN clock2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE clock2.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <AT89X51.h>
   2          
   3          unsigned char tc,sta=0x08;                                      //软件延时单元,状态标志 
   4          bit flag1=0;                                                                    //秒标志
   5          unsigned char data dispbit,dispbuf[6];  //显示位,显示缓冲区
   6          code unsigned char ds=20;                                       //软件延时系数__20
   7          unsigned char second,minute,hour;               //秒,分,时
   8          
   9          void delay (unsigned int count);                //延时函数
  10          void display(void);                     //显示函数
  11          void key(void);                                         //键处理函数
  12          void sx(void);                                                  //送显示函数
  13          
  14          void main(void)                                         //主函数
  15          {
  16   1      
  17   1      TMOD=0x01;                                                              //定时器初始化
  18   1      TH0=0x4C;
  19   1      TL0=0x00;
  20   1      IE=0x82;                                                                        //开放定时器0中断
  21   1      tc=ds;                                                                  //软件延时初值
  22   1      TR0=1;                                                                  //启动定时器
  23   1      P1=~sta;                                                                        //初始状态
  24   1      
  25   1      do{
  26   2              key();                                                          //键处理
  27   2              display();                                                      //显示
  28   2              if(flag1==1)                                            //有秒标志
  29   2              {
  30   3                              flag1=0;                                                //秒标志清零
  31   3                              second++;                                       //秒加一
  32   3                              if (second==60) 
  33   3                              {
  34   4                                      second=0;
  35   4                                      minute++;                               //分加一
  36   4                                      if (minute==60)
  37   4                                      {
  38   5                                      hour++;                                 //时加一
  39   5                                      minute=0;
  40   5                                      if (hour==24) hour=0;
  41   5                                      }
  42   4                              }
  43   3                      sx();                                                                   //送显示
  44   3              }
  45   2         }while(1);
  46   1      }
  47          
  48          void timer0(void) interrupt 1                   //定时器0中断服务函数
  49          {
  50   1              TH0=0x4C;                                                               //再送定时初值
  51   1              tc--;                                                                           //软件延时计数
  52   1              if (tc==0)                                                              //中断20次
  53   1                      {
  54   2                       tc=ds;                                                         //再设软件延时初值
  55   2                       flag1=1;                                                       //建秒标志
C51 COMPILER V7.02a   CLOCK2                                                               12/10/2008 16:20:49 PAGE 2   

  56   2                       }
  57   1      }
  58          
  59          void display(void)                                      //显示函数
  60          {
  61   1              code unsigned char design[32]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,
  62   1                                                               0x01,0x09,0xFF,0x00,0x00,0x00,0x00,0x00,
  63   1                                                                               0x02,0x9E,0x24,0x0C,0x98,0x48,0x40,0x1E,
  64   1                                                                               0x00,0x08,0x31,0x00,0x00,0x00,0x00,0x00};
  65   1                                                                                              //字型码表
  66   1              unsigned char i;
  67   1              dispbit=0x01;                                           //字位初值
  68   1      
  69   1              for(i=0;i<6;i++)                                        //扫描6位数码显示器
  70   1              {
  71   2                      P0=design[dispbuf[i]];          //转换字型并输出
  72   2                      P2=dispbit;                                             //输出字位
  73   2                      dispbit=dispbit+dispbit;        //字位左移
  74   2                      delay (2);                                              //延时
  75   2              }
  76   1      }
  77          
  78          void key(void)
  79          {
  80   1              unsigned char keycode,k1;
  81   1              k1=~(P3)&0x30;                                  //读键
  82   1              if ( k1 != 0)                                   //有键按下
  83   1                      {
  84   2                              delay (20);                             //延时
  85   2                              keycode=~(P3)&0x30;     //读键码
  86   2                              do                                                      //等待键释放 
  87   2                              {
  88   3                              k1=~(P3)&0x30;
  89   3                              }
  90   2                              while (k1!=0);
  91   2              
  92   2                              switch (keycode)                
  93   2                              {
  94   3                                      case 0x10:                      //P3.4键,转换状态 
  95   3                                      {
  96   4                                      sta=sta+sta;
  97   4                                      if(sta==0x10) sta=0x01;
  98   4                                      P1=~sta;
  99   4                                      if(sta==0x08) IE=0x82;                  //开中断
 100   4                                      else            IE=0x00;                                        //关中断
 101   4                                      };
 102   3                                      break;
 103   3                                      case 0x20:                      //P3.5键,校时
 104   3                                      {
 105   4                                      switch (sta)
 106   4                                      {
 107   5                                              case 0x01:
 108   5                                              {
 109   6                                              second++;
 110   6                                              if(second==60) second=0;
 111   6                                              };
 112   5                                              break;
 113   5                                              case 0x02:
 114   5                                              {
 115   6                                              minute++;
 116   6                                              if(minute==60) minute=0;
 117   6                                              };
C51 COMPILER V7.02a   CLOCK2                                                               12/10/2008 16:20:49 PAGE 3   

 118   5                                              break;
 119   5                                              case 0x04:
 120   5                                              {
 121   6                                              hour++;
 122   6                                              if(hour==24) hour=0;
 123   6                                              };
 124   5                                       }
 125   4                                      };
 126   3                              }
 127   2                              sx();                                           //送显示
 128   2                       }
 129   1      }
 130          
 131          void delay (unsigned int count)//延时函数
 132          {
 133   1              unsigned int i,j;
 134   1              for (i=0;i<count;i++)
 135   1                      for (j=0;j<120;j++);
 136   1      }
 137          
 138          void sx (void)                                          //送显示函数
 139          {
 140   1                      dispbuf[5]=second%10;   //秒个位
 141   1                      dispbuf[4]=second/10;   //秒十位
 142   1                      dispbuf[3]=minute%10;   //分个位
 143   1                      dispbuf[2]=minute/10;   //分十位
 144   1                      dispbuf[1]=hour%10;             //时个位
 145   1                      dispbuf[0]=hour/10;             //时十位
 146   1      }
 147          
 148          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    351    ----
   CONSTANT SIZE    =     33    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     12       2
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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