-
大小: 798KB文件類型: .rar金幣: 2下載: 0 次發(fā)布日期: 2021-06-07
- 語言: C/C++
- 標簽:
資源簡介
本設計是基于51系列單片機來進行的數字計算器系統(tǒng)設計,可以完成計算器的鍵盤輸入,進行加、減、乘、除六位數范圍內的基本四則運算,并在LCD上顯示相應的結果。設計電路采用AT89C51單片機為主要控制電路,利用MM74C922作為計算器4*4鍵盤的掃描IC讀取鍵盤上的輸入。顯示采用字符LCD靜態(tài)顯示。軟件方面使用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
- 上一篇:c++實現(xiàn)Ftp服務器
- 下一篇:sph C++仿真 便于學習
評論
共有 條評論