基于51单片机的计算器设计

基于51单片机的计算器设计
基于51单片机的计算器设计

目录

第一章引言 (3)

1、1 简述简易计算器、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

3

1、2 本设计主要任务、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

3

1、3 系统主要功能、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

4

第二章系统主要硬件电路设计、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、4

2、1 系统的硬件构成及功能、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

4

2、2 键盘电路设计、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

5

2、3 显示电路设计、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

6

第三章系统软件设计、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、7

3、1 计算器的软件规划、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

7

3、2 键盘扫描的程序设计、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

7

3、3 显示模块的程序设计、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

8

3、4 主程序的设计、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

9

3、5 软件的可靠性设计、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

9

第四章调试、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、9 第五章结束语、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、10参考文献、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、11 附录源程序、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、11

第一章引言

1、1 简述简易计算器

近几年单片机技术的发展很快,其中电子产品的更新速度迅猛。计算器就是日常生活中比较的常见的电子产品之一。如何才能使计算器技术更加的成熟,充分利用已有的软件与硬件条件,设计出更出色的计算器呢?

本设计就是以AT89S52单片机为核心的计算器模拟系统设计,输入采用4×6矩阵键盘,可以进行加、减、乘、除9位带符号数字运算,并在LCD1602上显示操作过程。

科技的进步告别了以前复杂的模拟电路,一块几厘米平方的单片机可以省去很多繁琐的电路。现在应用较广泛的就是科学计算器,与我们日常所用的简单计算器有较大差别,除了能进行加减乘除,科学计算器还可以进行正数的四则运算

与乘方、开方运算,具有指数、对数、三角函数、反三角函数及存储等计算功能。计算器的未来就是小型化与轻便化,现在市面上出现的使用太阳能电池的计算器,

使用ASIC设计的计算器,如使用纯软件实现的计算器等,未来的智能化计算器将就是我们的发展方向,更希望成为应用广泛的计算工具。

1、2 本设计主要任务

以下就是初步设定的矩阵键盘简易计算器的功能:

1、扩展4*6键盘,其中10个数字,5个功能键,1个清零

2、强化对于电路的焊接

3、使用五位数码管接口电路

4、完成十进制的四则运算(加、减、乘、除);

5、实现结果低于五位的连续运算;

6、使用keil 软件编写程序,使用汇编语言;

7、最后用ptoteus模拟仿真;

8、学会对电路的调试

1、3 系统主要功能

本设计就是一个实现加减乘除的计算器,它的硬件主要由四部分构成,一个8051单片机芯片,两个八段共阴极数码管,一个4*4键盘,它可以实现一位数的加减乘除运算。

显示部分:采用LED动态显示。

按键部分:采用4*4键盘。采用软件识别键值,并执行相应的操作。

第二章系统主要硬件电路设计

2.1系统的硬件构成及功能

主要用到的硬件:AT89S52 LCD液晶显示屏编码键盘

硬件分配:

1、P0、P3口:做为输出口,控制LCD液晶显示屏显示数据的结果。

2、P1口:做为输入口,与键盘连接,实现数据的输入。

3、LCD液晶显示屏显示输出。

为了更好的实现系统得功能,硬件电路的设计应该遵循以下原则:

1、优化硬件电路

采用软件设计与硬件设计相结合的方法;尽管采用软件来实现硬件系统的功能时,也许响应时间会比单纯使用硬件时长,而且还要占用微处理器(MCU)的时间;但就是,用软件实现硬件的功能可以简化硬件结构,提高电路的可靠性。所以,在设计本系统得时候,在满足可靠性与实时性的前提下,尽可能的通过软件来实现硬件功能。

2、可靠性及抗干扰设计

根据可靠性设计理论,系统所用芯片数量越少,系统的平均无故障时间越长。而且,所用芯片数量越少,地址与数据总线在电路板上受干扰的可能性也就越小。因此,系统的设计思想就是在满足功能的情况下力争使用较少数量的芯片。

3、灵活的功能扩展

功能扩展就是否灵活就是衡量一个系统优劣的重要指标。一次设计往往不能完全考虑到系统的各个方面,系统需要不断完善以及进行功能升级。进行功能扩展时,应该在原有设计的基础上,通过修改软件程序与少量硬件完成。对于本系统而言,就就是要求在系统硬件不变的情况下,能够通过修改软件程序,完成功能的升级与扩展。

根据第提出的系统设计方案,结合以上三条原则,确定了系统硬件的设计。计算器主要由以下一些功能模块构成:非编码键盘模块、LCD液晶显示屏模块等。

该系统的硬件设计采用了模块化的设计方法。AT89S52 单片机与LCD液晶显示屏显示电路就是整个电路的核心,它们实现系统的功能要求。

简易计算器主要包括:键盘电路,显示电路。

下图为总体硬件结构。(如图2-1 所示为整个系统的原理图)

图2-1 计算器原理图

前面叙述了该系统的设计说明,系统采用了比较简单的设计方案,所以该系统的硬件设计的总外围电路不会产生过多的干扰。在下面的阐述中,对系统的外围电路分别予以介绍。键盘部分采用编码键盘,显示部分采用LCD液晶显示屏完全能够很好的实现显示方面的要求。

2、2 键盘电路的设计

键盘可分为两类:编码键盘与非编码键盘。编码键盘就是较多按键(20个以上)与专用驱动芯片的组合,当按下某个按键时,它能够处理按键抖动、连击等问题,直接输出按键的编码,无需系统软件干预。通用计算机使用的标准键盘就就是编码键盘。在智能仪器中,使用并行接口芯片8279或串行接口芯片HD7279均可以组成编码键盘,同时还可以兼顾数码管的显示驱动,其相关的接口电路与接口软件均可在芯片资料中得到。当系统功能比较复杂,按键数量很多时,采用编码键盘可以简化软件设计。非编码键盘成本低廉。

从成本角度出发,本设计选用的就是非编码键盘。如图2-2

图2-2 编码键盘电路

2、3 显示电路的设计

当系统需要显示少量数据时,采用LCD液晶显示屏进行显示就是一种经济实用的方法。P0口作为液晶显示的数据端口,P3、5-P3、7口作为其控制端口,控制LCD液晶显示屏显示输出数据。

最终电路如图2、3所示:

图2、3 LCD液晶显示屏显示

第三章系统软件设计

3、1计算器的软件规划

简易计算器的程序主要包括以下功能模块:

1、定时查键模块,分为读键程序、判键程序段、运算操作子程序等部分;

2、基于LCD液晶显示屏的显示模块;

3、主模块,为系统的初始化。

3、2 键盘扫描的程序设计

键盘扫描子程序,首先读出P1的低四位,然后读出P1口的高四位。然后键值并显示缓存。然后将键如的值转换为ASCII码然后就可以软件来设置硬件按键各个键代表的内容。

读键程序使用的就是反转法读键,不管键盘矩阵的规模大小,均进行两次读键。第一次所有行线均输出低电平,从所有读入键盘信息(列信息);第二次所有列线均输出低电平,从所有行线读入键盘信息(行信息)。

数字键按下则将相应的数字送入缓存区,功能键按下则执行相应的程序。3、3 显示模块的程序设计

显示模块程序首先要对显示模块进行初始化;然后控制光标的位置;定义液晶显示的控制端口,用SBIT指令完成;然后设置清屏、关闭显示、归位、开显示、显示位置的首地址等等。

显示模块的流程图如图3、3所示:

图5、3模块的流程

3、4 主程序的设计

主程序主要就是用来对LCD液晶显示屏进行初始化的。

3、5 软件的可靠性设计

提高本仪器其可靠性措施主要有:

1、为防止程序跑飞,软件中设置了软件陷阱。

2、为防止程序死循环,软件中使用了瞧门狗技术。

第四章调试

Keil调试与仿真

KEIL C51标准C编译器就是众多单片机应用开发的优秀软件之一,它集编辑、编

译、仿真于一体,支持汇编、PLM 语言与 C 语言的程序设计。

1、启动KEIL C51 进入编辑界面建立一个新工程:单击Project菜单,在弹出的下拉菜单中选中New Project选项。选择保存路径,输入工程文件名。

2、工程文件保存完毕之后,提示选择单片机的型号。KEIL支持近乎所有51核的单片机。单击File菜单,选择New。

3、文件保存:使用汇编编写,文件后缀名为、asm或a51。完成后,单击“保存”按钮保存文件。

4、在Source Group 上单击右键,找到刚才保存的源文件,然后添加ADD

5、在编辑完成之后,需要进行程序的编译。点开Project选项,单击Build target;或就是利用快捷键F7。

6、在程序调试的时候,点击Debug 选项,选择Start/Stop Debug Session。

7、以上就是使用KEIL建立一个完整工程文件的过程。下载到单片机之中,则需要生成HEX 文件。单击“Project” 菜单, 再在下拉菜单中单击出现选项对话框。在选项对话框的“Output”页面对话框中,单击“Create HEX File” 选项,使程序编译后产生HEX 代码,供下载器软件使用。

4、2、调试过程

在Debug调试下,如有错误时,下面窗口将有提示说明错误个数与具体哪一行有错,还有对于错误的说明,大多数格式使用不当,此时在那一行前后仔细检查,要考虑格式,语法等基本性错误。

即使调试没错时,程序也不就是代表完全正确,需要结合硬件来确定改程序的功能就是否完全实现了。

图4-1keil调试图

图4-1keil调试图

第五章结束语

选择这个课题的时候,完全就是由于兴趣,因为觉得这个课题比较的有意思,比较贴近生活。参考了一些范文与参考书后,作出了这篇设计报告。在期间,感觉自己的视野与对于单片机的应用都有了新的认识与拓展。

在硬件的制作过程中我走了好多的弯路,主要就是在系统还没有设计很有

把握就开始动手制作了。后来发现与设计的要求还有偏差,反复的改过了几次,

浪费了大量的时间与体力。感受到设计人员要有耐心,要认真的从要求开始研究。软件的编写过程中费了很大的力气,因为软件的编写要求很高,要很细心,一不小心就会调用错误,很深刻的体会到作为软件编程人员就是绝不能粗心大意的。一个程序的完成的速度与质量高低与细心与否有着很大联系。编程时,我充分使用了结构化的思想。这样因为语句较少,程序调试比较方便,功能模块可以逐一的调试,充分体现了结构化编程的优势。当每个模块都完成时,将其功能加到一起就完成了整体的设计。

参考文献

【1】张靖武,周灵杉、单片机系统的PROTEUS设计与仿真[M]、北京:北京电子工业出版社

【2】靳达、求就是科技、单片机应用系统开发实例导航[M]、:人民邮电出版社,2006 【3】刘守义、单片机应用技术[M]、:西安电子科技大学出版社,2001

【4】林志琦、基于PROTEUS的单片机可视化软硬件仿真[M]、北京:北京航空航天大学出版社,2006

【5】胡汉才、单片机原理及接口技术、清华大学出版社,1996

【6】徐江海、单片机实用教程[M]、北京:机械工业出版社,2007、

【7】肖洪兵、跟我学用单片机、北京:北京航空航天大学出版社,2002、8【8】夏继强、单片机实验与实践教程、北京:北京航空航天大学出版社, 2001【9】谭浩强、C语言程序设计[M]、北京:清华大学出版社,2000、

【11】张磊、C语言程序设计[M]、北京:高等教育出版社,2005、

【12】严桂兰、C语言程序设计[M]、厦门:厦门大学出版社,2006

附录源程序

/*-----------------------------------------------

名称:液晶显示计算器

日期:2012、11、30

内容:整数之间运算,没有小数所有除法得出的结果不正确,有负号运算,

------------------------------------------------*/

#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include

#define KeyPort P1

#define DataPort P0 //定义数据端口程序中遇到DataPort 则用P0 替换

sbit LATCH1=P2^2;//定义锁存使能端口段锁存

sbit LATCH2=P2^3;// 位锁存

unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9 unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码

unsigned char TempData[8]; //存储显示值的全局变量

extern unsigned char TempData[8]; //存储显示值的全局变量

extern unsigned char code dofly_DuanMa[10];

/*------------------------------------------------

显示函数,用于动态扫描数码管

输入参数FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示如输入0表示从第一个显示。

Num表示需要显示的位数,如需要显示99两位数值则该值输入2

------------------------------------------------*/

/*------------------------------------------------

按键扫描函数,返回扫描键值

------------------------------------------------*/

unsigned char KeyScan(void); //键盘扫描函数,使用行列反转扫描法

/*------------------------------------------------

按键值处理函数,返回扫键值

------------------------------------------------*/

unsigned char KeyPro(void);

void Display(unsigned char FirstBit,unsigned char Num);

/*------------------------------------------------

定时器初始化子程序

------------------------------------------------*/

void Init_Timer0(void);

/*------------------------------------------------

uS延时函数,含有输入参数unsigned char t,无返回值

unsigned char 就是定义无符号字符变量,其值的范围就是

0~255 这里使用晶振12M,精确延时请使用汇编,大致延时

长度如下T=tx2+5 uS

------------------------------------------------*/

void DelayUs2x(unsigned char t);

/*------------------------------------------------

mS延时函数,含有输入参数unsigned char t,无返回值

unsigned char 就是定义无符号字符变量,其值的范围就是

0~255 这里使用晶振12M,精确延时请使用汇编

------------------------------------------------*/

void DelayMs(unsigned char t);

/*------------------------------------------------

主程序

------------------------------------------------*/

main()

{

unsigned char num,i,sign;

unsigned char temp[8]; //最大输入8个

bit firstflag;

int a=0,b=0;

unsigned char s;

Init_Timer0(); //初始化定时器0

while (1) //主循环

{

num=KeyPro(); //扫描键盘

if(num!=0xff) //如果扫描就是按键有效值则进行处理

{

if(i==0) //输入就是第一个字符的时候需要把改行清空,方便观瞧

{

for(s=0;s<8;s++) //赋值完成后把缓冲区清零,防止下次输入影响结果

TempData[s]=0;

}

if(('+'==num)|| (i==8) || ('-'==num) || ('x'==num)|| ('/'==num) || ('='==num))//输入数字最大值8,输入符号表示输入结束

{

i=0; //计数器复位

if(firstflag==0) //如果就是输入的第一个数据,赋值给a,并把标志位置1,到下一个数据输入时可以跳转赋值给b

{

sscanf(temp,"%d",&a);//从一个字符串输入到变量

firstflag=1;

}

else

sscanf(temp,"%d",&b);

for(s=0;s<8;s++) //赋值完成后把缓冲区清零,防止下次输入影响结果

temp[s]=0;

if(num!='=') //判断当前符号位并做相应处理

sign=num; //如果不就是等号记下标志位

else

{

firstflag=0; //检测到输入=号,判断上次读入的符合

switch(sign)

{

case '+':a=a+b;

break;

case '-':a=a-b;

break;

case 'x':a=a*b;

break;

case '/':a=a/b;

break;

default:break;

}

sprintf(temp,"%d",a); //打印十进制到临时缓冲区

for(s=0;s<8;s++) //由于打印的就是ASCII码值

{

if(temp[s]==0) //所以需要转换,如果为0表示null 数码管上则不能显示,所以赋值0

TempData[s]=0;

else if(temp[s]==0x2d)//表示负号,数码管显示负号0x40

TempData[s]=0x40;

else

TempData[s]=dofly_DuanMa[temp[s]-'0'];//其她0-9负号则进行ASCII 到数字处理,如当前就是'3',用'3'-'0'=3

//'3'的16进制就是0x33,'0'的16进制就是0x30

}

sign=0;a=b=0; //用完后所有数据清零

for(s=0;s<8;s++)

temp[s]=0;

}

}

else if(i<16)

{

temp[i]=num+'0';

TempData[i]=dofly_DuanMa[num];//输出数据

i++; //输入数值累加

}

}

}

}

/*------------------------------------------------

按键扫描函数,返回扫描键值

------------------------------------------------*/

unsigned char KeyScan(void) //键盘扫描函数,使用行列反转扫描法

unsigned char cord_h,cord_l;//行列值中间变量KeyPort=0x0f; //行线输出全为0 cord_h=KeyPort&0x0f; //读入列线值

if(cord_h!=0x0f) //先检测有无按键按下

{

DelayMs(10); //去抖

if((KeyPort&0x0f)!=0x0f)

{

cord_h=KeyPort&0x0f; //读入列线值

KeyPort=cord_h|0xf0; //输出当前列线值

cord_l=KeyPort&0xf0; //读入行线值

while((KeyPort&0xf0)!=0xf0);//等待松开并输出

return(cord_h+cord_l);//键盘最后组合码值

}

}return(0xff); //返回该值

}

/*------------------------------------------------

按键值处理函数,返回扫键值

可以根据需要改变返回值

| 1 | 2 | 3 | + |

| 4 | 5 | 6 | - |

| 7 | 8 | 9 | * |

| 0 | 、| = | / |

------------------------------------------------*/

unsigned char KeyPro(void)

{

switch(KeyScan())

case 0x7e:return 1 ;break;//0 按下相应的键显示相对应的码值

case 0x7d:return 2 ;break;//1

case 0x7b:return 3 ;break;//2

case 0x77:return '+';break;//3

case 0xbe:return 4 ;break;//4

case 0xbd:return 5 ;break;//5

case 0xbb:return 6 ;break;//6

case 0xb7:return '-';break;//7

case 0xde:return 7 ;break;//8

case 0xdd:return 8 ;break;//9

case 0xdb:return 9 ;break;//a

case 0xd7:return 'x';break;//b

case 0xee:return 0 ;break;//c

case 0xed:return '、';break;//d

case 0xeb:return '=';break;//e

case 0xe7:return '/';break;//f

default:return 0xff;break;

}

}

/*------------------------------------------------

显示函数,用于动态扫描数码管

输入参数FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示如输入0表示从第一个显示。

Num表示需要显示的位数,如需要显示99两位数值则该值输入2

------------------------------------------------*/

void Display(unsigned char FirstBit,unsigned char Num)

{

static unsigned char i=0;

DataPort=0; //清空数据,防止有交替重影

LATCH1=1; //段锁存

LATCH1=0;

DataPort=dofly_WeiMa[i+FirstBit]; //取位码

LATCH2=1; //位锁存

LATCH2=0;

DataPort=TempData[i]; //取显示数据,段码

LATCH1=1; //段锁存

LATCH1=0;

i++;

if(i==Num)

i=0;

}

/*------------------------------------------------

定时器初始化子程序

------------------------------------------------*/

void Init_Timer0(void)

{

TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响

//TH0=0x00; //给定初值

//TL0=0x00;

EA=1; //总中断打开

ET0=1; //定时器中断打开

TR0=1; //定时器开关打开

}

/*------------------------------------------------

定时器中断子程序

------------------------------------------------*/

void Timer0_isr(void) interrupt 1

{

TH0=(65536-2000)/256; //重新赋值2ms

TL0=(65536-2000)%256;

Display(0,8);

}

/*------------------------------------------------

uS延时函数,含有输入参数unsigned char t,无返回值unsigned char 就是定义无符号字符变量,其值的范围就是0~255 这里使用晶振12M,精确延时请使用汇编,大致延时长度如下T=tx2+5 uS

------------------------------------------------*/

void DelayUs2x(unsigned char t)

{

while(--t);

}

/*------------------------------------------------

mS延时函数,含有输入参数unsigned char t,无返回值unsigned char 就是定义无符号字符变量,其值的范围就是0~255 这里使用晶振12M,精确延时请使用汇编

------------------------------------------------*/

void DelayMs(unsigned char t)

{

while(t--)

{

//大致延时1mS

DelayUs2x(245);

DelayUs2x(245);

}

}

AT89C51单片机简易计算器的设计

AT89C51单片机简易计算器的设计 单片机的出现是计算机制造技术高速发展的产物,它是嵌入式控制系统的核心,如今,它已广泛的应用到我们生活的各个领域,电子、科技、通信、汽车、工业等。本设计是基于51系列单片机来进行的数字计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除六位数范围内的基本四则运算,并在LCD上显示相应的结果。设计电路采用AT89C51单片机为主要控制电路,利用MM74C922作为计算器4*4键盘的扫描IC读取键盘上的输入。显示采用字符LCD静态显示。软件方面使用C语言编程,并用PROTUES仿真。 一、总体设计 根据功能和指标要求,本系统选用MCS-51系列单片机为主控机。通过扩展必要的外围接口电路,实现对计算器的设计。具体设计如下:(1)由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用LCD 显示数据和结果。 (2)另外键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键和等号键,故只需要16 个按键即可,设计中采用集成的计算键盘。 (3)执行过程:开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数

值,按等号就会在LCD上输出运算结果。 (4)错误提示:当计算器执行过程中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在LCD上提示溢出;当除数为0时,计算器会在LCD 上提示错误。 系统模块图: 二、硬件设计 (一)、总体硬件设计 本设计选用AT89C51单片机为主控单元。显示部分:采用LCD 静态显示。按键部分:采用4*4键盘;利用MM74C922为4*4的键盘扫描IC,读取输入的键值。 总体设计效果如下图:

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

基于51单片机的简易计算器制作专业:电气信息班级:11级电类一班 姓名:王康胡松勇 时间:2012年7月12日 一:设计任务 本系统选用AT89C52单片机为主控机。通过扩展必要的外围接口电路,实现对计算器的设计,具体设计如下: (1)由于设计的计算器要进行四则运算,为了得到较好的显示效果,经综合分析后,最后采用LED 显示数据和结果。 (2)采用键盘输入方式,键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键(on\c)和等号键(=),故只需要16 个按键即可,设计中采用集成的计算键盘。 (3)在执行过程中,开机显示零,等待键入数值,当键入数字,通过LED显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LED上输出运算结果。 (4)错误提示:当计算器执行过程中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在LED上提示八个0;当除数为0时,计算器会在LED上会提示八个负号。 设计要求:分别对键盘输入检测模块;LED显示模块;算术运算模块;错误处理及提示模块进行设计,并用Visio画系统方框图,keil与protues仿真 分析其设计结果。 二.硬件设计 单片机最小系统 CPU:A T89C52 显示模块:两个4位7段共阴极数码管 输入模块:4*4矩阵键盘 1.电路图

电路图说明 本电路图采用AT89C52作为中处理器,以4*4矩阵键盘扫描输入,用两个74HC573(锁存器)控制分别控制数码管的位于段,并以动态显示的方式显示键盘输入结果及运算结果。为编程方便,以一个一位共阴极数码管显示负号。 三,程序设计 #include #define Lint long int #define uint unsigned int #define uchar unsigned char sbit dula=P2^6; //锁存器段选sbit wela=P2^7; sbit display_g=P2^0; //负号段选 sbit display_w=P2^1; //负号位选uchar code table[]={0x3f,0x06,0x5b,0x4f, //0,1,2,3

基于51单片机的计算器设计程序代码汇编

DBUF EQU 30H TEMP EQU 40H YJ EQU 50H ;结果存放 YJ1 EQU 51H ;中间结果存放GONG EQU 52H ;功能键存放 ORG 00H START: MOV R3,#0 ;初始化显示为空MOV GONG,#0 MOV 30H,#10H MOV 31H,#10H MOV 32H,#10H MOV 33H,#10H MOV 34H,#10H MLOOP: CALL DISP ;PAN调显示子程序WAIT: CALL TESTKEY ; 判断有无按键JZ WAIT CALL GETKEY ;读键 INC R3 ;按键个数 CJNE A,#0,NEXT1 ; 判断就是否数字键 LJMP E1 ; 转数字键处理NEXT1: CJNE A,#1,NEXT2 LJMP E1 NEXT2: CJNE A,#2,NEXT3 LJMP E1 NEXT3: CJNE A,#3,NEXT4 LJMP E1 NEXT4: CJNE A,#4,NEXT5 LJMP E1 NEXT5: CJNE A,#5,NEXT6 LJMP E1 NEXT6: CJNE A,#6,NEXT7 LJMP E1 NEXT7: CJNE A,#7,NEXT8 LJMP E1 NEXT8: CJNE A,#8,NEXT9 LJMP E1 NEXT9: CJNE A,#9,NEXT10 LJMP E1 NEXT10: CJNE A,#10,NEXT11 ;判断就是否功能键LJMP E2 ;转功能键处理NEXT11: CJNE A,#11,NEXT12 LJMP E2 NEXT12: CJNE A,#12, NEXT13 LJMP E2

基于51单片机的计算器设计

目录 第一章引言 (3) 1.1 简述简易计算器 (3) 1.2 本设计主要任务 (3) 1.3 系统主要功能 (4) 第二章系统主要硬件电路设计 (4) 2.1 系统的硬件构成及功能 (4) 2.2 键盘电路设计 (5) 2.3 显示电路设计 (6) 第三章系统软件设计 (7) 3.1 计算器的软件规划 (7) 3.2 键盘扫描的程序设计 (7) 3.3 显示模块的程序设计 (8) 3.4 主程序的设计 (9) 3.5 软件的可靠性设计 (9) 第四章调试 (9) 第五章结束语 (10) 参考文献 (11) 附录源程序 (11)

第一章引言 1.1 简述简易计算器 近几年单片机技术的发展很快,其中电子产品的更新速度迅猛。计算器是日常生活中比较的常见的电子产品之一。如何才能使计算器技术更加的成熟,充分利用已有的软件和硬件条件,设计出更出色的计算器呢? 本设计是以AT89S52单片机为核心的计算器模拟系统设计,输入采用4×6矩阵键盘,可以进行加、减、乘、除9位带符号数字运算,并在LCD1602上显示操作过程。 科技的进步告别了以前复杂的模拟电路,一块几厘米平方的单片机可以省去很多繁琐的电路。现在应用较广泛的是科学计算器,与我们日常所用的简单计算器有较大差别,除了能进行加减乘除,科学计算器还可以进行正数的四则运算和乘方、开方运算,具有指数、对数、三角函数、反三角函数及存储等计算功能。计算器的未来是小型化和轻便化,现在市面上出现的使用太阳能电池的计算器, 使用ASIC设计的计算器,如使用纯软件实现的计算器等,未来的智能化计算器将是我们的发展方向,更希望成为应用广泛的计算工具。 1.2 本设计主要任务 以下是初步设定的矩阵键盘简易计算器的功能: 1.扩展4*6键盘,其中10个数字,5个功能键,1个清零 2.强化对于电路的焊接 3.使用五位数码管接口电路 4. 完成十进制的四则运算(加、减、乘、除); 5. 实现结果低于五位的连续运算; 6. 使用keil 软件编写程序,使用汇编语言; 7. 最后用ptoteus模拟仿真; 8.学会对电路的调试

51单片机简易计算器程序

#include <reg51.h>#include <intrins.h> #include <ctype.h> #include <stdlib.h> #define uchar unsigned char #define uint unsigned int uchar operand1[9], operand2[9]; uchar operator; void delay(uint); uchar keyscan(); void disp(void); void buf(uint value); uint compute(uint va1,uint va2,uchar optor); uchar code table[] = {0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90,0xff}; uchar dbuf[8] = {10,10,10,10,10,10,10,10}; void delay(uint z) { uint x,y; for(x=z;x>0;x--)

for(y=110;y>0;y--); } uchar keyscan() { uchar skey; P1 = 0xfe; while((P1 & 0xf0) != 0xf0) { delay(3); while((P1 & 0xf0) != 0xf0) { switch(P1) { case 0xee: skey = '7'; break; case 0xde: skey = '8'; break; case 0xbe: skey = '9'; break; case 0x7e: skey = '/'; break; default: skey = '#'; }

AT89C51单片机C实现简易计算器

AT89C51单片机简易计算器的设计 一、总体设计 根据功能和指标要求,本系统选用MCS-51系列单片机为主控机。通过扩展必要的外围接口电路,实现对计算器的设计。具体设计如下:(1)由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用LCD 显示数据和结果。 (2)另外键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键和等号键,故只需要16 个按键即可,设计中采用集成的计算键盘。 (3)执行过程:开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。 (4)错误提示:当计算器执行过程中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在LCD上提示溢出;当除数为0时,计算器会在LCD 上提示错误。 系统模块图:

二、硬件设计 (一)、总体硬件设计 本设计选用AT89C51单片机为主控单元。显示部分:采用LCD 静态显示。按键部分:采用4*4键盘;利用MM74C922为4*4的键盘扫描IC,读取输入的键值。 总体设计效果如下图:

(二)、键盘接口电路 计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。矩阵键盘采用四条I/O 线作为行线,四条I/O 线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为4×4个。这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。 矩阵键盘的工作原理: 计算器的键盘布局如图2所示:一般有16个键组成,在单片机中正好可以用一个P口实现16个按键功能,这种形式在单片机系统中也最常用。 图 2 矩阵键盘布局图 矩阵键盘内部电路图如图3所示:

基于51单片机的数字计算器的设计

《单片机技术及其应用》课程设计报告 专业:通信工程 班级:09312班 姓名:某某某 学号:09031069 指导教师: 二0一二年六月十八日

目录 1设计目的 (1) 2 设计题目描述与要求 (1) 3 设计过程 (2) 4硬件总体方案及说明 (6) 5 软件总体方案及设计流程 (9) 6 调试与仿真 (13) 7 心得体会 (14) 8 指导老师意见 (15) 9 参考文献 (16) 附录一 (16) 附录二 (21)

基于51单片机的数字计算器的设计 1设计目的 简易计算器的原理与设计是单片机课程设计课题中的一个。在完成理论学习和必要的实验后,我们掌握了单片机的基本原理以及编程和各种基本功能的应用,但对单片机的硬件实际应用和单片机完整程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。单片机课程设计既巩固了课本学到的理论,还学到了单片机硬件电路和程序设计,简易计算器课程设计通过自己动手用计算机电路设计软件,编写和调试,最后仿真,来加深对单片机的认识,充分发挥我们的个人创新和动手能力,并提高我们对单片机的兴趣,同时学习查阅资料、参考资料的方法。 本设计是基于51系列的单片机进行的简易计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除3位无符号数字的简单四则运算,并在LED 上相应的显示结果。 设计过程在硬件与软件方面进行同步设计。硬件选择AT89C51单片机和74ls164,输入用4×4矩阵键盘。显示用5位7段共阴极LED静态显示。软件从分析计算器功能、流程图设计,再到程序的编写进行系统设计。选用编译效率最高的Keil软件进行编程,并用proteus仿真。 2 设计题目描述与要求 基于AT89C51数字计算器设计的基本要求与基本思路: (1)扩展4*4键盘,其中10个数字,5个功能键,1个清零 (2)使用五位数码管接口电路

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

河南##############学校 毕业设计(论文) 基于51单片机的简易计算器 系部: 自动控制系 专业: 电气自动化 班级: 自083 姓名: 崔 # # 学号: 091415302 指导老师: 许 # 二零一二年五月八日

基于51单片机的简易计算器 摘要 工程实践教学环节是为了学生能够更好地巩固和实践所学专业知识而设置的,在本次工程实践中,我以《智能化测量控制仪表原理与设计》、《MCS-51系列单片微型计算机及其应用》课程中所学知识为基础,设计了简易计算器。本系统以MCS-51系列中的8051单片机为核心,能够实现多位数的四则运算。该系统通过检测矩阵键盘扫描,判断是否按键,经数据转换把数值送入数码管动态显示。本系统的设计说明重点介绍了如下几方面的内容:基于单片机简易计算器的基本功能,同时对矩阵键盘及数码管动态显示原理进行了简单的阐述;介绍了系统的总体设计、给出了系统的整体流程框图,并对其进行了功能模块划分及所采用的元器件进行了详细说明;对系统各功能模块的软、硬件实现进行了详细的设计说明。 关键词:MCS-51;8051单片机;计算器;加减乘除

Based on the simple calculator 51 SCM Abstract The engineering practice teaching is to students better to consolidate and practice have set up by the professional knowledge, in this engineering practice, I to the intelligent measurement control instrument principle and design ", "the MCS-51 series single chip computer and its application" course knowledge as the foundation, the design the simple calculator. This system to MCS-51 of the 8051 series single chip microcomputer as the core, can realize the connection arithmetic. The system through the test matrix keyboard scan, judge whether key, the data transfer the numerical into digital tube dynamic display. This system mainly introduced the design that the following aspects of content: based on single chip microcomputer simple calculator basic functions, and the matrix keyboard and a digital tube dynamic display of the principle of a simple expatiated; introduced the design of the whole system, the whole process of the system are discussed, and its function module partition and the components for a detailed explanation; the functional modules of the system hardware and software of the implementation of the detailed design instructions. Key words: MCS-51;8051 single chip microcomputer;Calculator;Add, subtract, multiply and divide:

51单片机简易计算器代码

#include"reg52.h" #define uchar unsigned char #define uint unsigned int sbit busy=P0^7; void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } char i,j,temp,num; long a,b,c; //a,第一个数b,第二个数c,得数 uchar flag,fuhao;//flag表示是否有符号键按下,fuhao表征按下的是哪个符号uchar code table[]={7,8,9,0,4,5,6,0,1,2,3,0,0,0,0,0}; uchar code table1[]={7,8,9,0x2f-0x30,4,5,6,0x2a-0x30,1,2,3,0x2d-0x30,0x01-0x30,0,0x3d-0x30,0 x2b-0x30}; //按键显示编码表 sbit lcden=P2^2; sbit lcdwrite=P2^1; sbit lcdrs=P2^0; //lcd的写指令 void write_com(uchar com) { lcdrs=0; lcden=0; P0=com; delay(1); lcden=1; delay(1); lcden=0; } //lcd的写数据 void write_date(uchar da) { lcdrs=1; lcden=0; P0=da; delay(1); lcden=1; delay(1); lcden=0; } //初始化

void init() //初始化 { uchar num; num=-1; lcdwrite=0; lcden=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); delay(500);//延时0.5s write_com(0x01); i=0; j=0; a=0; //第一个参与运算的数 b=0; //第二个参与运算的数 c=0; flag=0; //flag表示是否有符号键按下, fuhao=0; // fuhao表征按下的是哪个符号 } void keyscan() // 键盘扫描程序 { P3=0xfe; if(P3!=0xfe) { delay(10); //延迟20ms if(P3!=0xfe) { temp=P3&0xf0; switch(temp) { case 0xe0:num=0; break; case 0xd0:num=1; break; case 0xb0:num=2; break; case 0x70:num=3; break; } } while(P3!=0xfe); if(num==0||num==1||num==2)//如果按下的是'7','8'或'9 { if(j==1)//确认一次计算完毕,清屏 { write_com(0x01);

基于单片机的简易计算器设计

2013 - 2014 学年_一_学期 山东科技大学电工电子实验教学中心 创新性实验研究报告 实验项目名称__基于51单片机的简易计算器设计_ 2013 年12 月27 日

四、实验内容

2、实验内容 (一)、总体硬件设计 本设计选用AT89C52单片机为主控单元。显示部分:采用六位LED动态数码管显示。按键部分:采用2*8键盘;利用2*8的键盘扫描子程序,读取输入的键值。 (二)、键盘接口电路 计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。矩阵键盘采用两条I/O 线作为行线,八条I/O 线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为2×8个。这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。 矩阵键盘的工作原理: 计算器的键盘布局如图2所示:一般有16个键组成,在单片机中正好可以用一个P口和另一个P口的两个管脚实现16个按键功能,这种形式在单片机系统中也最常用。 矩阵键盘布局图: 矩阵键盘内部电路图如下图所示:

(三)、LED显示模块 本设计采用LED数码显示来显示输出数据。通过D0-D7引脚向LED写指令字或写数据以使LED实现不同的功能或显示相应数据。 (四)运算模块(单片机控制) MCS-51 单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多功能I/O等一台计算机所需要的基本功能部件。如果按功能划分,它由如下功能部件组成,即微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM/EPROM)、并行I/O 口、串行口、定时器/计数器、中断系统及特殊功能寄存器(SFR)。 单片机是靠程序运行的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,通过使用单片机编写的程序可以实现高智能,高效率,以及高可靠性!因此我们采用单片机作为计算器的主要功能部件,可以很快地实现运算功能。

51单片机 实现计算器功能

51单片机多为计算器汇编程序 此程序并不仅仅局限于255以内操作 FIR0 EQU 30H FIR1 EQU 31H FIR2 EQU 32H FIR3 EQU 33H ;第一个操作数 SEC0 EQU 34H SEC1 EQU 35H SEC2 EQU 36H SEC3 EQU 37H ; 第二个操作数 LIN0 EQU 38H LIN1 EQU 39H LIN2 EQU 40H LIN3 EQU 41H ; 数据暂存 RES0 EQU 42H RES1 EQU 43H RES2 EQU 44H RES3 EQU 45H ;结果暂存区 XLINE EQU 46H YLINE EQU 47H ;记录按键按键位置 SYMBLE EQU 48H ;操作符存储 DDE0 EQU 49H DDE1 EQU 50H DDE2 EQU 51H ;用于延时 FLEL4 EQU 52H FLEL5 EQU 53H FLEL6 EQU 54H BEFOR EQU 55H HH BIT 01H ;比较大 EE BIT 02H ;比较相等 FIL BIT 03H ;溢出标记 FLAG BIT 04H ;有无按键标记 ERR BIT 05H ;错误标记 YESY BIT 06H ; 有无操作符按键标记

NUM BIT 07H ;按键个数标记 YESN BIT 08H ;有无数字按键标记 ORG 0000H LJMP MAIN ORG 0003H LJMP INTERUPT MAIN: MOV IE,#01H ;初始化 MOV SP,#6FH LCALL CLRI SETB IT0 SETB EA DISPLAY: ;数码管显示函数 CJNE R3,#00H,TT1 MOV R3,#0AH TT1: CJNE R3,#0AH,STARTD CJNE R2,#00H,TT2 MOV R2,#0AH TT2: CJNE R2,#0AH,STARTD CJNE R1,#00H,STARTD MOV R1,#0AH STARTD: MOV A,R0 LCALL TRANS ;将所要显示的值转化为数码管对应的数据 MOV P2,A MOV P1,#10H LCALL DELAY10ms MOV A,R1 LCALL TRANS MOV P2,A MOV P1,#20H LCALL DELAY10ms MOV A,R2 LCALL TRANS MOV P2,A MOV P1,#40H LCALL DELAY10ms

基于51单片机的简易计算器

目录 摘要....................................................................................... 第一章绪论......................................................................... 1.1课题简介.................................................................... 1.2设计目的.................................................................... 1.3简易计算器系统简介....................................................第二章总体电路设计..........................................................第三章主要模块介绍.......................................................... 3.1AT89C51....................................................................... 3.2LED数码管的结构及工作原理......................................... 3.3 矩阵按键.................................................................. 3.4 蜂鸣器模块...............................................................第四章计算器系统设计..................................................... 4.1计算器硬件............................................................... 4.2 系统框图.................................................................. 4.3 程序设计..................................................................结语.....................................................................................参考文献..............................................................................

基于C51简易计算器综述

单片机课程设计 简 易 计 算 器 专 业 班 级 学生姓名 学 号 任课教师 提交日期 JINGCHU UNIVERSITY OF TECHNOLOGY

目录 摘要 (01) 引言 (01) 一、设计任务和要求............................. 1、1 设计要求 1、2 性能指标 1、3 设计方案的确定 二、单片机简要原理............................. 2、1 AT89C51的介绍 2、2 单片机最小系统 2、3 七段共阳极数码管 三、硬件设计................................... 3、1 键盘电路的设计 3、2 显示电路的设计 四、软件设计................................... 4、1 系统设计 4、2 显示电路的设计 五、调试与仿真................................. 5、1 Keil C51单片机软件开发系统 5、2 proteus的操作 六、心得体会.................................... 参考文献......................................... 附录1 系统硬件电路图............................ 附录2 程序清单.................................. 一、设计任务和要求

1.1 设计要求 本次课程设计,我选择的课题是单片机十进制加法计算器软硬件设计,设计任务为: 设计一键盘显示装置,键盘上除需定义10个十进制数字键外还要相应的功能键,其它键不定义无响应。利用此系统可分别可输入十进制被加数与加数,实现两数相加并将结果以十进制形式显示出来。(扩展:多位10进制数相加) 1.2 性能指标 本课程设计的十进制加法计算器的计算范围为0~255,计算结果全为整数,计算结果溢出结果不显示。 1、加法:三位加法,计算结果超过255溢出不显示 2、减法:三位减法,计算结果若小于零溢出不显示 3、乘法:三位数乘法 4、除法:整数除法 5、有清零功能 1.3 设计方案的确定 按照1.1的设计要求,本课题需要使用数码管显示和扩展4*4键盘,由于 AT89C51芯片的I口不够多,而且为了硬件电路设计的简单化,故选择串行动态显示和用P1口扩展4*4键盘,扩展的4*4键盘定义十个数字键,六个功能键,使用串行动态显示显示运算结果。 主程序进行初始化,采用行列扫描进行查表得出键值,每次按键后调用显示子程序。 二、单片机简要原理 在该课程设计中,主要用到一个AT89C51芯片和串接的共阴数码管。作为 该设计的主要部分,下面将对它们的原理及功能做详细介绍和说明。 2.1 AT89C51的介绍:

51单片机计算器设计

1引言 当今时代,是一个新技术层出不穷的时代。在电子领域,尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统正以前所未见的速度被单片机智能控制系统所取代。单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。过去习惯于传统电子领域的工程师、技术员正面临着全新的挑战,如不能在较短时间内学会单片机,势必会被时代所遗弃,只有勇敢地面对现实,挑战自我,加强学习,争取在较短的时间内将单片机技术融会贯通,才能跟上时代的步伐。 它所给人带来的方便也是不可否定的,它在一块芯片内集成了计算机的各种功能部件,构成一种单片式的微型计算机。20世纪80年代以来,国际上单片机的发展迅速,其产品之多令人目不暇接,单片机应用不断深入,新技术层出不穷。20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。 本设计是由单片机实现的模拟计算器,它不仅能实现数据的加减乘除运算,而且还能使数据及其计算结果在数码管上显示出来,能够实现0-256的数字四则运算。本设计是用单片机AT89C51来控制,采用共阳极数码显示,软件部分是由C语言来编写的。设计任务利用键盘和数码管设计一个简单的数学计算器,可以完成简单的如加,减,乘,除的四则运算,并将运算结果在数码管上显示出来。 2.方案论证与设计 根据功能和指标要求,本系统选用MCS 51 单片机为主控机。通过扩展必要的外围接口 电路,实现对计算器的设计。具体设计考虑如下: ①由于要设计的是简单的计算器,可以进行四则运算,对数字的大小范围要求不高,故 我们采用可以进行四位数字的运算,选用8 个LED 数码管显示数据和结果。 ②另外键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键和等号键,故只需要16 个按键即可。系统模块图: 2.1 输入模块: 键盘扫描计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式。为此,我们引入了矩阵键盘的应用,采用四条I/O

基于51单片机的简易计算器论文设计

电子设计结课论文题目: 系别: 专业: 学生姓名: 学号: 实验研究工程设计工程技术研究 年月日

基于51单片机的简易计算器 摘要:工程实践教学环节是为了学生能够更好地巩固和实践所学专业知识而设置 的,在本次工程实践中,我以《智能化测量控制仪表原理与设计》、《MCS-51系列单片微型计算机及其应用》课程中所学知识为基础,设计了简易计算器。本系统以MCS-51系列中的8051单片机为核心,能够实现两位数的四则运算。该系统通过检测矩阵键盘扫描,判断是否按键,经数据转换把数值送入数码管动态显示。 本系统的设计说明重点介绍了如下几方面的内容: 1)基于单片机简易计算器的基本功能,同时对矩阵键盘及1602显示原理进行了简单的阐述; 2)介绍了系统的总体设计、给出了系统的整体流程框图,并对其进行了功能模块划分及所采用的元器件进行了详细说明; 3)对系统各功能模块的软、硬件实现进行了详细的设计说明。 关键词:MCS-51 8051单片机;计算器;加减乘除

目录 目录 第一章绪论 (1) 1.2设计目的 (1) 1.3设计任务 (1) 1.4章节安排说明 (1) 第二章计算器系统简介 (2) 2.1单片机发展现状 (2) 2.2计算器系统现状 (2) 2.3简易计算器系统简介 (3) 第三章主要器件简介 (4) 3.1MCS-51系列单片机简介 (4) 3.2其它器件简介 (7) 3.2.11602显示 (7) 3.2.2矩阵按键 (7) 第四章计算器系统设计 (8) 4.1计算器硬件电路设计 (8) 4.2.2主程序设计............................................................... 错误!未定义书签。结语. (17) 参考文献 (18)

51单片机计算器程序

#include #include #include #include"1602.h" #include"math.h" #define uchar unsigned char #define uint unsigned int uchar KeyV; uchar Y=0; //长度 uchar K=0; //错误标示uchar Z=0; //扫描位uchar S=0; //结束标志uchar A=0; uchar code show1[16]={ '1','2','3','+', //键位显示 '4','5','6','-', '7','8','9','*', '.','0','=','/' }; uchar code key1[16]={ //键位 1,2,3,'+', 4,5,6,'-', 7,8,9,'*', '.',0,'=','/' }; uchar code Key[16]= { 0x77,0x7b,0x7d,0x7e, 0xb7,0xbb,0xbd,0xbe, 0xd7,0xdb,0xdd,0xde, 0xe7,0xeb,0xed,0xee, }; uchar mode[17]; uchar show[16]; uint ch1[16]; /*void T0Server() interrupt 1 { EA=0; } void delay_50ms() { TMOD=0x01;//定时器0 方式1 TL0=0XAF;

TH0=0X3C;//50mS TR0=1;//启动定时 ET0=1;//启动中断 EA=1; } void delay_1s() { uchar h; for(h=0;h<20;h++) {delay_50ms();} }*/ void delay(uchar i) { uchar h,t; t=200; for(h=0;h15)S=1; show[Y]=show1[i]; mode[Y]=key1[i]; Display(0,0,show) ; Y++; break; } } }

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

基于单片机的简易计算器设计 摘要 (2) 关键字:80C51 LCD1602 4*4矩阵键盘计算器 (2) 第一章绪论 (3) 1、1系统开发背景 (3) 1、2系统开发意义 (3) 1、3设计目的 (3) 1、4设计任务 (3) 第二章单片机发展现状 (4) 2、1目前单片机的发展状况 (4) 2、1、1单片机的应用场合 (4) 2、2计算器系统现状 (5) 2、3简易计算器系统介绍 (5) 第三章系统硬件设计及说明 (6) 3、1系统组成及总体框图 (7) 3、2AT89S52单片机介绍 (7) 3、3其它器件介绍及说明 (10) 3、3、1 LCD1602液晶显示 (10) 3、3、2 4*4矩阵扫描按键 (13) 第四章 PROTEUS模拟仿真 (14) 第五章系统硬件设计及说明 (16) 第六章软件设计 (17) 6、1汇编语言与C语言的特点及选择 (17) 6、2源程序代码 (17)

摘要 近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测与自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,但仅单片机方面的知识就是不够的,还应根据具体硬件结构、软硬件结合,来加以完善。 计算机在人们的日常生活中就是比较常见的电子产品之一。可就是它还在发展之中,以后必将出现功能更加强大的计算机,基于这样的理念,本次设计主要以80C51单片机为控制芯片,用C语言进行编程实现,通过4*4矩阵键盘控制,输出用液晶屏LCD1602显示,该计算器可以实现一般的加减乘除四则混合运算。 关键字:80C51 LCD1602 4*4矩阵键盘计算器

51单片机的简易计算器要点

华侨大学厦门工学院单片机控制系统课程设计报告 题目:基于51单片机的简易计算器 专业、班级: 学生姓名: 学号: 指导教师: 2014年 5 月20 日

目录 一、设计任务目的 (2) 二、计任务要求 (2) 三、设计方案选取与论证 (2) 四、电路设计 (3) 4.1总体电路图 (3) 4.2 硬件设计 (4) 4.2.1 矩阵按键 (4) 4.2.2 AT89C52主芯片 (4) 4.2.3 LCD显示 (7) 4.3软件设计 (7) 4.3.1 键盘模块 (8) 4.3.2 计算模块 (8) 4.3.3 显示模块 (9) 五.制作及调试过程 (10) 5.1 制作过程 (10) 5.2 软件调试 (10) 5.3 硬件调试 (11) 结论 (12) 致谢 (13) 参考文献 (13)

一、设计任务目的 设计一个计算器,可以进行简易的四则运算。 二、计任务要求 1、能够进行简单的四则运算,包括带负数的运算。用LCD显示数据和结果(6位即可) 2、采用键盘输入方式,键盘包括数字键(0~9)、符号(+、-、×、÷)、清除键(c)和等号键(=),故只需要16 个按键即可。 3、在执行过程中,开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。 4、错误提示:当计算器执行过程中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在LCD 上提示OV;当除数为0时,计算器会在LCD上提示ERR。 三、设计方案选取与论证 1、单片机部分 单片机以AT89C51来做为核心元器件。 2、按键部分 设计思路:采用4*4行列式键盘,分别设定数字键和功能键,采用查询方式,每次有键按下时,先判断是实数字键还是功能键。但是这种方式采用了大量的I/O口线。 3、显示部分 在单片机应用系统中,使用的显示器主要有LED(发光二极管显示器)、LCD液晶显示器以及CRT接口。 思路:使用液晶显示器来显示。液晶是介于固态和液态间的有机化合物,将其加热会变成透明液态,冷却后变成结晶的混浊固态。在电的作用下,产生冷热变化,从而影响它的透光性,来达到显示的目的。LCD还具有以下几个优点(1)低压、微功耗(2)显示信息量大(3)长寿命(4)无辐射,无污染。 其系统结框图如下:

相关文档
最新文档