• 大小: 798KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-07
  • 语言: C/C++
  • 标签:

资源简介

本设计是基于51系列单片机来进行的数字计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除六位数范围内的基本四则运算,并在LCD上显示相应的结果。设计电路采用AT89C51单片机为主要控制电路,利用MM74C922作为计算器4*4键盘的扫描IC读取键盘上的输入。显示采用字符LCD静态显示。软件方面使用C语言编程,并用PROTUES仿真。 附件内容: ┠─────基于AT89C51单片机简易计算器的设计.doc ┃ ┠─────calculator.c ┃ ┠─────calculator.DSN ┃    ┠─────calculator.hex

资源截图

代码片段和文件信息

#include
#include
#define uchar unsigned char
#define uint unsigned int
char translate(int keycode);
void arithmetic();
void init_LCM();
void write_data(char ddata);
void write_com(char command);
void check_BF();
void clearLCD();
void display(long a);
void dealerror();  
void dataoverflow();

long x=0y=0num=0;
int operatorsinputiny=0;
char key;
char error[5]=“error“;
char overflow[8]=“overflow“;
sbit EN=P3^4;
sbit R_W=P3^5;
sbit RS=P3^6;
main()
{
    EA=1;
EX0=1;
IT0=1;
    P2=0xff;
display(0);
init_LCM();
write_data(0x30);
while(1)
{
}
}
/**********键值转化为键盘上按键值函数*************/
char translate(int keycode)
{
switch(keycode)
{
case 0:
return ‘7‘;
break;
case 1:
return ‘4‘;
break;
case 2:
return ‘1‘;
break;
case 3:
return ‘c‘;
break;
case 4:
return ‘8‘;
break;
case 5:
return ‘5‘;
break;
case 6:
return ‘2‘;
break;
case 7:
return ‘0‘;
break;
case 8:
return ‘9‘;
break;
case 9:
return ‘6‘;
break;
case 10:
return ‘3‘;
break;
case 11:
return ‘=‘;
break;
case 12:
return ‘/‘;
break;
case 13:
return ‘*‘;
break;
case 14:
return ‘-‘;
break;
case 15:
return ‘+‘;
break;
}       
}
/***********外部中断0处理函数*************/
void INT_0(void) interrupt 0 using 0
{
key=translate(P2&0x0f);
if(key<=‘9‘&&key>=‘0‘)      //判断按下的键是否为数值
{
num=num*10+(key-‘0‘);
if (operators>0)
{
y=num;
iny=1;
}
else
x=num;
if(num<134217728&&num>-134217728)    //当前数值是否超出限定范围
{
display(num);
}
else
dataoverflow();

}
else
{
switch(key)
{
case ‘c‘:
x=0;
y=0;
num=0;
iny=0;
operators=0;
display(num);
break;
case ‘=‘:
arithmetic();
iny=0;
operators=0;
num=0;
break;
case ‘+‘:
    if (operators)
arithmetic();
operators=1;
num=0;
break;
case ‘-‘:
    if (operators)
arithmetic();
operators=2;
num=0;
break;
case ‘*‘:
    if (operators)
arithmetic();
operators=3;
num=0;
break;
case ‘/‘:
if (operators)
arithmetic();
operators=4;
num=0;
break;
}
}

}
/**********算术运算函数*************/
void arithmetic()
{
if (iny)
{
switch(operators)
{
case 1:
x=x+y;
num=x;
if(num<134217728&&num>-134217728)
{
display(num);
}
else
dataoverflow();
break;
case 2:
x=x-y;
num=x;
if(num<134217728&&num>-134217728)
{
display(num);
}
else
dataoverflow();
break;
case 3:
x=x*y;
num=x;
if(num<134217728&&num>-134217728)
{
display(num);
}
else
dataoverflow();
break;
    case 4:
if (y==0)
dealerror();
else
{
x=x/y;
num=x; 
if(num<134217728&&num>-134217728)
{
display(num);
}
else
dataoverflow();
}
break;
}
y=0;

}
}
/**

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       5636  2010-06-29 14:31  calculator.hex

     文件     964096  2010-07-03 01:25  基于AT89C51单片机简易计算器的设计.doc

     文件       4512  2010-06-29 06:43  calculator.c

     文件     134760  2010-06-29 14:32  calculator.DSN

----------- ---------  ---------- -----  ----

              1109004                    4


评论

共有 条评论

相关资源