基于51单片机的计算器课程设计实验报告

合集下载

单片机计算器报告

单片机计算器报告

基于51单片机实验报告(计算器)一.计算器模块1.功能介绍利用8051 单片机硬件资源和常用外围电路如LCD1602,七段数码管,时钟(DS1302)温度传感器(18B20)等实现一个能做简单四则运算,并具有时钟显示,温度显示附加功能的计算器。

2.设计方案利用STC89C52为内核的单片机,PC机。

四则运算利用4*4矩阵键盘实现从0—9和运算符号的输入,并将操作过程和结果显示在LCD1602上。

时钟显示和温度显示,可以利用DS1302产生年份,月份,日期,星期,时,分,秒的数据,并将数据送往LCD1602显示,同样可以利用单片机开发板上面集成的DS18B20温度传感器来测试周围环境的温度,将获取的温度通过在LCD1602来显示。

系统设计框图3.具体实现代码计算器四则运算部分主要分为键盘扫描的键值读取,判断运算符号实现乘除优先级计算,LCD1602显示。

键盘扫描常用的有行扫描法,线反转法,此处我们用行扫描法,可以更明了读取键值。

unsigned char temp;key = null;//第一行按键P3 = 0xfe;temp = P3;temp = temp & 0xf0;if (temp != 0xf0){delay(10); //延时软件去抖动temp = P3;temp = temp & 0xf0;if (temp != 0xf0) //确认有键按下{temp = P3;switch (temp){case 0xee:key = 'D'; //读键值break;case 0xde:key = 0;break;case 0xbe:key = '=';break;case 0x7e:key = '/';break;}flag++;}}读完按键值之后我们需要读取运算的数字与运算符号,通过判断键值为数字则通过nun=nun*10+key,计算出数字,判断键值为运算符号则读出数字和键值。

基于51单片机的计算器设计实验报告(DOC)

基于51单片机的计算器设计实验报告(DOC)

基于51单片机的计算器设计实验报告班级:__12电子2_姓名:___风间__学号:___2015年1月6日一、实验目的1.初步尝试运用单片机进行系统设计;2.掌握矩阵键盘的中断扫描显示;3.掌握液晶或数码管的动态显示;4.掌握数据的存储和掉电保护。

二、实验设备及器材Keil c、 proteus、及单片机开发板。

三、实验内容基本要求:1完成标准型计算器的基本功能2.4*4矩阵键盘(0~9、+、-、*、/、=、%)进行数据的输入及加、减、乘、除基本运算,运用1602液晶或数码管进行显示3. 要求开机显示学号四、设计思路根据计算器的功能要求,选择AT89C51为主控机,通过扩展必要的外围接口电路,实现对计算器的设计。

外部主要由4*4矩阵键盘和一个液晶显示屏构成,内部由一块AT89C51单片机构成。

计算器电路包括四个模块:选用LCD作为显示部分,矩阵键盘作为输入部分,运算模块,单片机控制部分。

模块图如图所示:计算器电路包括三个部分:显示电路、4*4键扫描电路、单片机微控制电路。

具体设计如下:(1)由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用1602液晶显示数据和结果。

(2)另外键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键和等号键,需要16个按键。

(3)执行过程:开机显示学号,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。

线路原理框图如图所示。

五、基于proteus的硬件原理图六、软件流程图七、程序代码#include<reg51.h> //头文件#define unit unsigned int#define uchar unsigned charvoid xuehao(void);sbit SPK=P1^0;sbit lcden=P2^3;sbit rs=P2^4;sbit rw=P2^0;sbit busy=P0^7;char i,j,temp,num,num_1;long a,b,c; //a,第一个数 b,第二个数 c,得数float a_c,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,0x2b-0x30};void delay(uchar z) // 延迟函数{uchar y;for(z;z>0;z--)for(y=0;y<110;y++);}void check() // 判断忙或空闲{do{P0=0xFF;rs=0;rw=1;lcden=0; //禁止读写delay(1); //等待,液晶显示器处理数据lcden=1; //允许读写}while(busy==1); //判断是否为空闲,1为忙,0为空闲}void write_com(uchar com) // 写指令函数{P0=com;rs=0;rw=0;lcden=0;check();lcden=1;}void write_date(uchar date) // 写数据函数{P0=date;rs=1;rw=0;lcden=0;check();lcden=1;}void init() //1602初始化函数{num=-1;lcden=1;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x80);write_com(0x01);num_1=0;i=0;j=0;a=0; //第一个参与运算的数b=0; //第二个参与运算的数c=0;flag=0;fuhao=0;SPK=0; //蜂鸣器打开delay(1000); //延时SPK=1; //蜂鸣器关闭}void keyscan() // 键盘扫描程序{P3=0xfe;if(P3!=0xfe){delay(20);if(P3!=0xfe){SPK=0;delay(1000);SPK=1;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!=0){write_com(0x01);j=0;}if(flag==0) //没有按过符号键{a=a*10+table[num];}else //如果按过符号键{b=b*10+table[num];}}else //如果按下的是'/'{flag=1;fuhao=4; //4表示除号已按}i=table1[num];write_date(0x30+i);}P3=0xfd;if(P3!=0xfd){delay(5);if(P3!=0xfd){SPK=0;delay(1000);SPK=1;temp=P3&0xf0;switch(temp){case 0xe0:num=4;break;case 0xd0:num=5;break;case 0xb0:num=6;break;case 0x70:num=7;break;}}while(P3!=0xfd);if(num==4||num==5||num==6&&num!=7) //如果按下的是'4','5'或'6' {if(j!=0){write_com(0x01);j=0;}if(flag==0){a=a*10+table[num];}else{b=b*10+table[num];}}else{flag=1;fuhao=3; //3表示乘号已按}i=table1[num];write_date(0x30+i);}P3=0xfb;if(P3!=0xfb){delay(5);if(P3!=0xfb){SPK=0;delay(1000);SPK=1;temp=P3&0xf0;switch(temp){case 0xe0:num=8;break;case 0xd0:num=9;break;case 0xb0:num=10;break;case 0x70:num=11;break;}}while(P3!=0xfb);if(num==8||num==9||num==10) //如果按下的是'1','2'或'3' {if(j!=0){write_com(0x01);j=0;}if(flag==0){a=a*10+table[num];}else{b=b*10+table[num];}}else if(num==11){flag=1;fuhao=2; //2表示减号已按}i=table1[num];write_date(0x30+i);}P3=0xf7;if(P3!=0xf7){delay(5);if(P3!=0xf7){SPK=0;delay(1000);SPK=1;temp=P3&0xf0;switch(temp){case 0xe0:num=12;break;case 0xd0:num=13;break;case 0xb0:num=14;break;case 0x70:num=15;break;}}while(P3!=0xf7);switch(num){case 12:{write_com(0x01);a=0;b=0;flag=0;fuhao=0;} //按下的是"清零"break;case 13:{ //按下的是"0"if(flag==0) //没有按过符号键{a=a*10;write_date(0x30);P1=0;}else if(flag==1) //如果按过符号键{b=b*10;write_date(0x30);}}break;case 14:{j=1;if(fuhao==1){write_com(0x80+0x4f); //按下等于键,光标前进至第二行最后一个显示处write_com(0x04); //设置从后住前写数据,每写完一个数据,光标后退一格c=a+b;while(c!=0){write_date(0x30+c%10);c=c/10;}write_date(0x3d);a=0;b=0;flag=0;fuhao=0;}else if(fuhao==2){write_com(0x80+0x4f);write_com(0x04);if(a-b>0)c=a-b;elsec=b-a;while(c!=0){write_date(0x30+c%10);c=c/10;}if(a-b<0)write_date(0x2d);write_date(0x3d);a=0;b=0;flag=0;fuhao=0;}else if(fuhao==3){write_com(0x80+0x4f);write_com(0x04);c=a*b;while(c!=0){write_date(0x30+c%10);c=c/10;}write_date(0x3d);a=0;b=0;flag=0;fuhao=0;}else if(fuhao==4){write_com(0x80+0x4f);write_com(0x04);i=0;c=(long)(((float)a/b)*1000);while(c!=0){write_date(0x30+c%10);c=c/10;i++;if(i==3)write_date(0x2e);}if(a/b<=0)write_date(0x30);write_date(0x3d);a=0;b=0;flag=0;fuhao=0;}}break;case 15:{write_date(0x30+table1[num]);flag=1;fuhao=1;} break;}}}void xuehao() //开机显示学号{write_com(0x80); //从第一行第一位开始write_date('1');write_date('2');write_date('0');write_date('0');write_date('4');write_date('0');write_date('1');write_date('2');write_date('1');write_date('7');}void main() //主函数{init();xuehao();while(1){keyscan();}}八、运行结果图开机显示学号:加法运算:乘法运算:九、扩展功能在基本的功能上加了蜂鸣器电路,使按键的时候能发出声音。

51单片机数码管计算器课设报告

51单片机数码管计算器课设报告

课程名称:微机原理课程设计题目:51单片机共阴极数码管计算器课程设计报告近几年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。

在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面的知识是不够的,还应根据具体硬件结合,加以完善。

本设计是基于51系列的单片机进行的十进制计算器系统设计可以完成计算器的键盘输入进行加、减、乘、除的简单四则运算并在4位数码管上相应的显示结果。

硬件方面从功能考虑首先选择内部存储资源丰富的STC89C52单片机输入采用4×4矩阵键盘。

显示采用4位7段共阴极数码管动态显示。

软件方面从分析计算器功能、流程图设计再到程序的编写进行系统设计。

编程语言方面选用C语言进行编写,并选用全球编译效率最高的KEIL公司的μVision2软件,采用C语言进行编程并用Proteus仿真。

通过最后的调试和测试,本计算器可以实现简单的四位数的加减乘除功能。

关键词:单片机,计算器,共阴极数码管,矩阵键盘一、设计任务要求 (4)1.1 设计任务 (4)1.2 设计的目的 (4)1.3 设计要求 (4)二、方案总体设计 (5)2.1 系统模块图 (5)2.2 总体方案工作原理 (5)三、硬件设计 (6)3.1 整个单片机的接口电路 (6)3.2 单片机STC89C52说明 (6)3.3 引脚说明 (7)3.4 计算器系统现状 (8)3.5 最小系统原理图 (9)3.6 显示电路 (11)3.7 按键输入电路 (13)四、软件设计 (15)五、系统仿真与调试 (16)5.1 采用KEIL 开发的89c52单片机应用程序步骤 (16)5.2 硬件电路图的接法操作 (16)5.3 单片机系统Proteus设计与仿真过程 (16)5.4 STC-ISP程序烧录软件 (17)5.5 实物图 (18)5.6 仿真图 (19)5.7 计算展示 (19)六、设计总结 (22)七、参考文献 (23)一、设计任务要求1.1 设计任务满足计算器的基本要求,可以基本的运算(加减乘除),数据归零,利用51系列单片机设计符合功能的计算器,并用LED码管显示数据,4*4的矩阵键盘实现数据输入。

51单片机简易计算器设计报告

51单片机简易计算器设计报告

51单片机简易计算器设计报告
本文将介绍51单片机简易计算器的设计报告。

该计算器通过
16位的LCD显示屏实现了基本计算功能,包括加、减、乘、除、取反、开方等。

1. 硬件设计
该计算器的核心部件是STC89C52单片机。

STC89C52是一种
高性能、低功耗的8位单片机,拥有8KB的Flash程序存储器和128字节的内部RAM,可提供多种功能和通讯接口。

通过
I/O口与LCD模块通讯,实现输出功能。

该计算器使用16位的LCD显示屏,显示范围为-99.99~99.99,共有6个数字位。

显示屏使用了ST7920控制器,可通过串行、并行等多种方式控制。

2. 软件设计
该计算器的软件设计主要包括三部分:键盘扫描,计算功能和LCD显示。

键盘扫描:该计算器采用4x5矩阵键盘,通过程序对键盘进行扫描,实现对不同按键的检测。

计算功能:该计算器可以实现基本的四则运算、取反、开方等功能。

对于四则运算,通过栈来实现计算,将运算符压入栈中,然后将操作数从栈中取出进行计算。

LCD显示:该计算器使用16位的LCD显示屏,通过程序控制数据和命令的传输,将计算结果显示在LCD屏幕上。

3. 总结
通过对51单片机简易计算器的设计报告,可以看出该计算器实现了基本的计算功能,通过硬件设计和软件设计相结合,将计算器的功能实现得十分完整。

该计算器的设计初步掌握了51单片机的应用,有助于后续项目的开展。

基于51单片机的计算器设计实验报告

基于51单片机的计算器设计实验报告
基于
实验报告
班级:
12电子2
姓名:
风间
学号:
2015年1月6日
一、
1.初步尝试运用单片机进行系统设计;
2.掌握矩阵键盘的中断扫描显示;
3.掌握液晶或数码管的动态显示;
4.掌握数据的存储和掉电保护。
二、
Keil c、proteus、及单片机开发板。
三、
基本要求:
1完成标准型计算器的基本功能
2.4*4矩阵键盘(0~9、+、-、*、/、=、%进行数据的输入及加、减、乘、除 基本运算,运用1602液晶或数码管进行显示
FDET^VD
PCLVA11
PH 5V**7
WTJM^
■ 口j
PQ卅Q+
prw肚旺
RBT
PDVAA<
PD7MD7
R.1W
PEMi口
rtsti
Ml
K
iP7伽ii
f13
P7<w'ftn
PHAU

PW
P3fyp-aJi
・H IfOCIJi i
P1Z
pa^nrrn
P1J
333!llf~1
P3mTEJ
F 1 f
void delay(uchar z) // {
uchar y;
for(z;z>0;z--)
for(y=0;y<110;y++); }
延迟函数
void check()
{
do{
P0=0xFF;
rs=0;
rw=1;
lcde n=0;
//判断忙或空闲
//禁止读写
delay(1);
lcde n=1;

基于51单片机简易计算器课程设计报告

基于51单片机简易计算器课程设计报告

基于51单片机简易计算器课程设计报告
基于51单片机简易计算器课程设计报告
1. 研究背景
•计算器是人们日常生活和工作中常用的工具之一。

•通过设计简易计算器,可以加深学生对51单片机的理解和应用。

2. 目标和需求
•设计一个基于51单片机的简易计算器,能够进行基本的四则运算和开方运算。

•要求计算器能够显示输入和计算结果。

•要求计算器具备简单的界面和操作。

3. 设计方案
•使用51单片机作为计算器的控制核心。

•通过键盘输入数字和运算符,并显示在液晶屏上。

•根据输入的运算符,进行相应的计算,并将结果显示在液晶屏上。

4. 硬件设计
•使用51单片机作为主控芯片。

•连接液晶屏模块,用于显示输入和计算结果。

•连接键盘模块,用于输入数字和运算符。

5. 软件设计
•使用C语言进行编程。

•设计主程序,包括初始化、输入处理和计算输出等功能。

•设计函数,实现基本的四则运算和开方运算。

6. 实验结果
•成功设计并实现了基于51单片机的简易计算器。

•可以正常进行基本的四则运算和开方运算。

•输入和计算结果能够准确显示在液晶屏上。

7. 总结与展望
•通过设计这个简易计算器,学生对51单片机的理解和应用能力有了提高。

•下一步可以考虑增加更多的功能,如科学计算和数据存储等。

以上是本次基于51单片机简易计算器课程设计的报告。

通过这个实验,学生对51单片机的应用能力得到了提升,进一步增强了对计算器的理解。

在未来的课程设计中,可以进一步拓展功能,提升计算器的实用性和功能性。

51单片机数码管计算器课设报告(DOC)

51单片机数码管计算器课设报告(DOC)

课程名称:微机原理课程设计题目:51单片机共阴极数码管计算器课程设计报告近几年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。

在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面的知识是不够的,还应根据具体硬件结合,加以完善。

本设计是基于51系列的单片机进行的十进制计算器系统设计可以完成计算器的键盘输入进行加、减、乘、除的简单四则运算并在4位数码管上相应的显示结果。

硬件方面从功能考虑首先选择内部存储资源丰富的STC89C52单片机输入采用4×4矩阵键盘。

显示采用4位7段共阴极数码管动态显示。

软件方面从分析计算器功能、流程图设计再到程序的编写进行系统设计。

编程语言方面选用C语言进行编写,并选用全球编译效率最高的KEIL公司的μVision2软件,采用C语言进行编程并用Proteus仿真。

通过最后的调试和测试,本计算器可以实现简单的四位数的加减乘除功能。

关键词:单片机,计算器,共阴极数码管,矩阵键盘一、设计任务要求 (4)1.1 设计任务 (4)1.2 设计的目的 (4)1.3 设计要求 (4)二、方案总体设计 (5)2.1 系统模块图 (5)2.2 总体方案工作原理 (5)三、硬件设计 (6)3.1 整个单片机的接口电路 (6)3.2 单片机STC89C52说明 (6)3.3 引脚说明 (7)3.4 计算器系统现状 (8)3.5 最小系统原理图 (9)3.6 显示电路 (11)3.7 按键输入电路 (13)四、软件设计 (15)五、系统仿真与调试 (16)5.1 采用KEIL 开发的89c52单片机应用程序步骤 (16)5.2 硬件电路图的接法操作 (16)5.3 单片机系统Proteus设计与仿真过程 (16)5.4 STC-ISP程序烧录软件 (17)5.5 实物图 (18)5.6 仿真图 (19)5.7 计算展示 (19)六、设计总结 (22)七、参考文献 (23)一、设计任务要求1.1 设计任务满足计算器的基本要求,可以基本的运算(加减乘除),数据归零,利用51系列单片机设计符合功能的计算器,并用LED 码管显示数据,4*4的矩阵键盘实现数据输入。

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

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

设计任务
在本次工程实践中,主要完成如下方面的设计任务: 1)简要综述单片机技术发展的国内外现状及数码管动态显示和矩阵键盘基本原理; 2)掌握 MCS-51 系列某种产品的最小电路及外围扩展电路的设计方法; 3)了解单片机数据转换功能及工作过程; 4)完成主要功能模块的硬件电路设计及必要的参数确定; 5)用 Protues 软件完成原理电路的绘制并实现与 Keil uVision4 软件的连接仿真; 6)完成系统实物设计。
设计目的
通过本次课程设计,运用《数字电子技术基础》、《单片微型计算机原理及应用》所 学知识及查阅相关资料,完成简易计算器的设计,达到理论知识与实践更好结合、提高 综合运用所学知识和设计能力的目的。
通过本次设计训练,可以使我们在基本思路和基本方法上对基于 MCS-51 单片机的嵌 入式系统设计有一个比较感性的认识,并具备一定程度的设计能力。
2
电子课程设计报告
目录
基于 51 单片机的简易计算器设计
摘要.................................................................................................................................................................. 2 目录.................................................................................................................................................................. 3 前言.................................................................................................................................................................. 4

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

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

2021-2021 学年_一_学期山东科技大学电工电子实验教课中心创新性实验研究报告实验工程名称__鉴于51单片机的简略计算器设计_2021年12 月27 日一、实验纲要经过对51单片机汇编指令、STC89C52RC单片机片上各功能模块、常用外面可编程芯片的学习和应用训练,进一步熟习51单片机汇编程序设计,串行总线接口程序设计以及外面可编程芯片的使用方法。

学习创新性实验报告的撰写方法。

二、实验目的1、鉴于STC89C52RC单片机设计制作简略计算器,能达成绝对值小于的有符号整数的加减乘除四那么运算,运算结果均保留小数点后一位。

2、要求有加、减、乘、除、负号、归零、等号键。

3、利用6位LED显示参加运算的数据和运算结果,显示运算结果超限提示,消隐未使用位。

4、鼓舞进行探究。

可在认识实验室器械并能实现题目根本要求的状况下,对题目进行创新设计三、实验场所及仪器、设施和资料:1、实验场所:J11-3242、实验仪器、设施和资料:PC兼容机一台、80C52单片机实验箱一台、2*8键盘一个、6个共阳极的数码管、连线假定干四、实验内容1、实验原理依据功能和指标要求,本系统采纳MCS-51系列单片机为主控机。

经过扩展必需的外头接口电路,实现对计算器的设计。

详细设计以下:〔1〕因为要设计的是简单的计算器,能够进行四那么运算,为了获得较好的显示成效,采纳LED显示数据和结果。

〔2〕此外键盘包含数字键〔0~9〕、符号键〔+、-、×、÷〕、去除键和等号键,故只要要16个按键即可,设计中采纳集成的计算键盘。

〔3〕履行过程:开机显示零,等候键入数值,当键入数字,经过LED显示出来,当键入+、-、*、/运算符,计算器在内部履行数值变换和储存,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LED上输出运算结果。

系统模块图:2、实验内容〔一〕、整体硬件设计本设计采纳AT89C52单片机为主控单元。

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

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

基于51单片机简易计算器设计报告一、研究意义计算器(Calculator)是微型电子计算机的一种特殊类型。

它与一般通用计算机的主要区别在于程序输入方式的不同。

计算器的程序一般都已经固定,只需按键输入数据和运算符号就会得出结果,很容易就能掌握。

而一般计算机的程序可以根据需要随时改动,或重新输入新的程序。

简易计算器主要用于加减乘除;科学计算器,又增添了初等函数运算(有的还带有数据总加、求平均值等统计运算)。

现代电子计算器首次问世是1963年。

那时的计算器是台式的,在美国波士顿的电子博览会上展出过。

与计算机相比,它小巧玲珑,计算迅捷,一般问题不必事先编写复杂的程序。

随着微电子技术的不断发展,微处理器芯片的集成程度越来越高,单片机已可以在一块芯片上同时集成CPU、存储器、定时器/计数器、并行和串行接口、看门狗、前置放大器、A/D转换器、D/A转换器等多种电路,这就很容易将计算机技术与测量控制技术结合,组成智能化测量控制系统。

这种技术促使机器人技术也有了突飞猛进的发展,目前人们已经完全可以设计并制造出具有某些特殊功能的简易智能机器人。

二、设计方案1)硬件部分设计单片机以AT89C51来做为核心元器件,按键部分采用4*4行列式键盘,分别设定数字键和功能键,采用查询方式,每次有键按下时,先判断是实数字键还是功能键。

但是这种方式采用了大量的I/O口线。

在单片机应用系统中,使用的显示器主要有LED(发光二极管显示器)、LCD液晶显示器以及CRT接口。

使用液晶显示器来显示。

液晶是介于固态和液态间的有机化合物,将其加热会变成透明液态,冷却后变成结晶的混浊固态。

在电的作用下,产生冷热变化,从而影响它的透光性,来达到显示的目的。

LCD还具有以下几个优点(1)低压、微功耗(2)显示信息量大(3)长寿命(4)无辐射,无污染。

2)软件部分设计软件部分的设计思路是将整个程序划分为键盘扫描部分,显示部分,运算程序部分,清屏显示部分。

51单片机简易计算器设计报告(一)

51单片机简易计算器设计报告(一)

51单片机简易计算器设计报告(一)背景介绍在数字化时代,计算器作为一种简单易用的工具,越来越得到人们的关注和热爱。

而基于51单片机的简易计算器,不仅可以成为一种学习电子技术的手段,还具有满足简单计算需求的实用性。

设计思路本计算器采用键盘输入和数码管输出的电路设计,为用户提供加、减、乘、除、小数点、退位以及等于等功能。

1.键盘输入采用矩阵键盘的方式,将所有按键按行列排列,并利用51单片机中断方式来读取键值。

2.计算处理通过编写相应的程序代码,计算出用户输入的两个数值及操作符的结果,并将结果存储在数据缓存器中,最后将其输出至数码管。

3.数码管显示根据计算结果的数据类型,将其经过相应的转换处理后,通过数码管将结果输出至用户。

设计技术1.软件编写软件编写方面,采用汇编语言进行编写,代码总长度为2.2KB 左右。

其中,以中断方式读取键值、实现数值存储与判断、计算处理、数码管的结果输出等作为关键点进行编写。

2.硬件搭建硬件搭建方面,需要按照电路图进行搭建,并将51单片机与相关周边电路进行连接。

根据设计思路,将键盘、数码管、电源、指示灯等设备按照需求进行连接。

可改进之处虽然 51单片机的简易计算器的搭建能够满足基本计算需求,但其在以下几方面还有可改进之处:•添加计算科学函数,如三角函数、对数函数等。

•改进操作方式,使其更加符合人体工程学原理。

•添加储存器,使用户能够将计算结果进行存储和调用。

总结通过本次对基于51单片机的简易计算器的设计与实现,我们深入了解了电子技术的基本概念和硬件搭建原理,并了解到了简单嵌入式系统的工作原理。

虽然该计算器在功能和效率方面还有待改进,但对于初学者来说,其对于电子技术的学习和实验还是很有价值和意义的。

•编写的汇编代码过于繁琐,可考虑使用高级语言编写以提高效率和易读性。

•在电路搭建时需注意布线的合理性,尽量避免出现干扰和信号损失的问题。

综上所述,基于51单片机的简易计算器的设计和实现虽存在一些不足,但还是很有价值的。

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

单片机设计报告-基于51单片机的简易计算器设计
2)微型单片化
现在常规的单片机普遍都是将中央处理器(CPU)、随机存取数据存储(RAM)、只读程序存储器(ROM)、并行和串行通信接口,中断系统、定时电路、时钟电路集成在一块单一的芯片上,增强型的单片机集成了如A/D转换器、PMW(脉宽调制电路)、WDT(看门狗)、有些单片机将LCD(液晶)驱动电路都集成在单一的芯片上,这样单片机包含的单元电路就更多,功能就越强大。甚至单片机厂商还可以根据用户的要求量身定做,制造出具有自己特色的单片机芯片。
图2-2 MCS-51系列单片机引脚及总线结构
(a)管脚图;(b)引脚功能分类
MCS-51系列单片机的40个引脚中有2个专用于主电源的引脚,2个外接晶体的引脚,4个控制或与其他电源复用的引脚,以及32条输入输出I/O引脚。
2
MCS-51系列单片机的中断系统属于8位单片机中功能较强的1种中断系统,它可以提供5个中断源,每个中断源有两个优先级别可供选择,可实现两级中断服务程序嵌套。此外,所有中断均可有软件设定为允许中断或禁止中断,也就是说,用户可以用关中断指令(或复位)来屏蔽所有的中断请求,也可以中断指令使CPU接受中断请求。MCS-51单片机的中断系统结构示意图如图2-3所示。
MCS-51单片机内带有两个16位定时/计数器T0和T1,两者均可作为定时器或计数器使用。
2.5
MCS-51系列单片机芯片均为40个引脚,HMOS工艺制造的芯片采用双列直插(DIP)方式封装,其引脚示意及功能分类如图2-2所示。CMOS工艺制造的低功耗芯片也有采用方形封装的,但为44个引脚,其中4个引脚是不使用的。
2.3 程序存储器(ROM)
计算机的工作是按照事先编制好的程序命令一条条循序执行的,程序存储器就是用来存放这些已编好的程序和表格常数,它由只读存储器ROM或EPROM组成。计算机为了有序的工作设置了一个专用寄存器——程序计数器PC,用以存放将要执行的指令系统。每取出指令的1个字节后,其内容自行加1,指向下一字节地址,依次使计算机从程序存储器取指令执行,完成某种程序操作。由于MCS-51单片机的程序计数器为16位,因此,可寻址的地址空间为64KB。与此相对应得程序存储器编址从0000H开始,最大可至FFFFH。

基于51单片机简易计算器课程设计报告书

基于51单片机简易计算器课程设计报告书

电气与电子信息工程学院单片机课程设计设计题目:简易电子计算器专业班级: 12级电信(1)班学号: 1姓名:峥指导教师:章磊艾青设计时间:2014/06/03~2014/06/13设计地点:K2—407课程设计任务书2013 ~2014 学年第2学期学生:峥专业班级:电子信息工程技术(专)2012(1)班指导教师:艾青、章磊工作部门:电气学院电信教研室一、课程设计题目:单片机课程设计1. 出租车计价器系统设计2. 医院住院病人呼叫器的设计3. 作息时间控制器4. 数字温度计的设计5. 火灾报警器的设计6. 电子密码锁7. 电子计算器8.学生自选二、课程设计容1. 以单片机为核心器件,构造系统;2. 熟悉、掌握各种外围接口电路芯片的工作原理和控制方法;3. 熟悉、掌握单片机汇编语言的软件设计方法;4. 熟悉、掌握印刷电路板的设计方法;5. 根据具体设计课题的技术指标和给定条件,能独立而正确地进行方案论证和电路设计,要求概念清楚、方案合理、方确、步骤完整;6. 学会查阅有关参考资料和手册,并能正确选择有关元器件和参数;7. 编写设计说明书,参考毕业设计论文格式撰写设计报告(5000字以上)。

三、进度安排2.执行要求智能电子产品设计制作共8个选题,每组不超过7人,为避免雷同,在设计中每个同学所采用的方案不能一样。

四、基本要求(1)进行方案论证并根据要求确定系统设计方案;(2)绘制系统框图和电气原理草图,程序流程图;(3)对相关电路进行电路参数计算和元器件选择;(4)进行软件汇编并调试;(5)利用Proteus和Keil uVision2对系统进行联调;(6)绘制系统原理总图,列出原器件明细表;(7)画出软件框图,列出程序清单;(8)写出使用说明书;(9)对设计进行全面总结,写出课程设计报告。

五、课程设计考核办法与成绩评定第1章方案的选择与概述1. 单片机概述当今时代,是一个新技术层出不穷的时代。

在电子领域,尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统正以前所未见的速度被单片机智能控制系统所取代。

基于51单片机简易计算器课程设计报告

基于51单片机简易计算器课程设计报告

基于51单片机简易计算器课程设计报告引言:计算器是现代社会中常见的电子设备之一,它能够帮助人们进行各种数学运算,提高计算效率。

本文将介绍基于51单片机的简易计算器的设计过程及实现方法。

一、设计目标本次设计的目标是实现一个简易计算器,能够进行基本的加减乘除运算,并能够显示计算结果。

通过该设计,旨在加深学生对51单片机的理解,培养其实际操作能力。

二、硬件设计1. 电源模块:采用稳压电源模块,提供稳定的电压给单片机及其他电路模块。

2. 单片机模块:采用51单片机,作为计算器的核心控制模块,负责接收按键输入、进行运算和显示结果。

3. 按键模块:设计合适的按键电路,用于输入数字和操作符。

4. 显示模块:采用数码管或液晶显示屏,显示计算结果。

5. 连接线:将各个模块连接起来,确保信号的传输畅通。

三、软件设计1. 初始化:设置单片机的工作模式、端口方向和初始状态。

2. 按键扫描:通过轮询的方式检测按键是否被按下,若有按键按下则进行相应的处理。

3. 输入处理:根据按键的顺序和操作符的位置进行输入的处理,将输入的数字和操作符分别存储在相应的变量中。

4. 运算处理:根据输入的操作符进行相应的运算,得出计算结果。

5. 结果显示:将计算结果通过数码管或液晶显示屏进行显示。

6. 清零处理:在计算结果显示完毕后,对相关的变量进行清零处理,以便进行下一次的计算。

四、功能实现1. 加法运算:通过按下"+"按键,输入第一个数字,再按下"="按键,输入第二个数字,最后按下"="按键,计算并显示结果。

2. 减法运算:通过按下"-"按键,输入第一个数字,再按下"="按键,输入第二个数字,最后按下"="按键,计算并显示结果。

3. 乘法运算:通过按下"*"按键,输入第一个数字,再按下"="按键,输入第二个数字,最后按下"="按键,计算并显示结果。

基于51单片机的计算器课程设计实验报告

基于51单片机的计算器课程设计实验报告

项目一:简单计算器1。

实验题目:用51单片机实现简单的计算器功能2。

实验截图:1).实验运行前截图:2).实验运行后截图:3.实验代码:#include<reg52。

h〉#include〈intrins.h〉#include〈math.h>#include<defined。

H>#include〈LCD1602.h>unsigned char table1[16]; //1602第一行显示字符unsigned char table2[16]; //1602第二行显示字符unsig ned char code table_error[] = ”error”;/*键扫描函数*/unsigned char keyscan() //扫描键盘函数{unsigned char key_l,key_h,addres,num;P0=0x0f;key_l=P0;P0=0xf0;key_h=P0;addres=key_l | key_h;if(addres!=0xff){Delayms(1);if(addres!=0xff){P0=0x0f;key_l=P0;P0=0xf0;key_h=P0;addres=key_l | key_h;switch(addres){case 0xee:num='1’;break;case 0xde:num=’2';break;case 0xbe:num=’3’;break;case 0xed:num='4';break;case 0xdd:num='5’;break;case 0xbd:num=’6';break;case 0xeb:num=’7’;break;case 0xdb:num='8’;break;case 0xbb:num='9’;break;case 0xd7:num='0’;break;//按键0case 0xe7:num=’C';break;//按键*case 0xb7:num=’=';break;//按键#case 0x7e:num='/’;break;//按键Acase 0x7d:num=’*’;break;//按键Bcase 0x7b:num='—’;break;//按键Ccase 0x77:num='+';break;//按键D}while(addres!=0xff){P0=0x0f;key_l=P0;P0=0xf0;key_h=P0;addres=key_l | key_h;}return num;}}return 0;}void clear_lcd(void)//清屏{unsigned char j;for(j=0;j〈16;j++){table1[j]=’\0’;table2[j]='\0';}}void main(){unsigned char i=0,j;unsigned char key;unsigned char flag_operator = 0;//加减乘除标志位unsigned char flag_equ = 0;//等于标志位unsigned char flag_key = 0;//运算位标志bit flag_MaxValue = 0;bit flag_minus = 0;//负数long int value = 0; //最终运算结果unsigned long int value_H =0; //第一个数据unsigned long int value_L = 0;//第二个数据unsigned long int temp[]={1, 10, 100,1000,10000,100000,1000000,10000000,100000000};Initialize_LCD();while(1){key=keyscan();if(key != 0){if(key == ’C')//清除键C按下{clear_lcd();i=0;flag_operator = 0; flag_equ = 0; value = 0; value_H =0; value_L = 0; flag_key = 0; flag_minus=0;}else{for(j=0; j<i; j++){table1[15—i+j] = table1[15—i+j+1];}table1[15] = key;//table1[i] = key;i++;}if(key == '='){for(j=0; j〈16; j++)//确定运算符位置{if(table1[j] == ’=’){flag_equ = j;flag_key++;break;}if( table1[j]== ’+' || table1[j] == ’—' || table1[j] == ’*' ||table1[j] == '/'){flag_operator = j;flag_key++;}}for(j=16—i; j〈flag_operator; j++) //第一个数据处理{//value_H = value_H + (table1[j]-48) * ( pow(10 ,(flag_operator—j-1)));value_H = value_H + (table1[j]—48) * temp[flag_operator—j—1];}for(j=flag_operator+1; j〈15; j++) //第二个数据处理{//value_L = value_L + (table1[j]-48) * pow( 10 , (flag_equ—j—1));value_L = value_L + (table1[j]—48) * temp[flag_equ—j—1];}if(table1[flag_operator] == '+'){value = value_H + value_L;}else if(table1[flag_operator]== ’-'){value = value_H — value_L;}else if(table1[flag_operator] == '*'){value = value_H * value_L;}else if(table1[flag_operator]== ’/’){value = value_H / value_L;}if(value == 0)table2[15] = (value + 48);else if(value<0){value = abs(value);flag_minus = 1;}else if(value〉2000000000){flag_MaxValue = 1;//break;}j=15;while(value!=0){table2[j] = (value%10 + 48);value = value/10;j—-;}if(flag_minus) //负数{table2[j] = ’—’;}}if(flag_key 〉2 || table1[0] == '0' || flag_MaxValue==1 ){ShowString(5,1,table_error);while(keyscan() != 'C’);clear_lcd();i=0;flag_operator = 0; flag_equ = 0; value = 0; value_H =0; value_L = 0; flag_key = 0; flag_minus=0;}}ShowString(0,0,table1);ShowString(0,1,table2);}}。

基于51单片机的计算器

基于51单片机的计算器

二、 实验环境 Keil 软件和 protus 软件 三、 实验内容 计算器中存在很多数据,数据的输入需要很多按键,那么这就 要涉及到按键的检测问题,同时产生的数据要送到单片机中进行处 理,处理完的数据要送到数码管上显示出来。 实验仿真图如下:
图 1 实验仿真图 (由于我的开发板上面 P2^3 脚接Байду номын сангаас蜂鸣器,仿真图中就没有用到
} else return 20; } else return 20; } void main() { uchar k,i,hand,h2; bit xsd=0; char data e; double data temp,h1=0,h3=0,h4=0; displaypro(0); while(1) { k=keyscan(); if(k==20) hand=0; for(i=0;i<8;i++) { wela=1; P0=led[i]; wela=0; P0=0xff; dula=1; P0=xx[i]; dula=0; delay(20); P0=0xff; } switch(k) { case 20:break; case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: if(hand==0) { h4=0;
} if(h2==0) { h1=sqrt(h1); displaypro(h1); } else if(h3==0) { h1=sqrt(h1); displaypro(h1); h2=0; } else { h3=sqrt(h3); displaypro(h3); } xsd=0;e=0; } hand++; break; case 16:if(hand==0)//小数点 { xsd=1; } hand++; break; case 17:if(hand==0)// 1/x { if(h4!=0) { h1=h4; h4=0; } if(h2==0) { h1=1/h1; displaypro(h1); } else if(h3==0) { h1=1/h1;

基于51单片机简易计算器课程设计报告(一)

基于51单片机简易计算器课程设计报告(一)

基于51单片机简易计算器课程设计报告(一)基于51单片机简易计算器课程设计报告1. 介绍在本次课程设计中,我设计了一个基于51单片机的简易计算器。

本报告将会详细介绍该计算器的设计思路、功能实现以及课程设计中遇到的问题与解决方法。

2. 设计思路功能需求•支持基本的加、减、乘、除运算•具备数字输入与显示功能•具备清零和等于功能•具备连续计算功能硬件设计本计算器的硬件设计主要包括51单片机、LCD显示模块以及按键输入模块。

其中,51单片机负责控制计算器的逻辑,LCD显示模块用于显示计算结果和用户输入,按键输入模块用于接收用户的输入。

软件设计计算器的软件设计主要分为以下几个部分: - 初始化:初始化51单片机、LCD模块以及按键模块。

- 按键扫描:通过扫描按键模块,获取用户的输入。

- 数字输入与显示:根据用户输入,将数字显示在LCD上。

- 运算逻辑:根据用户输入的运算符和数字,执行相应的计算操作,并将结果显示在LCD上。

3. 功能实现初始化在初始化阶段,我们需要初始化51单片机的GPIO口、LCD模块以及按键模块。

具体的初始化代码如下:// 初始化51单片机的GPIO口// 初始化LCD模块// 初始化按键模块按键扫描为了获取用户的输入,我们需要通过按键模块进行扫描。

具体的按键扫描代码如下:// 扫描按键模块// 如果检测到按键按下,则进行相应的处理数字输入与显示当用户按下数字键时,我们将获取到的数字输入缓存起来,并将其显示在LCD上。

具体的数字输入与显示代码如下:// 获取按键输入的数字// 将数字添加到输入缓存// 将输入缓存显示在LCD上运算逻辑当用户按下运算符键时,我们需要根据输入的数字和运算符执行相应的计算操作,并将结果显示在LCD上。

具体的运算逻辑代码如下:// 获取运算符输入// 根据运算符和输入的数字执行相应的计算操作// 将计算结果显示在LCD上清零和等于功能为了提升用户体验,我们还可以添加清零和等于功能。

基于C51单片机计算器实训报告

基于C51单片机计算器实训报告

目录一、设计的意义二、设计的流程三、设计的原理四、设计的模块五、元器件清单六、成品的制作七、设计的总结一、设计的意义计算器是日常工作和学习生活中的常用工具,人们利用它代替了许多复杂计算,包括加减乘除和其他运算。

尤其是小型计算器,它携带方便,在生活中用起来方便快捷,成为了财政、学习、生意上都青睐的必需品。

它的需求广泛,在计算器的发展上存在很大的空间和市场意义。

单片机在我国的各行各业得到了广泛使用,单片机的出现是计算机制造技术高速发展的产物。

如今,它已经广泛应用到我们生活中的各个领域,如:电子、科技、通信、汽车、工业等。

一般只需几块钱,有着经济廉价的优势,用单片机可以很方便的实现计算器的设计。

本设计是以单片机为基础设计出简单的一次式计算器。

二、设计的流程本设计的计算器硬件电路采用三部分电路模块构成,第一部分是键盘模块,采用4*4矩阵键盘作为输入电路;第二部分是LCD1602液晶显示模块;第三部分是以89C52单片机作为控制核心。

软件程序主要由三部分组成:主程序、按键扫描程序和LCD1602显示程序。

下图为硬件模块框图:下图为设计流程图:三、设计的原理硬件电路原理图:四、设计的模块1、电源模块:电源的设计采用了自锁开关控制电源正极的接通与断开,当P1接上+5V直流电源时;若S1没有按下,此时S1的1与5端口接通,+5V电流不流通到电路,电路不工作;当S1按下后,3与5端口接通,此时+5V电流流通到电路是电路工作。

2、89C52单片机模块:此模块式是本设计的控制核心模块,常称为单片机最小系统;单片机最小系统由三部分组成:STC89C52芯片部分、复位部分(由按键开关、极性电容、10K电阻组成)、晶振部分(由12M石英晶振、两个30PF的瓷片电容组成)。

主要起程序的输入与控制、程序的复位、时间频率控制的作用。

3、4*4矩阵键盘模块:键盘可分为两类:编码键盘和非编码键盘。

编码键盘是较多按键(20个以上)和专用驱动芯片的组合,当按下某个按键时,它能够处理按键抖动、连击等问题,直接输出按键的编码,无需系统软件干预。

基于51单片机实验报告(计算器)

基于51单片机实验报告(计算器)

基于51单片机实验报告(计算器)一.计算器模块1.功能介绍利用8051 单片机硬件资源和常用外围电路如LCD1602,七段数码管,时钟(DS1302)温度传感器(18B20)等实现一个能做简单四则运算,并具有时钟显示,温度显示附加功能的计算器。

2.设计方案利用STC89C52为内核的单片机,PC机。

四则运算利用4*4矩阵键盘实现从0—9和运算符号的输入,并将操作过程和结果显示在LCD1602上。

时钟显示和温度显示,可以利用DS1302产生年份,月份,日期,星期,时,分,秒的数据,并将数据送往LCD1602显示,同样可以利用单片机开发板上面集成的DS18B20温度传感器来测试周围环境的温度,将获取的温度通过在LCD1602来显示。

系统设计框图3.具体实现代码计算器四则运算部分主要分为键盘扫描的键值读取,判断运算符号实现乘除优先级计算,LCD1602显示。

键盘扫描常用的有行扫描法,线反转法,此处我们用行扫描法,可以更明了读取键值。

unsigned char temp;key = null;//第一行按键P3 = 0xfe;temp = P3;temp = temp & 0xf0;if (temp != 0xf0){delay(10); //延时软件去抖动temp = P3;temp = temp & 0xf0;if (temp != 0xf0) //确认有键按下{temp = P3;switch (temp){case 0xee:key = 'D'; //读键值break;case 0xde:key = 0;break;case 0xbe:key = '=';break;case 0x7e:key = '/';break;}flag++;}}读完按键值之后我们需要读取运算的数字与运算符号,通过判断键值为数字则通过nun=nun*10+key,计算出数字,判断键值为运算符号则读出数字和键值。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

项目一:简单计算器
1.实验题目:用51单片机实现简单的计算器功能
2.实验截图:
1).实验运行前截图:
2).实验运行后截图:
3.实验代码:
#include<reg52.h>
#include<intrins.h>
#include<math.h>
#include<defined.H>
#include<LCD1602.h>
unsigned char table1[16]; //1602第一行显示字符unsigned char table2[16]; //1602第二行显示字符unsigned char code table_error[] = "error";
/* 键扫描函数 */
unsigned char keyscan() //扫描键盘函数
{
unsigned char key_l,key_h,addres,num;
P0=0x0f;
key_l=P0;
P0=0xf0;
key_h=P0;
addres=key_l | key_h;
if(addres!=0xff)
{
Delayms(1);
if(addres!=0xff)
{
P0=0x0f;
key_l=P0;
P0=0xf0;
key_h=P0;
addres=key_l | key_h;
switch(addres)
{
case 0xee:num='1';break;
case 0xde:num='2';break;
case 0xbe:num='3';break;
case 0xed:num='4';break;
case 0xdd:num='5';break;
case 0xbd:num='6';break;
case 0xeb:num='7';break;
case 0xdb:num='8';break;
case 0xbb:num='9';break;
case 0xd7:num='0';break;//按键0
case 0xe7:num='C';break;//按键*
case 0xb7:num='=';break;//按键#
case 0x7e:num='/';break;//按键A
case 0x7d:num='*';break;//按键B
case 0x7b:num='-';break;//按键C
case 0x77:num='+';break;//按键D
}
while(addres!=0xff)
{
P0=0x0f;
key_l=P0;
P0=0xf0;
key_h=P0;
addres=key_l | key_h;
}
return num;
}
}
return 0;
}
void clear_lcd(void) //清屏
{
unsigned char j;
for(j=0;j<16;j++)
{
table1[j]='\0';
table2[j]='\0';
}
}
void main()
{
unsigned char i=0,j;
unsigned char key;
unsigned char flag_operator = 0; //加减乘除标志位
unsigned char flag_equ = 0; //等于标志位
unsigned char flag_key = 0; //运算位标志
bit flag_MaxValue = 0;
bit flag_minus = 0;//负数
long int value = 0; //最终运算结果
unsigned long int value_H =0; //第一个数据
unsigned long int value_L = 0; //第二个数据
unsigned long int temp[]={1, 10, 100,1000,10000,100000,1000000,10000000,100000000};
Initialize_LCD();
while(1)
{
key=keyscan();
if(key != 0)
{
if(key == 'C') //清除键C按下
{
clear_lcd();
i=0;
flag_operator = 0; flag_equ = 0; value = 0; value_H =0; value_L = 0; flag_key = 0; flag_minus=0;
}
else
{
for(j=0; j<i; j++)
{
table1[15-i+j] = table1[15-i+j+1];
}
table1[15] = key;
//table1[i] = key;
i++;
}
if(key == '=')
{
for(j=0; j<16; j++) //确定运算符位置
{
if(table1[j] == '=')
{
flag_equ = j;
flag_key++;
break;
}
if( table1[j] == '+' || table1[j] == '-' || table1[j] == '*' || table1[j] == '/')
{
flag_operator = j;
flag_key++;
}
}
for(j=16-i; j<flag_operator; j++) //第一个数据处理
{
//value_H = value_H + (table1[j]-48) * ( pow( 10 , (flag_operator-j-1)) );
value_H = value_H + (table1[j]-48) * temp[flag_operator-j-1];
}
for(j=flag_operator+1; j<15; j++) //第二个数据处理
{
//value_L = value_L + (table1[j]-48) * pow( 10 , (flag_equ-j-1) );
value_L = value_L + (table1[j]-48) * temp[flag_equ-j-1];
}
if(table1[flag_operator] == '+')
{
value = value_H + value_L;
}
else if(table1[flag_operator] == '-')
{
value = value_H - value_L;
}
else if(table1[flag_operator] == '*')
{
value = value_H * value_L;
}
else if(table1[flag_operator] == '/')
{
value = value_H / value_L;
}
if(value == 0)
table2[15] = (value + 48);
else if(value<0)
{
value = abs(value);
flag_minus = 1;
}
else if(value>2000000000)
{
flag_MaxValue = 1;
//break;
}
j=15;
while(value!=0)
{
table2[j] = (value%10 + 48);
value = value/10;
j--;
}
if(flag_minus) //负数
{
table2[j] = '-';
}
}
if(flag_key >2 || table1[0] == '0' || flag_MaxValue==1 )
{
ShowString(5,1,table_error);
while(keyscan() != 'C');
clear_lcd();
i=0;
flag_operator = 0; flag_equ = 0; value = 0; value_H =0; value_L = 0; flag_key = 0; flag_minus=0;
}
}
ShowString(0,0,table1);
ShowString(0,1,table2);
}
}。

相关文档
最新文档