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

📄 main.lst

📁 很实用的单片机例程
💻 LST
字号:
C51 COMPILER V7.00  MAIN                                                                   06/06/2011 23:48:44 PAGE 1   


C51 COMPILER V7.00, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include<reg51.h>
   2          #define uchar unsigned char
   3          #define uint unsigned int
   4          //uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
   5          uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
   6                       //段码: 0     1    2    3    4    5    6    7    8    9 
   7          uchar n,aa,shi,fen,miao,miaoge,miaoshi,fenge,fenshi,shige,shishi;
   8          sbit S2=P3^4;    //秒表功能
   9          sbit S3=P3^5;    //调分
  10          sbit S4=P3^6;    //调时
  11          sbit S5=P3^7;    //时,分,秒清零
  12          sbit wela=P2^7;   //位选控制
  13          sbit dula=P2^6;   //段选控制
  14          
  15          void delayms(uint z);//延时函数声明
  16          void keyscan();    //键盘扫描函数声明
  17          void display();    //显示函数声明
  18          void init();       //初始化函数声明
  19          /***************主函数**************/
  20          void main()
  21          {
  22   1        init();                 //初始化
  23   1        while(1)
  24   1        {
  25   2          display();
  26   2          keyscan();
  27   2        }
  28   1      }
  29          /*************初始化函数************/
  30          void init()
  31          { 
  32   1        miao=0;                          //秒分时的初始化
  33   1        fen=0;
  34   1        shi=0;
  35   1        aa=0;
  36   1        n=0;
  37   1        TMOD=0x11;                            //设置定时器0和1为工作方式1
  38   1        TH0=(65536-50000)/256;        //装设初值
  39   1        TL0=(65536-50000)%256;    
  40   1        EA=1;                                         //开启总中断
  41   1        ET0=1;                                        //开启定时器0中断
  42   1        TR0=1;                                        //启动定时器0
  43   1        TH1=(65536-5000)/256;         //装设初值
  44   1        TL1=(65536-5000)%256;
  45   1        ET1=1;                                        //开启定时器0中断
  46   1        TR1=1;                                        //启动定时器0
  47   1      }
  48          /********定时器T0中断函数**********/
  49          void t0(void) interrupt 1 
  50          {
  51   1       TH0=(65536-50000)/256;         //装设初值
  52   1       TL0=(65536-50000)%256;
  53   1       aa++;
  54   1       if(aa==18)                                     //到达1秒重新计数并将1秒累加
  55   1        {
C51 COMPILER V7.00  MAIN                                                                   06/06/2011 23:48:44 PAGE 2   

  56   2          aa=0;                                        //归零
  57   2          miao++;
  58   2          if(miao==60)
  59   2          {
  60   3            miao=0;                       //如果秒累加为60则清零同时分钟累加计数
  61   3            fen++;
  62   3             if(fen==60)                 //如果分钟累加到60清零时进位
  63   3              {
  64   4                 fen=0;
  65   4                 shi++;
  66   4                if(shi==24)      //如果时累加到60清零时进位
  67   4                   shi=0;
  68   4              }
  69   3          }
  70   2        }
  71   1        miaoge=miao%10;                         //将累加的秒de个ge位分离出来    
  72   1        miaoshi=miao/10;                       //将累加的秒de个十位分离出来
  73   1        fenge=fen%10;                         //将累加的分de个ge位分离出来
  74   1        fenshi=fen/10;                        //将累加的分钟de个十位分离出来
  75   1        shige=shi%10;                    //将累加的时de个ge位分离出来
  76   1        shishi=shi/10;                   //将累加的时de个十位分离出来
  77   1      }
  78          /********定时器T1中断函数**********/
  79          void t1(void) interrupt 3               //按键处理
  80          {
  81   1         TH1=(65536-5000)/256;
  82   1         TL1=(65536-5000)%256;
  83   1         n++;
  84   1         if(n==20) //每秒检测一次key1按键
  85   1          {
  86   2            n=0;
  87   2           if(S2==0)
  88   2            {
  89   3              delayms(10);
  90   3                if(S2==0) //key1按键确实被按下
  91   3                  { 
  92   4                     miao++;                    //秒加1
  93   4                       if(miao==60)     //秒到60时分进位
  94   4                         {
  95   5                            miao=0;
  96   5                              fen++;
  97   5                            if(fen==60)  //分到60时时进位
  98   5                             {
  99   6                                 fen=0;
 100   6                                 shi++;
 101   6                                 if(shi==24)   //时到24时归零
 102   6                                       shi=0;
 103   6                                      
 104   6                             }
 105   5                         }
 106   4                  }                           
 107   3             }
 108   2            
 109   2          }
 110   1          
 111   1      }
 112          /*************延时函数*************/
 113          void delayms(uint z)
 114          {
 115   1        uint x,y;
 116   1        for(x=z;z>0;z--)
 117   1          for(y=110;y>0;y--);
C51 COMPILER V7.00  MAIN                                                                   06/06/2011 23:48:44 PAGE 3   

 118   1      }
 119          /*************显示函数*************/
 120          void display()
 121          {
 122   1              dula=1;                          //hour的十位显示
 123   1              P0=table[shishi];                
 124   1              dula=0;
 125   1          P0=0xff;
 126   1              wela=1;
 127   1              P0=0xfe;
 128   1              wela=0;
 129   1              delayms(10);
 130   1      
 131   1              dula=1;                          //hour的个位显示
 132   1              P0=table[shige];                 
 133   1              dula=0;
 134   1              P0=0xff;
 135   1              wela=1;
 136   1              P0=0xfd;
 137   1              wela=0;
 138   1              delayms(1);
 139   1               
 140   1              dula=1;                          //min的十位显示
 141   1              P0=table[fenshi];                
 142   1              dula=0;
 143   1          P0=0xff;
 144   1              wela=1;
 145   1              P0=0xfb;
 146   1              wela=0;
 147   1              delayms(1);
 148   1      
 149   1              dula=1;                          //min的个位显示
 150   1              P0=table[fenge];                 
 151   1              dula=0;
 152   1              P0=0xff;
 153   1              wela=1;
 154   1              P0=0xf7;
 155   1              wela=0;
 156   1              delayms(1);
 157   1      
 158   1              dula=1;                          //sec的十位显示
 159   1              P0=table[miaoshi];               
 160   1              dula=0;
 161   1          P0=0xff;
 162   1              wela=1;
 163   1              P0=0xef;
 164   1              wela=0;
 165   1              delayms(1);
 166   1      
 167   1              dula=1;                          //sec的个位显示
 168   1              P0=table[miaoge];                 
 169   1              dula=0;
 170   1              P0=0xff;
 171   1              wela=1;
 172   1              P0=0xdf;
 173   1              wela=0;
 174   1              delayms(1);
 175   1         
 176   1      }
 177          /***********键盘扫描函数*************/
 178          void keyscan()
 179          {
C51 COMPILER V7.00  MAIN                                                                   06/06/2011 23:48:44 PAGE 4   

 180   1        if(S3==0)
 181   1         {
 182   2          delayms(10);
 183   2           if(S3==0)           //key2按键确实被按下
 184   2             {
 185   3                fen++;                  //分进位到60时并清零
 186   3                  if(fen==60)
 187   3                   {
 188   4                     fen=0;
 189   4                   }
 190   3                  while(!S3);
 191   3                  fenge=fen%10;        //将累加的分钟de个十位和个位分离出来
 192   3                  fenshi=fen/10;       
 193   3             }
 194   2          }
 195   1         if(S4==0)
 196   1          {
 197   2           delayms(10);
 198   2              if(S4==0)               //key3按键确实被按下
 199   2               {
 200   3                  shi++;              //时进位到24时并清零
 201   3                    if(shi==24)
 202   3                      {
 203   4                        shi=0;
 204   4                      }
 205   3                    while(!S4)
 206   3                    shige=shi%10;       //将累加的时de个十位和个位分离出来
 207   3                    shishi=shi/10;
 208   3                             
 209   3               }
 210   2           }
 211   1         if(S5==0)
 212   1          {
 213   2           delayms(10);
 214   2             if(S5==0)                 //key4按键确实被按下
 215   2               { 
 216   3                 while(!S5);  
 217   3                 miao=0;                 //将秒分时归零
 218   3                 fen=0;
 219   3                 shi=0;
 220   3               }
 221   2          }
 222   1      }  


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