基于AT89C52单片机的计算器设计说明书.docx
《基于AT89C52单片机的计算器设计说明书.docx》由会员分享,可在线阅读,更多相关《基于AT89C52单片机的计算器设计说明书.docx(13页珍藏版)》请在冰豆网上搜索。
基于AT89C52单片机的计算器设计说明书
湄洲湾职业技术学院
基于AT89C52单片机的计算器设计说明书
系别:
自动化工程系
年级:
10级专业:
电气自动化技术
姓名:
小珍学号:
*******111
导师姓名:
小光职称:
讲师
2013年5月29日
1.前言
单片机的出现是计算机制造技术高速发展的产物,它是嵌入式控制系统的核心,如今,它已广泛的应用到我们生活的各个领域,电子、科技、通信、汽车、工业等。
作为21世纪的大学生,不仅要熟练地使用通用微机进行各种数据处理,还要把计算机技术运用到本专业领域或相关领域,即具有“开发”能力。
新世纪的工科大专院校的大学生既要掌握通用微机,又要掌握单片机,所以学习单片机这一门学科对我们的学习很重要。
大家都知道,现在市面上已出现很多有关点阵显示器的商品,如广告活动字幕机、股票显示板、活动布告栏等。
它的优点是可按需要的大小、形状、单色、或彩色来组合,可与微处理器连接,做各种广告栏文字或图形变化。
因此可知汉字显示系统在人民的生活当中是何等的重要,也是研究的课题之一。
本设计是基于51系列单片机来进行的数字计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除六位数范围内的基本四则运算,并在LCD上显示相应的结果。
设计电路采用AT89C52单片机为主要控制电路,利用MM74C922作为计算器4*4键盘的扫描IC读取键盘上的输入。
显示采用字符LCD静态显示。
软件方面使用C语言编程,并用PROTUES仿真。
2.系统设计技术参数要求
(1)工作电压:
5V
(2)工作频率:
50Hz
(3)计算结果的正确率:
99.9%
(4)LCD显示的精确度:
99%
(5)小数点的精确度:
保留三位小数
3.系统设计
3.1系统设计工作总流程
图3-1系统方案
3.2各模块原理说明
1.键盘接口电路模块
如下图3-2所示,在本设计中,计算器输入键盘的4条行线、列线分别连接到MM74C922
的X1-X4、Y1-Y4引脚,MM74C922的数据输出口与单片机的P2口相连,MM74C922的DA引脚经过一个非门连接到单片机的/INT0脚,当MM74C922检测到键盘输入时,DA产生高电平,与之相连的/INT0检测到低电平,给单片机一个中断,单片机从P2口的低四位读入键盘上按下的键的值。
图3-2键盘接口电路图
2.LCD显示模块
本设计采用LCD液晶显示器来显示输出数据。
通过D0-D7引脚向LCD写指令字或写数据以使LCD实现不同的功能或显示相应数据。
图3-3LCD显示器
3.运算模块(单片机控制)
单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统.对51系列单片机来说,最小系统一般应该包括:
单片机、晶振电路、复位电路、按键输入、显示输出等。
MCS-51单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多功能I/O等一台计算机所需要的基本功能部件。
如果按功能划分,它由如下功能部件组成,即微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM/EPROM)、并行I/O口、串行口、定时器/计数器、中断系统及特殊功能寄存器(SFR)。
单片机是靠程序运行的,并且可以修改。
通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,通过使用单片机编写的程序可以实现高智能,高效率,以及高可靠性!
因此我们采用单片机作为计算器的主要功能部件,可以很快地实现运算功能。
应用89C52单片机设计并制作一个单片机最小系统,达到如下基本要求:
1.具有上电复位和手动复位功能。
2.使用单片机片内程序存储器。
3.具有基本的人机交互接口。
按键输入、LED显示功能。
4.具有一定的可扩展性,单片机I/O口可方便地与其他电路板连接。
3.3系统工作原理说明
根据功能和指标要求,本系统选用MCS-51系列单片机为主控机。
具体设计如下:
(1)由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用LCD显示数据和结果。
(2)另外键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键和等号键,故只需要16个按键即可,设计中采用集成的计算键盘。
(3)执行过程:
开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。
(4)错误提示:
当计算器执行过程中有错误时,会在LCD上显示相应的提示,如:
当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在LCD上提示溢出;当除数为0时,计算器会在LCD上提示错误。
3.4主控制模块电路的设计
图3-4主控模块电路
3.5系统的操作说明
本设计采用矩阵键盘的方案。
采用四条I/O线作为行线,四条I/O线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。
这样键盘上按键的个数就为4×4个。
计算器的键盘布局如图5所示:
有16个键组成,在单片机中用一个P口实现16个按键功能。
图3-5矩阵键盘布局图
3.6系统操作注意事项
(1)使用时注意输入电压时5V,电压过低会导致线路无法正常运行。
(2)如发现个别1602灯不亮,请检查灯或线路,如还不亮请检查1602是否坏掉;
(3)不可将产品随意碰撞,否则会导致电路元件损坏或造成虚焊,使电路无法正常运;
(4)通电时不可放于潮湿的地方以免电路短路。
参考文献
[1]王廷才.电子线路辅助设计Protel99SE[M].北京:
高等教育出版社,2004.
[3]张齐.朱宁西.单片机应用系统设计技术[M].北京:
电子工业出版社,2009.
[4]周润景.张丽娜.PROTEUS入门实用教程[M].北京:
机械工业出版社,2007.
[5]张毅刚.MCS-51单片机应用设计[M].哈尔宾:
哈尔宾工业大学出版社,1997.
[1]韩全立.微机控制技术与应用[M].北京:
机械工业出版社,2003.
[2]佘明辉.电工电子实验实训[M].北京:
理工大学出版社,2009.
[9]王慧玲.电路基础[M].北京:
高等教学出版社,2004.
[10]李建忠.单片机实践与应用[M].西安电子科技大学出版,2008.
[11]李群芳.单片机微型计算机与接口技术(第3版)[M].北京:
电子工业出版社2008.
[12]黄智伟.全国大学生电子设计竞赛系统设计[M].北京:
北京航空天大学出版社,2006.
[13]赵曙光.可编程逻辑器件原理开发与应用[M].西安电子科技大学出版社,2006.
[14]刘修文.实用电子电路设计制作300例[M].北京:
中国电力出版社,2008.
[15]谢自美.电子线路设计(第三版)[M].中华科技大学出版社,2008.
致谢词
三年前,这个校园是我的梦想。
三年后,微笑回首来路,一幕幕,宛在昨天。
人生就是如此吧,每个段落结束的时候,我们总会感慨时光飞逝。
时光匆匆如流水,转眼便是大学毕业时节,春梦秋云,聚散真容易。
毕业设计的完成也随之进入了尾声。
从开始进入课题到设计的顺利完成,一直都离不开老师、同学、朋友给我热情的帮助,在这里请接受我诚挚的谢意!
本次设计最终得以顺利完成,非常感谢我的导师小光老师。
从选设计课题直到硬件的最终完成,他给予了我尽心尽力的指导。
林寿光老师严谨的治学态度深深地影响着我,对我今后的学习、工作、生活必将产生影响。
借此机会,特向林寿光老师表示最诚挚的感谢。
感谢湄洲湾职业技术学院的所有领导和老师(蔡明雄书记、翁娟钗辅导员、郑维清老师、陈辉煌老师、许振龙老师、李清生老师、邱兴阳老师等等),他们严谨的学风、渊博的知识、诲人不倦的品格一直感染和激励着我不断上进,使我大学三年的时光充实而有意义。
“海纳百川,取则行远”,在这美丽的校园里,不断成长,在这里我所学到的,必将使我受益终生。
在本次课程设计中,我也参照了大量的著作和文章,许多学者的科研成果给我很大启发,在此向这些学者们表示由衷饿感谢。
感谢那些与我朝夕相处了三年的同学,这些日子,他们和我一块努力奋斗共进共退,互相扶持。
最后要感谢的是我的父母,他们不仅培养了我对应用电子技术的浓厚的兴趣,让我在漫长的人生旅途中使心灵有了虔敬的归依,而且也为我能够顺利的完成毕业设计提供了巨大的支持与帮助。
在未来的日子里,我会更加努力的学习和工作,不辜负父母对我的殷殷期望!
我一定会好好孝敬和报答他们!
附录
附录一:
元件清单
序号
元器件名称
型号
个数
1
电阻
10k
1个
2
瓷介电容
22PF
2个
3
极性电容
10UF
1个
4
晶振
12MHz
1个
5
40脚底座
1块
6
电位器
10K
1个
7
按钮
17个
8
排阻
10K
1个
9
1602
1块
10
芯片
AT89C51
1块
附录二:
设计原理图
附录三:
程序
1.键盘出入检测程序
有键按下时,单片机响应外部中断0,转入外部中断0中断处理函数,在中断处理函数中完成对按键的判断,以进行下一步的程序处理。
/***********外部中断0处理函数*************/
voidINT_0(void)interrupt0using0
{
key=translate(P2&0x0f);
if(key<='9'&&key>='0')//判断按下的键是否为数值
{
num=num*10+(key-'0');
if(operators>0)
{
y=num;
iny=1;
}
else
x=num;
if(num<134217728&&num>-134217728)//当前数值是否超出限定范围
{
display(num);
}
else
dataoverflow();
}
else
{
switch(key)
{
case'c':
x=0;
y=0;
num=0;
iny=0;
operators=0;
display(num);
break;
case'=':
arithmetic();
iny=0;
operators=0;
num=0;
break;
case'+':
if(operators)
arithmetic();
operators=1;
num=0;
break;
case'-':
if(operators)
arithmetic();
operators=2;
num=0;
break;
case'*':
if(operators)
arithmetic();
operators=3;
num=0;
break;
case'/':
if(operators)
arithmetic();
operators=4;
num=0;
break;
}
}
}
2.LCD显示程序
利用LCD静态显示,通过程序向LCD写指令字或数据使LCD完成不同功能或显示相应数据。
/**************LCD初始化函数*************/
voidinit_LCM()
{
write_com(0x30);
write_com(0x30);
write_com(0x30);
write_com(0x38);
write_com(0x08);
write_com(0x01);
write_com(0x06);
write_com(0x0e);
}
/***********LCD写数据函数*************/
voidwrite_data(charddata)
{
RS=1;/*写指令*/
R_W=0;
EN=1;/*使能信号开*/
P1=ddata;/*将数据送入p1口*/
EN=0;/*使能信号关*/
check_BF();
}
/***********LCD写指令函数*************/
voidwrite_com(charcommand)
{
RS=0;/*写指令*/
R_W=0;
EN=1;/*使能信号开*/
P1=command;/*将数据送入p1口*/
EN=0;/*使能信号关*/
check_BF();
}
/************LCD检查忙碌函数***********/
voidcheck_BF()
{
chari,x=0x80;
P1=0xff;
while(x&0x80)
{
RS=0;
R_W=1;
EN=1;
x=P1;
EN=0;
for(i=0;i<10;i++);
}
EN=0;/*关闭使能信号*/
}
/**********LCD清屏函数**********/
voidclearLCD()
{
write_com(0x01);
}
/**********LCD显示函数**********/
voiddisplay(longa)
{
longtemp,b,c=-1;
intlenth=1,i,j;
clearLCD();
if(a<0)
{
a=a*c;
write_data('-');
}
temp=a;
while((temp=temp/10)!
=0)
{
lenth++;
}
for(i=lenth;i>0;i--)
{
b=1;
for(j=0;j{
b=b*10;
}
write_data(0x30+a/b);
a=a%b;
}
}
3.错误处理及提示程序
/**********除数为处理函数**********/
voiddealerror()
{
inti=0;
clearLCD();
for(i=0;i<5;i++)
write_data(error[i]);
}
/*********数值溢出处理函数**********/
voiddataoverflow()
{
inti=0;
clearLCD();
for(i=0;i<8;i++)
write_data(overflow[i]);
}