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

📄 text1.lst

📁 数字时钟protues图和c程序
💻 LST
字号:
C51 COMPILER V8.09   TEXT1                                                                 01/07/2013 16:32:59 PAGE 1   


C51 COMPILER V8.09, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: E:\keil\C51\BIN\C51.EXE Text1.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1                                                             #include<reg51.h>
   2          #define uchar unsigned char
   3          #define uint unsigned int           
   4          sbit s1=P2^0;                  //数码管位选控制端
   5          sbit s2=P2^1;
   6          sbit s3=P2^2;
   7          sbit s4=P2^3;
   8          sbit s5=P2^4;
   9          sbit s6=P2^5;
  10          sbit s7=P2^6;
  11          /*k1设置时间,k2定时。k1,k2使用不自动弹起按键。
  12          k3时分秒选择,k4加数字,k5减数字。*/
  13          sbit k1=P1^0;           
  14          sbit k2=P1^1;
  15          sbit k3=P1^2;
  16          sbit k4=P1^3;
  17          sbit k5=P1^4;
  18          uchar count=0,sec,min,hour,ss=0;s=60,m=60,h=24;
  19          uchar code mum[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳数码管0-9编码
  20          void delayms(uint k)           //延时函数
  21          {
  22   1              uint i,j;
  23   1              for(i=k;i>0;i--)
  24   1                      for(j=110;j>0;j--);
  25   1      }
  26          /*通过count获得hour,min,sec变量值        */
  27          void timecontrol()        
  28          { 
  29   1              sec++;
  30   1              if(sec==60)
  31   1              {
  32   2                      sec=0;
  33   2                      min++;
  34   2                      if(min==60)
  35   2                      {
  36   3                              min=0; 
  37   3                              hour++;
  38   3                              if(hour==24)
  39   3                              hour=0;
  40   3                      }
  41   2              }
  42   1      }
  43          void display(uchar zs,uchar zm, uchar zh)                        //数码管显示函数
  44          {          
  45   1        s1=1;
  46   1        P0=mum[zh/10];
  47   1        delayms(5);
  48   1        s1=0;
  49   1         
  50   1        s2=1;
  51   1        P0=mum[zh%10]&0x7f;           // 时的个位加上小数点
  52   1        delayms(5);
  53   1        s2=0;
  54   1         
  55   1        s3=1; 
C51 COMPILER V8.09   TEXT1                                                                 01/07/2013 16:32:59 PAGE 2   

  56   1        P0=mum[zm/10];        
  57   1        delayms(5);
  58   1        s3=0;
  59   1        
  60   1        s4=1;
  61   1        P0=mum[zm%10]&0x7f;                //分的个位加上小数点
  62   1        delayms(5);
  63   1        s4=0;
  64   1         
  65   1        s5=1;
  66   1        P0=mum[zs/10];
  67   1        delayms(5);
  68   1        s5=0;
  69   1          
  70   1        s6=1;        
  71   1        P0=mum[zs%10];
  72   1        delayms(5);
  73   1        s6=0; 
  74   1      }
  75          void keyscan_settime()                  //时间设置模块
  76          {
  77   1              uchar st,mt,ht;
  78   1              if(k1==0)
  79   1              {
  80   2                      delayms(10);
  81   2                      if(k1==0)
  82   2                      {
  83   3                      st=sec,mt=min,ht=hour;
  84   3                      TR0=0;                 //关闭定时器
  85   3                      while(k1==0)         //等待用户按键
  86   3                      {
  87   4                              display(st,mt,ht);                        
  88   4                              if(k3==0)
  89   4                              {
  90   5                                      delayms(10);
  91   5                                      if(k3==0)          
  92   5                                      {
  93   6                                      while(!k3);
  94   6                                      ss++;
  95   6                                      if(ss==3)        ss=0;
  96   6                                      }
  97   5                              }
  98   4                              /*通过ss选择时分秒设置*/
  99   4                              if(k4==0)                //加数
 100   4                                      {
 101   5                                               delayms(10);
 102   5                                              if(k4==0)
 103   5                                              {
 104   6                                              while(!k4);
 105   6                                              switch(ss)
 106   6                                              {
 107   7                                              case 0:st++;if(st==60)st=0;break;
 108   7                                              case 1:mt++;if(mt==60)mt=0;break;
 109   7                                              case 2:ht++;if(ht==24)ht=0;break;        
 110   7                                              default :;                                                
 111   7                                              }
 112   6                                              }        
 113   5                                      }
 114   4                              if(k5==0)                //减数
 115   4                                      {
 116   5                                               delayms(10);
 117   5                                              if(k5==0)
C51 COMPILER V8.09   TEXT1                                                                 01/07/2013 16:32:59 PAGE 3   

 118   5                                              {
 119   6                                              while(!k5);
 120   6                                              switch(ss)
 121   6                                              {
 122   7                                              case 0:if(st>0)st--;
 123   7                                                              else        st=0;break;
 124   7                                              case 1:if(mt>0)mt--;
 125   7                                                              else        mt=0;break;
 126   7                                              case 2:if(ht>0)ht--;
 127   7                                                              else        ht=0;break;        
 128   7                                              default : ;
 129   7                                              }                                                                 
             -                                                                       
 130   6                                              }        
 131   5                                      }
 132   4                                      }
 133   3                              TR0=1;
 134   3                              sec=st,min=mt,hour=ht;                                                        
 135   3                              }                                                
 136   2                      }                
 137   1                      display(sec,min,hour);
 138   1      }
 139          void keyscan_time()                //用户定时模块
 140          {
 141   1              if(k2==0)
 142   1              {
 143   2                      delayms(10);                
 144   2                      if(k2==0)
 145   2                      {
 146   3                      s=sec;m=min;h=hour;
 147   3                      while(k2==0)         //开始定时设置
 148   3                      {
 149   4                              display(s,m,h);
 150   4                              if(k3==0)
 151   4                              {
 152   5                                      delayms(10);
 153   5                                      if(k3==0)          
 154   5                                      {
 155   6                                      while(!k3);
 156   6                                      ss++;
 157   6                                      if(ss==3)        ss=0;
 158   6                                      }
 159   5                              }
 160   4                              /*通过ss选择时分秒设置*/
 161   4                              if(k4==0)                //加数
 162   4                                      {
 163   5                                               delayms(10);
 164   5                                              if(k4==0)
 165   5                                              {
 166   6                                              while(!k4);
 167   6                                              switch(ss)
 168   6                                              {
 169   7                                              case 0:s++;if(s==60)s=0;break;
 170   7                                              case 1:m++;if(m==60)m=0;break;
 171   7                                              case 2:h++;if(h==24)h=0;break;        
 172   7                                              default :;                                                
 173   7                                              }
 174   6                                              }        
 175   5                                      }
 176   4                              if(k5==0)                //减数
 177   4                                      {
 178   5                                               delayms(10);
C51 COMPILER V8.09   TEXT1                                                                 01/07/2013 16:32:59 PAGE 4   

 179   5                                              if(k5==0)
 180   5                                              {
 181   6                                              while(!k5);
 182   6                                              switch(ss)
 183   6                                              {
 184   7                                              case 0:if(s>0)s--;
 185   7                                                              else        s=0;break;
 186   7                                              case 1:if(m>0)m--;
 187   7                                                              else        m=0;break;
 188   7                                              case 2:if(h>0)h--;
 189   7                                                              else        h=0;break;        
 190   7                                              default : ;
 191   7                                              }                                                                 
             -                                                                               }        
 192   5                                              }
 193   4                                      }                                                
 194   3                              }
 195   2              } 
 196   1      }
 197          void buz()
 198          {
 199   1      if((hour==h)&&(min==m)&&(sec==s))
 200   1              {
 201   2              s7=0;
 202   2              delayms(20);
 203   2              s7=1;
 204   2              }
 205   1      }
 206          void main()
 207          {
 208   1              TMOD=0x01;                                //定时器0工作在方式1
 209   1              TH0=(65536-45872)/256;           //装初值,50ms
 210   1              TL0=(65536-45872)%256;
 211   1              EA=1;                  //总中断允许
 212   1              ET0=1;                 //T0中断允许
 213   1              TR0=1;                 //开定时器0
 214   1              while(1)
 215   1              {
 216   2                      keyscan_settime();
 217   2                      keyscan_time();        
 218   2                      buz();        
 219   2              }
 220   1      }
 221          void T0_ms() interrupt 1          //中断入口程序
 222          {
 223   1              TH0=(65536-45872)/256;                //重新装初值
 224   1              TL0=(65536-45872)%256;
 225   1              count++;
 226   1              if(count==20)                 //判定1s时间是否已到
 227   1              {
 228   2                      count=0; 
 229   2                      timecontrol();
 230   2              }
 231   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    782    ----
   CONSTANT SIZE    =     10    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     11       3
C51 COMPILER V8.09   TEXT1                                                                 01/07/2013 16:32:59 PAGE 5   

   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 + -