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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? calc.c

?? 本程序是基于PIC24的Calculator程序,其實現Calculator多個功能,具體自己體會,這程序旨在讓大家熟悉PIC24的編程問題.
?? C
字號:
/******************************************************************************            
************                 LABCENTER ELECTRONICS                  ************            
************           Proteus VSM Sample Design Code               ************            
************                   MPLAB C30 'C' Calculator             ************            
*******************************************************************************/       

#include "p24FJ64GA006.h"
#include "calc.h"
#include "stddef.h"
#include "math.h"
#include "stdlib.h"
#include "string.h"

_CONFIG1(FWDTEN_OFF);
_CONFIG2(FNOSC_FRC&POSCMOD_NONE);

//Variables
static FLOAT lvalue = 0;
static FLOAT rvalue = 0;
static CHAR lastop;


INT main (VOID)
// Initialise our variables and call the 
// Assembly routine to initialise the LCD display. 
 { lcd_init();
   calc_evaluate();
 }   

VOID calc_evaluate()
 { CHAR number[MAX_DISPLAY_CHAR+1], key;
   INT8 pos;
   FLOAT tmp;
   
   // Initialize static values:
   lvalue = 0;
   rvalue = 0;
   lastop = 0;
   
   // Display a Zero to start:
   calc_format(0);
   
   // Clear the buffer before we start.
   pos = 0;

   for (;;)
    { key = calc_getkey();
      if (calc_testkey(key))
       { // Key test positive for digit so we read it into the
         // buffer and then write the buffer to the screen/LCD.
         // Size limit the number of digits - allow for termination
         // and possible negative results.
         if (pos != MAX_DISPLAY_CHAR - 2)
          { number[pos++] = key;
            number[pos] = 0;
            calc_display(number);
          }
       }
      else       
       { // If a number has been entered, then evaulate it.
         // The number is stored to lvalue if we have no current operator,
         // or else rvalue if we do.
         if (pos != 0)
          { tmp = atof(number);
            if (lastop == 0)
               lvalue = tmp;
            else
               rvalue = tmp;
          }

         // Reset the input buffer.
         pos = 0;
       
         // Process the Command - LastOp holds the last actual operator;          
         if (lastop != 0)
            calc_opfunctions(lastop);
         if (key != '=')
            lastop = key;
         else 
            lastop = 0;  
       }
    }
 }

VOID calc_opfunctions (CHAR token)
// Handle the operations. Lvalue holds the result and we test for
// consecutive operator presses.
 { INT8 result = OK;
   switch (token)
    { case '+' : lvalue += rvalue; break;
      case '-' : lvalue -= rvalue; break;
      case '*' : lvalue *= rvalue; break;
      case '/' : 
         if (rvalue != 0) 
            lvalue /= rvalue;
         else
            result = ERROR;
         break;      
     }

   if (result == OK)
      calc_format(lvalue);
   else if (result == ERROR)
    { char buf[] = "*ERROR*";
      calc_display(buf);
    }
 }

 
/************************************************************************
***** Utility Routines *****
***************************/

VOID calc_format (FLOAT f)
// Microchip C18's math libraries are not as accurate as
// they should be, so we have to use a table of divisors.
 { static const float divisors[] = 
    { 100000000,
		10000000,
		1000000,
		100000,
		10000,
		1000,
	   100,
		10,
      1,
		0.1,
		0.01,
		0.001,
		0.0001,
		0.00001,
		0.000001,
		0.0000001,
		0
    };
   CHAR dbuf [MAX_DISPLAY_CHAR+1];
   FLOAT divisor, tmp;
   INT count = 0, digit;
   INT pad=0, p=0;

   // Sort out minus sign:   
   if (f >= 0)
      dbuf[p++] = ' ';
   else
    { dbuf[p++] = '-';
      f = -f;
    }

   if (f >= divisors[0])
      dbuf[p++] = 'E';
   else
      while (p < MAX_DISPLAY_CHAR && ((divisor=divisors[count++]) >= 1 || f > 0.0000001))
       { digit = f/divisor+0.05;
         if (divisor == 0.1)
            dbuf[p++] = '.';
         if (digit != 0 || divisor < 10)
          { dbuf[p++] = digit + '0';
            pad = TRUE;        
          }
         else if (pad)
            dbuf[p++] = '0';
			tmp = digit*divisor;
         f -= tmp;
       }
   dbuf[p] = 0;           
   calc_display(dbuf);
 }

BOOL calc_testkey (CHAR key)
// Test whether the key is a digit, a decimal point or an operator. 
// Return 1 for digit or decimal point, 0 for op.
 { if ((key == '.')|| ((key >= '0') && (key <= '9')))
      return TRUE;
   else
      return FALSE;
 }

/************************************************************************
***** I/O Routines *****
************************/

CHAR calc_getkey (VOID)
// Use the input routine from the *Keypad_Read* assembly file to 
// Scan for a key and return ASCII value of the Key pressed.
{ CHAR mykey;
  while ((mykey = keypadread()) == 0x00)
     /* Poll again */;
  return mykey;
 }

VOID calc_display (CHAR *buf)
// Use the Output and Clearscreen routines from the 
// *LCD_Write* assembly file to output ASCII values to the LCD.
 { INT8 i;
   clearscreen();
   for (i=0 ; buf[i] != 0; i++)
//    { if (buf[calc_testkey(buf[i]) || buf[i] == 0x2D)
       { wrdata(buf[i]); }
//    }   
 }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品一区四区| 亚洲伦理在线精品| 国产精品久久久久久久久图文区| 亚洲视频一区二区在线| 狂野欧美性猛交blacked| 99久久国产综合精品女不卡| 欧美mv日韩mv| 丝袜国产日韩另类美女| 色综合视频一区二区三区高清| 精品国产123| 欧美aⅴ一区二区三区视频| 日本韩国一区二区| 中文字幕成人av| 黄一区二区三区| 日韩美女主播在线视频一区二区三区| 亚洲三级在线看| 成人性色生活片| 国产亚洲一区字幕| 精彩视频一区二区| 精品免费视频.| 热久久一区二区| 91麻豆精品国产自产在线| 一区二区三区在线视频免费| 成人影视亚洲图片在线| 国产日韩成人精品| 国产麻豆成人传媒免费观看| 精品噜噜噜噜久久久久久久久试看 | 国产人成一区二区三区影院| 日韩精品五月天| 欧美精品在线一区二区| 日韩中文字幕不卡| 日韩一区二区三区电影| 蜜臂av日日欢夜夜爽一区| 日韩三级视频在线观看| 老汉av免费一区二区三区 | 久久久久久久久岛国免费| 免费在线观看一区二区三区| 日韩午夜中文字幕| 久久国产精品色婷婷| 波波电影院一区二区三区| 日韩欧美视频一区| 精品国产网站在线观看| 免费欧美在线视频| 亚洲视频一区在线观看| 日韩精品一区二区三区中文精品 | 日韩一区二区三区四区| 99精品桃花视频在线观看| 久久国产精品99久久久久久老狼| 日本伊人午夜精品| 亚洲欧美偷拍另类a∨色屁股| 精品毛片乱码1区2区3区 | 欧美日本视频在线| 成人av综合一区| 极品少妇xxxx精品少妇| 美国av一区二区| 欧美激情一区二区在线| 欧美日韩成人在线| 91久久久免费一区二区| 国产成人亚洲精品狼色在线| 免费av成人在线| 亚洲福中文字幕伊人影院| 中文字幕中文字幕一区二区| www国产精品av| 日韩欧美高清一区| 欧美日韩五月天| 欧美在线观看18| 一本一道久久a久久精品 | 亚洲欧美日韩精品久久久久| 久久久噜噜噜久久中文字幕色伊伊| 在线成人av影院| 欧美日本国产视频| 欧美人妖巨大在线| 欧美日韩免费观看一区三区| 91福利社在线观看| 在线观看视频一区| 91片在线免费观看| 一本大道久久a久久精二百| 亚洲欧美日韩综合aⅴ视频| gogogo免费视频观看亚洲一| 国产精品自拍毛片| 国产一本一道久久香蕉| 黄网站免费久久| 国产盗摄视频一区二区三区| 国产一区二区不卡老阿姨| 国产精品白丝jk黑袜喷水| 欧美午夜电影一区| 欧美无人高清视频在线观看| 91黄视频在线观看| 制服丝袜中文字幕亚洲| 91麻豆精品国产91久久久久| 日韩一区二区三区三四区视频在线观看 | 亚洲超碰97人人做人人爱| 亚洲成人免费av| 日本免费新一区视频| 久久精品国产亚洲aⅴ| 韩国女主播成人在线| 风间由美性色一区二区三区| 成人av综合一区| 欧美性大战久久久久久久蜜臀| 欧美日韩视频在线观看一区二区三区 | 亚洲午夜久久久久久久久久久| 亚洲一区二区三区不卡国产欧美| 亚洲大片在线观看| 久久99久久精品| www.久久久久久久久| 欧美体内she精视频| 欧美成人aa大片| 欧美激情一区二区在线| 亚洲一区国产视频| 精品午夜一区二区三区在线观看| 成人午夜碰碰视频| 欧美人xxxx| 国产亚洲精久久久久久| 亚洲一区二区三区精品在线| 极品少妇一区二区三区精品视频| av电影在线观看一区| 91精品国产一区二区三区香蕉| 久久精品一区四区| 五月综合激情网| 国产激情视频一区二区三区欧美 | 粉嫩av一区二区三区在线播放 | 欧美精品久久99久久在免费线| 日韩精品一区二区三区视频| 中文字幕视频一区二区三区久| 日本一区中文字幕 | 久久99久久精品欧美| 99久久综合99久久综合网站| 88在线观看91蜜桃国自产| 国产欧美日韩精品在线| 天堂精品中文字幕在线| 国产91对白在线观看九色| 欧美日韩午夜在线| 亚洲婷婷在线视频| 国产麻豆精品久久一二三| 欧美日韩国产另类不卡| 中文字幕在线视频一区| 久久国产精品99久久人人澡| 欧美色网一区二区| 一区二区中文视频| 国产酒店精品激情| 91精品国产91热久久久做人人| 亚洲欧美日韩久久| 欧美日韩1区2区| 国产人成一区二区三区影院| 亚洲精品日韩综合观看成人91| 日韩专区在线视频| 高清成人在线观看| 欧美色精品在线视频| 精品1区2区在线观看| 亚洲欧美日韩国产手机在线| 首页国产丝袜综合| 成人免费看片app下载| 欧美唯美清纯偷拍| 国产亚洲欧洲997久久综合| 亚洲激情图片qvod| 毛片av中文字幕一区二区| va亚洲va日韩不卡在线观看| 宅男噜噜噜66一区二区66| 中文字幕中文字幕在线一区 | 国产精品网友自拍| 国产精品国产三级国产aⅴ无密码| 精品国产乱码久久久久久浪潮| 亚洲欧美综合色| 国产成人精品网址| 国产欧美日韩中文久久| 狠狠色丁香婷婷综合| 精品裸体舞一区二区三区| 激情综合色综合久久| 久久综合久久久久88| 国产乱码精品一区二区三| 久久久综合精品| 国产精品1区2区| 国产日韩亚洲欧美综合| 成人app下载| 亚洲色图制服丝袜| 日本丶国产丶欧美色综合| 亚洲一区二区三区在线看| 欧美精品在欧美一区二区少妇| 亚洲mv大片欧洲mv大片精品| 欧美一区二区三区免费在线看| 美腿丝袜亚洲色图| 久久这里只精品最新地址| 免费欧美日韩国产三级电影| 26uuu亚洲| 国产91丝袜在线播放0| 国产精品麻豆99久久久久久| 99久久精品免费| 亚洲午夜久久久久久久久电影网| 欧美日免费三级在线| 蜜桃一区二区三区四区| 国产日产精品1区| 91亚洲男人天堂| 午夜精品爽啪视频| 欧美精品一区二区三区在线| 成人午夜电影小说| 一级特黄大欧美久久久| 91精品国产91久久久久久一区二区| 精品在线免费视频| 国产精品久久久久久久久免费丝袜| 色综合天天综合网天天看片|