电子计算器设计范文.docx
- 文档编号:26406863
- 上传时间:2023-06-19
- 格式:DOCX
- 页数:27
- 大小:428.49KB
电子计算器设计范文.docx
《电子计算器设计范文.docx》由会员分享,可在线阅读,更多相关《电子计算器设计范文.docx(27页珍藏版)》请在冰豆网上搜索。
电子计算器设计范文
电子计算器设计
组员:
陆鹏飞(组长)
谭义
严广
信电学院电气10-9班
目录
1.课题任务…………………………………………………………………………
2.方案比较与选择………………………………………………………………
3.电路设计………………………………………………………………………
4.程序设计………………………………………………………………………………
5.测试方案………………………………………………………………………………
6.系统调试……………………………………………………………………………
7.数据测试与处理………………………………………………………………
8.总结……………………………………………………………………………………
9.参考文献………………………………………………………………………………
10.附录……………………………………………………………………………………
1.课题任务
本次设计是用AT89S51单片机、LCD显示器、控制按键为元件来设计的计算器。
利用此设计熟悉单片机微控制器及C语言编程,对其片资源及各个I/O端口的功能和基本用途的了解。
掌握keil应用程序开发环境,常用的LCD显示器的使用方法和一般键盘的使用方法。
本次设计的电子计算器主要完成加/减/乘/除运算,使用1602LCD显示器显示数据,具体如下:
1.具备删除功能:
如数字输入错误,可以通过删除键,对错误的数字进行删除操作。
2.具备括号内运算功能:
如((1+2)*3+4)/5
3.具备连续计算的功能,可以使得计算具有一定的方便性。
4.具备日期时钟显示功能
5.具备蜂鸣器按键提示功能
6.计算结果可保留至小数点后六位
7.具备复位功能
8.可进行小数运算
2.方案比较与选择
根据本次课题设计任务与目标,我们小组选用AT89S51单片机、LCD显示器、控制按键为元件来设计电子计算器。
2.1系统总体设计方案
本设计以AT89C51型号单片机为控制核心进行设计。
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
结果显示采用LCD1602液晶,也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。
每位之间有一个点距的间隔每行之间也有间隔起到了字符间距和行间距的作用,正因为如此所以他不能显示图形。
液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。
软件设计采用C语言编程实现,使用Keil开发环境,KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
用过汇编语言后再使用C来开发,体会更加深刻。
KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。
另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
2.2系统设计框图
为体现总体设计方案,我们绘制了如图1的系统设计框图,在设计中,单片机处理从键盘输入的数字并进行计算,计算结果显示在LCD上。
图1系统设计框图
3.电路设计
3.1单片机最小系统
本系统以AT89C51型号单片机为控制核心, AT89C51是一种可编程可擦除的低电压,高性能8位微处理器,由于将多功能8位CPU和闪烁存储器组合在单个芯片中,AT89C51是一种高效微控制器,其最小系统电路如图2所示。
图2单片机最小系统
3.2矩阵键盘
在按键输入方面,我们采用4*5的矩阵键盘来实现,具体连接电路如图3所示。
通过基于状态机的按键扫描程序设计可实现4*5矩阵键盘的按键监控。
图3LCD1602连接图
3.3显示部分
在显示计算结果上,我们采用字符型液晶LCD1602来显示结果,LCD1602能够同时显示16x2即32个字符(16列2行),LCD1602的使用很普遍了,市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此HD44780写的控制程序可以很方便地应用于市面上大部分字符型液晶。
字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)地线GND(16脚),其控制原理与14脚的LCD完全一样。
其连接电路如图4所示。
图4LCD1602连接图
4.程序设计
系统的软件设计采用C语言编写,对单片机进行编程实现各功能。
程序是在Wnidows环境下采用KeiluVision4编写的,软件的设计主要完成以下的功能:
计算模块:
主要实现计算器的所有数据计算功能。
按键模块:
主要是实现按键的输入功能,并根据按键值选择相应的操作。
显示模块:
主要是对输出的结果在LCD屏上的显示功能。
4.1具体设计内容
4.1.1四则运算:
由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用LCD显示数据和结果。
4.1.2矩阵键盘:
另外键盘包括数字键(0~9)、符号键(+、-、×、÷)、小数点、删除键、左括号、右括号、复位键和等号键,故只需要20个按键即可。
4.1.3执行过程:
开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。
4.2主程序流程图
图5主程序流程图
如图5所示为主程序流程:
当电源打开的时候,CPU进行复位,寄存器清零,接着LCD显示清零,这时候我们可以输入数值、功能键,数据送到CPU进行运算,再转换成BCD码送到显示部分。
这时候程序循环检测是否有按键信号,如果矩阵键盘中有任意键按下,再将数据传送至CPU运算,再将结果送至LCD显示,如此循环下去。
4.3算数运算程序设计
5.测试方案
2用Proteus对于本设计的仿真
操作步骤如下:
(1)进入proteusISIS集成环境,在工作前,在systerm菜单下设置界面的颜色、图形界面大小等项目,也可采用了系统默认值。
(2)通过工具栏中的(从库中选择元件命令)命令,在pickdevices窗口中选择电路所需的元件,放置元件到编辑区并调整其相对位置,进行元件参数设置,元器件间连线。
(3)连线并加上设置参数,并完成仿真原理图,如图5-2所示。
(4)加载程序。
将编译调试完成的简易计算器机器码程序(hex文件)加载到AT89C51单片机中。
(5)单击仿真工具栏中的仿真键,观察仿真结果。
可以按暂停、继续、单步、等按钮,查看效果。
图7系统仿真截图
操作说明:
1)本计算器实现4位数的加减,2位数乘除运算。
2)按下数值键,显示按下的“数字”,按运算符,显示符号,按第2个操作数,显示,按“=”键,得到运算结果。
3)按“清零”键清除运算结果,可重新开始。
(6)调试与思考
6.系统调试
调试步骤
1.采用KEIL开发的89c51单片机应用程序调试步骤:
(1)在uVision集成开发环境中创建新项目(Project),扩展文件名为.UV2,并为该项目选定合适的单片机CPU器件(本设计采用ATMEL公司下的AT89C51)
(2)用uVision的文本编辑器编写源文件,可以是汇编文件(.ASM),也可以使C语言文件(扩展名.C),并将该文件添加到项目中去。
一个项目文件可以包含多个文件,除了源程序文件外,还可以是库文件、头文件或文本说明文件。
(3)通过uVision2的相关选择项,配置编译环境、连接定位器以及Debug调试器的功能。
(4)对项目中的源文件进行编译连接,生成绝对目标代码和可选的HEX文件,如果出现编译连接错误则返回到第2步,修改源文件中的错误后重构整个项目。
7.数据测试与处理
8.总结
在大家不断努力下,我们终于圆满完成了这次设计!
每一次的课程那个设计都是在让我不断的提升自己亲自动手解决问题的能力,充分运用理论和实践相结合的锻炼.随着科学技术发展的日新日异,片上系统已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握智能仪器的开发技术是十分重要的。
这一次的课程设计,无论是选题还是写稿,从理论到实践,学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
在刚接触无从下手到后来逐步完善,时刻在每道工序上的不放弃,要求做到自己最好,这一些都得到了回报。
一个人能力与精力是有限的,但是团队则不一样,我们小组齐心协力也让我们更轻松来做,培养我们的团队合作意识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,不仅要掌握理论知识,而且要把理论和实践相结合起来,从理论中得出结论,才能学好这技能,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,以后一定会努力学习。
本课题的重点、难点是:
(1)对电子计算器的原理、结构、应用等各方面从头开始琢磨;
(2)以单片机为控制核心,采用矩阵键盘输入数据,LCD显示结果;
(3)软件仿真做实验;
这次系统的开发可能该系统还存在着许多不尽如人意的地方,尤其是对于以前学过得知识遗忘了很多,在综合应用上面也缺乏练习,有待进一步改善。
9.参考文献
[1]李群芳,张士军,黄建(编著).单片微型计算机与接口技术,北京:
电子工业出版社,2008
[2]《例说51单片机(C语言版)》张义和、王敏男等人民邮电出版社2003.4
[3]《单片机原理与接口技术》(第3版)李朝青编著北京航空航天大学出版社2007.6
[4]《MCS-51系列单片机应用系统设计系统配置与接口技术》何利民北京航空航天大学出版社
[5]《MCS-51系列单片机接口电路与应用程序实例》沈德金北京航空航天大学出版社1999.8
[6]《C语言程序设计》黄明大连理工大学出版社1997:
201-211
[7]王选民.智能仪器原理及设计北京:
清华大学出版社,2008
10.程序附录:
/****************************************************************
//计算程序,完成带括号的四则运算,返回计算结果
****************************************************************/
#include"lcd.h"
externunsignedcharl_tmpdata[30];
externunsignedcharn,token;
externunsignedcharac;
//externdisplay(char*temp);
doubleexp();
doubleterm();
doublefactor();
charggetchar()
{
returnl_tmpdata[n++];
}
voidgungetc()
{
n--;
}
intpanduan(charch)
{
if(ch=='.')
return-1;
if(ch>='0'&&ch<='9')
returnch-47;
return0;
}
doublegetdb()
{
intt=0,tp,flag=0;
intr=1;
doubles;
charch;
while
(1)
{
ch=ggetchar();
tp=panduan(ch);
if(tp==0)break;
if(tp<0)
{
flag=1;
continue;
}
if(flag)r*=10;
t=t*10+tp-1;
}
gungetc();
s=(double)t/(double)r;
returns;
}
chargisalnum(charch)
{
if(ch>='0'&&ch<='9')
return1;
return0;
}
voiderror()
{
display("error!
");
ac=1;
}
voidmatch(charexpectedToken)
{
if(token==expectedToken)
token=ggetchar();
else
error();
}
doublefactor(void)
{
doubletemp;
if(ac==1)return0;
if(token=='(')
{
match('(');
if(ac==1)return0;
temp=exp();
match(')');
if(ac==1)return0;
}
elseif(gisalnum(token))
{
gungetc();
temp=getdb();
token=ggetchar();
}
else
{
error();
return0;
}
returntemp;
}
doubleterm(void)
{
doublediv,temp;
if(ac==1)return0;
temp=factor();
while((token=='*')||(token=='/'))
switch(token)
{
case'*':
match('*');
if(ac==1)return0;
temp*=factor();
break;
case'/':
match('/');
if(ac==1)return0;
div=factor();
if(div==0)
{
error();
return0;
}
temp/=div;
break;
}
returntemp;
}
doubleexp(void)
{
doubletemp;
if(ac==1)return0;
temp=term();
while((token=='+')||(token=='-'))
switch(token)
{
case'+':
match('+');
if(ac==1)return0;
temp+=term();
break;
case'-':
match('-');
if(ac==1)return0;
temp-=term();
break;
}
returntemp;
}
/*####################################################
LCD显示
1,初始化设置:
lcden=0;//默认开始状态为关使能端,见时序图
lcdrw=0;//选择状态为写
write_com(0x38);//显示模式设置,默认为0x38,不用变。
write_com(0x01);//显示清屏,将上次的内容清除,默认为0x01.
write_com(0x0f);//显示功能设置0x0f为开显示,显示光标,光标闪烁;0x0c为开显示,不显光标,光标不闪
write_com(0x06);//设置光标状态默认0x06,为读一个字符光标加1.
write_com(0x80);//设置初始化数据指针,是在读指令的操作里进行的
write_com(0x80+0x40);//换行操作
2,单一字符显示
write_com(地址);
write_date('字符');
delay(延时);
####################################################
*/
//write_com(ucharcom)写命令函数
//write_date(uchardate)写数据函数
//init_lcd()初始化函数
//display()显示函数
//##################################################
#include
#defineucharunsignedchar
#defineuintunsignedint
externucharn;
externucharl_tmpdate[];
uchari;
sbitlcdrs=P2^0;
sbitlcdrw=P2^1;
sbitlcden=P2^2;
//ucharcodet0[]="douzi&&douer";
//ucharcodet1[]="douzi->douer";
voiddelay(ucharz)
{
uintx,y;
for(x=1000;x>1;x--)
for(y=z;y>1;y--);
}
voidwrite_com(ucharcom)
{
lcdrs=0;
P2=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidwrite_date(uchardate)
{
lcdrs=1;
P2=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidinit_lcd()
{
lcden=0;
lcdrw=0;
write_com(0x38);
write_com(0x01);
write_com(0x0c);
write_com(0x06);
write_com(0x80);
}
voiddisplay()
{
for(i=0;i<=n;i++)
{
write_date(l_tmpdate[i]);
delay(5);
}
}
3.
/********************************************
//主函数
********************************************/
#include
#include
#include
sbitSPK=P3^4;
sbitJDQ=P3^5;
sbitP10=P1^0;//(
sbitP11=P1^1;//)
sbitP33=P3^3;//ac
codeunsignedchartable[]={'0','1','2','3','4','5','6','7','8','9','=','.','+','-','*','/'};
codeunsignedcharkey_tab[16]={0xed,0xde,0xdd,0xdb,0xbe,0xbd,0xbb,0x7e,
0x7d,0x7b,0xeb,0xee,0xe7,0xd7,0xb7,0x77};
//789/DELint00x070x080x09/del
//456xACint1对应16进制码:
0x040x050x06xac
//123-(p1.00x010x020x03-(
//*0=+)p1.1*0=+)
unsignedcharl_tmpdata[30];
unsignedcharn=0,ac;
unsignedcharl_key=0x00;
unsignedcharl_keyold=0xFF;
externdoubleexp(char*temp);
voidchange(char*temp,doubleh);
voidgetsuanshi(unsignedcharch)
{
l_tmpdata[n++]=ch;
l_tmpdata[n]='\0';
}
voidReadKey(void);
voiddelay();//5_nop_()
voiddelay30()
{
unsignedchari,j;
for(i=0;i<100;i++)
for(j=0;j<100;j++)
;
}
voidp1_scan()
{
P10=1;
if(P10==0)
{
delay30();
P10=1;
if(P10==0)
getsuanshi('(');
}
P11=1;
if(P11==0)
{
delay30();
P11=1;
if(P11==0)
getsuanshi(')');
}
}
voidinit()
{
EA=1;
EX0=1;
EX1=1;
IT1=1;
IT0=1;
P3=0XFF;
P0=0xf0;
}
voidkey_scan()interrupt0
{
EX0=0;
TMOD&=0Xf1;
TH0=0X2e;
TL0=0X00;
ET0=1;
TR0=1;
}
voidacint1()interrupt2
{
EX1=0;
P33=1;
delay30();
if(P33==0)ac=1;
EX1=1;
}
voidtimer0_isr(void)interrupt1
{
TR0=0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 计算器 设计 范文