基于单片机的计算器设计Word文档下载推荐.docx

上传人:b****6 文档编号:17513669 上传时间:2022-12-06 格式:DOCX 页数:24 大小:137.52KB
下载 相关 举报
基于单片机的计算器设计Word文档下载推荐.docx_第1页
第1页 / 共24页
基于单片机的计算器设计Word文档下载推荐.docx_第2页
第2页 / 共24页
基于单片机的计算器设计Word文档下载推荐.docx_第3页
第3页 / 共24页
基于单片机的计算器设计Word文档下载推荐.docx_第4页
第4页 / 共24页
基于单片机的计算器设计Word文档下载推荐.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

基于单片机的计算器设计Word文档下载推荐.docx

《基于单片机的计算器设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于单片机的计算器设计Word文档下载推荐.docx(24页珍藏版)》请在冰豆网上搜索。

基于单片机的计算器设计Word文档下载推荐.docx

spersonalinformation,delayintotheoptionsmenu,waitingforthetypeselectioncalculationofnumericaldata,intothemodel,thecalculationprocessandresultswillbedisplayedontheLCD,intheinput+,-,*,/operator,calculatorintheinternalimplementationofnumericalconversionandstorageagain,andwaitingforinputvalues,whentypinginnumericalwilldisplaytypevalue,accordingtothesignwillbedisplayedontheLCDoperationalresults.

Keywordscalculator;

MCU;

keyboard;

LCD

1功能概述1

1.1课题任务与功能要求1

1.2方案概述1

2课题硬件系统设计2

2.1单片机各模块电路简介2

2.1.1单片机最小系统2

2.1.2矩阵式键盘电路2

2.1.3液晶显示电路2

2.1.4下载口电路3

2.1.5硬件测试3

3课题软件系统设计4

3.1单片机资源使用情况4

3.2软件各模块简要介绍4

3.2.1液晶显示程序4

3.2.2键处理和键扫描程序4

3.2.3延时1ms程序4

3.2.4计算程序设计5

3.2.5主函数5

3.2.6程序主流程图6

4设计结论7

4.1使用说明7

4.2心得体会7

结束语8

致谢9

参考文献10

附录A11

附录B12

附录C13

1功能概述

1.1课题任务与功能要求

设计一个具有特定功能的计算器。

该计算器上电或按键复位后能自动显示系

统提示符“P.”,进入准备工作状态,其中计算器能实现

(1)基本的加、减、乘、除、平方、开方;

(2)三角函数运算;

3)十进制、十六进制转换运算;

4)其他功能

1.2方案概述

本设计采用单片机以及其外部设备组成硬件电路,其中包括单片机、LCD液晶显示器、矩阵式键盘。

其中矩阵式键盘接在P1口上,除此之外还有晶振电路,复位电路,电源电路和下载口电路。

程序设计采用C51语言编写。

开机时,液晶面板显示湖南工学院及作者个人信息。

其后,选择菜单栏中的计算器,进入计算器模式,本实验的计算器可以实现十六位无符号数字的加、减、乘、除运算,并显示结果后的三位小数。

当计算方式出错时候,显示error!

,并提示操作者清零后,并再次输入,同时计算器还可以实现十进制、十六进制转换运算,三角函数运算及平方和开方运算。

满足要求之外,本课程设计还可以实现对数的运算,同时在运算结果中保留三位小数

方案设计框图如图1所示:

LCD显示部分

 

图1系统设计框图

2课题硬件系统设计

2.1单片机各模块电路简介

2.1.1单片机最小系统

单片机最小系统包括电源电路、时钟电路、复位电路、液晶显示电路。

只有当单片机有了这些电路才会工作。

电源电路给单片机供电,时钟电路给单片机提供计数时间,复位电路可以实现单片机的复位。

而液晶显示模块显示单片机计算的各种状态。

通过一系列的连接构成完整的单片机系统。

2.1.2矩阵式键盘电路

单片机的P1口用作键盘I/O口,键盘的列线接到P1口的低4位,键盘的行线接到P1口的高4位,也就是把列线P1.0-P1.3分别接4个上拉电阻到电源,把列线P1.0-P1.3设置为输入线,行线P1.4-P1.7设置为输出线,4根行线和4根列线形成16个相交点,检测当前是否有键被按下:

检测的方法是P1.4-P1.7输出全“0,”读取P1.0-P1.3的状态,若P1.0-P1.3为全“1,”则说明无键闭合;

否则有键闭合。

去除键抖动:

当检测到有键按下后,延时一段时间再做下一次的检测判断,若仍有键按下,应识别出是哪一个键闭合,方法是对键盘的行线进行扫描,在每组行输出时读取P1.0-P1.3;

若全为“1,”则表示为“0这”一行没有键闭合;

否则就是有键闭合。

由此得到闭合键的行值和列值,然后可采用计算法或查表法将闭合键的行值和列值转换成所定义的键值。

为了保证按键每闭合一次CPU仅作一次处理,必须去除键释放时的抖动。

2.1.3液晶显示电路

带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;

其显示分辨率为128×

64,内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令。

DB三态数据口线连接到P0口,而RW连接到P3.1,RS接到P3.0。

而PSB和K连接VCC直流电源,液晶的RESTE脚通过电阻接地。

同时1脚和2脚分别接地和接VCC。

2.1.4下载口电路

下载口的1脚接P1.5口,2脚悬空,3脚接单片机的复位口,4脚接P1.6口,5脚接P1.7口,6脚接地,7、8、8、10脚接地。

2.1.5硬件测试

板子做好后通过老师给的测试程序测得各模块的功能均正常。

单片机最小系统正常工作,液晶显示正常,矩阵式键盘正常工作,复位电路正常。

3课题软件系统设计

3.1单片机系统软件的总体设计

在利用编程语言当中,汇编语言比较接近底层,编程效率高;

C语言则语言灵活,在编写算法中会比较方便。

虽然我们在单片机技术中是学习的汇编语言,但相对而言我还是对于单片机的C语言编程更加熟悉,而且C语言在计算器中涉及到的大量计算中会比较简便。

3.2软件各模块简要介绍

3.2.1液晶显示程序

液晶的显示函数显示,将相应数据送至液晶指定的地址,读取ASCII码后,读取存储于液晶中的汉字代码,之后再于液晶屏幕上显示。

实现显示需要的字符信息。

3.2.2键处理和键扫描程序

键处理函数主要是将从P1口取值送往单片机进行取反处理。

键扫描函数主要是判断是否真的有键按下,即度过前沿抖动之后再判断是否有键按下,如果确实有键按下再判断是否释放,同样也要度过后沿抖动。

最终将处理完的键值作为返回值返回。

3.2.3延时5ms程序

此函数要在矩阵式键盘中函数中用到,由于时间比较短,就采用纯软件的方法延时。

3.2.4计算程序设计

选择进入计算模式,在进入计算函数后,然后进入键盘扫描程序的死循环,当没有键按下,循环一直执行,当有键按下时,通过延迟技术来进行按键去抖,判断按键是否松开,如松开则将得到的键值进行判断是哪一个键。

同时利用液晶的写入指令,让按键值显示与液晶板上,之后不断的将按下的键值存入缓冲的变量中,将原来的数值乘十加上刚键入的键值的数则是变量的值,当输入出现小数时,小数点的标志位打开,之后键入的数值则通过不断乘以0.1存入小数点后几位,当写入功能运算符时,开启运算符标志位,并将得到的数值保存,同时将缓冲单元清零,等待输入运算数据。

之后不断的重复将数值输入并与液晶面板上显示,同时计算器也可以实现其他动能的运算,SHIFT按键可以进行按键的切换,分别实现三角函数的运算,十六进制—十进制的转换,求对数,平方和开根号的运算。

当按下等号时,根据记录的运算符标志,判断运算类型,执行运算并将结果乘以1000,在进行显示时候则将结果依次除以1000取余数放入结果显示缓冲区,利用编写的显示函数,依次循环执行

3.2.5主函数

主函数是程序的入口,在主函数中一直调用液晶显示函数和键扫描函数,当

没有键按下时一直显示菜单,当有选择的按键按下后,则进入计算模式。

3.2.6程序主流程图

图1程序主流程图

4设计结论

4.1使用说明

本设计的矩阵式键盘分为数字键和功能键,A为平方,B为根号,C为SHIFT键,D为小数点键,E为清零键,F为等于键,当按键进入SHIFT模式时,0为加,1为减,2为乘,3为除,4为正弦键,5为余弦键,6为正切键,7为对数功能键,8为十转十六键,9为十六转十键,A为输入A键,B为输入B键,C为输入C键,D为输入D键,E为输入E键,F为输入F键。

4.2心得体会

本次C语言计算器编程给我很多帮助,其实暑假时候已经编好了,但是精确度不够,不能进行带小数点的运算,于是我决定在这次课程设计中再次选择计算器,在期末考试接近的情况下,我最终将计算器搞定,虽然计算器运行处理数据及显示存在小小的误差,但是最终我知道了误差原因,这些计算误差是来自本身函数调用的误差,这点确实无法改正。

这个实验给我的感觉,硬件和软件上都不是很难。

在期末的时候我原本是要用到汇编语言编的计算器,但是一直存在问题,无法运用,最后我决定先编好自己的C语言,通过不断的实验和改正,我最终完成了这个计算器,当然在过程中让我对C语言编程有了更好的了解,在这次实验上,感觉收获良多。

遗憾的是,我的汇编语言版本的计算器存在问题,没有上交老师。

同时在实验中,我居然发现单片机的RAM不够,出现这些问题主要原因是我把计算器的计算精度调的太高,而且C51中无法定义位变量,这些都是造成问题的主要原因。

但是通过我不断调低精确度,最终还是解决了问题。

当然遗憾就是我没有实现网络上的定义结构体位变量,和将RAM中的低位字节移到高位RAM中的方法。

结束语

将本设计的程序下载到单片机中,通过测试,完美的完成了任务书的要求,但是遗憾的是计算的精确度有一定的误差,因为在调用计算程序是调用的库函数,所以多次取值后存在误差,当然对于高精度的计算器,本设计的精度还是不够的,还需要进一步的改进,甚至可以精度提高到小数点后六位。

而且51单片机的RAM不够,ROM也不够,这些也是造成误差的原因。

致谢

本次计算器课题在进行过程中得到了王韧老师的悉心指导和同学们的热心帮助。

在这里特意感谢在课程设计中帮助过我的老师和同学。

在暑假的时候由于王老师的悉心指导才让我能够完成本次的计算器的课程设计,再多华丽的言语也显苍白。

在此,谨向王老师致以诚挚的谢意和崇高的敬意。

在设计过程中,我通过查阅大量有关资料,与同学交流经验和自学,并向老师请教等方式,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。

在整个设计中我懂得了许多东西,也培养了我独立工作的能力,树立了对自己能力的信心,相信会对今后的学习工作生活有非常重要的影响。

使我充分体会到了在创造过程中探索的艰难和成功时的喜悦。

感谢暑假和我一起培训的同学,在本次课程设计中给予我很多帮助。

感谢班上同学的积极支持和鼓励,让我能够在困难中最终完成了计算器。

参考文献

[1]李广弟.单片机技术基础[M].第三版.北京:

北京航空航天大学出版社,2007

[2]马忠梅.单片机的C语言应用程序设计[M].第四版.北京航空航天大学出版社,2007

[3]李光飞.单片机课程设计实例指导[M].北京:

北京航空航天大学出版社,2004

键扫描函数流程图

电路原理图如图B1

C语言程序清单:

/*项目名称:

计算器*/

/*设计者:

詹志敏*/

/*时间:

2011年12月1日*/

/*项目功能:

设计一个具有特定功能的计算器。

该计算器上电或按键复位后能自动显示系统提示符“P.”,进入准备工作状态,其中计算器能实现

(3)十进制、十六进制转换运算;

(4)其他功能。

/***************************************************

*标题:

*日期:

2011-8-11

*作者:

詹志敏

*版本:

4.0

***************************************************/

#include<

jing_51.h>

#defineJING_GLOBALS

#defineucharunsignedchar

#defineuintunsignedint

externvoidjs(void);

//=================================

externrs;

externrw;

externen;

//==============sbitpsb=P2^1;

sbitret=P2^3;

uchardata0,count;

ucharv;

主程序

voidmain(void)

{

lcd_clear();

lcd_int();

lcdset();

display0();

delay3s();

while

(1)

display1();

v=keyscan();

switch(v)

case0x00:

break;

case0x11:

年历界面

case0x21:

阵屏界面

case0x41:

率计界面

case0x81:

码锁界面

case0x12:

号源界面

case0x22:

压表界面

case0x42:

度计界面

//按下0键,进入万

//按下1键,进入点

//按下2键,进入频

//按下3键,进入密

//按下4键,进入信

//按下5键,进入电

//按下6键,进入温

//按下7键,进入计

case0x82:

算器界面

js();

}

初始化

voidlcd_int(void)

ret=0;

delay(10);

ret=1;

_nop_();

psb=1;

清屏程序

voidlcd_clear()

writecommand(0x01);

writecommand(0x30);

}

/******************

延时程序*********************/

voiddelay(uintm){while(--m);

voiddelay3s(void)

//

精确延时3s*********************/

误差0us

unsignedchara,b,c;

for(c=189;

c>

0;

c--)for(b=230;

b>

b--)

for(a=33;

a>

a--);

显示程序*********************/

voiddisplay0(void)

display(1,2,"

display(2,1,"

delay(10000);

display(3,2,display(4,3,

电子零九零一"

);

詹志敏"

/*

目录*/

voiddisplay1()

display(1,1,"

writecommand(0x90);

一万年历二点阵屏

writedata(0xc8);

writedata(0xfd);

display(2,2,"

display(3,1,"

display(4,1,"

reg52.h>

#defineucharunsignedchar#defineuintunsignedintsbitrs=P3^0;

sbitrw=P3^1;

sbiten=P3^5;

频率计四密码锁"

五信号源六电压表七计算器八温度计

ucharcommand,com0;

uchardata1,data2;

//数据高位和地位ucharlcd_bufh,lcd_bufl;

//缓冲区

ucharks;

/*液晶*///========================判=忙=================voidcheckbusy()

rs=0;

rw=1;

P0=0xff;

en=1;

if(P0<

0x80)break;

//P0的最高位为忙标志为,H:

忙,L:

空闲

en=0;

en=0;

//===========液晶写指令=========================================voidwritecommand(ucharcommand)

checkbusy();

rw=0;

en=1;

P0=command;

//液晶数据线P0

//============液晶写数据=========================================voidwritedata(u

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

当前位置:首页 > 成人教育 > 远程网络教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1