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

📄 计算器.lst

📁 51单片机 计算器 1602显示
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   计算器                                                                02/21/2010 21:46:02 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE 计算器
OBJECT MODULE PLACED IN 计算器.OBJ
COMPILER INVOKED BY: E:\科协\C51\BIN\C51.EXE 计算器.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include<reg52.h>
   2          #define unchar unsigned char
   3          #define unint unsigned int
   4          sbit rs=P2^0;
   5          sbit rw=P2^1;
   6          sbit en=P2^2;
   7          sbit busy=P0^7;
   8          char i,flag,fuhao;
   9          unchar num,temp;
  10          long  a,b,c;
  11          unchar code table[]={7,8,9,0,//内部运算用
  12                                                   4,5,6,0,
  13                                                   1,2,3,0,
  14                                                   0,0,0,0};
  15          unchar code table1[]={7,8,9,0x2f-0x30,//显示用7,8,9,/
  16                                                    4,5,6,0x2a-0x30,//4,5,6,*
  17                                                    1,2,3,0x2d-0x30,//1,2,3,-
  18                                                     0x01-0x30,0,0x3d-0x30,0x2b-0x30};//ON/C,0,=,+
  19          void delay(unchar z)
  20          {
  21   1              unchar x,y;
  22   1              for(x=z;x>0;x--)
  23   1                      for(y=110;y>0;y--);
  24   1      }
  25          void checkbusy()
  26          {       
  27   1              while(busy==1)//P0^7最高位为1为忙,0为闲
  28   1              {       
  29   2                      P0=0xff;
  30   2                      rs=0;
  31   2                      rw=1;
  32   2                      en=0;//禁止读写
  33   2                      delay(20);              
  34   2                      en=1;           
  35   2              }
  36   1      }
  37          
  38          void write_com(unchar com)
  39          {
  40   1              rs=0;
  41   1              rw=0;
  42   1              en=0;
  43   1              checkbusy();
  44   1              P0=com;
  45   1              delay(5);
  46   1              en=1;
  47   1              delay(5);
  48   1              en=0;
  49   1      }
  50          void write_date(unchar date)
  51          { 
  52   1              rs=1;
  53   1              rw=0;
  54   1              en=0;
  55   1              checkbusy();
C51 COMPILER V7.06   计算器                                                                02/21/2010 21:46:02 PAGE 2   

  56   1              P0=date;
  57   1              delay(5);
  58   1              en=1;
  59   1              delay(5);
  60   1              en=0;   
  61   1      }
  62          void init()
  63          {               
  64   1              write_com(0x38);
  65   1              delay(50);
  66   1              write_com(0x0c);//开显示关光标和闪烁
  67   1              delay(50);
  68   1              write_com(0x06);//地址向后移
  69   1              delay(50);
  70   1              write_com(0x80);//初始地址
  71   1              write_com(0x01);//清屏
  72   1              delay(50);
  73   1              i=0;flag=0;//赋初值
  74   1              fuhao=0;a=0;b=0;c=0;
  75   1              
  76   1              
  77   1      }
  78          void lcd_clean()//清屏
  79          {
  80   1              write_com(0x01);
  81   1              delay(20);
  82   1      }
  83          void keyscan()
  84          {
  85   1              
  86   1              P3=0xfe;
  87   1              temp=P3;
  88   1              temp=temp&0xf0;
  89   1              if(temp!=0xf0)
  90   1                       {              delay(10);
  91   2                                      temp=P3;
  92   2                                      temp=temp&0xf0;
  93   2                                      if(temp!=0xf0)
  94   2                                      {
  95   3                                              temp=P3;
  96   3                                              switch(temp)
  97   3                                                      {
  98   4                                                              case 0xee:num=0; break;
  99   4                                                              case 0xde:num=1; break;
 100   4                                                              case 0xbe:num=2; break;
 101   4                                                              case 0x7e:num=3; break;                                                                                                 
 102   4                                                      }                                                                                               
 103   3                                      }
 104   2                              while(P3!=0xfe);
 105   2                      if(num==0||num==1||num==2)
 106   2                       {           
 107   3                              if(flag==0)
 108   3                                      a=a*10+table[num];//a是在没按符号键之前输入的值
 109   3                              if(flag==1)
 110   3                                      b=b*10+table[num];//b是按符号键后输入的值               
 111   3                       }
 112   2                      if(num==3)//"/"键
 113   2                              {       
 114   3                                      flag=1;
 115   3                                      fuhao=4;//"/"
 116   3                              }
 117   2                      i=table1[num];//显示的值
C51 COMPILER V7.06   计算器                                                                02/21/2010 21:46:02 PAGE 3   

 118   2                      write_date(0x30+i);//十六进制表示的ASC码                
 119   2              }
 120   1                      P3=0xfd;
 121   1                      temp=P3;
 122   1                      temp=temp&0xf0;
 123   1                      if(temp!=0xf0)                          
 124   1                        {             delay(5);
 125   2                                      temp=P3;
 126   2                                      temp=temp&0xf0;
 127   2                                      if(temp!=0xf0)
 128   2                                      {
 129   3                                              temp=P3;
 130   3                                              switch(temp)
 131   3                                                      {
 132   4                                                              case 0xed:num=4; break;
 133   4                                                              case 0xdd:num=5; break;
 134   4                                                              case 0xbd:num=6; break;
 135   4                                                              case 0x7d:num=7; break;                                                                                         
 136   4                                                      }                                                                                                       
 137   3                                      }
 138   2                              while(P3!=0xfd);
 139   2                              if(num==4||num==5||num==6) 
 140   2                                      {
 141   3                                              if(flag==0)
 142   3                                                      a=a*10+table[num];
 143   3                                              else
 144   3                                                      b=b*10+table[num];
 145   3                                      }
 146   2                      if(num==7)//"*"
 147   2                                      {
 148   3                                              flag=1;
 149   3                                              fuhao=3;
 150   3                                      }
 151   2                              i=table1[num];
 152   2                              write_date(0x30+i);                             
 153   2                        }
 154   1                              P3=0xfb;
 155   1                              temp=P3;
 156   1                              temp=temp&0xf0;
 157   1                              if(temp!=0xf0)                          
 158   1                              {       delay(5);
 159   2                                      temp=P3;
 160   2                                      temp=temp&0xf0;
 161   2                                      if(temp!=0xf0)
 162   2                                      {

⌨️ 快捷键说明

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