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

📄 clock.lst

📁 本人收集的一些C语言程序
💻 LST
字号:
C51 COMPILER V7.50   CLOCK                                                                 03/15/2006 15:57:08 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE CLOCK
OBJECT MODULE PLACED IN clock.OBJ
COMPILER INVOKED BY: e:\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          /*     功能描述: 数码管时钟显示                                                                        */
   8          /*                                                                                  */
   9          /*     http://www.mculover.net                                                      */
  10          /*     http://www.mculover.net/bbs                                                  */
  11          /*                                                                                                                                                      */
  12          /*                                                                                  */
  13          /*                                                湘灵电子工作室 版权所有           */     
  14          /*                                                         2006-02-20               */
  15          /************************************************************************************/ 
  16          #include<reg51.h>
  17          
  18          #define _TH0_TL0_       (65536 - 50000)  
  19          #define HI                      (_TH0_TL0_ / 256) //给高8位赋值
  20          #define LO                      (_TH0_TL0_ % 256) //给低8位赋值
  21          #define M                       20                //(1000/50)1秒要50个中断的累计
  22          
  23          sbit P2_0 = P2 ^ 0;
  24          sbit P2_1 = P2 ^ 1;
  25          sbit P2_2 = P2 ^ 2;
  26          sbit P2_3 = P2 ^ 3;
  27          sbit P2_4 = P2 ^ 4;
  28          sbit P2_5 = P2 ^ 5;
  29          sbit P2_6 = P2 ^ 6;
  30          sbit P2_7 = P2 ^ 7;
  31          
  32          unsigned char hour = 12, min = 0, sec = 0; //初始化时分秒的值
  33          unsigned char SEG_TAB[] = {0x41, 0xf5, 0x29, 0x31, 0x95, 0x13, 0x03, 0x75, 0x01, 0x11};//0-9数字
  34          
  35          /*********************************************************************************************/
  36          void Delay(unsigned char a)//延时程序
  37          {
  38   1              unsigned char j; 
  39   1              while(a-- != 0)
  40   1              {
  41   2                      for (j = 0; j < 100; j++);
  42   2              }
  43   1      }
  44          
  45          /*********************************************************************************************/
  46          void Disp(void)//数码管显示
  47          {
  48   1                      P2_7 = 0;   //第一个数码管显示时的十位
  49   1                      P0 = SEG_TAB[ hour / 10 ];      
  50   1                      Delay(4);
  51   1                      P2_7 = 1;
  52   1      
  53   1                      P2_4 = 0;//第2个数码管显示时的个位
  54   1                      P0 = SEG_TAB[ hour % 10 ];
  55   1                      Delay(4);
C51 COMPILER V7.50   CLOCK                                                                 03/15/2006 15:57:08 PAGE 2   

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

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


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    202    ----
   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 + -