基于51单片机的计算器课程设计报告及实验报告.docx

上传人:b****7 文档编号:23351794 上传时间:2023-05-16 格式:DOCX 页数:9 大小:106.78KB
下载 相关 举报
基于51单片机的计算器课程设计报告及实验报告.docx_第1页
第1页 / 共9页
基于51单片机的计算器课程设计报告及实验报告.docx_第2页
第2页 / 共9页
基于51单片机的计算器课程设计报告及实验报告.docx_第3页
第3页 / 共9页
基于51单片机的计算器课程设计报告及实验报告.docx_第4页
第4页 / 共9页
基于51单片机的计算器课程设计报告及实验报告.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

基于51单片机的计算器课程设计报告及实验报告.docx

《基于51单片机的计算器课程设计报告及实验报告.docx》由会员分享,可在线阅读,更多相关《基于51单片机的计算器课程设计报告及实验报告.docx(9页珍藏版)》请在冰豆网上搜索。

基于51单片机的计算器课程设计报告及实验报告.docx

基于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);

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1