当前位置:文档之家› 简单计算器C语言程序

简单计算器C语言程序

#include
#include
#define uchar unsigned char
#define uint unsigned int

sbit duan=P2^6;
sbit wela=P2^7;
unsigned long qian,hou;

uchar code tableduan[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0x00};//从0~9;
//uchar code tablewei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//从左向右依次点亮;
uchar key,num,wei,qingling,dengyu,jia,jian,cheng,chu;
//uchar code shuzhi[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};矩阵按键【16个】;
uchar a0=10,b0=10,c0=10,d0=10,e0=10,f0=10,g0=10,h0=10;//定义8个变量,以便储存每个数码管要显示的段码
uchar a,b,c,d,e,f,g,h;

void delay(uint z)
{
uint x,y;
for(x=10;x>0;x--)
for(y=z;y>0;y--);

}
void display(uchar a0,uchar b0,uchar c0,uchar d0,uchar e0,uchar f0,uchar g0,uchar h0)
{
P0=tableduan[a0];
duan=1; duan=0;
P0=0X00;
P0=0xfe;
wela=1; wela=0;
delay(20);

P0=tableduan[b0];
duan=1; duan=0;
P0=0X00;
P0=0xfd;
wela=1; wela=0;
delay(20);

P0=tableduan[c0];
duan=1; duan=0;
P0=0X00;
P0=0xfb;
wela=1; wela=0;
delay(20);

P0=tableduan[d0];
duan=1; duan=0;
P0=0X00;
P0=0xf7;
wela=1; wela=0;
delay(20);

P0=tableduan[e0];
duan=1; duan=0;
P0=0X00;
P0=0xef;
wela=1; wela=0;
delay(20);

P0=tableduan[f0];
duan=1; duan=0;
P0=0X00;
P0=0xdf;
wela=1; wela=0;
delay(20);

P0=tableduan[g0];
duan=1; duan=0;
P0=0X00;
P0=0xbf;
wela=1; wela=0;
delay(20);

P0=tableduan[h0];
duan=1; duan=0;
P0=0X00;
P0=0x7f;
wela=1; wela=0;
delay(20);
}

void keyscanf()
{
P3=0xfe;//把矩阵键盘的第一行P3.0置零;
key=P3;//把P3的值赋给key【此时的key是有按键按下的值】;
key=key&0xf0;//有按键按下时,key&0xf0所得的结果并不是0xf0;
if(key!=0xf0)
{
_nop_();//消抖;
if(key!=0xf0)
{
key=P3;//再把有按键按下时的P3值赋值给key;
switch(key)
{
case 0xee:num=0;wei++;break;
case 0xde:num=1;wei++;break;
case 0xbe:num=2;wei++;break;
case 0x7e:num=3;wei++;break;
}
while(key!=0xf0) //松手检测,当有按键按下的时候,while()括号里为真,就执行while的循环内容;
{
key=P3;
key=key&0xf0;
}
}
}

P3=0xfd;//把矩阵键盘的第二行P3.1置零;
key=P3;//把P3的值赋给key【此时的key是有按键按下的值】;
key=key&0xf0;//有按键按下时,key&0xf0所得的结果并不是0xf0;
if(key!=0xf0)
{
_nop_();//消抖;
if(key!=0xf0)
{
key=P3;//再把有按键按下时的P3值赋值给key;
switch(key)
{
case 0xed:num=4;wei++;break;
case 0xdd:num=5;wei++;break;
case 0xbd:num=6;wei++;break;
case 0x7d:num=7;wei++;break;
}
while(key!=0xf0) //松手检测,当有按键按下的时候,while()括号里为真,就执行while的循环内容;
{
key=P3;
key=key&0xf0;
}
}
}

P3=0xfb;//把矩阵键盘的第三行P3.2置零;
key=P3;//把P3的值赋给key【此时的key是有按键按下的值】;
key=key&0xf0;//有按键按下时,key&0xf0所得的结果并不是0xf0;
if(key!=0xf0)
{
_nop_();//消抖;
if(key!=0xf0)
{
key=P3;//再把有按键按下时的P3值赋值给key;
switch(key)
{
case 0xeb:num=8;wei++;break;
case 0xdb:num=9;wei++;break;
case 0xbb:qingling=1;break;
case 0x7b:dengyu=1;break;
}
while(key!=0xf0) //松手检测,当有按键按下的时候,while()括号里为真,就执行while的循环内容;
{
key=P3;
key=key&0xf0;
}
}
}
P3=0xf7;//把矩阵键盘的第四行P3.3置零;
key=P3;//把P3的值赋给key【此时的key是有按键按下的值】;
key=key&0xf0;//有按键按下时,key&0xf0所得的结果并不是0xf0;
if(key!=0xf0)
{
_nop_();//消抖;
if(key!=0xf0)
{
key=P3;//再把有按键按下时的P3值赋值给key;
switch(key)
{
case 0xe7:jia=1;break;
case 0xd7:jian=1;break;
case 0xb7:cheng=1;break;
case 0x77:chu=1;break;
}
while(key!=0xf0) //松手检测,当有按键按下的时候,while()括号里为真,就执行while的循环内容;
{
key=P3;
key=key&0xf0;
}
}
}
}
void display1()
{
switch(wei)
{
case 1:a0=num;b0=c0=d0=e0=f0=g0=h0=10;break;
case 2:b0=num;c0=d0=e0=f0=g0=h0=10;break;
case 3:c0=num;d0=e0=f0=g0=h0=10;break;
case 4:d0=num;e0=f0=g0=h0=10;break;
case 5:e0=num;f0=g0=h0=10;break;
case 6:f0=num;g0=h0=10;break;
case 7:g0=num;h0=10;break;
case 8:h0=num;break;
}
display(a0,b0,c0,d0,e0,f0,g0,h0);
if(a0!=10) a=a0;
if(b0!=10) b=b0;
if(c0!=10) c=c0;
if(d0!=10) d=d0;
if(e0!=10) e=e0;
if(f0!=10) f=f0;
if(g0!=10) g=g0;
if(h0!=10) h=h0;
}
void main()
{
uchar jia0,jian0,cheng0,chu0;
while(1)
{
keyscanf();
if((jia|jian|cheng|chu|dengyu)==0)
{
display1();
}
else
{
if((jia|jian|cheng|chu)==1)
{
if(jia==1)
{
jia=0;jia0=1;
}
if(jian==1)
{
jian=0;jian0=1;
}
if(cheng==1)
{
cheng=0; cheng0=1;
}
if(chu==1)
{
chu=0;chu0=1;
}
switch(wei)
{
case 1:qian=a/**10000000+b*1000000+c*100000+d*10000+e*1000+f*100+g*10+h*/;break;
case 2:qian=a*10+b/**1000000+c*100000+d*10000+e*1000+f*100+g*10+h*/;break;
case 3:qian=a*100+b*10+c/*c*100000+d*10000+e*1000+f*100+g*10+h*/;break;
case 4:qian=a*1000+b*100+c*10+d/*d*10000+e*1000+f*100+g*10+h*/;break;
case 5:qian=a*10000+b*1000+c*100+d*10+e/*e*1000+f*100+g*10+h*/;break;
case 6:qian=a*100000+b*10000+c*1000+d*100+e*10+f/*f*100+g*10+h*/;break;
case 7:qian=a*1000000+b*100000+c*10000+d*1000+e*100+f*10+g/*g*10+h*/;break;
case 8:qian=a*10000000+b*1000000+c*100000+d*10000+e*1000+f*100+g*10+h;break;
}
wei=0;
a=0;b=0;c=0;d=0;e=0;f=0;g=0;h=0;
display(a0,b0,c0,d0,e0

,f0,g0,h0);
}
if(dengyu==1)
{
dengyu=0;
switch(wei)
{
case 1:hou=a/**10000000+b*1000000+c*100000+d*10000+e*1000+f*100+g*10+h*/;break;
case 2:hou=a*10+b/**1000000+c*100000+d*10000+e*1000+f*100+g*10+h*/;break;
case 3:hou=a*100+b*10+c/*c*100000+d*10000+e*1000+f*100+g*10+h*/;break;
case 4:hou=a*1000+b*100+c*10+d/*d*10000+e*1000+f*100+g*10+h*/;break;
case 5:hou=a*10000+b*1000+c*100+d*10+e/*e*1000+f*100+g*10+h*/;break;
case 6:hou=a*100000+b*10000+c*1000+d*100+e*10+f/*f*100+g*10+h*/;break;
case 7:hou=a*1000000+b*100000+c*10000+d*1000+e*100+f*10+g/*g*10+h*/;break;
case 8:hou=a*10000000+b*1000000+c*100000+d*10000+e*1000+f*100+g*10+h;break;
}
wei=0;
a=0;b=0;c=0;d=0;e=0;f=0;g=0;h=0;
if(jia0)
{
jia0=0;
hou=qian+hou;
}
if(jian0)
{
jian0=0;hou=qian-hou;
}
if(cheng0)
{
cheng0=0;hou=qian*hou;
}
if(chu0)
{
chu0=0;hou=qian/hou;
}
if(hou<10)
{
a0=hou;b0=10;c0=10;d0=10;e0=10;f0=10;g0=10;h0=10;
}
else
{
if(hou<100)
{
a0=hou/10;b0=hou%10;
}
else
{
if(hou<1000)
{
a0=hou/100;b0=hou%100/10;c0=hou%10;
}
else
{
if(hou<10000)
{
a0=hou/1000;b0=hou%1000/100;c0=hou%100/10;d0=hou%10;
}
else
{
if(hou<100000)
{
a0=hou/10000;b0=hou%10000/1000;c0=hou%1000/100;d0=hou%100/10;e0=hou%10;
}
else
{
if(hou<1000000)
{
a0=hou/100000;b0=hou%100000/10000;c0=hou%10000/1000;d0=hou%1000/100;e0=hou%100/10;f0=hou%10;
}
else
{
if(hou<10000000)
{
a0=hou/1000000;b0=hou%1000000/100000;c0=hou%100000/10000;d0=hou%10000/1000;e0=hou%1000/100;f0=hou%100/10;g0=hou%10;
}
}
}
}
}
}
}
display(a0,b0,c0,d0,e0,f0,g0,h0);
}
}
}
}

相关主题
文本预览
相关文档 最新文档