📄 calculator.c
字号:
/***********计算器************/
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
/*****???????*****/
uchar code wordcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x71};
uchar abs[3][6];
uchar art[6];
uchar brt[6];
uchar fullflag,afullflag,bfullflag; //存入数组数的个数
uchar abs; //当前操作数标志(0被加数1加数2和)
uchar opreat; //加减标志 1加 2减
uchar key;
uchar point; //小数点的位置
uchar
float af,bf,cf; //单片机进行数组操作的浮点数
/******延时函数传入参数要延时毫秒数******/
void delay(uchar xms)
{
uint i,j;
for(i=xms*10;i>0;i--)
for(j=20;j>0;j--);
}
/********键盘扫描返回键值(0-15)*******/
/********若没键按下返回-5通过判断返回****/
/********是否大于0判断是否有键按下*******/
char keyscan()
{
uchar line,row,P2temp;
P2=0xf0;
P2temp=P2;
if(P2temp!=0xf0)
{
delay(10);
if(P2temp!=0xf0)
{
switch(P2temp)
{
case 0x70:row=1;break;
case 0xb0:row=2;break;
case 0xd0:row=3;break;
case 0xe0:row=4;break;
}
}
P2=0x0f;
P2temp=P2;
switch(P2temp)
{
case 0x07:line=1;break;
case 0x0b:line=2;break;
case 0x0d:line=3;break;
case 0x0e:line=4;break;
}
}
return((row-1)*4+line-1);
}
/***转换函数将输入的数字整合成一个浮点数用单片机运算****/ ÷
void conv()
{
uchar i;
for(i=0;i<6;i++)
{
art[i]=abs[6-i];
brt[i]=abs[6-i];
}
}
void opreat()
{
conv();
}
/**********显示函数************/
/*******传如要显示的数组*******/
void display(uchar *disarry,uchar disflag)
{
uchar i,disbit=0xfe; //段选
for(i=0;i<6;i++)
{
P1=(disbit<<1)+1;
P0=wordcode[*(disarry+6*disflag+i)];
delay(10);
}
}
void main()
{
char key,P2temp;
while(1)
{
key=keyscan();
do
{
P2=0xf0;
P2temp=P2;
}
while((P2temp&0xf0)!=0xf0);
P0=wordcode[key];
if(key<9&&depth<6)
{
abs[abs][depth]=key;
depth++;
}
else if(key==10) //小数点
{
apoint=depth; //记录小数点的位置
}
else if(key==11&&abs<2) //加号
{
abs++;
adepth=depth;
operat=1;
}
else if(key==15)
{
operat();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -