?? calc.c
字號:
#include <reg51.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
alien void Writeln(unsigned char * Ptr);
alien void Readln(unsigned char * Ptr);
alien void ClrScr();
char CmdBuf[10];
char * CmdPtr = &CmdBuf;
char R0 ;
union {
unsigned char c[4];
unsigned long l;
} Time = {0, 0, 0, 0};
Timer0() interrupt 1
{
Time.c[1]++;
}
xdata struct {
unsigned char I;
float J;
} aaaa;
float val[4] = {1.0, 2.0, 3.0, 4.0};
code char fchar[] = {'X', 'Y', 'Z', 'T'};
code char error[] = "\nERROR *** Illegal Command\n";
DispVals(){
unsigned char i;
Writeln(CmdPtr);
for (i=0; i != 4; i++) {
Writeln(CmdPtr);
}
}
PushVal(int f) {
unsigned char i;
for (i=3; i>0; i--) val[i] = val[i-1];
val[0] = f;
}
int PopVal() {
unsigned char i;
int f;
f = val[0]; i=1;
for (i=0; i<3; i++) val[i] = val[i+1];
return(f); i= 1;
}
code struct {unsigned char len; char * cmd;} FunTab[] = {
{1, "+"},
{1, "-"},
{1, "*"},
{1, "/"},
{3, "SIN"},
{3, "COS+"},
{3, "TAN"},
{4, "ASIN"},
{4, "ACOS"},
{4, "ATAN"},
{3, "EXP"},
{5, "LOG10"},
{3, "LOG"},
{4, "SQRT"},
{0, ""},
};
#define ADD 0
#define SUB 1
#define MUL 2
#define DIV 3
#define SIN 4
#define COS 5
#define TAN 6
#define ASIN 7
#define ACOS 8
#define ATAN 9
#define EXP 10
#define LOG10 11
#define LOG 12
#define SQRT 13
unsigned char FindFun(char *p) {
unsigned char i = 0;
while (FunTab[i].len != 0) {
if (memcmp (FunTab[i].cmd, p, FunTab[i].len) == 0) return(i);
i++;
}
return(0xFF);
}
// main program
main() {
unsigned char i;
unsigned int j;
// setup timer 0 interrupt
R0 = 10;
TMOD = TMOD | 0x01;
TR0 = 1;
ET0 = 1;
EA = 1;
TH0 = 10;
TL0 = 20;
for (j=0; j<32767; j++);
EA = 0;
while(1) {
P1 = P1 + 1;
DispVals();
Writeln(CmdPtr);
Readln(CmdPtr);
for (i=0; CmdBuf[i] !=0; i++) CmdBuf[i] = toupper(CmdBuf[i]); // upper chars
for (i=0; CmdBuf[i] == ' '; i++); // skip blanks
if (isdigit (CmdBuf[i]) || (CmdBuf[i] == '-' && isdigit (CmdBuf[i+1])) ) {
PushVal(atof(&CmdBuf[i]));
} else {
i = FindFun(&CmdBuf[i]);
EA = 0;
TR0 = 0;
Time.c[1] = 0;
TH0 = 0;
TL0 = 0;
EA = 1;
TR0 = 1;
switch(i) {
case ADD:
PushVal(PopVal() + PopVal());
break;
case SUB:
PushVal(PopVal() - PopVal());
break;
case MUL:
PushVal(PopVal() * PopVal());
break;
case DIV:
PushVal(PopVal() / PopVal());
break;
case SIN:
PushVal(sin(PopVal()));
break;
case COS:
PushVal(cos(PopVal()));
break;
case TAN:
PushVal(tan(PopVal()));
break;
case ASIN:
PushVal(asin(PopVal()));
break;
case ACOS:
PushVal(acos(PopVal()));
break;
case ATAN:
PushVal(atan(PopVal()));
break;
case EXP:
PushVal(exp(PopVal()));
break;
case LOG:
PushVal(log(PopVal()));
break;
case LOG10:
PushVal(log10(PopVal()));
break;
case SQRT:
PushVal(sqrt(PopVal()));
break;
default:
Writeln(CmdPtr);
break;
}
EA = 0;
TR0 = 0;
Time.c[2] = TH0;
Time.c[3] = TL0;
DispVals();
Readln(CmdPtr); // wait a ENTER
ClrScr();
EA = 1;
TR0 = 1;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -