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

📄 main.lst

📁 基于51的计算器,在周立功实验箱上测试通过,是单片机课程设计题
💻 LST
字号:
C51 COMPILER V7.07   MAIN                                                                  10/21/2007 14:59:45 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          //*********************************************
   2          //      作者:龙海
   3          //      单位:四海农科所
   4          //      功能:实现计算器功能
   5          //
   6          //
   7          //*********************************************
   8          #include <reg52.h>
   9          unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
  10          unsigned char code tab[4][4] = {{1,2,3,13},{4,5,6,14},{7,8,9,15},{10,11,12,16}};
  11          unsigned char code disbcode[]={0x04,0x08,0x10,0x20};
  12          unsigned char buf[]={0,10,10,10};
  13          unsigned int show=0;
  14          unsigned int dat1=0;
  15          unsigned int dat2=0;
  16          unsigned int sum=0;
  17          unsigned char wx=0;
  18          unsigned char fuhao=0;
  19          sbit clk = P0^0;
  20          sbit din = P0^1;
  21          
  22                  
  23                          //***********************************
  24                          //延时10毫秒;
  25                          //***********************************
  26                           void delay()
  27                           {
  28   1                              unsigned int i = 7000;
  29   1                              while(i!=0)
  30   1                                      i--;
  31   1                       } 
  32          
  33                           //**********************************
  34                           //      键盘扫描程序
  35                           //
  36                           //**********************************
  37          
  38                           char kbscan(void)
  39                           {
  40   1                              unsigned char hang,lie,key;
  41   1                              if(P2!=0xf0)
  42   1                              {
  43   2                                      delay();
  44   2                                      if(P2!=0xf0)
  45   2                                      {
  46   3                                              switch(P2&0xf0)
  47   3                                              {
  48   4                                                      case 0x70:hang = 0;break;
  49   4                                                      case 0xb0:hang = 1;break;
  50   4                                                      case 0xd0:hang = 2;break;
  51   4                                                      case 0xe0:hang = 3;break;
  52   4                                              }
  53   3                                              P2 = 0x0f;
  54   3                                              switch(P2&0x0f)
  55   3                                              {
C51 COMPILER V7.07   MAIN                                                                  10/21/2007 14:59:45 PAGE 2   

  56   4                                                      case 0x07:lie = 0;break;
  57   4                                                      case 0x0b:lie = 1;break;
  58   4                                                      case 0x0d:lie = 2;break;
  59   4                                                      case 0x0e:lie = 3;break;
  60   4                                              }
  61   3                                              P2 = 0xf0;
  62   3                                              while(P2 != 0xf0);
  63   3                                              key = tab[hang][lie];
  64   3                                      }       
  65   2                              }
  66   1                              else 
  67   1                                      key = 0;
  68   1                              return(key);
  69   1                      }
  70          
  71                           //***********************************
  72                           //     向164发送数据
  73                           //
  74                           //***********************************
  75                           void send(unsigned char da)
  76                          {
  77   1                              unsigned char temp,i;
  78   1                              clk=0;
  79   1                              for(i=0;i<8;i++)
  80   1                              {
  81   2                                      temp = da;
  82   2                                      if((temp&(0x80>>i))!=0)
  83   2                                              din=1;
  84   2                                      else din=0;
  85   2                                              clk=1;
  86   2                                      clk=0;
  87   2                              }
  88   1                      }
  89                          //**************************************
  90                          // 2毫秒定时中断
  91                          //**************************************
  92          
  93                          void time0(void) interrupt 1
  94                          {
  95   1                              TH0 = 0xec;
  96   1                              TL0 = 0x78;
  97   1                              P0 = 0x00;
  98   1                              send(dispcode[buf[wx]]);
  99   1                              P0 = disbcode[wx];
 100   1                              wx++;
 101   1                              if(wx==4)
 102   1                                      wx=0;
 103   1                              buf[0]=show%10;
 104   1                              buf[1]=show%100/10;
 105   1                              buf[2]=show%1000/100;
 106   1                              buf[3]=show/1000;
 107   1                              if(show<10)
 108   1                                      buf[1]=10;
 109   1                              if(show<100)
 110   1                                      buf[2]=10;
 111   1                              if(show<1000)
 112   1                                      buf[3]=10;
 113   1      
 114   1                                              
 115   1                      }
 116          
 117                          //*********************************
C51 COMPILER V7.07   MAIN                                                                  10/21/2007 14:59:45 PAGE 3   

 118                          //
 119                          //
 120                          //*********************************
 121                          main()
 122                          {
 123   1                              unsigned char cnt=0;
 124   1                              P0 = 0x00;
 125   1                              P2 = 0xf0;
 126   1                              TCON = 0x00;
 127   1                              TMOD = 0x01;
 128   1                              TH0 = 0xec;
 129   1                              TL0 = 0x78;
 130   1                              IE = 0x82;
 131   1                              TR0 = 1;   
 132   1                              
 133   1                              while(1)   
 134   1                              {
 135   2                                      cnt = kbscan();                         
 136   2                                      if(12<cnt&&cnt<17)
 137   2                                      {                                       
 138   3                                              if(fuhao == 0)
 139   3                                              {
 140   4                                                      fuhao = cnt;
 141   4                                              }
 142   3                                              else
 143   3                                              {                                               
 144   4                                                      switch(fuhao)
 145   4                                                      {
 146   5                                                              case 13: sum=dat1+dat2;break;
 147   5                                                              case 14: sum=dat1-dat2;break;
 148   5                                                              case 15: sum=dat1*dat2;break;
 149   5                                                              case 16: sum=dat1/dat2;break;
 150   5                                                      }
 151   4                                                      show=sum;
 152   4                                                      dat1=sum;
 153   4                                                      dat2=0;
 154   4                                                      sum =0;
 155   4                                                      fuhao=cnt;
 156   4                                              }
 157   3                                              cnt=0;
 158   3                                      }
 159   2                                      else if(0<cnt&&cnt<11)
 160   2                                      {
 161   3                                              if(fuhao==0)
 162   3                                              {       
 163   4                                                      dat1=dat1*10+(cnt-1);
 164   4                                                      show=dat1;
 165   4                                              }
 166   3                                              else
 167   3                                              {
 168   4                                                      dat2=dat2*10+(cnt-1);
 169   4                                                      show=dat2;
 170   4                                              }
 171   3                                              cnt=0;  
 172   3                                      }
 173   2                                      else if(cnt==11)
 174   2                                      {
 175   3                                              dat1=0;
 176   3                                              dat2=0;
 177   3                                              sum=0;
 178   3                                              fuhao=0;
 179   3                                              cnt=0;
C51 COMPILER V7.07   MAIN                                                                  10/21/2007 14:59:45 PAGE 4   

 180   3                                              show=0;
 181   3                                      }
 182   2                                      else if(cnt==12)
 183   2                                      {
 184   3                                              switch(fuhao)
 185   3                                              {
 186   4                                                      case 13: sum=dat1+dat2;break;
 187   4                                                      case 14: sum=dat1-dat2;break;
 188   4                                                      case 15: sum=dat1*dat2;break;
 189   4                                                      case 16: sum=dat1/dat2;break;
 190   4                                              }
 191   3                                              cnt=0;
 192   3                                              show=sum;
 193   3                                      }
 194   2                                      else cnt=0;              
 195   2                              }        
 196   1                              
 197   1                      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    761    ----
   CONSTANT SIZE    =     31    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     14       3
   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 + -