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

📄 calculator.lst

📁 我做的畢業設計,用AT89S51 控制LCD1602作為顯示. DS1302時鐘芯片顯示時間,DS18B20測量溫度,還有4X4的鍵盤驅動.實現了一個計算功能.可以用PROTUES 仿真軟件仿真,當時
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.50   CALCULATOR                                                            04/09/2007 18:39:43 PAGE 1   


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

line level    source

   1          /**************************************************************************
   2            
   3                           
   4            
   5             File Name:       calculator.c
   6             Author:          liao xu ming
   7             Created:         2007/3/23
   8             Modified:            2007/4/8    增加到 运算的最大数据为  65535 整形数据 int
   9             Revision:            1.0
  10            
  11          ***************************************************************************/
  12          
  13          #include"clock.h"
  14          #include"calculator.h"
  15          #include"lcd1602.h"
  16          #include"keyboard.h"
  17          #include"main.h"
  18          
  19          #define   operator_Emputy      0xfe        //没有运算符按下的值
  20          /***************************************************************************/
  21          
  22          /**要在LCD上显示的字符******/
  23          unsigned char code  string_calcultor[]="calcultor:";   
  24          unsigned char code  string_error_tomanybit[]="error many bit      "; 
  25          unsigned char code  string_Result[]="The Result:     ";  
  26          unsigned char code  string_clear_line2[]="                ";      
  27          /**************************************************************************/
  28          
  29          unsigned  char operand_A[5]={0,0,0,0,0};   //操作数 A .B
  30          unsigned  char operand_B[5]={0,0,0,0,0};
  31          
  32          unsigned  int  Frist,Second,Result;        //Result=Frist  operator   Second ;
  33          
  34          unsigned  char operator;                   //运算符
  35          
  36          unsigned  char  Bit_Number;                //运算的位计数,判断是否大于5位数,最大运算数为5位数
  37          //extern unsigned char State_ADJ;
  38          extern bit Calculator_To_DS18B20;          //功能切换时的标示位————从计算器功能切换到温度计
  39           bit State_Switch_Flag;                    //功能切换时的标示位    
  40           bit Flag_operand_B_NoEmpty;               //操作数 B 不为空时置1
  41           bit Flag_operand_A_NoEmpty;               //操作数 A 不为空时置1
  42           bit Flag_operator_FristTime;              //运算符第一次按下时置1
  43           bit Flag_Number_FristTime;                //第一个操作数按下时 
  44          
  45          /*****************************************************************************
  46          计算器程序,主要完成以下功能
  47          1 完成 小于 65535数的 加减乘除
  48          
  49          ******************************************************************************/
  50          void Calculator(unsigned char Key_temp)   
  51          {
  52   1      unsigned  char idata Display_Ram[5];       //显示缓冲单元 一共5位
  53   1      unsigned  char data *p_Display_Ram;        //指向显示缓冲单元的指针   
  54   1      unsigned  char  code* p_string_code;       //指向显示字符串代码的指针
  55   1      //unsigned  char Key_temp;
C51 COMPILER V7.50   CALCULATOR                                                            04/09/2007 18:39:43 PAGE 2   

  56   1      if(State_Switch_Flag==0)                   //功能切换时(从时钟切换到计算器时)要处理的一些初始化     
  57   1        {State_ADJ=0;                            //时钟
  58   2         Bell_Flag=0;                            //关打玲
  59   2         Bell=1;                                 //关打玲
  60   2         State_Switch_Flag=1;                    //功能切换成功后的标志位
  61   2         Calculator_To_DS18B20=1;                //计算器切换到温度计
  62   2         LCD_send_command(LCD_CLEAR_SCREEN);     //LCD 清屏
  63   2         p_string_code=string_calcultor;         //第一行显示字符” Caclcultor"  
  64   2         LCD_disp_string_code(0,0,p_string_code);//显示字符串
  65   2         LCD_send_command(LCD_DISPLAY_ON|LCD_CURSOR_OFF);//不显示光标
  66   2         LCD_write_char(15,1,'0');               // clear 清零
  67   2      
  68   2         /*****************************************************************
  69   2          clear all flag
  70   2         *****************************************************************/
  71   2         Clear_All_Flag_Init();
  72   2       /*  operator=operator_Emputy;                //运算符初始化
  73   2         Flag_operand_B_NoEmpty=0;                //操作数B 为空
  74   2         Flag_operand_A_NoEmpty=0;                //操作数A 为空
  75   2         Flag_operator_FristTime=0;               //无运算符按下
  76   2         Flag_Number_FristTime=0;                 //无操作数
  77   2         operand_A[0]=0;operand_A[1]=0;operand_A[2]=0;operand_A[3]=0;operand_A[4]=0;
  78   2         operand_B[0]=0;operand_B[1]=0;operand_B[2]=0;operand_B[3]=0;operand_B[4]=0;
  79   2         Bit_Number=0;                            //位计算清零*/
  80   2         EA=0;                                    //关中断 
  81   2         } 
  82   1      
  83   1      /************************/
  84   1      //p_string_code=string_calcultor;
  85   1      //LCD_disp_string_code(0,0,p_string_code);
  86   1      /************************/
  87   1      //Key_temp=Keyboard();
  88   1      if((Key_temp!=KEY_NOTHING)&&(Key_temp!=KEY_FUNCTION))
  89   1      {                                           //如果是没有按键按下,或者是功能键按下 退出程序不执行
  90   2      switch(Key_temp)                            //根据按键选择相应的操作
  91   2      {
  92   3      case EQUAL:                                 //如果是等于号按下
  93   3           if(Flag_operand_B_NoEmpty==1)           
  94   3                 {
  95   4               switch(operator)                   //根据运算符选择相应的操作
  96   4                {
  97   5                          case  ADD: Result=Frist+Second;break;
  98   5                                                  //加
  99   5                              case  DEC: if(Frist>=Second)    //减 
 100   5                                                                     {
 101   6                                                                                  Result=Frist-Second;
 102   6                                                                                 }
 103   5                                                                         else
 104   5                                                                             {
 105   6                                                                                  LCD_write_char(10,1,'-');
 106   6                                                                                  Result=Second-Frist;
 107   6                                                                                 }
 108   5                                                      break;
 109   5                              case  MUL: Result=Frist*Second;break;
 110   5                                                  //乘
 111   5                              case  DIV: Result=Frist/Second;break;
 112   5                                                  //除 
 113   5      
 114   5                  default:break;
 115   5                        }
 116   4                        //clear all flag
 117   4                        Clear_All_Flag_Init();
C51 COMPILER V7.50   CALCULATOR                                                            04/09/2007 18:39:43 PAGE 3   

 118   4                        /*operator=operator_Emputy;         //去处符初始化
 119   4                        Flag_operand_B_NoEmpty=0;         //操作数B 为空
 120   4                        Flag_operand_A_NoEmpty=0;         //操作数A 为空
 121   4                Flag_operator_FristTime=0;        //无运算符按下
 122   4                        Flag_Number_FristTime=0;          //无操作数
 123   4                    operand_A[0]=0;operand_A[1]=0;operand_A[2]=0;operand_A[3]=0;operand_A[4]=0;
 124   4                operand_B[0]=0;operand_B[1]=0;operand_B[2]=0;operand_B[3]=0;operand_B[4]=0;
 125   4                        Bit_Number=0;                     //位计算清零*/
 126   4                        Frist=Result;                     //结果
 127   4                        //display();  code 
 128   4                         if(Frist>=65535)
 129   4                                          {
 130   5                           The_Number_Too_Large();
 131   5                                              }
 132   4                              else
 133   4                               {
 134   5                         if(Frist>0)                      //分解 把运算结果分解,然后送LCD显示
 135   5                         { Display_Ram[4]=(Frist%10)+0x30;
 136   6                                                   if(Frist>=10)      
 137   6                                                         {
 138   7                                                           Display_Ram[3]=(Frist%100)/10+0x30;
 139   7                                                               if(Frist>=100)
 140   7                                                                {
 141   8                                                                  Display_Ram[2]=(Frist%1000)/100+0x30;
 142   8                                                                      if(Frist>=1000)
 143   8                                                                        {
 144   9                                                                          Display_Ram[1]=(Frist%10000)/1000+0x30;
 145   9                                                                              if(Frist>=10000)
 146   9                                                                                {
 147  10                                               Display_Ram[0]=(Frist/10000)+0x30;
 148  10                                                                                }
 149   9                                                                              else
 150   9                                                                                {
 151  10                                                                                 Display_Ram[0]=' ';
 152  10                                                                                }
 153   9                                                                        }
 154   8                                                                       else
 155   8                                                                        {
 156   9                                                                          Display_Ram[0]=' ';Display_Ram[1]=' ';
 157   9                                                                        }
 158   8                                                                }
 159   7                                                                else
 160   7                                                                {
 161   8                                      Display_Ram[0]=' ';Display_Ram[1]=' ';Display_Ram[2]=' ';
 162   8                                                                }
 163   7                                                          }
 164   6                                                        else
 165   6                                                         {
 166   7                                                           Display_Ram[0]=' ';Display_Ram[1]=' ';Display_Ram[2]=' ';Display_Ram[3]=' ';
 167   7                                                         }
 168   6                                                 }
 169   5                                 else{
 170   6                                               Display_Ram[0]=' ';Display_Ram[1]=' ';Display_Ram[2]=' ';Display_Ram[3]=' ';Display_Ram[4]='0
             -';
 171   6      
 172   6                                             }
 173   5                        p_string_code=string_Result;      //显示字符串 :The Result: "       
 174   5                        LCD_disp_string_code(0,1,p_string_code);
 175   5                p_Display_Ram=Display_Ram;        //指向显示缓冲单元
 176   5                        LCD_disp_string(11,1,p_Display_Ram);

⌨️ 快捷键说明

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