单片机计算器设计.docx

上传人:b****6 文档编号:7907200 上传时间:2023-05-12 格式:DOCX 页数:10 大小:99.01KB
下载 相关 举报
单片机计算器设计.docx_第1页
第1页 / 共10页
单片机计算器设计.docx_第2页
第2页 / 共10页
单片机计算器设计.docx_第3页
第3页 / 共10页
单片机计算器设计.docx_第4页
第4页 / 共10页
单片机计算器设计.docx_第5页
第5页 / 共10页
单片机计算器设计.docx_第6页
第6页 / 共10页
单片机计算器设计.docx_第7页
第7页 / 共10页
单片机计算器设计.docx_第8页
第8页 / 共10页
单片机计算器设计.docx_第9页
第9页 / 共10页
单片机计算器设计.docx_第10页
第10页 / 共10页
亲,该文档总共10页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

单片机计算器设计.docx

《单片机计算器设计.docx》由会员分享,可在线阅读,更多相关《单片机计算器设计.docx(10页珍藏版)》请在冰点文库上搜索。

单片机计算器设计.docx

单片机计算器设计

基于单片机的简易计算器

一、设计任务和性能指标

1.1设计任务

利用单片机及外围接口电路(键盘接口和显示接口电路)设计制作一个计算器,用四位一体数码管显示计算数值及结果。

要求用Protel画出系统的电路原理图(要求以最少组件,实现系统设计所要求的功能),绘出程序流程图,并给出程序清单(要求思路清晰,尽量简洁,主程序和子程序分开,使程序有较强的可读性)。

1.2性能指标

1加法:

能够计算四位以内的数的加法。

2减法:

能计算四位数以内的减法。

3乘法:

能够计算两位数以内的乘法。

4除法:

能够计算四位数的乘法

5有清零功能,能随时对运算结果和数字输入进行清零。

 

二、系统设计方案

按照系统设计的功能的要求,初步确定设计系统由单片机主控模块、四位一体数码管显示模块、键扫描接口电路共三个主要模块组成。

主控芯片使用51系列AT89C51单片机,采用高性能的静态80C51设计,它由先进工艺制造,并带有非易失性Flash程序存储器。

它是一种高性能、低功耗的8位COMS微处理芯片,市场应用最多。

键盘电路采用4*4矩阵键盘电路。

显示模块采用四位一体共阳极数码管和SN74LS244锁存芯片构成等器件构成。

 

三、硬件系统设计

1.单片机最小系统

单片机最小系统就是支持主芯片正常工作的最小电路部分,包括主控芯片、复位电路和晶振电路。

主控芯片选取STC89C51RC芯片,因其具有良好的性能及稳定性,价格便宜应用方便。

晶振选取11.0592MHz,晶振旁电容选取30pF。

采用按键复位电路,电阻分别选取100Ω和10K,电容选取10μF。

单片机最小系统硬件电路图如图

(1)所示。

(1)单片机最小系统

2.键盘接口电路

计算器所需按键有:

数字键:

’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’0’

功能键:

’+’,’-‘,’*’,’/’,’=’,’C(清零)’

共计16个按键,采用4*4矩阵键盘,键盘的行和列之间都有公共端相连,四行采用端口P0.0~P0.3,四列采用端口P3.0~P3.3,通过8个端口的的高低电平完成对矩阵键盘的控制。

通过对16个按键进行编码,从而得到键盘的口地址,对比P1口德扫描结果和各按键的地址,我们就可以得到是哪个键按下,从而完成键盘的功能。

3.数码管显示电路

采用4位一体的数码管对计算数据和结果进行显示,这里选取共阳数码管,利用NPN三极管对数码管进行驱动,为了节省I/O资源,采取动态显示的方法来显示计算数据及结果。

利用SN74LS244N锁存器来实现数码管的动态显示,P1口输出显示值,P2.0~P2.3为位选端口。

通过锁存器对段选信号的锁存,最终得到对数码管输入数据的控制。

以下为数码显示电路的硬件电路图,左图为数码管驱动电路,右图为段选信号锁存电路。

 

四.软件设计部分

根据选题要求,系统编程如下所示:

#include"reg51.h"

sbitP3_0=P3^0;

sbitP3_1=P3^1;

sbitP3_2=P3^2;

sbitP3_3=P3^3;

sbitP3_4=P3^4;

sbitP3_5=P3^5;

sbitP3_6=P3^6;

sbitP3_7=P3^7;

unsignedcharsz[11],xs1[4],xs2[4],sj;

inti,cs,bb,t1,t2,fh,s1,s2;

voidchushihua()

{

bb=1;

xs1[0]=10;xs1[1]=10;xs1[2]=10;xs1[3]=10;

xs2[0]=10;xs2[1]=10;xs2[2]=10;xs2[3]=10;

t1=0;t2=0;s1=s2=0;

fh=0;

cs=1;

}

voidxianshi(unsignedcharxs[4])

{

inti,j;

unsignedcharzy;

zy=0x08;

for(i=0;i<4;i++)

{

P2=(0xff-zy);

P1=sz[xs[i]];

zy=(zy>>1);

for(j=0;j<100;j++);

}

//for(i=0;i<100;i++);

return;

}

unsignedcharsaomiao()

{

inti,j;

unsignedcharpp;

for(i=0;i<1000;i++);

P0=0xfe;

P3=0x0f;

pp=P3;

if(P3_0==0){P3=0x0f;pp=P3;while(P3_0==0);for(i=0;i<1000;i++);return7;}

if(P3_1==0){P3=0x0f;pp=P3;while(P3_1==0);for(i=0;i<1000;i++);return8;}

if(P3_2==0){P3=0x0f;pp=P3;while(P3_2==0);for(i=0;i<1000;i++);return9;}

if(P3_3==0){P3=0x0f;pp=P3;while(P3_3==0);for(i=0;i<1000;i++);return11;}

//==========1

P0=0xfd;

P3=0x0f;

pp=P3;

if(P3_0==0){P3=0x0f;pp=P3;while(P3_0==0);for(i=0;i<1000;i++);return4;}

if(P3_1==0){P3=0x0f;pp=P3;while(P3_1==0);for(i=0;i<1000;i++);return5;}

if(P3_2==0){P3=0x0f;pp=P3;while(P3_2==0);for(i=0;i<1000;i++);return6;}

if(P3_3==0){P3=0x0f;pp=P3;while(P3_3==0);for(i=0;i<1000;i++);return12;}

//==========2

P0=0xfb;

P3=0x0f;

pp=P3;

if(P3_0==0){P3=0x0f;pp=P3;while(P3_0==0);for(i=0;i<1000;i++);return1;}

if(P3_1==0){P3=0x0f;pp=P3;while(P3_1==0);for(i=0;i<1000;i++);return2;}

if(P3_2==0){P3=0x0f;pp=P3;while(P3_2==0);for(i=0;i<1000;i++);return3;}

if(P3_3==0){P3=0x0f;pp=P3;while(P3_3==0);for(i=0;i<1000;i++);return13;}

//==========3

P0=0xf7;

P3=0x0f;

pp=P3;

if(P3_0==0){P3=0x0f;pp=P3;while(P3_0==0);for(i=0;i<1000;i++);return16;}

if(P3_1==0){P3=0x0f;pp=P3;while(P3_1==0);for(i=0;i<1000;i++);return0;}

if(P3_2==0){P3=0x0f;pp=P3;while(P3_2==0);for(i=0;i<1000;i++);return15;}

if(P3_3==0){P3=0x0f;pp=P3;while(P3_3==0);for(i=0;i<1000;i++);return14;}

//===========4

return10;

}

voidchuli(unsignedcharx)

{

inti;

if(x==16)

{

cs=0;

return;

}

if(x>=0&&x<10)

{

if(bb==1)

{

if(s1==4){cs=0;return;}

else

{

for(i=3;i>0;i--)

xs1[i]=xs1[i-1];

xs1[0]=x;

s1++;

t1=t1*10+x;

}

}

if(bb==2)

{

if(s2==4){cs=0;return;}

else

{

for(i=3;i>0;i--)

xs2[i]=xs2[i-1];

xs2[0]=x;

s2++;

t2=t2*10+x;

}

}

}

if(x>10)

{

if(bb==1){fh=x;bb=2;return;}

if(bb==2)

{

if(fh==11)t1=t1/t2;

if(fh==12)t1=t1*t2;

if(fh==13)t1=t1-t2;

if(fh==14)t1=t1+t2;

if(t1>=10000){cs=0;return;}

else

{

if(t1>=0&&t1<10){xs1[0]=t1;xs1[1]=10;xs1[2]=10;xs1[3]=10;}

if(t1>=10&&t1<100){xs1[0]=t1%10;xs1[1]=t1/10;xs1[2]=10;xs1[3]=10;}

if(t1>=100&&t1<1000){xs1[0]=t1%10;xs1[1]=(t1-(t1/100)*100)/10;xs1[2]=t1/100;xs1[3]=10;}

if(t1>=1000&&t1<10000){xs1[0]=t1%10;xs1[1]=t1%100/10;xs1[2]=(t1-(t1/1000)*1000)/100;xs1[3]=t1/1000;}

bb=2;

s2=0;

t2=0;

xs2[0]=10;xs2[1]=10;xs2[2]=10;xs2[3]=10;

fh=x;

}

}

}

}

voidmain()

{

sz[0]=0xfc;

sz[1]=0x60;

sz[2]=0xda;

sz[3]=0xf2;

sz[4]=0x66;

sz[5]=0xb6;

sz[6]=0xbe;

sz[7]=0xe0;

sz[8]=0xfe;

sz[9]=0xf6;

sz[10]=0x00;

cs=0;

for(;;)

{

if(cs==0)chushihua();

if(cs==1)sj=saomiao();

if(cs==1&&sj!

=10)chuli(sj);

if(cs==1&&(bb==1||bb==2&&s2==0))xianshi(xs1);

if(cs==1&&(bb==2&&s2!

=0))xianshi(xs2);

}

}

软件设计好后,在KEIL上面进行仿真,把仿真得到的文件下载到Proteus里面进行仿真,得到Proteus仿真电路图如下所示:

(2)计算器Proteus仿真电路图

 

五.硬件电路焊接及调试

根据电路图纸,焊接好硬件电路,把程序下载到单片机芯片,接通好电源,进行调试。

在焊接好器件后,先不要将芯片插在芯片座上,要先验证先板上电源是否好用,有无短路等。

接上USB电源,用万用表测量个芯片座对应电源和地之间的电压值,观察电压值是否正常。

一切正常后方可将芯片插入芯片座,以继续测试其他功能。

将芯片插上后,对各个模块进行调试,按键是否工作正常,数码管是否显示正常等。

编写相关部分的测试程序对其进行测试。

各部分硬件检测无误后,下载程序进行整体调试,一切正常后,结束调试过程。

用所设计的单片机进行数字计算,显示结果与任务要求一致,焊接电路符合要求。

 

六.课程设计心得

两周的时间,终于把单片机课程设计搞完了。

整个体会还是比较多的。

首先是题目的选择,各方面的原因,自己还是想选个简单点的题目,不过最后选来选去,还是选择了计算器。

由于自己对单片机编程还不是很熟悉,结果在设计的时候遇到了一系列问题,程序总是调试部处理,不过还好,最后在同学的帮助下终于把程序调试出来了,虽然程序设计实现的功能与老师要求的不尽相同,不过勉强还算可以。

从这里我知道了基本知识的重要性。

其实进行程序设计的时候主要是对各功能模块的把握。

计算器里面最难的一部分是矩阵键盘的扫描和编码,那个费了很大力气。

另外一点就是硬件焊接调试部分。

焊接的时候到时轻松,一个下午就焊接好了,然后是调试部分。

调试花费的时间还是比较长的。

不过有了上个学期数字电路焊接调试的经验,这次单片机调试还算是比较顺利。

我也是从电路板的正负电源检测起,一步一步来,最终得到了想要的结果。

调试的时候主要遇到了两个问题。

一个是键盘总是没有反应,为了这个自己调试了很久,前前后后把电路板检查了几次,最后才发现是键盘本身的问题,和同学们换了个好键盘才行。

另一个问题是总是显示不出来1、4、7这三个数字。

检测来检测去,发现来是在测试最小系统时在一个位选端接了高电平,对位选信号产生了影响。

当把那个高电平去掉后,终于得到了正确的结果。

总的来说这次课程设计达到了完成了基本任务,达到了基本要求。

通过亲身对程序设计和电路焊接调试的体会,自己对单片机有了进一步的了解,单片机编程能力也得到了提高。

电路板的焊接与调试,使自己电路调试的方法和思想进一步加强了。

这次单片机课程设计应该说是比较成功的。

 

参考文献:

【1】徐维祥、刘旭敏:

,《单片微型机原理及应用》,大连理工大学出版社,1996年。

【2】李光飞、楼然苗、胡佳文、谢象佐.,《单片机课程设计与实例指导.》,北京航空航天大学出版社,2004年。

【3】余永权,《89系列FLASH单片机原理及应用.》,电子工业出版社,2002。

【4】杨恢先、黄辉先,《单片机原理及应用》,人民邮电出版社,2006年。

【5】常敏、王涵、范江波,《单片机应用程序开发与实践》,电子工业出版社,2009年。

 

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

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2