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

📄 計算.lst

📁 用c51编的 键盘输入的乘法运算
💻 LST
字号:
C51 COMPILER V7.50   計算                                                                  07/20/2008 10:50:57 PAGE 1   


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

line level    source

   1          /*键盘输入数据完成乘法计算程序*/
   2          
   3          #include<reg52.h>
   4          #include<intrins.h>
   5          #define uchar unsigned char
   6          #define uint unsigned int
   7          
   8                  sbit pclk = P0 ^ 2;
   9                  sbit sdata =P0 ^ 3;
  10                  sbit smg4 = P0 ^ 7;
  11                  sbit smg3 = P0 ^ 6;
  12                  sbit smg2 = P0 ^ 5; 
  13                  sbit smg1 = P0 ^ 4;
  14          
  15          uchar idata disp[ 4 ];
  16          code uchar dispcode[10] = {0xb7,0x90,0x3d,0xb9,0x9a,
  17                                     0xab,0xaf,0xb0,0xbf,0xbb};//数码管对应的顺序码
  18          /* 名称: delay1ms
  19          * 说明: 
  20          * 功能: 延时
  21          * 调用:_nop_
  22          * 输入: 延时长短数据 
  23          * 返回值: 无*/
  24          void delay1ms(uchar j)//延迟1MS
  25          {
  26   1              uchar i;
  27   1              while(j)
  28   1              {
  29   2                      for( i = 248; i > 0; i-- )
  30   2                      {
  31   3                            _nop_( );//延时
  32   3                            _nop_( );
  33   3                      }
  34   2                      j--;
  35   2              }
  36   1      }
  37          
  38          /* 名称: send_0
  39          * 说明: 
  40          * 功能:把一个字节按段的顺序送到数码管显示
  41          * 调用:
  42          * 输入:要显示的十六进制码  
  43          * 返回值: 无*/
  44          void send_0(uchar ch)  
  45          {
  46   1         uchar i;
  47   1         for(i=0;i<8;i++)
  48   1         {
  49   2            pclk = 0;
  50   2            ch<<=1;         //右移一位
  51   2            sdata = CY;
  52   2            pclk = 1;
  53   2            pclk = 0;
  54   2         }
  55   1      }
C51 COMPILER V7.50   計算                                                                  07/20/2008 10:50:57 PAGE 2   

  56          
  57          /*
  58          *名称:senf_f
  59          * 说明: 
  60          * 功能:发送四字节到数码管
  61          * 调用:send_0()
  62          * 输入: 四位要显示得的数值
  63          * 返回值: 无*/
  64          void sent_f(uchar s3,uchar s2,uchar s1,uchar s0)  
  65          {
  66   1         P0 = 0x00;  //初始化
  67   1         send_0(dispcode[s3]);//第一个数码管显示
  68   1         smg1 = 1;
  69   1         delay1ms(1);// 延时
  70   1         P0 = 0x00;
  71   1         send_0(dispcode[s2]);//第二个数码管显示
  72   1         smg2 = 1;
  73   1         delay1ms(1);
  74   1         P0 = 0x00;
  75   1         send_0(dispcode[s1]);//第三个数码管显示
  76   1         smg3 = 1;
  77   1         delay1ms(1);
  78   1         P0 = 0x00;
  79   1         send_0(dispcode[s0]);//第四个数码管显示
  80   1         smg4 = 1;
  81   1         delay1ms(1);
  82   1         P0 = 0x00;
  83   1      }
  84          
  85          /*名称: sure_disk
  86          * 说明: 
  87          * 功能: 按键识别
  88          * 调用:sent_f()
  89          * 输入:  
  90          * 返回值: 按键对应的数值*/
  91          uchar sure_disk()  
  92          {
  93   1         uchar j;
  94   1         uchar key,keyvalue;
  95   1         uchar sccode,recode;
  96   1         P2=0x0f;            /*发0行扫描码*/
  97   1      
  98   1         if((P2 & 0x0f)!= 0x0f)       /*若有键按下*/
  99   1         {
 100   2         delay1ms(1);                            //去抖
 101   2          if((P2&0x0f)!= 0x0f)       /*逐行扫描初值*/
 102   2           {
 103   3             sccode=0xfe;
 104   3             for(j=4;j>0;j--)
 105   3             {
 106   4             while((sccode&0x10)!=0)
 107   4              {
 108   5                P2=sccode;            /*输出行扫描码*/
 109   5                if((P2&0xf0)!=0xf0)   /*本行有键按下*/
 110   5                 {
 111   6                   recode=(P2&0xf0)|0x0f;
 112   6      
 113   6                   key=((~sccode)+(~recode));  /*返回特征字节码*/
 114   6                      }
 115   5                  else
 116   5                  sccode=(sccode<<1)|0x01;       /*行扫描码左移一位*/
 117   5               }
C51 COMPILER V7.50   計算                                                                  07/20/2008 10:50:57 PAGE 3   

 118   4            }
 119   3           } 
 120   2          }
 121   1          switch(key) //判断键特征值
 122   1          {
 123   2               case 0x88: keyvalue=0;    
 124   2                      break;
 125   2               case 0x84: keyvalue=1;
 126   2                      break;
 127   2               case 0x82: keyvalue=2;
 128   2                      break;
 129   2               case 0x81: keyvalue=3;
 130   2                      break;
 131   2               case 0x48: keyvalue=4;
 132   2                      break;
 133   2               case 0x44: keyvalue=5;
 134   2                      break;
 135   2               case 0x42: keyvalue=6;
 136   2                      break;
 137   2               case 0x41: keyvalue=7;
 138   2                      break;
 139   2               case 0x28: keyvalue=8;
 140   2                      break;
 141   2               case 0x24: keyvalue=9;
 142   2                      break;
 143   2               case 0x22: keyvalue=10;
 144   2                      break;
 145   2               case 0x21: keyvalue=11;
 146   2                      break;
 147   2               case 0x18: keyvalue=12;
 148   2                      break;
 149   2               case 0x14: keyvalue=13;
 150   2                      break;
 151   2               case 0x12: keyvalue=14;
 152   2                      break;
 153   2               case 0x11: keyvalue=15;
 154   2                      break;
 155   2               default:   keyvalue=16; //无键按下,返回0值
 156   2                      break;
 157   2                      }
 158   1              return(keyvalue);                                                 
 159   1      }
 160          
 161          /*主函数*/
 162          void main ( void )
 163          {
 164   1       uchar j,a=0;   
 165   1       char i;
 166   1       uint add,c1,c2;
 167   1       for(j=0;j<4;j++)//赋初值
 168   1       disp[j]=0;
 169   1       sent_f(disp[0],disp[1],disp[2],disp[3]);
 170   1       j=2;
 171   1       while(1) 
 172   1       {
 173   2       
 174   2        P2=0xf0;
 175   2        if((P2&0xf0)!=0xf0)//判断是否有按键
 176   2         {
 177   3             delay1ms(1);//延时
 178   3              if((P2&0xf0)!=0xf0)//判断是否有按键
 179   3                  {
C51 COMPILER V7.50   計算                                                                  07/20/2008 10:50:57 PAGE 4   

 180   4                         if(sure_disk()<10)//判断返回数值
 181   4                         {  if(a==0)
 182   5                     disp[3]=sure_disk();
 183   5                                 if(a==1)
 184   5                                 {
 185   6                                   a=0;
 186   6                                       disp[2]=disp[3];
 187   6                                       disp[3]=sure_disk();
 188   6                                 }a++;
 189   5                         }
 190   4                      if(sure_disk()==10)
 191   4                      {
 192   5                                   c1=disp[2]*10+disp[3];//存储数据
 193   5                                       for(i=3;i>=0;i--)
 194   5                                       disp[i]=0;
 195   5                              }
 196   4                              if(sure_disk()==11)
 197   4                              {
 198   5                                  c2=disp[2]*10+disp[3];
 199   5                     for(i=3;i>=0;i--)
 200   5                                       disp[i]=0;
 201   5                                      add=c1*c2;
 202   5                                         disp[0]=add/1000;
 203   5                                                 disp[1]=(add/100)%10;
 204   5                                                 disp[2]=(add/10)%10;
 205   5                                                 disp[3]=add%10;
 206   5                              
 207   5                              }
 208   4                 
 209   4                 }
 210   3         }
 211   2        sent_f(disp[0],disp[1],disp[2],disp[3]);
 212   2       }
 213   1      }
 214          
 215          


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