基于51单片机的简易计算器设计与制作_第1页
基于51单片机的简易计算器设计与制作_第2页
基于51单片机的简易计算器设计与制作_第3页
基于51单片机的简易计算器设计与制作_第4页
基于51单片机的简易计算器设计与制作_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

湖南商务职业技术学院毕业设计

目录

1产品功能分析.........................................................................................................1

2设计方案遴选.........................................................................................................1

2.1单片机的选择..............................................................................................1

2.2系统框图设计..............................................................................................2

3产品硬件设计.........................................................................................................3

3.1STC89C51单片机核心电路设计.................................................................3

3.2键盘电路设计............................................................................................3

3.3液晶显示模块电路.....................................................................................4

4产品软件设计.........................................................................................................5

4.1主程序流程图..............................................................................................6

4.2产品程序清单..............................................................................................7

5产品装配调试及使用说明.....................................................................................8

5.1产品装配图..................................................................................................8

5.2产品调试......................................................................................................9

5.3产品使用说明............................................................................................10

6产品设计技术标准...............................................................................................10

附录1元器件清单.....................................................................................................11

附录2电路原理图.....................................................................................................12

附录3PCB设计图....................................................................................................13

附录4产品实物图...................................................................................................14

附录5主程序代码...................................................................................................15

参考资料...................................................................................................................24

湖南商务职业技术学院毕业设计

基于51单片机的简易计算器设计与制作

1产品功能分析

本设计是以STC89C51单片机为核心的计算器模拟系统设计,输入采用4*4

矩阵键盘,可以进行加减乘除带符号数字运算,并在液晶显示屏LCD1602上显

示操作过程和结果。

本设计旨在加强掌握单片机理论知识,加强对于实际应用系统设计能力。

综合运用在校阶段所学软硬件知识分析实际问题,提高完成毕业设计实际问题

的能力,为以后单片机应用和开发奠定一定的基础,并且完成出带有四则运算能

力的简易计算器设计。

2设计方案遴选

选择好兼容合适的元器件进行产品的组装,由STC89C51单片机的数据处理

功能以及液晶显示功能组成,产品应能对数字进行有效运算。

2.1单片机的选择

方案1:选择C51系列单片机

51单片机作为应用最广泛的8位单片机具有对于传送,清零,置位,测试

等某些特殊功能寄存器进行处理,还有位的功能处理,这些功能的完备,让操

作者可以得心应手,乘除法指令也给使用者的工作有着很大的便利,对单片机

底层工作原理也能有更深的理解和运用。

当然51单片机的短板也很明显,外设资源非常有限,运行速度相对于stm32

来说较慢,不太适合做复杂的产品,但运用于不是很复杂的产品其性价比还是

很高的,本人在考虑到上手难度及价格方面等综合因素,51系列单片机于个人

而言是个相当不错的选择,所以选择了该系列单片机。

方案2:选择STM32系列单片机

STM32单片机特点是性能好损耗较低,适用于设计的控制电路.但是缺点也

1

湖南商务职业技术学院毕业设计

很明显,成本较高和复杂。并且STM32是跑指令的,适合跑算法,但是针对多

路的信号处理就需要很多片DSP来并行处理,个人角度而言不适用故没有选择。

2.2系统框图设计

系统框图如图2-1所示:

按键控制

微处理器LCD1602

运算控制STC89C51单数据显示

片机

图2-1系统框图

2

湖南商务职业技术学院毕业设计

3产品硬件设计

3.1STC89C51单片机核心电路设计

使用STC89C51因为价钱比较便宜,技术相当成熟了,加之稳定耐用,程序

跑起来不容易出错,但是51单片机偏简单,没有现成的控制器和库,需要了解

原理后亲自实现一遍,但是也使基础知识学习的更加扎实。AT89c51单片机实质

是一个硬件的芯片,要外加各种扩展接口电路,外部设备,硬件和软件,本设

计选用以STC89C51单片机为主控单元。

3.2键盘电路设计

本设计使用4*4矩阵式键盘,对于功能相对复杂,需要输入输出参数较多

的系统,此矩阵式键盘控制十分方便,在单片机系统中,大部分都是设置键盘,

按钮等功能,主要是为了控制运行状态,便于输入输出一些命令或者数据,键

盘是最简单最基本的进行人机交互的途径,用按键的形式来控制,它实际上本

质是一个开关量,简单的可以用独立的按键,但是本设计需要进行加减乘除等

运算,所以在这里我们使用的是4*4的矩阵式的键盘,键盘的连接方式如图3-2

所示。

图3-2键盘电路

3

湖南商务职业技术学院毕业设计

3.3液晶显示模块电路

液晶显示器(LCD)功率小节电,价格实惠,同时使用时的显示质量高,对

人体得电磁辐射小危害小,人们肉眼可视面积比较大,整体的一个体积相对较

小,本身配置的重量轻快,屏幕显示出来的画面效果好,在生活中可以应用范

围的广,还有可以数字式接口十分方便等优点,并且它的使用在日常生活可以

说是随处可见了,像菜市场和便利店用到的计算器,旅游和电影中用到得数码

相机,在家中摆放得液晶电视等,因为本设计在使用时需要显示的信息比较多,

为了在操作时可以能直观看到最后结果,并且看起来整体比较美观,所以使用

总线等方法来简化线路连接方式,本设计用液晶显示器(LCD)。

LCD1602液晶显示原理图如图3-3所示。

图3-3LCD1602液晶显示原理图

LCM1602液晶显示实物图3-4如下图所示:

4

湖南商务职业技术学院毕业设计

图3-4LCM1602液晶显示实物图

4产品软件设计

产品采用C语言,KELL编程环境,由相对简单的几个模块化程序组成,计

算器需要用到很多按键,如果用独立按键的方式,编程绘简单很多,但是绘占

用许多I/O资源,所以一般情况都不会采用如图4.1这种方式,但是资源有限,

不过并不会影响其计算器功能

5

湖南商务职业技术学院毕业设计

4.1主程序流程图

主程序流程图如图4-1所示。

6

湖南商务职业技术学院毕业设计

图4-1主程序流程图

4.2产品程序清单

产品程序清单如图4-2所示。

7

湖南商务职业技术学院毕业设计

图4-2产品程序清单

5产品装配调试及使用说明

5.1产品装配图

产品主要由STC89C52单片机模块,LCD液晶显示器模块,电源接口,电源

8

湖南商务职业技术学院毕业设计

开关,独立按键等等组成。产品装配图如图5-1所示。

图5-1产品装配图

5.2产品调试

A.检查元件好坏

按照电路图买好元件先大概检查一下外部有无损坏,然后按照不同元件的不同

检查方法一个一个来检测,要细致把控每个元件的好坏,在对照这原理图是否

一致,全部检查完后在进行焊接,不然出错后将会不方便更改。

B.放置、焊接各元件

首先按照原理图来,一个一个放好元器件,在放好元器件的过程中,最好

9

湖南商务职业技术学院毕业设计

是要先焊接比较容易焊接容易的元器件,焊接难度高的和有特别要求的元件,

特别是容易坏的元件我们要后焊,要注意芯片和元件的安装方向,如果弄错不

方便更改,在焊接的时候我们要把控好时机连续焊接时间最好不要超过8s。

5.3产品使用说明

A.插好电源,按开关键等待计算机启动。

B.该计算机一共有1到9,加减乘除,清零和运算结果加起来十五个按键。

C.随机组合1234等数字进行运算,观察液晶显示屏上的运算结果如何,运

算完后按清零键即可重新开始计算。

D.使用完后按下开关,拔掉电源即可。

6产品设计技术标准

[1]J-STD-001E电气与电子组件的焊接要求

[2]IPC-A-610D(中文版),IPC-A-610E电子组件的可接受性要求

[3]IPC-7711/21电子组件和电路板的返工&返修

[4]GB/T11457-2006信息技术软件工程术语;

[5]GB/T8566-2007信息技术软件生存周期过程标准;

[6]GB/T8567-2006计算机软件文档编制规范。

10

湖南商务职业技术学院毕业设计

附录

附录1元器件清单

11

湖南商务职业技术学院毕业设计

附录2电路原理图

12

湖南商务职业技术学院毕业设计

附录3PCB设计图

13

湖南商务职业技术学院毕业设计

附录4产品实物图

14

湖南商务职业技术学院毕业设计

附录5主程序代码

#include<reg52.h>//调用单片机头文件

#include<stdio.h>//调用单片机头文件

#include<string.h>//调用单片机头文件

#include<stdlib.h>//调用单片机头文件

#defineucharunsignedchar//无符号字符型宏定义变量范围0~255

#defineuintunsignedint//无符号整型宏定义变量范围0~65535

floatnum1;//保存第一个数

floatnum2;//保存第二个数

ucharjjcc;//加减乘除标志变量

ucharLcd_Str[17];//显示区缓存

ucharNum_str[17];

ucharLcd_num2_add=0;//第二个数据开始位的增量

ucharLcd_dis1_i=0;//记录显示第一行字符

ucharLcd_num1_i=0;//记录num1是几位数

ucharLcd_num2_i=0;//记录num2是几位数

ucharDian_i=0;//小数点位数

sbitrs=P1^0;//寄存器选择信号H:数据寄存器L:指令寄存器

sbitrw=P1^1;//寄存器选择信号H:数据寄存器L:指令寄存器

sbite=P1^2;//片选信号下降沿触发

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

*名称:delay_uint()

*功能:小延时。

*输入:无

*输出:无

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

voiddelay_uint(uintq)

{

while(q--);

}

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

*名称:write_com(ucharcom)

*功能:1602指令函数

*输入:输入的指令值

15

湖南商务职业技术学院毕业设计

*输出:无

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

voidwrite_com(ucharcom)

{

rs=0;//写指令

rw=0;//对1602写操作

P0=com;//P0口对1602写指令数据

delay_uint(25);

e=1;//e=1使能信号

delay_uint(100);//延时一下等1602完成操作

e=0;

}

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

*名称:write_data(uchardat)

*功能:1602写数据函数

*输入:需要写入1602的数据

*输出:无

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

voidwrite_data(uchardat)

{

rs=1;//写数据

rw=0;//对1602写操作

P0=dat;//P0口对1602写数据

delay_uint(25);

e=1;//e=1使能信号

delay_uint(100);//延时一下等1602完成操作

e=0;

}

/***********************lcd1602上显示这字符函数************************/

voidDis_str(ucharadd,uchar*p)

{

write_com(add);//写1602的地址

while(*p>0)

{

write_data(*p);//写数据

p++;//指针地址加1

}

}

voidinit_1602()

16

湖南商务职业技术学院毕业设计

{

write_com(0x38);//显示模式设置:16×2显示,5×7点阵,8位数据接口不检测忙信号

write_com(0x0c);//开显示不显示光标

write_com(0x06);//当写一个字符是,地址指针加1

write_com(0x01);//清除显示

}

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

*名称:delay_1ms()

*功能:延时1ms函数

*输入:q

*输出:无

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

voiddelay_1ms(uintq)

{

uinti,j;

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

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

}

ucharKey_io;//暂存IO值

ucharkey_new;//松手检测自锁变量

ucharkey_can;//按键值

ucharKey_D_bit;

/********************按键程序*****************/

voidkey(void)

{

key_can=18;

P3=0xf0;//拉低第四位

Key_io=P3;

if(Key_io!=0xf0)//查看搞四位是否有低电平

{

Key_io|=0x0f;//保持高四位出现低电平的管脚,拉高第四位

P3=Key_io;//重新复制IO口

Key_io=P3;//读取IO信息,确定键值

if(key_new==0)//自锁变量,松手检测

{

key_new=1;

switch(Key_io)

{

case0x7e:key_can=10;//得到按键值

break;

17

湖南商务职业技术学院毕业设计

case0x7d:key_can=0;//得到按键值

break;

case0x7b:key_can=11;//得到按键值

break;

case0x77:key_can=15;//得到按键值

break;

case0xbe:key_can=7;//得到按键值

break;

case0xbd:key_can=8;//得到按键值

break;

case0xbb:key_can=9;//得到按键值

break;

case0xb7:key_can=14;//得到按键值

break;

case0xde:key_can=13;//得到按键值

break;

case0xdd:key_can=6;//得到按键值

break;

case0xdb:key_can=5;//得到按键值

break;

case0xd7:key_can=4;//得到按键值

break;

case0xee:key_can=12;//得到按键值

break;

case0xed:key_can=3;//得到按键值

break;

18

湖南商务职业技术学院毕业设计

case0xeb:key_can=2;//得到按键值

break;

case0xe7:key_can=1;//得到按键值

break;

}

}

}

else

{

key_new=0;

}

}

ucharXS_JG(ucharadd,floatn)//显示函数

{

ucharlen,p=0;

memset(Lcd_Str,0,16);//内存空间初始化

sprintf(Lcd_Str,"%e",n);

while(Lcd_Str[p]!='e')

{

p++;

}

if(Lcd_Str[p+2]==0x30&&Lcd_Str[p+3]<0x37)

{

sprintf(Lcd_Str,"%f",n);

len=strlen(Lcd_Str);

while(len)

{

if(Lcd_Str[len-1]=='.')

{

Lcd_Str[len-1]=0;

break;

}

len--;

}

}

else

{

while(p)

{

if(Lcd_Str[p-1]=='.')

19

湖南商务职业技术学院毕业设计

{

Lcd_Str[p-1]='';

break;

}

p--;

}

}

Dis_str(add,"");

Dis_str(add,Lcd_Str);

returnlen;

}

/*************显示特殊字符函数***************/

voidfuhao(uchars)

{

if(jjcc<5)

{

if(jjcc==0)

{

Num_str[Lcd_dis1_i]=s;

Lcd_dis1_i++;

Lcd_num2_add=Lcd_dis1_i;

}

else

{

if(Num_str[Lcd_num2_add]==0)

Num_str[Lcd_dis1_i-1]=s;

}

Dis_str(0x80,Num_str);

}

if(jjcc==5)

{

Lcd_dis1_i=4;

Lcd_num2_i=0;

Lcd_num2_add=4;

memset(Num_str,0,16);//内存空间初始化

Num_str[0]='A';

Num_str[1]='n';

Num_str[2]='s';

Num_str[3]=s;

20

湖南商务职业技术学院毕业设计

Dis_str(0x80,"");

Dis_str(0x80,Num_str);

}

}

voidmain(void)

{

init_1602();//lcd1602初始化

write_data('0');

memset(Num_str,0,16);

while(1)

{

key();//读按键值

delay_1ms(10);

if(key_can<18)//是否有按键按下,小于16时有按键按下

{

delay_1ms(30);

switch(key_can)

{

case11:if(Num_str[Lcd_num2_add]<=0x39&&Num_str[Lcd_num2_add]>=0x30)

num2=atof(Num_str+Lcd_num2_add);//从数组中取第二个数字

else

break;

Lcd_num2_i=0;

switch(jjcc)

{

case1:num1+=num2;//加

break;

case2:num1-=num2;//减

break;

case3:num1*=num2;//乘

break;

case4:num1/=num2;//除

break;

}

XS_JG(0xc0,num1);

Dis_str(0x80+Lcd_dis1_i,"=");

jjcc=5;//等号标志

21

湖南商务职业技术学院毕业设计

break;

case12:if(Num_str[0]==0||Lcd_num2_i>0)

break;

fuhao('+');

jjcc=1;Dian_i=0;

break;//按下加号键

case13:if(Num_str[0]==0||Lcd_num2_i>0)

break;

fuhao('-');

jjcc=2;Dian_i=0;

break;//按下减号键

case14:if(Num_str[0]==0||Lcd_num2_i>0)

break;

fuhao('*');

jjcc=3;Dian_i=0;

break;//按下乘号键

case15:if(Num_str[0]==0||Lcd_num2_i>0)

break;

fuhao('/');

jjcc=4;Dian_i=0;

break;//按下除号键

case10:if(Dian_i==0&&(Lcd_num1_i!=0||Lcd_num2_i!=0))//输入小数点时

前面必须有数字

{

Dian_i++;//小数点

Num_str[Lcd_dis1_i]='.';

Lcd_dis1_i++;

Dis_str(0x80,Num_str);

}

break;

case16:jjcc=0;

Dis_str(0x80,"0");//清除显示

Dis_str(0xc0,"");

/*********************删除一个数字*******************/

case17:if(Lcd_dis1_i==0)

break;

/*********************删除一个数字删

除小数点按等号后不再撤销*******************/

if(((Num_str[Lcd_dis1_i-1]<=0x39&&Num_str[Lcd_dis1_i-1]>=0x30)||Num_str[Lcd_dis1_i-1]==

'.')&&jjcc!=5)

22

湖南商务职业技术学院毕业设计

{

if(Num_str[Lcd_dis1_i-1]=='.')

{Dian_i=0;}

else

{

if(jjcc==0)

{

Lcd_num1_i--;

}

else

{

Lcd_num2_i--;

}

}

Lcd_dis1_i--;

Lcd_num2_add=Lcd_dis1_i;

Num_str[Lcd_dis1_i]=0;

Dis_str(0x80,"");

Dis_str(0x80,Num_str);

}

if(Lcd_dis1_i==0)

write_data('0');

break;

default:if(key_can<10&&Dian_i<7)//显示对应的数字键,输入的小数

点后位数小于7位

{

if(jjcc==5)

{

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论