shi_zhong.lst

来自「Keil C51单片机基础实验源程序」· LST 代码 · 共 153 行

LST
153
字号
C51 COMPILER V7.06   SHI_ZHONG                                                             11/06/2006 09:32:59 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE SHI_ZHONG
OBJECT MODULE PLACED IN shi_zhong.OBJ
COMPILER INVOKED BY: D:\keil\C51\BIN\C51.EXE shi_zhong.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          //**************************************************
   2          
   3          //程序功能:时钟,前两位显示分钟,后两位显示秒
   4          //P1.7按键功能,开始计时
   5          //P1.6按键功能,停止计时
   6          //P1.5按键功能,清零,重新开始
   7          
   8          //*************************************************
   9          
  10          
  11          #include<AT89X52.h>
  12          
  13          code unsigned char seg7code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
  14                                         0x82,0xf8,0x80,0x90,0xff}; //共阳数码管段码
  15          
  16          unsigned int cnt=0;          //由于底下的cnt用到了4000,所以这时不能定义成char类型(最大才255)
  17          unsigned char sec=0;
  18          unsigned char min=0;
  19          unsigned char hour=0;
  20          
  21          
  22          void delay1ms()
  23          {
  24   1       unsigned char i;
  25   1       for(i=124;i>0;i--);  //延时124*8+10=1002us
  26   1      }
  27          
  28          delay10ms()            //延时10ms
  29          {
  30   1       unsigned i,j;
  31   1       for(i=0;i<50;i++)
  32   1       for(j=0;j<100;j++);
  33   1      }
  34          
  35          
  36          void KEY(void)              //按键判断子程序
  37          {
  38   1        if(P1_7==0)                 //P1.7按键功能,开始计时
  39   1        {
  40   2                delay10ms();            //软件去抖动
  41   2                if(P1_7==0)                
  42   2                {             
  43   3                   TH0=0x19;          //11.0529MHZ的晶振,250us的定时中断
  44   3                               TL0=0x19;
  45   3                               TR0=1;
  46   3                }
  47   2        }
  48   1      
  49   1         else if(P1_6==0)             //P1.6按键功能,停止计时
  50   1        {
  51   2                delay10ms();
  52   2                if(P1_6==0)
  53   2                {     TR0=0;}
  54   2        }
  55   1      
C51 COMPILER V7.06   SHI_ZHONG                                                             11/06/2006 09:32:59 PAGE 2   

  56   1         else if(P1_5==0)           //P1.5按键功能,清零,重新开始
  57   1        {
  58   2                delay10ms();
  59   2                if(P1_5==0)
  60   2                {sec=0;}
  61   2        }
  62   1      
  63   1      }
  64          
  65          
  66          void LED_display()       //显示
  67          {
  68   1               P1=0xfe;                  //P1.0=0,选通第一位
  69   1               P2=seg7code[min/10];     //显示小时的第一位
  70   1               delay1ms();
  71   1               P2=0xff;                  //消隐
  72   1      
  73   1               P1=0xfd;                  //P1.1=0,选通第二位
  74   1               P2=seg7code[min%10];     //显示小时的第一位
  75   1               delay1ms();
  76   1               P2=0xff;                  //消隐
  77   1      
  78   1               P1=0xfb;                   //P1.2=0,选通第三位
  79   1               P2=seg7code[sec/10];       //显示分的第一位
  80   1               delay1ms();
  81   1               P2=0xff;                   //消隐
  82   1      
  83   1               P1=0xf7;                   //P1.3=0,选通第四位
  84   1               P2=seg7code[sec%10];       //显示分的第二位
  85   1               delay1ms();
  86   1               P2=0xff;                  //消隐
  87   1      }
  88          
  89          
  90          void timer0 (void) interrupt 1 using 0
  91          {
  92   1       cnt++;             //每过250us,cnt加一
  93   1       if(cnt==4000)      //250*4000=1s
  94   1       {
  95   2        cnt=0;
  96   2        sec++;           
  97   2        if(sec==60)       //60秒,重新计数,分钟加一
  98   2        { sec=0; 
  99   3          min++;
 100   3          if(min==60)         //60分,重新计数,小时加一
 101   3              {
 102   4               min=0;
 103   4               hour++;
 104   4               if(hour==12)      //12个小时,重新计数
 105   4               {hour=0;}
 106   4              }
 107   3        
 108   3        }
 109   2       }
 110   1      }
 111          
 112          
 113          main()
 114          {
 115   1               TMOD=0x02;          //T0,方式2
 116   1              
 117   1           EA=1;                 //开总中断
C51 COMPILER V7.06   SHI_ZHONG                                                             11/06/2006 09:32:59 PAGE 3   

 118   1               ET0=1;               //开定时器T0中断
 119   1      
 120   1        while(1)
 121   1       {
 122   2        KEY();
 123   2        LED_display();
 124   2       }
 125   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    224    ----
   CONSTANT SIZE    =     11    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      5    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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