该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
//----jisuanqi.c-------//
#include
uchar code tableduan[]={ //数码表,方便调用
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x76,0x38,0x3f,0
};
uchar code tablewei[]={
0xFE,0XFD,0XFB,
0XF7,0XEF,0XDF
};
long tempnum,num3; //以此为临时输入数,最终输出数
uchar num,temp,i,keydown,qing,fen,flag1,flag2; //flag1,flag2是两个标记为
uchar list[6]={0}; //好吧,我承认我不太会起名字。
uchar fenjie[6]={0}; //两个数组,一个是记录按键的每一位的数
void init(); //初始化函数//另一个是分解num3的;
void shudefenjie();
void display();
void getkey();
void getnum();
void fuzhi();
void qingchu();
long mi(uchar a);
void panduan();
void main()
{
init();
while(1)
{
display();
getkey();
}
}
///
void init()
{
duan=0; //初始化函数。
wei =0;
num=0;
keydown=0;
flag1=0;
flag2=1;
}
void getnum() /
{ //getnum()函数是getkey()函数的子函数
keydown++; //好吧,不知道这样说是否正确。
if(keydown==7) //我用的是键盘扫描的方法,当一个键被按下时;
keydown=1; //首先,我们记录按键次数,当按键达到7时被置1;
switch(num) //好吧,其实我不知道到底是到7还是到6置零或置一,
{ //但是运行没有出错,就成了。
case 13: //13代表着清零。当十三按下时,清零。
keydown=0; //14代表着=,此时输出结果。
num2=0; //15,12,11,10,依次代表加,减,乘,除。
num3=0; //0,1,2,3,4,5,6,7,8,9,就代表本身。
tempnum=0; //好吧,每个句子都有子函数,我不知道假如不写子函数它们到底多长。
for(i=0;i<6;i++) //当按下=时,
{ //它将首先判断,你最近的一次运算符是什么,比如说加减乘除
list[i]=0; //它能判断,因为,不同的运算符对应不同的标志,我用flag2标志。
} //flag2=1,2,3,4分别对应着加减乘除,假如你按了加又按了减,那么flag2标志最终将是2;
flag1=0; //然后是15,12,11,10,分别对应加减乘除,你会发现,它们同样也会检测最近一次运算符是什么
clear(); //然后运算,但是不同之处在于,它们判断后改变了flag2的值。
break; //之所以把0单独拉出来, 因为我们不会希望用户输入00000吧。
case 14: //每次判断后数的分解(shudefenjie())函数,其实作用是不希望你
panduan(); //按下加减乘除后,屏幕一片空白,就是为了好看, 也是为了让用户
shudefenjie(); //知道,他们输入的数确实是这个。
flag1=1; //你将看到flag1的值被改变。
qingchu(); //在display()函数中,实际上我设置了,输入屏幕,输出屏幕
break; //当然,我也想弄个欢迎屏幕,不过觉得没必要。
case 15: //flag1=0时,你将看到,它执行的时“输入屏幕”所以,事实上,你
panduan(); //每输入一个数(有用的0,1,2,3,4,5,6,7,8,9)将把flag1置0,维持
flag2=1; // 输入屏幕
shudefenjie(); //而加减乘除,及等于等键的按下,将会调入输出屏幕,即flag1=1;