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

📄 123.lst

📁 /************************** 0 1 2 3 4 5 6 7 8 9 . CLR + - = CLR ***************************
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   123                                                                   12/30/2008 11:30:31 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE 123
OBJECT MODULE PLACED IN 123.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 123.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /**************************
   2          0 1 2 3 
   3          4 5 6 7
   4          8 9 . CLR 
   5          + - = CLR        
   6          ***************************/ 
   7          /***************************
   8          用键盘扫描,数码管显示实现计算功能,能实现xxx.x任意正数的加减
   9          运算,超过范围显0000,功能键如上,并将所得结果储入EEPROM
  10          ****************************/
  11          #include <reg52.h>
  12          #include<intrins.h>
  13          #define uchar unsigned char
  14          #define uint unsigned int
  15          /*sfr ISP_DATA=0Xe2;
  16          sfr ISP_ADDRH=0xe3;
  17          sfr ISP_ADDRL=0xe4;
  18          sfr ISP_CMD=0xe5;
  19          sfr ISP_TRIG=0xe6;
  20          sfr ISP_CONTR=0xe7;*/
  21          //sfr LedPort=0x80;   //P0口段选
  22          //sfr LedBit=0x90;   //P1口位选
  23          
  24          uchar code table[]=
  25          {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
  26          0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef
  27          };//0,1,2,3,4,5,6,7,8,9,0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,
  28          uchar temp,dat;
  29          uchar buf1[5];
  30          uchar buf2[5];
  31          uchar end[5];
  32          
  33          /**************延时程序*************/
  34          void delay(uint z)
  35          {
  36   1              uint x,y;
  37   1              for(x=z;x>0;x--)
  38   1                      for(y=110;y>0;y--);
  39   1      }
  40          
  41          /***********键盘扫描***************/
  42          uchar keyscan()
  43          {
  44   1        uchar num=0;
  45   1        P2=0x7f;
  46   1        temp=P2;
  47   1        temp=temp&0x0f;
  48   1        if(temp!=0x0f)
  49   1        {
  50   2           delay(5);
  51   2           temp=P2;
  52   2           temp=temp&0x0f;
  53   2           if(temp!=0x0f) 
  54   2           {
  55   3              temp=P2;
C51 COMPILER V8.02   123                                                                   12/30/2008 11:30:31 PAGE 2   

  56   3              switch(temp)
  57   3              {
  58   4                 case 0x77:num=1;break;
  59   4                 case 0x7b:num=2;break;                
  60   4                 case 0x7d:num=3;break;        
  61   4                 case 0x7e:num=4;break;                
  62   4              }          
  63   3           }                                       
  64   2        }                       
  65   1        P2=0xbf;
  66   1        temp=P2;
  67   1        temp=temp&0x0f;
  68   1        if(temp!=0x0f)
  69   1        {
  70   2           delay(5);
  71   2               temp=P2;
  72   2               temp=temp&0x0f;
  73   2               if(temp!=0x0f)
  74   2               {
  75   3                  temp=P2;
  76   3                  switch(temp)
  77   3                  {                                   
  78   4                     case 0xb7:num=5;break;                                           
  79   4                     case 0xbb:num=6;break;                                           
  80   4                     case 0xbd:num=7;break;                                                   
  81   4                     case 0xbe:num=8;break;                                           
  82   4                  }
  83   3                                      
  84   3           }
  85   2        }
  86   1        P2=0xdf;
  87   1        temp=P2;
  88   1        temp=temp&0x0f;
  89   1        if(temp!=0x0f)
  90   1        {
  91   2              delay(5);
  92   2              temp=P2;
  93   2              temp=temp&0x0f;
  94   2              if(temp!=0x0f)
  95   2              {
  96   3                      temp=P2;
  97   3                      switch(temp)
  98   3                      {
  99   4                         case 0xd7:num=9;break;
 100   4                         case 0xdb:num=10;break;                                              
 101   4                         case 0xdd:num=11;break;                                      
 102   4                         case 0xde:num=12;break;                                              
 103   4                      }                                               
 104   3      
 105   3              }                       
 106   2        }            
 107   1        P2=0xef;
 108   1        temp=P2;
 109   1        temp=temp&0x0f;
 110   1        if(temp!=0x0f)           
 111   1        {
 112   2               delay(5);
 113   2               temp=P2;
 114   2           temp=temp&0x0f;
 115   2               if(temp!=0x0f)
 116   2               {
 117   3                      temp=P2;
C51 COMPILER V8.02   123                                                                   12/30/2008 11:30:31 PAGE 3   

 118   3                      switch(temp)
 119   3                      {
 120   4                         case 0xe7:num=13;break;
 121   4                         case 0xeb:num=14;break;                                      
 122   4                         case 0xed:num=15;break;                              
 123   4                         case 0xee:num=16;break;                              
 124   4                      }
 125   3           }
 126   2        }
 127   1        return num;           
 128   1      }
 129          
 130          /*********在数码管上显示四位数字**********/
 131          void show(uchar  *dis)  
 132          {
 133   1          
 134   1          P1=0xf7;
 135   1              P0=table[dis[3]];
 136   1              delay(5);
 137   1          P1=0xfb;
 138   1              P0=table[dis[2]];
 139   1              delay(5);
 140   1              P1=0xfd;
 141   1          P0=table[dis[1]];
 142   1              delay(5);
 143   1              P1=0xfe;
 144   1          P0=table[dis[0]];
 145   1              delay(5);   
 146   1      }
 147          
 148          /*********eeprom里读数据******************/
 149          /*uchar EEPROM_Read(uint address)
 150          {
 151                  ISP_ADDRH=address/256;   //     待写入扇区首地址
 152                  ISP_ADDRL=address%256;
 153                  ISP_CONTR=0X83;    //控制字节
 154                  ISP_CMD=0X01;    //读命令
 155                  ISP_TRIG=0X46;   //命令触发寄存器
 156                  ISP_TRIG=0XB9;
 157                  _nop_();
 158          
 159              ISP_CONTR=0X00;   //初始化
 160                  ISP_CMD=0X00;
 161                  ISP_TRIG=0X00;
 162                  ISP_ADDRH=0x00;
 163                  ISP_ADDRL=0x00;
 164          
 165                  return(ISP_DATA);   //返回读出的值
 166          }
 167          
 168          /*********向eeprom里写数据**********************/
 169          /*void EEPROM_Write(uint address,uchar DataTemp)
 170          {
 171              ISP_DATA=DataTemp;
 172              ISP_ADDRH=address/256;   
 173              ISP_ADDRL=address%256;
 174              ISP_CMD=0X02;    //写指令
 175                  ISP_TRIG=0X46;   //触发,数据写入
 176                  ISP_TRIG=0XB9;
 177                  _nop_();
 178          
 179              ISP_CONTR=0X00;   //初始化
C51 COMPILER V8.02   123                                                                   12/30/2008 11:30:31 PAGE 4   

 180                  ISP_CMD=0X00;
 181                  ISP_TRIG=0X00;
 182                  ISP_ADDRH=0x00;
 183                  ISP_ADDRL=0x00;
 184          }*/
 185          
 186          /*************扇区擦除**********************/
 187          /*void EEPROM_Eares(uint address)   //扇区擦除
 188          {
 189              ISP_ADDRL=address;   
 190              ISP_ADDRH=address>>6;
 191                  ISP_CONTR=0X83;
 192              ISP_CMD=0X03;    //扇区命令
 193                  ISP_TRIG=0X46;   //命令触发寄存器
 194                  ISP_TRIG=0XB9;
 195                  _nop_();
 196          
 197                  ISP_ADDRL=0x00;
 198                  ISP_ADDRH=0x00;
 199                  ISP_CONTR=0X00;   
 200                  ISP_CMD=0X00;
 201                  ISP_TRIG=0X00;
 202          }*/
 203          
 204          /********主程序里进行运算********************/
 205          void main(void)
 206          { 
 207   1         uchar i,key,flag,addflag;
 208   1         addflag=1;
 209   1         while(1)
 210   1         {  
 211   2            key=keyscan();
 212   2                if(addflag==1)
 213   2                      show(buf1);
 214   2            if(addflag==2)
 215   2                      show(buf2);     
 216   2                if(addflag==3)
 217   2                      show(end);
 218   2               
 219   2                if(key>0&&key<12&&addflag==1)            //第一次输入的数
 220   2                {
 221   3                        do
 222   3                        {     
 223   4                              show(buf1);
 224   4                              P2=0x0f;
 225   4                              temp=P2;
 226   4                        }
 227   3                        while(temp!=0x0f);
 228   3                        if(key!=11)
 229   3                        {
 230   4                    buf1[4]=buf1[3];
 231   4                                buf1[3]=buf1[2];
 232   4                            buf1[2]=buf1[1];
 233   4                                buf1[1]=buf1[0];
 234   4                                buf1[0]=key-1;
 235   4                        }
 236   3                        else
 237   3                          buf1[0]=buf1[0]+10;
 238   3                        if(buf1[4]!=0)
 239   3                        { 
 240   4                           for(i=0;i<4;i++)
 241   4                              buf1[i]=0;      
C51 COMPILER V8.02   123                                                                   12/30/2008 11:30:31 PAGE 5   

 242   4                        }
 243   3            }
 244   2                 
 245   2                if(key>0&&key<12&&addflag==2)           //第二次输入的数
 246   2                {
 247   3                        do
 248   3                        {     
 249   4                              show(buf2);
 250   4                              P2=0x0f;
 251   4                              temp=P2;
 252   4                        }
 253   3                        while(temp!=0x0f);
 254   3                        if(key!=11)
 255   3                        {  
 256   4                        buf1[4]=buf1[3];
 257   4                                buf2[3]=buf2[2];
 258   4                                buf2[2]=buf2[1];
 259   4                                buf2[1]=buf2[0];
 260   4                                buf2[0]=key-1;
 261   4                        }
 262   3                        else
 263   3                       buf2[0]=buf2[0]+10;
 264   3                      
 265   3                }
 266   2                if(key==13)            //+
 267   2                {
 268   3                      addflag=2;
 269   3                      flag=1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -