课程设计单片机计算器4Word文档格式.docx
- 文档编号:21777556
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:9
- 大小:40.71KB
课程设计单片机计算器4Word文档格式.docx
《课程设计单片机计算器4Word文档格式.docx》由会员分享,可在线阅读,更多相关《课程设计单片机计算器4Word文档格式.docx(9页珍藏版)》请在冰豆网上搜索。
LCD的第一行显示运算式,第二行显示运算结果。
比如要计算机12+34,在键盘上按下相应键后,LCD的第一行显示“12+34”,按下“=”号后,LCD的第二行显示“=46”。
其他功能同普通计算器相同(只实现加减乘除四则运算功能)。
2设计思路
先对键盘上按键赋予定义值,然后设计怎么去获知那个键被按下,再对LCD的读取数据,存储数据,到显示数据进行定义和设计!
3设计步骤
1.软件的安装,和资料的查阅
2.明确设计思路
3.进行编码与研究
4.调试与修改
5.完成设计
4程序流程(含流程图及详细步骤解释)
5操作方法
确定硬件连接成功;
在键盘上键入所需要计算的数值,比较结果是否符合预期值
6设计过程遇到的问题以及解决思路及方法
1)首先是用函数ili9320_PutChar(x,y,key,0x0000,0xFFFF);
显示不出想要的字符
解:
原来用函数ili9320_PutChar(x,y,key,0x0000,0xFFFF);
显示的是key的ASCII码,要显示key值的符号就要加上‘0’,所要要用函数ili9320_PutChar(x,y,key+'
0'
0x0000,0xFFFF)实现。
2)关于LCD显示问题:
开始时我们输进去的数都只显示最后的一个数
我们每执行一次ili9320_PutChar(x,y,key+'
0x0000,0xFFFF);
函数都要让LCD的下一个显示退一个字符的位置,即x=x+8;
3)第二次运算之后等于号显示有多个!
解:
通过清屏函数clear_result来实现,每次运算之后都把num1跟num2清0。
每次输入数值之前都检测numlen1跟numlen2的长度,if((numlen1+numlen2)==0)就初始化,把之前一次的运算结果清屏来实现;
7程序的主函数:
#include<
hidef.h>
/*commondefinesandmacros*/
#include"
derivative.h"
/*derivative-specificdefinitions*/
myhead.h"
voidsavedata(unsignedchar*a,unsignedchar*x)
{
a[4]=a[3];
a[3]=a[2];
a[2]=a[1];
a[1]=a[0];
a[0]=*x+0x30;
}
voiddeletedata(unsignedchar*b)
b[0]=b[1];
b[1]=b[2];
b[2]=b[3];
b[3]=b[4];
b[4]='
;
}
voidprocess_data(unsignedchar*rd,longrt)
inti;
if(rt>
0)
rd[0]=0x30;
else
{
rd[0]='
-'
rt=-rt;
}
for(i=15;
i>
0;
i--)
rd[i]=rt%10+0x30;
rt=rt/10;
voidclear_result(unsignedchar*rd,intnum)
for(num--;
num>
=0;
num--)
rd[num]=0x30;
voidmain(void)
/*Writeyourlocalvariabledefinitionhere*/
signedlongtemp=0;
unsignedcharnum1[]="
00000"
unsignedcharnum2[]="
unsignedcharread[16]="
0000000000000000"
unsignedcharsymbol;
unsignedcharkey;
unsignedcharx=0;
unsignedchary=0;
unsignedcharz=0;
unsignedchart=0;
longresult;
longa;
longb;
intnumlen1=0;
intnumlen2=0;
intflag1=0;
intflag2=0;
/***ProcessorExpertinternalinitialization.DON'
TREMOVETHISCODE!
!
***/
//PE_low_level_init();
/***EndofProcessorExpertinternalinitialization.***/
/*Codebeginshere*/
ili9320_Initializtion();
while
(1){//保证程序始终在main中运行
while(!
readkey(&
key))
{
if((numlen1+numlen2)==0)//初始化
temp=0;
symbol=0;
x=0;
y=0;
z=0;
t=0;
result=0;
a=0;
b=0;
clear_result(&
read,16);
num1,5);
num2,5);
ili9320_Clear(0xffff);
flag1=0;
flag2=0;
}
if(key>
=0&
&
key<
=9)
if(flag1==0)
if(numlen1<
=5)
savedata(&
num1,&
key);
ili9320_PutChar(x,y,key+'
x=x+8;
numlen1++;
elseif(flag1==1)
if((numlen2<
=5)&
(key>
=0)&
(key<
=9));
num2,&
numlen2++;
elseif(key>
=10&
=13)
switch(key)
case10:
symbol=key;
flag1++;
ili9320_PutChar(x,y,'
+'
x=x+8;
break;
case11:
case12:
*'
case13:
/'
if(key==15)
if(numlen2>
{x=x-8;
0xFFFF,0xFFFF);
deletedata(&
num2);
numlen2--;
break;
elseif(numlen2==0&
flag1>
0)
symbol==0;
flag1--;
flag1==0&
numlen1>
x=x-8;
num1);
numlen1--;
elsebreak;
if(key==14)
{flag2++;
a=(num1[4]-0x30)*10000+(num1[3]-0x30)*1000+(num1[2]-0x30)*100+(num1[1]-0x30)*10+num1[0]-0x30;
b=(num2[4]-0x30)*10000+(num2[3]-0x30)*1000+(num2[2]-0x30)*100+(num2[1]-0x30)*10+num2[0]-0x30;
if(flag2==1)
ili9320_PutChar(z,y+16,'
='
else
z=z-8;
z=z+8;
if(symbol==10)
result=a+b;
process_data(read,result);
numlen1=0;
numlen2=0;
ili9320_Text(z-4,y+16,read,16,0x0000,0xFFFF);
elseif(symbol==11)
result=a-b;
ili9320_Text(z,y+16,read,16,0x0000,0xFFFF);
elseif(symbol==12)
{result=a*b;
ili9320_Text(z,y+16,read,16,0x0000,0xFFFF);
elseif(symbol==13)
result=a/b;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 单片机 计算器
![提示](https://static.bdocx.com/images/bang_tan.gif)