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

📄 clock2.lst

📁 这个是一个时钟的代码
💻 LST
字号:
C51 COMPILER V7.50   CLOCK2                                                                08/29/2006 19:01:56 PAGE 1   


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

line level    source

   1          /************************************************************************************/
   2          /*     程序名:数码管显示的时钟代码                                                 */
   3          /*                                                                                  */
   4          /*     晶振:12.0 M                                        CPU型号:AT89S52         */
   5          /*                                                                                  */
   6          /*                                                                                  */
   7          /*     功能描述: 数码管时钟显示,需将J2跳线帽插上                                   */
   8          /*                    但是要拔去LCD12864和LCD1602!                                             */
   9          /*                                                                                  */
  10          /*     http://www.mculover.net                                                      */
  11          /*     http://www.mculover.net/bbs                                                  */
  12          /*                                                                                                                                                      */
  13          /*                                                                                  */
  14          /*                                                湘灵电子工作室 版权所有           */     
  15          /*                                                         2006-03-20               */
  16          /************************************************************************************/ 
  17          #include<reg51.h>
  18          
  19          #define _TH0_TL0_       (65536 - 50000)  
  20          #define HI                      (_TH0_TL0_ / 256) //给高8位赋值3C
  21          #define LO                      (_TH0_TL0_ % 256) //给低8位赋值B0
  22          #define M                       20                //(1000/50)1秒要50个中断的累计
  23           
  24          //65536-0X3CB0=50000
  25          
  26          sbit P2_0 = P2 ^ 0;
  27          sbit P2_1 = P2 ^ 1;
  28          sbit P2_2 = P2 ^ 2;
  29          sbit P2_3 = P2 ^ 3;
  30          sbit P2_4 = P2 ^ 4;
  31          sbit P2_5 = P2 ^ 5;
  32          sbit P2_6 = P2 ^ 6;
  33          sbit P2_7 = P2 ^ 7;
  34          
  35          //unsigned char hour = 12, min = 0, sec = 0; //初始化时分秒的值
  36          struct Time{
  37                                          unsigned char hour;
  38                                          unsigned char min;
  39                                          unsigned char sec;
  40                                  }clock;
  41          
  42          //struct Time clock;
  43          
  44          unsigned char SEG_TAB[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};//0-9数字
  45          unsigned char Led[6];
  46          
  47          /*********************************************************************************************/
  48          void Delay(unsigned char a)//延时程序
  49          {
  50   1              unsigned char j; 
  51   1              while(--a != 0)
  52   1              {
  53   2                      for (j = 0; j < 125; j++);
  54   2              }
  55   1      }
C51 COMPILER V7.50   CLOCK2                                                                08/29/2006 19:01:56 PAGE 2   

  56          
  57          /*********************************************************************************************/
  58          void Disp(void)//数码管显示
  59          {
  60   1                      P2_7 = 0;   //第一个数码管显示时的十位
  61   1                      //      P0 = SEG_TAB[ hour / 10 ];              
  62   1                      Led[0] = clock.hour / 10;
  63   1                      P0 = SEG_TAB[Led[0]];
  64   1                      Delay(4);
  65   1                      P2_7 = 1;
  66   1      
  67   1                      P2_6 = 0;//第2个数码管显示时的个位
  68   1                      //P0 = SEG_TAB[ hour % 10 ];
  69   1                      Led[1] = clock.hour % 10;
  70   1                      P0 = SEG_TAB[Led[1]];
  71   1                      Delay(4);
  72   1                      P2_6 = 1;
  73   1      
  74   1                      P2_4 = 0;//第4个数码管显示分的十位
  75   1                      //      P0 = SEG_TAB[ min / 10 ];
  76   1                      Led[2] = clock.min / 10;
  77   1                      P0 = SEG_TAB[Led[2]];
  78   1                      Delay(4);       
  79   1                      P2_4 = 1;
  80   1      
  81   1                      P2_3 = 0;//第5个数码管显示分的个位
  82   1                      //      P0 =SEG_TAB[ min % 10 ];                
  83   1                      Led[3] = clock.min % 10;
  84   1                      P0 = SEG_TAB[Led[3]];
  85   1                      Delay(4);
  86   1                      P2_3 = 1;
  87   1      
  88   1                      P2_1 = 0;//第7个数码管显示秒的十位
  89   1                      //      P0 = SEG_TAB[ sec / 10 ];       
  90   1                      Led[4] = clock.sec / 10;
  91   1                      P0 = SEG_TAB[Led[4]];
  92   1                      Delay(4);       
  93   1                      P2_1 = 1;
  94   1      
  95   1                      P2_0 = 0;//第8个数码管显示秒的各位。
  96   1                      //              P0 = SEG_TAB[ sec % 10 ];
  97   1                      Led[5] = clock.sec % 10;
  98   1                      P0 = SEG_TAB[Led[5]];   
  99   1                      Delay(4);       
 100   1                      P2_0 = 1;
 101   1      }
 102                                  
 103          /********************************************************************************************/
 104          void IsrTimer0(void) interrupt 1 using 1    //定时器0中断服务程序
 105          {
 106   1              static unsigned char count = 0; //定义静态变量count
 107   1      
 108   1              TR0 = 0;               //以下调整出栈入栈的时间误差
 109   1          TL0 += (_TH0_TL0_ + 9) % 256;
 110   1              TH0 += (_TH0_TL0_ + 9) / 256 + (char)CY;
 111   1          TR0 = 1;
 112   1      
 113   1              count++;
 114   1              if(count == M)//1秒种时间到
 115   1              {
 116   2                      count = 0;      
 117   2                      clock.sec++;            
C51 COMPILER V7.50   CLOCK2                                                                08/29/2006 19:01:56 PAGE 3   

 118   2                      if(     clock.sec == 60)//1分钟时间到
 119   2                      {
 120   3                              clock.min++;
 121   3                              clock.sec = 0;
 122   3                              if(     clock.min == 60)//1小时时间到
 123   3                              {
 124   4                                      clock.hour++;
 125   4                                      clock.min = 0;
 126   4                                      if(     clock.hour == 24)//24小时时间到
 127   4                                      {
 128   5                                              clock.hour = 0;
 129   5                                              clock.min = 0;
 130   5                                              clock.sec = 0;
 131   5                                      }
 132   4                              }
 133   3                      }
 134   2              }//if
 135   1      }
 136          
 137          /******************************************************************************************/
 138          void Timer0Init(void)  //初始化定时器0程序
 139          {
 140   1              TMOD = 0x01; //设置模式1 定时器0 工作方式0
 141   1      
 142   1              TH0 = HI; //给TH0,TL0赋初始值
 143   1              TL0 = LO;
 144   1      
 145   1              TR0 = 1;  //启动定时器0
 146   1              ET0 = 1;  //定时器中断开
 147   1              EA = 1; //总中断开
 148   1      }
 149          
 150          /******************************************************************************************/
 151          void main(void)//主函数
 152          {
 153   1              Timer0Init();//初始化定时器0
 154   1      
 155   1              while(1)
 156   1              {
 157   2                      Disp();//显示时间
 158   2              }
 159   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    227    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     20    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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