亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? calc.lst

?? 它是基于51單片機(jī)的多功能計(jì)算器設(shè)計(jì)
?? LST
字號(hào):
C51 COMPILER V6.02  CALC                                                                   11/03/2000 12:22:31 PAGE 1   


C51 COMPILER V6.02, COMPILATION OF MODULE CALC
OBJECT MODULE PLACED IN .\calc.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\calc.c DEBUG OBJECTEXTEND

stmt level    source

   1          
   2          /*******************************************************************************
   3          ************                 LABCENTER ELECTRONICS                  ************                          
             -    
   4          ************		     Proteus VSM Sample Design Code             ************		 	
   5          ************	       Integer Calculator ( 2K Code Limit)	        ************
   6          *******************************************************************************/
   7          
   8          #include <intrins.h>
   9          #include <reg51.h>
  10          #include "calc.h"
  11          
  12          //Variables
  13          static  data LONG lvalue;
  14          static  data LONG rvalue;
  15          static  data CHAR currtoken;
  16          static  data CHAR lasttoken;
  17          static  data CHAR lastpress;
  18          static  xdata CHAR outputbuffer[MAX_DISPLAY_CHAR];
  19          
  20          VOID main (VOID)
  21          //Initialise our variables and call the 
  22          //Assembly routine to initialise the LCD display. 
  23           { lvalue    = 0;
  24   1         rvalue    = 0;
  25   1         currtoken = '=';
  26   1         lasttoken = '0';
  27   1         initialise();  // Initialize the LCD
  28   1         calc_output(OK);
  29   1         calc_evaluate();
  30   1       }   
  31          
  32          VOID calc_evaluate()
  33           { CHAR data key;
  34   1         INT  data i;
  35   1         CHAR xdata number[MAX_DISPLAY_CHAR];
  36   1         CHAR xdata *bufferptr;
  37   1         
  38   1         // Clear the buffer before we start.
  39   1         for (i = 0; i <= MAX_DISPLAY_CHAR; i++)
  40   1            { number[i] = ' ';
  41   2      	  }
  42   1         bufferptr = number;  
  43   1         
  44   1         for (;;)
  45   1           { key = calc_getkey();
  46   2      	   if (calc_testkey(key))
  47   2             // Key test positive for digit so we read it into the
  48   2             // buffer and then write the buffer to the screen/LCD.
  49   2      	   // Size limit the number of digits - allow for termination
  50   2      	   // and possible negative results.
  51   2                { if (bufferptr != &number[MAX_DISPLAY_CHAR - 2])
  52   3                     { *bufferptr = key;
  53   4                       calc_display(number);
  54   4                       bufferptr++;
C51 COMPILER V6.02  CALC                                                                   11/03/2000 12:22:31 PAGE 2   

  55   4                     }
  56   3                }
  57   2      
  58   2             else
  59   2             // Key is an operator so pass it to the function handlers.
  60   2             // If we are just after startup or cancel then assign to lvalue
  61   2             // otherwise assign to rvalue.
  62   2                { 
  63   3      		    //Assign the value.
  64   3                  if (lasttoken == '0')
  65   3                     { lvalue = calc_asciidec (number);}
  66   3                  else
  67   3                     { rvalue = calc_asciidec (number);}
  68   3      
  69   3                  //Clear the number buffer.
  70   3                  bufferptr = number;
  71   3                  for (i = 0;i <= MAX_DISPLAY_CHAR; i++)
  72   3                     { number[i] = ' '; }
  73   3      		 
  74   3                  //Process the Operator.
  75   3                  currtoken = key;
  76   3      			if (currtoken == 'C') 
  77   3      			   { calc_opfunctions(currtoken); }
  78   3      		 	else
  79   3      			   { calc_opfunctions(lasttoken); }
  80   3      		
  81   3       		    // Clear the outputbuffer for reuse on next operation.
  82   3                  for (i = 0;i <= MAX_DISPLAY_CHAR;i++)
  83   3                     { outputbuffer[i] = ' ';}
  84   3      		      
  85   3            	     bufferptr = number;
  86   3      			// Handle the equals operation here for brevity.
  87   3      			// All we need do is preserve the previous operator in
  88   3      			// lasttoken.
  89   3      			if (currtoken != 0x3D) lasttoken = currtoken;
  90   3                  
  91   3         		  }
  92   2             lastpress = key;
  93   2           }
  94   1       }
  95          
  96          VOID calc_opfunctions (CHAR token)
  97          // Handle the operations. Lvalue holds the result and we test for
  98          // consecutive operator presses.
  99           { CHAR data result;
 100   1         switch(token)
 101   1              // Add.
 102   1           {  case '+' : if ((currtoken == '=' ) || ((lastpress >= 0x30) && (lastpress <=0x39)))
 103   2            			      { lvalue += rvalue;
 104   3              			    result = calc_chkerror(lvalue);
 105   3      					  }
 106   2         				   else
 107   2            				  { result =  SLEEP; }		break;
 108   2              // Subtract.
 109   2      		case '-' : if ((currtoken == '=' ) || ((lastpress >= 0x30) && (lastpress <=0x39)))
 110   2                            { lvalue -= rvalue;
 111   3                              result = calc_chkerror(lvalue);		
 112   3      					  }
 113   2                         else
 114   2                            { result = SLEEP;}		break;
 115   2              // Multiply.
 116   2      		case '*' : if ((currtoken == '=' ) || ((lastpress >= 0x30) && (lastpress <=0x39)))
C51 COMPILER V6.02  CALC                                                                   11/03/2000 12:22:31 PAGE 3   

 117   2                            { lvalue *= rvalue;
 118   3                              result =  calc_chkerror(lvalue);
 119   3                            }
 120   2                         else
 121   2                            { result =  SLEEP;}		break;
 122   2      		// Divide.			  
 123   2      		case '/' : if ((currtoken == '=' ) || ((lastpress >= 0x30) && (lastpress <=0x39)))
 124   2                            { if (rvalue)
 125   3                                 { lvalue /= rvalue;
 126   4                                   result = calc_chkerror(lvalue);
 127   4                                 }
 128   3                              else
 129   3                                 { result = ERROR;}				 
 130   3                            }
 131   2                         else
 132   2                            { result = SLEEP;}		break;
 133   2      		// Cancel.
 134   2       		case 'C' : lvalue = 0;
 135   2                         rvalue = 0;
 136   2                         currtoken = '0';
 137   2                         lasttoken = '0';
 138   2                         result = OK;				  	break;
 139   2      	
 140   2      		default :  result = SLEEP;  
 141   2      
 142   2            }
 143   1         calc_output(result); 
 144   1       }
 145          
 146           
 147          /************************************************************************
 148          ***** Utility Routines *****
 149          ***************************/
 150          
 151          INT calc_chkerror (LONG num)
 152          // Check upper and lower bounds for the display.
 153          // i.e. 99999999 and -99999999.
 154           { if ((num >= -9999999) && (num <= 9999999))
 155   1            return OK;
 156   1         else
 157   1            return ERROR;
 158   1       }
 159          
 160          
 161          VOID calc_output (INT status)
 162          // Output according to the status of the operation.
 163          // *Sleep* is used for the first op press after a full cancel
 164          // or on startup.
 165            
 166           { switch (status)
 167   1            { case OK      : calc_display(calc_decascii(lvalue));    break;
 168   2              case SLEEP   :                                         break;
 169   2      		case ERROR   : calc_display("Exception ");			   break;	
 170   2              default      : calc_display("Exception ");	    	   break;
 171   2            }
 172   1       }
 173          
 174          
 175          LONG calc_asciidec (CHAR *buffer)
 176          // Convert the ASCII string into the floating point number.
 177           { LONG data value;
 178   1         LONG data digit;
C51 COMPILER V6.02  CALC                                                                   11/03/2000 12:22:31 PAGE 4   

 179   1         value = 0;
 180   1         while (*buffer != ' ')
 181   1            { digit = *buffer - 48;
 182   2      	    value = value*10 + digit;
 183   2              buffer++;
 184   2      	  }
 185   1         return value;
 186   1       }
 187          
 188          CHAR *calc_decascii (LONG num)
 189          // A rather messy function to convert a floating
 190          // point number into an ASCII string.
 191           { LONG data temp = num;
 192   1         CHAR xdata *arrayptr = &outputbuffer[MAX_DISPLAY_CHAR];
 193   1         LONG data divisor = 10;
 194   1         LONG data result;
 195   1         CHAR data remainder,asciival;
 196   1         INT  data i;
 197   1         
 198   1         // If the result of the calculation is zero 
 199   1         // insert a zero in the buffer and finish.
 200   1         if (!temp)
 201   1            { *arrayptr = 48;
 202   2      	    goto done;
 203   2      	  }
 204   1         // Handle Negative Numbers.
 205   1         if (temp < 0)
 206   1            { outputbuffer[0] = '-';
 207   2      	    temp -= 2*temp;
 208   2      	  }
 209   1      
 210   1         for (i=0 ; i < sizeof(outputbuffer) ; i++)
 211   1            { remainder = temp % divisor;   
 212   2              result = temp / divisor;
 213   2      	    
 214   2      		// If we run off the end of the number insert a space into
 215   2      	    // the buffer.
 216   2      	    if ((!remainder) && (!result))
 217   2       	       { *arrayptr = ' ';}
 218   2      	  
 219   2      	    // We're in business - store the digit offsetting
 220   2      	    // by 48 decimal to account for the ascii value.
 221   2      	    else
 222   2      	       { asciival = remainder + 48;
 223   3      		     *arrayptr = asciival;
 224   3      		   } 
 225   2       	  
 226   2      		temp /= 10;
 227   2      	    // Save a place for a negative sign.
 228   2      	    if (arrayptr != &outputbuffer[1]) arrayptr--;
 229   2      	   }
 230   1         done: return outputbuffer;
 231   1       }
 232          
 233          
 234          CHAR calc_testkey (CHAR key)
 235          // Test whether the key is a digit or an operator. Return 1 for digit, 0 for op.
 236           { if ((key >= 0x30) && (key <= 0x39))
 237   1            { return 1;}
 238   1         else
 239   1            { return 0;}
 240   1       }
C51 COMPILER V6.02  CALC                                                                   11/03/2000 12:22:31 PAGE 5   

 241          
 242          /************************************************************************
 243          ***** I/O Routines *****
 244          ***********************/
 245          
 246          CHAR calc_getkey (VOID)
 247          // Use the input routine from the *Keypad_Read* assembly file to 
 248          // Scan for a key and return ASCII value of the Key pressed.
 249          { CHAR data mykey;
 250   1        do mykey = input();
 251   1           while (mykey == 0);
 252   1        return mykey;
 253   1       }
 254          
 255          VOID calc_display (CHAR buf[MAX_DISPLAY_CHAR])
 256          // Use the Output and Clearscreen routines from the 
 257          // *LCD_Write* assembly file to output ASCII values to the LCD.
 258           { INT data  i = 0;
 259   1         clearscreen();
 260   1         for (i ; i <= MAX_DISPLAY_CHAR ; i++)
 261   1            { if (buf[i] != ' ')
 262   2      	     { output(buf[i]); }
 263   2      	  }	
 264   1       }
 265          
 266          
 267          
 268          
 269          
 270          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1176    ----
   CONSTANT SIZE    =     11    ----
   XDATA SIZE       =      9       9
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     11      39
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
884aa四虎影成人精品一区| 日韩午夜av电影| 日韩专区中文字幕一区二区| 久久众筹精品私拍模特| 欧美在线看片a免费观看| 国产精品一区二区三区四区| 一区二区三区在线观看动漫| 久久久久9999亚洲精品| 欧美美女视频在线观看| 91网站黄www| 国产一区二区精品在线观看| 视频一区中文字幕国产| 亚洲精品v日韩精品| 久久久国产精华| 欧美成人午夜电影| 欧美日韩成人综合在线一区二区| av中文字幕一区| 国产福利一区二区三区视频| 蜜桃精品在线观看| 日韩高清一区二区| 亚洲午夜在线视频| 亚洲色大成网站www久久九九| 久久精品视频免费| 精品88久久久久88久久久| 欧美疯狂做受xxxx富婆| 欧美色图天堂网| 91精品福利视频| 色综合色狠狠天天综合色| 国产黄色91视频| 国产一区二区三区在线观看免费视频| 丝袜亚洲另类丝袜在线| 亚洲午夜羞羞片| 亚洲一二三专区| 亚洲午夜私人影院| 亚洲综合色噜噜狠狠| 一区二区三区四区不卡在线 | 国产精品进线69影院| 亚洲精品一线二线三线无人区| 91精品中文字幕一区二区三区| 欧美视频一区在线| 欧美午夜一区二区三区| 在线日韩一区二区| 欧洲激情一区二区| 欧美色图在线观看| 欧美日韩久久久久久| 欧美日韩国产一级片| 欧美人妖巨大在线| 欧美一区二区三区视频在线| 欧美精品少妇一区二区三区| 91精品国产欧美一区二区18| 91精品国产综合久久精品性色| 欧美一区二区成人| 久久影院午夜片一区| 国产午夜一区二区三区| 国产精品网站在线| 亚洲女爱视频在线| 亚洲一区在线观看免费观看电影高清 | 蜜桃传媒麻豆第一区在线观看| 蜜桃久久精品一区二区| 国产麻豆视频精品| 91天堂素人约啪| 欧美日韩成人在线一区| 欧美大片免费久久精品三p| 久久久久久久久久看片| 国产精品三级av| 亚洲一区二区偷拍精品| 免费不卡在线视频| 国产盗摄女厕一区二区三区| 91丝袜美腿高跟国产极品老师 | 国产精品久久久久影视| 亚洲一区在线播放| 蜜臀av性久久久久蜜臀aⅴ流畅 | 性欧美大战久久久久久久久| 日精品一区二区三区| 国产成人在线免费| 在线视频你懂得一区二区三区| 欧美日韩和欧美的一区二区| 久久亚洲精品小早川怜子| 亚洲图片你懂的| 喷水一区二区三区| 日韩精品一区二区三区老鸭窝| 久久美女高清视频| 亚洲国产精品久久艾草纯爱| 国产一区二区三区国产| 91麻豆免费看片| 欧美精品一区二区三区蜜臀| 一色桃子久久精品亚洲| 日本女优在线视频一区二区| 成人动漫精品一区二区| 欧美人与z0zoxxxx视频| 国产视频在线观看一区二区三区 | 欧美日韩精品欧美日韩精品一综合| 26uuu欧美| 亚洲不卡av一区二区三区| 成人自拍视频在线观看| 91精品国产色综合久久| 亚洲免费观看高清| 国产精品一区二区视频| 欧美一区二区日韩| 一区二区在线观看av| 国产精品456露脸| 制服丝袜国产精品| 一区二区三区中文字幕电影| 国产精品一二三区| 日韩一区二区三区观看| 一区二区三区中文在线| 成人一区二区三区视频| 日韩视频在线观看一区二区| 亚洲自拍偷拍九九九| 成人免费高清视频在线观看| 日韩精品一区二区三区在线观看| 亚洲激情成人在线| 99国产精品国产精品久久| 久久久亚洲综合| 久99久精品视频免费观看| 欧美人狂配大交3d怪物一区| 亚洲精品免费在线| heyzo一本久久综合| 国产日产欧美精品一区二区三区| 久久精品理论片| 亚洲综合久久久久| www.久久久久久久久| 久久精品欧美一区二区三区不卡 | 一卡二卡三卡日韩欧美| 成人激情小说乱人伦| 久久精品一二三| 国内欧美视频一区二区| 日韩欧美在线影院| 天堂蜜桃91精品| 欧美日韩激情一区二区三区| 亚洲一区二区三区四区中文字幕| 91在线一区二区| 亚洲欧美一区二区三区极速播放| 成人免费高清视频| 国产精品卡一卡二| 99国产精品99久久久久久| 中文字幕亚洲区| 99re这里只有精品6| 亚洲日穴在线视频| 日本高清不卡aⅴ免费网站| 亚洲美女免费视频| 欧美丝袜自拍制服另类| 午夜精品一区二区三区免费视频| 欧美日韩和欧美的一区二区| 天天色综合成人网| 日韩精品自拍偷拍| 国产精品亚洲第一区在线暖暖韩国 | 亚洲人被黑人高潮完整版| 色婷婷精品大在线视频| 夜夜操天天操亚洲| 91精品国产欧美一区二区成人| 蜜臀久久久久久久| 亚洲精品在线免费播放| 大陆成人av片| 亚洲精品第一国产综合野| 欧美日韩一级片在线观看| 蜜臀av一区二区在线观看| 久久久久久久久久久久久久久99 | 欧美亚洲国产一区二区三区| 亚洲蜜臀av乱码久久精品| 欧美猛男gaygay网站| 欧美aⅴ一区二区三区视频| 久久婷婷国产综合精品青草| 成人网页在线观看| 亚洲午夜一区二区| 精品日韩在线观看| www.亚洲国产| 日韩成人免费在线| 国产日产欧美一区二区视频| 91性感美女视频| 日韩高清一级片| 亚洲国产精品ⅴa在线观看| 色中色一区二区| 麻豆精品国产传媒mv男同| 欧美精彩视频一区二区三区| 欧美艳星brazzers| 国产精品影视天天线| 亚洲精品视频在线看| 日韩精品一区二区三区中文不卡 | 欧美一区二区视频观看视频| 国产1区2区3区精品美女| 亚洲成a天堂v人片| 亚洲精品一区二区三区蜜桃下载| 91网站在线播放| 国内精品国产成人国产三级粉色 | 亚洲妇熟xx妇色黄| 欧美国产综合色视频| 欧美日韩精品欧美日韩精品一| 国产成人精品在线看| 午夜一区二区三区视频| 久久久www成人免费毛片麻豆| 欧美亚洲国产怡红院影院| 国产成人99久久亚洲综合精品| 亚洲成av人影院| 中文字幕一区免费在线观看| 欧美一二三区在线观看| 色哦色哦哦色天天综合| 国产成人鲁色资源国产91色综| 三级欧美在线一区| 美国十次了思思久久精品导航|