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

📄 main.lst

📁 使用C语言开发的基于51单片机设计计时秒表
💻 LST
字号:
C51 COMPILER V8.08   MAIN                                                                  05/24/2007 12:12:32 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: E:\keil c51\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*********************************
   2          **公司名称:esa.hicc            **
   3          **模 块 名:计时秒表            **
   4          **创 建 者:esa                 **
   5          **修 改 者:esa                 **
   6          **功能描述:精确到1/100S计时    **
   7          **其他说明:                    **
   8          **版    本:v1.0                **
   9          *********************************/
  10          
  11          #include <reg51.h>
  12          #define uchar unsigned char
  13          #define uint  unsigned int
  14          
  15          sbit P1_0 =P1^0;
  16          sbit P1_1 =P1^1;
  17          sbit P1_2 =P1^2;
  18          sbit P1_3 =P1^3;
  19          
  20          typedef struct   
  21          { uchar minute;
  22            uchar second;
  23            uchar second_1;
  24          }time;
  25          
  26          time now={0,0,0};
  27          time now_1[10];         
  28              
  29          uchar code num_tab1[]={0x80,0x40,0x20,0x10,0x08,0x04};                  
  30          uchar code num_tab2[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};                //共阳极显示
  31          uchar a=0;
  32          uchar state=0;    
  33          uchar fy=0;           //开始0和暂停1的复用标志
  34          
  35          
  36          void delay(uint time1)            //延时子程序
  37          {
  38   1              int i;
  39   1              int k;
  40   1              for(i=0;i<time1;i++)
  41   1              for(k=0;k<100;k++);
  42   1      }
  43          
  44          void display(time disnum)         //显示子程序
  45          {
  46   1              int min_shi,min_ge,sec_shi,sec_ge,sec_1_shi,sec_1_ge,i;
  47   1              int num[6]={0,0,0,0,0,0};
  48   1              min_shi=disnum.minute/10;
  49   1              min_ge=disnum.minute%10;
  50   1              sec_shi=disnum.second/10;
  51   1              sec_ge=disnum.second%10;
  52   1              sec_1_shi=disnum.second_1/10;
  53   1              sec_1_ge=disnum.second_1%10;
  54   1              num[0]=min_shi;
  55   1              num[1]=min_ge;
C51 COMPILER V8.08   MAIN                                                                  05/24/2007 12:12:32 PAGE 2   

  56   1              num[2]=sec_shi;
  57   1              num[3]=sec_ge;
  58   1              num[4]=sec_1_shi;
  59   1              num[5]=sec_1_ge;
  60   1              if(min_shi==0)
  61   1              {
  62   2                      for(i=0;i<5;i++)
  63   2                      {
  64   3                        P2=num_tab1[i+1];               //先送位码
  65   3                    P0=num_tab2[num[i+1]];   //再送段码
  66   3                        delay(1);
  67   3                      }
  68   2               }
  69   1              else
  70   1              {
  71   2                      for(i=0;i<6;i++)
  72   2                      {
  73   3                      P2=num_tab1[i];
  74   3                      P0=num_tab2[num[i]];
  75   3                      delay(1);
  76   3                      }                               
  77   2          }
  78   1      }
  79          
  80          void  interrupt_init(void)     
  81          {
  82   1         EA=0;
  83   1         TMOD=0x01;
  84   1         TH0=0xd8;
  85   1         TL0=0xf0;
  86   1         IT0=1;
  87   1         ET0=1;
  88   1         EX0=1;
  89   1         EA=1;     
  90   1      }
  91          
  92          void interrup0(void) interrupt 0 using 3
  93          {  uchar i;
  94   1         delay(1);
  95   1         if(P1_0==0)   
  96   1         {  
  97   2                if(fy==0)             //开始计时
  98   2                {
  99   3                  TR0=1; 
 100   3              state=0;
 101   3                  fy=1;
 102   3                }
 103   2               else    //暂停
 104   2            {
 105   3                      TR0=0;
 106   3                      fy=0;
 107   3                }
 108   2               
 109   2         }  
 110   1         if(P1_1==0)  //记时
 111   1         {
 112   2           if(a<10)
 113   2               {  
 114   3                 now_1[a]=now;
 115   3             a++;
 116   3               }
 117   2      
C51 COMPILER V8.08   MAIN                                                                  05/24/2007 12:12:32 PAGE 3   

 118   2         }
 119   1         if(P1_2==0)  //显示记时
 120   1         {
 121   2          if(state<=a)
 122   2          state++; 
 123   2         }
 124   1         if(P1_3==0)   //系统清零
 125   1         { 
 126   2           TR0=0;
 127   2               fy=0;
 128   2               a=0;
 129   2           now.minute=0;
 130   2           now.second=0;
 131   2           now.second_1=0; 
 132   2           for(i=0;i<10;i++)
 133   2           {
 134   3             now_1[i].minute=0;
 135   3             now_1[i].second=0;
 136   3             now_1[i].second_1=0;
 137   3           }          
 138   2         }
 139   1         
 140   1         
 141   1      }
 142          
 143          void interrup1(void) interrupt 1 using 3
 144          {
 145   1        TR0=0;
 146   1        TH0=0xd8;
 147   1        TL0=0xf0;
 148   1        TR0=1;
 149   1        now.second_1++;
 150   1        if(now.second_1==100)
 151   1        {
 152   2          now.second++;
 153   2          now.second_1=0;
 154   2          if(now.second==60)
 155   2          {
 156   3             now.minute++;
 157   3             now.second=0;
 158   3             if(now.minute==60)
 159   3             {now.minute=0;}
 160   3          }
 161   2        }
 162   1      }
 163          
 164          void main(void)
 165           {   uchar j;
 166   1           for(j=0;j<10;j++)
 167   1           {
 168   2             now_1[j].minute=0;
 169   2             now_1[j].second=0;
 170   2             now_1[j].second_1=0;
 171   2           } 
 172   1          interrupt_init();       //中断初始化   
 173   1              // TR0=1;
 174   1          while(1)
 175   1          {
 176   2             switch(state)
 177   2             {
 178   3               case 0: display(now);break;
 179   3               case 1: display(now_1[state-1]);break;
C51 COMPILER V8.08   MAIN                                                                  05/24/2007 12:12:32 PAGE 4   

 180   3               case 2: display(now_1[state-1]);break;
 181   3               case 3: display(now_1[state-1]);break;
 182   3               case 4: display(now_1[state-1]);break;
 183   3               case 5: display(now_1[state-1]);break;
 184   3               case 6: display(now_1[state-1]);break;
 185   3               case 7: display(now_1[state-1]);break;
 186   3               case 8: display(now_1[state-1]);break;
 187   3               case 9: display(now_1[state-1]);break;
 188   3                       case 10:display(now_1[state-1]);break;
 189   3             }
 190   2              
 191   2          }
 192   1       }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    813    ----
   CONSTANT SIZE    =     28    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     36      23
   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 + -