基于51单片机的简易计算器制作.doc
文本预览下载声明
一:#includereg52.h
#define Lint long int
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6; //锁存器段选
sbit wela=P2^7;
sbit display_g=P2^0; //负号段选
sbit display_w=P2^1; //负号位选
uchar code table[]={0x3f,0x06,0x5b,0x4f, //0,1,2,3
0x66,0x6d,0x7d,0x07, //4,5,6,7
0x7f,0x6f,//0x77,0x7c, //8,9
//0x39,0x5e,0x79,0x71
}; //数码管段码表
uchar code table1[]={0x7f,0xbf,0xdf,0xef,
0xf7,0xfb,0xfd,0xfe
}; //数码管位码表
/****************定义全局变量*******************/
Lint store[2]={0}; //存取按键值和结果的数组
uchar flag_op=0; //+,-,*,/操作符标志符
uchar flag_order=0; //输入数的顺序标志符
uchar flag_equal=0; //等于号标志符
uchar key=16; //按键值
/*****************延时函数*********************/
void delay(uint x)
{
uint i,j;
for(i=x;i0;i--)
for(j=110;j0;j--);
}
/****************显示函数*********************/
void display(Lint temp)
{
uint buf1,buf2,i=0;
buf1=temp
if(buf1=10||temp-9999999) //数据溢出,显示错
{
display_w=1; //关负号位选
dula=1;
P0=0x3f;
dula=0;
P0=0xff;
wela=1;
P0=0x00;
wela=0;
delay(1);
}
else if(temp0temp= //显示负数
{
display_w=0; //开负号位选
temp=-temp;
do
{
buf2=temp%10;
dula=1;
P0=table[buf2];
dula=0;
P0=0xff;
wela=1;
P0=table1[i];
wela=0;
i++;
P0=0x00;
temp=temp/10;
delay(1);
}while(temp!=0);
}
else
{
display_w=1; //关负号位选
do
{
dula=1;
buf2=temp%10;
P0=table[buf2];
dula=0;
P0=0xff;
wela=1;
P0=table1[i];
wela=0;
i++;
P0=0x00;
temp=temp/10;
delay(1);
}while(temp!=0);
}
}
/******************键盘扫描函数******************/
uchar KeyScan()
{
uchar temp;
P3=0xfe; //扫描第一行
temp=P3;
temp=temp0xf0;
if(temp!=0xf0)
{
delay(5);
P3=0xfe;
temp=P3;
temp
显示全部