基于51单片机的计算器课程设计报告及实验报告.docx
- 文档编号:23351794
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:9
- 大小:106.78KB
基于51单片机的计算器课程设计报告及实验报告.docx
《基于51单片机的计算器课程设计报告及实验报告.docx》由会员分享,可在线阅读,更多相关《基于51单片机的计算器课程设计报告及实验报告.docx(9页珍藏版)》请在冰豆网上搜索。
基于51单片机的计算器课程设计报告及实验报告
项目一:
简单计算器
1.实验题目:
用51单片机实现简单的计算器功能
2.实验截图:
1).实验运行前截图:
2).实验运行后截图:
3.实验代码:
#include
#include
#include
#include
#include
unsignedchartable1[16];//1602第一行显示字符
unsignedchartable2[16];//1602第二行显示字符
unsignedcharcodetable_error[]="error";
/*键扫描函数*/
unsignedcharkeyscan()//扫描键盘函数
{
unsignedcharkey_l,key_h,addres,num;
P0=0x0f;
key_l=P0;
P0=0xf0;
key_h=P0;
addres=key_l|key_h;
if(addres!
=0xff)
{
Delayms
(1);
if(addres!
=0xff)
{
P0=0x0f;
key_l=P0;
P0=0xf0;
key_h=P0;
addres=key_l|key_h;
switch(addres)
{
case0xee:
num='1';break;
case0xde:
num='2';break;
case0xbe:
num='3';break;
case0xed:
num='4';break;
case0xdd:
num='5';break;
case0xbd:
num='6';break;
case0xeb:
num='7';break;
case0xdb:
num='8';break;
case0xbb:
num='9';break;
case0xd7:
num='0';break;//按键0
case0xe7:
num='C';break;//按键*
case0xb7:
num='=';break;//按键#
case0x7e:
num='/';break;//按键A
case0x7d:
num='*';break;//按键B
case0x7b:
num='-';break;//按键C
case0x77:
num='+';break;//按键D
}
while(addres!
=0xff)
{
P0=0x0f;
key_l=P0;
P0=0xf0;
key_h=P0;
addres=key_l|key_h;
}
returnnum;
}
}
return0;
}
voidclear_lcd(void)//清屏
{
unsignedcharj;
for(j=0;j<16;j++)
{
table1[j]='\0';
table2[j]='\0';
}
}
voidmain()
{
unsignedchari=0,j;
unsignedcharkey;
unsignedcharflag_operator=0;//加减乘除标志位
unsignedcharflag_equ=0;//等于标志位
unsignedcharflag_key=0;//运算位标志
bitflag_MaxValue=0;
bitflag_minus=0;//负数
longintvalue=0;//最终运算结果
unsignedlongintvalue_H=0;//第一个数据
unsignedlongintvalue_L=0;//第二个数据
unsignedlonginttemp[]={1,10,100,1000,10000,100000,1000000,10000000,100000000};
Initialize_LCD();
while
(1)
{
key=keyscan();
if(key!
=0)
{
if(key=='C')//清除键C按下
{
clear_lcd();
i=0;
flag_operator=0;flag_equ=0;value=0;value_H=0;value_L=0;flag_key=0;flag_minus=0;
}
else
{
for(j=0;j
{
table1[15-i+j]=table1[15-i+j+1];
}
table1[15]=key;
//table1[i]=key;
i++;
}
if(key=='=')
{
for(j=0;j<16;j++)//确定运算符位置
{
if(table1[j]=='=')
{
flag_equ=j;
flag_key++;
break;
}
if(table1[j]=='+'||table1[j]=='-'||table1[j]=='*'||table1[j]=='/')
{
flag_operator=j;
flag_key++;
}
}
for(j=16-i;j { //value_H=value_H+(table1[j]-48)*(pow(10,(flag_operator-j-1))); value_H=value_H+(table1[j]-48)*temp[flag_operator-j-1]; } for(j=flag_operator+1;j<15;j++)//第二个数据处理 { //value_L=value_L+(table1[j]-48)*pow(10,(flag_equ-j-1)); value_L=value_L+(table1[j]-48)*temp[flag_equ-j-1]; } if(table1[flag_operator]=='+') { value=value_H+value_L; } elseif(table1[flag_operator]=='-') { value=value_H-value_L; } elseif(table1[flag_operator]=='*') { value=value_H*value_L; } elseif(table1[flag_operator]=='/') { value=value_H/value_L; } if(value==0) table2[15]=(value+48); elseif(value<0) { value=abs(value); flag_minus=1; } elseif(value>2000000000) { flag_MaxValue=1; //break; } j=15; while(value! =0) { table2[j]=(value%10+48); value=value/10; j--; } if(flag_minus)//负数 { table2[j]='-'; } } if(flag_key>2||table1[0]=='0'||flag_MaxValue==1) { ShowString(5,1,table_error); while(keyscan()! ='C'); clear_lcd(); i=0; flag_operator=0;flag_equ=0;value=0;value_H=0;value_L=0;flag_key=0;flag_minus=0; } } ShowString(0,0,table1); ShowString(0,1,table2); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 计算器 课程设计 报告 实验
![提示](https://static.bdocx.com/images/bang_tan.gif)