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

📄 clock.lst

📁 这个是一个时钟的代码
💻 LST
字号:
C51 COMPILER V7.50   CLOCK                                                                 08/29/2006 18:59:09 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE CLOCK
OBJECT MODULE PLACED IN clock.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE clock.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位赋值
  21          #define LO                      (_TH0_TL0_ % 256) //给低8位赋值
  22          #define M                       20                //(1000/50)1秒要50个中断的累计
  23          
  24          sbit P2_0 = P2 ^ 0;
  25          sbit P2_1 = P2 ^ 1;
  26          sbit P2_2 = P2 ^ 2;
  27          sbit P2_3 = P2 ^ 3;
  28          sbit P2_4 = P2 ^ 4;
  29          sbit P2_5 = P2 ^ 5;
  30          sbit P2_6 = P2 ^ 6;
  31          sbit P2_7 = P2 ^ 7;
  32          
  33          unsigned char hour = 12, min = 20, sec = 20; //初始化时分秒的值
  34          unsigned char SEG_TAB[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};//0-9数字
  35          
  36          /*********************************************************************************************/
  37          void Delay(unsigned char a)//延时程序
  38          {
  39   1              unsigned char j; 
  40   1              while(--a != 0)
  41   1              {
  42   2                      for (j = 0; j < 125; j++);
  43   2              }
  44   1      }
  45          
  46          /*********************************************************************************************/
  47          void Disp(void)//数码管显示
  48          {
  49   1                      P2_7 = 0;   //第一个数码管显示时的十位
  50   1                      P0 = SEG_TAB[ hour / 10 ];      
  51   1                      Delay(4);
  52   1                      P2_7 = 1;
  53   1      
  54   1                      P2_6 = 0;//第2个数码管显示时的个位
  55   1                      P0 = SEG_TAB[ hour % 10 ];
C51 COMPILER V7.50   CLOCK                                                                 08/29/2006 18:59:09 PAGE 2   

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

 118   1      
 119   1              TH0 = HI; //给TH0,TL0赋初始值
 120   1              TL0 = LO;
 121   1      
 122   1              TR0 = 1;  //启动定时器0
 123   1              ET0 = 1;  //定时器中断开
 124   1              EA = 1; //总中断开
 125   1      }
 126          
 127          /******************************************************************************************/
 128          void main(void)//主函数
 129          {
 130   1              Timer0Init();//初始化定时器0
 131   1      
 132   1              while(1)
 133   1              {
 134   2                      Disp();//显示时间
 135   2              }
 136   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    200    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     14    ----
   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 + -