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

📄 时钟.lst

📁 单片机的实用程序代码
💻 LST
字号:
C51 COMPILER V7.50   时钟                                                                  04/14/2010 01:27:31 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE 时钟
OBJECT MODULE PLACED IN 时钟.OBJ
COMPILER INVOKED BY: D:\Program Files\KEIL\C51\BIN\C51.EXE 时钟.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*
   2          1、按键可以调整当时时间
   3          2、按键可以调节定时时间
   4          3、定时时间到继电器吸合
   5          
   6          *8位数码管显示 时间格式格式 12-08-00 标示12点08分00秒
   7          
   8          S1 用于小时 加1操作  
   9          S2 用于分钟 加1操作
  10          S2 用于分钟减1操作
  11          */
  12          
  13          #include <reg52.h>
  14          
  15          
  16          sbit KEY1=P3^2;
  17          sbit KEY2=P3^3;
  18          sbit KEY3=P3^4;
  19          
  20          
  21          sbit LED=P1^2;
  22          code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; 
  23                                  //共阴数码管 0-9
  24          unsigned char StrTab[8];  //定义缓冲区
  25          unsigned char minute=30,hour=12,second;  //定义并且初始化值 12:30:00
  26          
  27          void delay(unsigned int cnt)//延时函数
  28          {
  29   1       while(--cnt);
  30   1      }
  31          
  32          
  33          void Displaypro(void)
  34          {
  35   1      
  36   1                      StrTab[0]=tab[hour/10];    //显示正常时间
  37   1                              StrTab[1]=tab[hour%10];
  38   1                              StrTab[2]=0x40;
  39   1                              StrTab[3]=tab[minute/10];
  40   1                              StrTab[4]=tab[minute%10];
  41   1                              StrTab[5]=0x40;
  42   1                  StrTab[6]=tab[second/10];
  43   1                              StrTab[7]=tab[second%10];
  44   1              
  45   1      }
  46          
  47          main()//主函数
  48          {
  49   1      
  50   1          
  51   1          TMOD |=0x01;//定时器0 10ms in 12M crystal 用于计时
  52   1              TH0=0xd8;
  53   1              TL0=0xf0;
  54   1              ET0=1;
  55   1              TR0=1;
C51 COMPILER V7.50   时钟                                                                  04/14/2010 01:27:31 PAGE 2   

  56   1      
  57   1          TMOD |=0x10; //定时器1用于动态扫描
  58   1              TH1=0xF8;
  59   1              TL1=0xf0;
  60   1              ET1=1;
  61   1              TR1=1;
  62   1          EA =1;
  63   1          
  64   1      
  65   1       Displaypro();
  66   1      
  67   1      while(1)//主循环
  68   1        {
  69   2         
  70   2      /////////////////////////////////////////////////////////////////
  71   2        if(!KEY1) //按键1去抖以及动作
  72   2          {
  73   3          delay(10000);
  74   3          if(!KEY1)
  75   3                 {          
  76   4                   hour++;if(hour==24)hour=0;     //正常时间 小时 加1
  77   4               Displaypro();
  78   4                 }
  79   3              }
  80   2      ////////////////////////////////////////////////////////////////
  81   2      /////////////////////////////////////////////////////////////////
  82   2        if(!KEY2) //按键去抖以及动作
  83   2          {
  84   3          delay(10000);
  85   3          if(!KEY2)
  86   3                 {
  87   4                  minute++;if(minute==59)minute=0;//分加1
  88   4                  Displaypro();
  89   4                }
  90   3              }
  91   2      /////////////////////////////////////////////////////////////////
  92   2        if(!KEY3) //按键去抖以及动作
  93   2          {
  94   3          delay(10000);
  95   3          if(!KEY3)
  96   3                 {
  97   4                  minute--;if(minute==0)minute=59;  //分减1
  98   4                  Displaypro();
  99   4                }
 100   3              }
 101   2        }
 102   1      }
 103          ////////////////////////////////////////////////////////////////
 104          /********************************/
 105          /*      定时中断1                */
 106          /********************************/
 107          void time1_isr(void) interrupt 3 using 0//定时器1用来动态扫描
 108          {
 109   1          static unsigned char num;
 110   1          TH1=0xF8;//重入初值
 111   1              TL1=0xf0;
 112   1      
 113   1              switch (num){
 114   2           case 0:P2=0;P0=StrTab[num];break; //分别调用缓冲区的值进行扫描
 115   2               case 1:P2=1;P0=StrTab[num];break;
 116   2               case 2:P2=2;P0=StrTab[num];break;
 117   2               case 3:P2=3;P0=StrTab[num];break;
C51 COMPILER V7.50   时钟                                                                  04/14/2010 01:27:31 PAGE 3   

 118   2               case 4:P2=4;P0=StrTab[num];break;
 119   2               case 5:P2=5;P0=StrTab[num];break;
 120   2           case 6:P2=6;P0=StrTab[num];break;
 121   2               case 7:P2=7;P0=StrTab[num];break;
 122   2               default:break;
 123   2      }
 124   1      num++;     //扫描8次,使用8个数码管
 125   1      if(num==8)
 126   1         num=0;
 127   1      }
 128          //////////////////////////////////////////////////////////////////
 129          /********************************/
 130          /*      定时中断0                */
 131          /********************************/
 132          void tim(void) interrupt 1 using 1
 133          {
 134   1      static unsigned char count;//定义内部静态变量
 135   1      
 136   1      TH0=0xd8;//重新赋值
 137   1      TL0=0xf0;
 138   1      count++;
 139   1         switch (count)
 140   1                {
 141   2                 case 0:
 142   2                 case 20:
 143   2                 case 40:
 144   2                 case 60:
 145   2                 case 80:Displaypro(); //隔一定时间调用显示处理
 146   2                         break;
 147   2                 case 50:LED=!LED; //半秒 LED闪烁
 148   2                         break;
 149   2                 default:break;
 150   2                }
 151   1      
 152   1      if (count==100)
 153   1          {
 154   2          count=0;
 155   2          second++;//秒加1
 156   2              if(second==60)
 157   2                 {
 158   3                 second=0;
 159   3                 minute++; //分加1
 160   3                 if(minute==60)
 161   3                        {
 162   4                         minute=0;
 163   4                         hour++;  //时加1
 164   4                         if(hour==24)
 165   4                            hour=0;
 166   4                        }  
 167   3            
 168   3                 }
 169   2          
 170   2         } 
 171   1       
 172   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    399    ----
   CONSTANT SIZE    =     10    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
C51 COMPILER V7.50   时钟                                                                  04/14/2010 01:27:31 PAGE 4   

   DATA SIZE        =     13    ----
   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 + -