课程设计单片机计算器4.docx
- 文档编号:8641349
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:9
- 大小:40.71KB
课程设计单片机计算器4.docx
《课程设计单片机计算器4.docx》由会员分享,可在线阅读,更多相关《课程设计单片机计算器4.docx(9页珍藏版)》请在冰豆网上搜索。
课程设计单片机计算器4
单片机课程设计报告
计算器
学院信息工程学院
专业信息工程
(电子信息工程方向)
年级班别07级1班
学号
学生姓名
答辩记录
开始时间
结束时间
考题:
答辩结果:
主要特点或功能
1、实现加减乘除四则运算功能
2、LCD显示运算式和运算结果
2010年7月
1设计要求:
实现普通十进制计算器的功能,按键采用实验箱上的4×4键盘,显示采用实验箱上16×2点阵式字符LCD,
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+'0',0x0000,0xFFFF);函数都要让LCD的下一个显示退一个字符的位置,即x=x+8;
3)第二次运算之后等于号显示有多个!
解:
通过清屏函数clear_result来实现,每次运算之后都把num1跟num2清0。
每次输入数值之前都检测numlen1跟numlen2的长度,if((numlen1+numlen2)==0)就初始化,把之前一次的运算结果清屏来实现;
7程序的主函数:
#include
#include"derivative.h"/*derivative-specificdefinitions*/
#include"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]='0';
}
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[]="00000";
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);
clear_result(&num1,5);
clear_result(&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+'0',0x0000,0xFFFF);
x=x+8;
numlen1++;
}
}
elseif(flag1==1)
{
if((numlen2<=5)&&(key>=0)&&(key<=9));
{
savedata(&num2,&key);
ili9320_PutChar(x,y,key+'0',0x0000,0xFFFF);
x=x+8;
numlen2++;
}
}
}
elseif(key>=10&&key<=13)
{
switch(key)
{
case10:
symbol=key;flag1++;ili9320_PutChar(x,y,'+',0x0000,0xFFFF);x=x+8;break;
case11:
symbol=key;flag1++;ili9320_PutChar(x,y,'-',0x0000,0xFFFF);x=x+8;break;
case12:
symbol=key;flag1++;ili9320_PutChar(x,y,'*',0x0000,0xFFFF);x=x+8;break;
case13:
symbol=key;flag1++;ili9320_PutChar(x,y,'/',0x0000,0xFFFF);x=x+8;break;
}
}
if(key==15)
{
if(numlen2>0)
{x=x-8;
ili9320_PutChar(x,y,key+'0',0xFFFF,0xFFFF);
deletedata(&num2);
numlen2--;
break;
}
elseif(numlen2==0&&flag1>0)
{x=x-8;
ili9320_PutChar(x,y,key+'0',0xFFFF,0xFFFF);
symbol==0;
flag1--;
}
elseif(numlen2==0&&flag1==0&&numlen1>0)
{
x=x-8;
ili9320_PutChar(x,y,key+'0',0xFFFF,0xFFFF);
deletedata(&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,'=',0x0000,0xFFFF);
}
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;
process_data(read,result);
numlen1=0;numlen2=0;
ili9320_Text(z,y+16,read,16,0x0000,0xFFFF);
}
elseif(symbol==12)
{result=a*b;
process_data(read,result);
numlen1=0;numlen2=0;
ili9320_Text(z,y+16,read,16,0x0000,0xFFFF);
}
elseif(symbol==13)
{
result=a/b;
process_data(read,result);
numlen1=0;numlen2=0;x=0;
ili9320_Text(z,y+16,read,16,0x0000,0xFFFF);
}
}
}
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 单片机 计算器
![提示](https://static.bdocx.com/images/bang_tan.gif)