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

📄 +

📁 51单片机配套C程序
💻
字号:
C51 COMPILER V7.50   时钟                                                                  06/09/2010 21:22:26 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE 时钟
OBJECT MODULE PLACED IN 时钟.OBJ
COMPILER INVOKED BY: C:\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          S3 用于分钟 加1操作
  11          S4 用于分钟减1操作
  12          */
  13          
  14          /*-----------------------------------------------
  15            名称:普通时钟
  16            内容:
  17          ------------------------------------------------*/
  18          #include<reg52.h>     //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
  19          
  20          
  21          sbit KEY1=P3^0;       //定义端口参数
  22          sbit KEY2=P3^1;
  23          sbit KEY3=P3^2;
  24          sbit KEY4=P3^3;
  25          
  26          sbit LED=P1^2;       //定义指示灯参数
  27          code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; 
  28                                           //共阴数码管 0-9
  29          unsigned char StrTab[8];                 //定义缓冲区
  30          unsigned char minute=30,hour=12,second;  //定义并且初始化值 12:30:00
  31          /******************************************************************/
  32          /*                    延时函数                                    */
  33          /******************************************************************/
  34          void delay(unsigned int cnt)
  35          {
  36   1       while(--cnt);
  37   1      }
  38          
  39          /******************************************************************/
  40          /*                    显示处理函数                                      */
  41          /******************************************************************/
  42          void Displaypro(void)
  43          {
  44   1      
  45   1                      StrTab[0]=tab[hour/10];    //显示小时
  46   1                              StrTab[1]=tab[hour%10];
  47   1                              StrTab[2]=0x40;            //显示"-"
  48   1                              StrTab[3]=tab[minute/10];  //显示分钟
  49   1                              StrTab[4]=tab[minute%10];
  50   1                              StrTab[5]=0x40;            //显示"-"
  51   1                  StrTab[6]=tab[second/10];  //显示秒
  52   1                              StrTab[7]=tab[second%10];
  53   1              
  54   1      }
  55          /******************************************************************/
C51 COMPILER V7.50   时钟                                                                  06/09/2010 21:22:26 PAGE 2   

  56          /*                    主函数                                      */
  57          /******************************************************************/
  58          main()//主函数
  59          {
  60   1          TMOD |=0x01;//定时器0 10ms in 12M crystal 用于计时
  61   1              TH0=0xd8;   //初值
  62   1              TL0=0xf0;
  63   1              ET0=1;
  64   1              TR0=1;
  65   1      
  66   1          TMOD |=0x10; //定时器1用于动态扫描
  67   1              TH1=0xF8;    //初值
  68   1              TL1=0xf0;
  69   1              ET1=1;
  70   1              TR1=1;
  71   1          EA =1;
  72   1          
  73   1      
  74   1          Displaypro();   //调用显示处理
  75   1      
  76   1      while(1)//主循环
  77   1        {
  78   2         
  79   2      
  80   2        if(!KEY1) //按键1去抖以及动作
  81   2          {
  82   3          delay(10000);
  83   3          if(!KEY1)
  84   3                 {          
  85   4                   hour++;if(hour==24)hour=0;     //正常时间 小时 加1
  86   4               Displaypro();
  87   4                 }
  88   3              }
  89   2      
  90   2         if(!KEY2) //按键2去抖以及动作
  91   2          {
  92   3          delay(10000);
  93   3          if(!KEY2)
  94   3                 {
  95   4             hour--;if(hour==255)hour=23;   //正常时间 小时减1
  96   4             
  97   4                 Displaypro();
  98   4                }
  99   3              }
 100   2        if(!KEY3) //按键去抖以及动作
 101   2          {
 102   3          delay(10000);
 103   3          if(!KEY3)
 104   3                 {
 105   4                  minute++;if(minute==60)minute=0;//分加1
 106   4                  Displaypro();
 107   4                }
 108   3              }
 109   2        if(!KEY4) //按键去抖以及动作
 110   2          {
 111   3          delay(10000);
 112   3          if(!KEY4)
 113   3                 {
 114   4                  minute--;if(minute==255)minute=59;  //分减1
 115   4                  Displaypro();
 116   4                }
 117   3              }
C51 COMPILER V7.50   时钟                                                                  06/09/2010 21:22:26 PAGE 3   

 118   2        }
 119   1      }
 120          /******************************************************************/
 121          /*                  定时器1中断                                   */
 122          /******************************************************************/
 123          void time1_isr(void) interrupt 3 using 0//定时器1用来动态扫描
 124          {
 125   1          static unsigned char num;
 126   1          TH1=0xF8;//重入初值
 127   1              TL1=0xf0;
 128   1      
 129   1              switch (num){
 130   2           case 0:P2=0;P0=StrTab[num];break; //分别调用缓冲区的值进行扫描
 131   2               case 1:P2=1;P0=StrTab[num];break;
 132   2               case 2:P2=2;P0=StrTab[num];break;
 133   2               case 3:P2=3;P0=StrTab[num];break;
 134   2               case 4:P2=4;P0=StrTab[num];break;
 135   2               case 5:P2=5;P0=StrTab[num];break;
 136   2           case 6:P2=6;P0=StrTab[num];break;
 137   2               case 7:P2=7;P0=StrTab[num];break;
 138   2               default:break;
 139   2      }
 140   1      num++;     //扫描8次,使用8个数码管
 141   1      if(num==8)
 142   1         num=0;
 143   1      }
 144          /******************************************************************/
 145          /*                    定时器0中断                                 */
 146          /******************************************************************/
 147          void tim(void) interrupt 1 using 1
 148          {
 149   1      static unsigned char count;//定义内部静态变量
 150   1      
 151   1      TH0=0xd8;                  //重新赋值
 152   1      TL0=0xf0;
 153   1      count++;
 154   1         switch (count)
 155   1                {
 156   2                 case 0:
 157   2                 case 20:
 158   2                 case 40:
 159   2                 case 60:
 160   2                 case 80:Displaypro(); //隔一定时间调用显示处理
 161   2                         break;
 162   2                 case 50:P1=~P1;     //半秒 LED闪烁
 163   2                         break;
 164   2                 default:break;
 165   2                }
 166   1      
 167   1      if (count==100)
 168   1          {
 169   2          count=0;
 170   2          second++;             //秒加1
 171   2              if(second==60)
 172   2                 {
 173   3                 second=0;
 174   3                 minute++;          //分加1
 175   3                 if(minute==60)
 176   3                        {
 177   4                         minute=0;
 178   4                         hour++;        //时加1
 179   4                         if(hour==24)
C51 COMPILER V7.50   时钟                                                                  06/09/2010 21:22:26 PAGE 4   

 180   4                            hour=0;
 181   4                        }  
 182   3            
 183   3                 }
 184   2          
 185   2         } 
 186   1       
 187   1      }


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