基于单片机的计算器设计_第1页
基于单片机的计算器设计_第2页
基于单片机的计算器设计_第3页
基于单片机的计算器设计_第4页
基于单片机的计算器设计_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

1、经典文下载可复制粘贴单片机技术课程设计说明书计算器系 、 部: 电气与信息工程系学生姓名: 詹志敏指导教师: 王韧 职称 副教授专 业:电子信息工程班 级:电子 0901 班完成时间: 2012-01-01摘要近年来随着计算机在社会领域的渗透和大规模集成电路的发展, 单片机的应 用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作 可靠,使用方便等特点, 因此特别适合于与控制有关的系统, 越来越广泛地应用 于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域, 作为微型机的一个主要分支,单片机在结构上的最大特点是把CPU 、 RAM 和ROM 存储器、定时器

2、和多种 I/O 接口电路集成在一块超大规模集成电路芯片上。 从它的组成和功能来看,一块单片机芯片其实就是一台计算机。本次设计是采用 MSC-51 单片机来设计的简易应用型计算器 , 采用 C 语言 进行程序编写实现计算器功能。同时外接 4X4 的矩阵式键盘,通过键盘扫描程 序对所需要的数据的控制, 通过 LCD 显示屏完成数值输入与结果上的正常显示, 在完成计算器时并设有清零键和返回菜单键以用来随时完成计算与显示的清零。 计算器可以实现八位数字一次的加 /减 /乘/除运算。执行过程如下:开机显示湖南 工学院和作者的个人信息, 延时后进入选项菜单, 等待键入数值进行选择, 进入 计算模式,数据的

3、计算过程和结果将会在 LCD 上的显示,在输入、 -、*、/运 算符之后, 计算器在内部执行数值转换和存储, 并等待再次输入数值, 当在键入 数值后将显示键入的数值,按等号就会在 LCD 上显示运算结果。关键词 计算器;单片机;键盘; LCDABSTRACTIn recent years along with computer penetration in the social sphere and the large scale integrated circuit development, SCM applications are constantly deepening, because

4、 it has strong function, small volume, low power consumption, cheap, reliable, use convenient wait for a characteristic, thus it is especially suitable for and control of relevant system, more and more widely used in automatic control, intelligent instruments, instrumentation, data acquisition, mili

5、tary products and household appliances and other fields, as a miniature machine is one of the main branch, SCM in the structure is characterized by CPU, RAM and ROM memory, timer and a variety of I / O interface circuit integrated on a very large scale integrated circuit chip. From its composition a

6、nd function, a single chip microcomputer is a computer.This design is the use of MSC-51 microcontroller to design the simple application of calculator, using C programming language to achieve the calculator function. At the same time the external 4X4 matrix keyboard, through the keyboard scan proced

7、ure on the data needed by the LCD display screen control, to complete the numerical value input and results on the normal display, at the completion of calculator and reset button and menu key to return at the finish calculation and display clear. Calculator can achieve eight digit an add / drop / m

8、ultiply / divide. The implementation process is as follows: the starting up display Hunan Institute and the authors personal information, delay into the options menu, waiting for the type selection calculation of numerical data, into the model, the calculation process and results will be displayed o

9、n the LCD, in the input +, -, *, / operator, calculator in the internal implementation of numerical conversion and storage again, and waiting for input values, when typing in numerical will display type value, according to the sign will be displayed on the LCD operational results.Key words calculato

10、r ;MCU ;keyboard ;LCD目录 TOC o 1-5 h z HYPERLINK l bookmark10 o Current Document 功能概述 1 HYPERLINK l bookmark12 o Current Document 课题任务与功能要求 1 HYPERLINK l bookmark14 o Current Document 方案概述 1 HYPERLINK l bookmark16 o Current Document 课题硬件系统设计 2 HYPERLINK l bookmark18 o Current Document 单片机各模块电路简介 2单片机

11、最小系统 2矩阵式键盘电路 2液晶显示电路 2下载口电路 3硬件测试 3 HYPERLINK l bookmark20 o Current Document 课题软件系统设计 4单片机资源使用情况 4 HYPERLINK l bookmark24 o Current Document 软件各模块简要介绍 4液晶显示程序 4键处理和键扫描程序 4延时 1ms程序 4计算程序设计 5主函数 5程序主流程图 6 HYPERLINK l bookmark26 o Current Document 设计结论 7 HYPERLINK l bookmark28 o Current Document 使用说明

12、 7 HYPERLINK l bookmark30 o Current Document 心得体会 7 HYPERLINK l bookmark32 o Current Document 结束语 8致 谢 9 HYPERLINK l bookmark36 o Current Document 参考文献 10附 录 A 11附 录 B 12附 录 C 131 功能概述课题任务与功能要求设计一个具有特定功能的计算器。该计算器上电或按键复位后能自动显示系统提示符“ P. ”,进入准备工作状态,其中计算器能实现(1)基本的加、减、乘、除、平方、开方;(2)三角函数运算;3)十进制、十六进制转换运算;

13、4)其他功能方案概述本设计采用单片机以及其外部设备组成硬件电路,其中包括单片机、 LCD液 晶显示器、矩阵式键盘。 其中矩阵式键盘接在 P1口上,除此之外还有晶振电路, 复位电路,电源电路和下载口电路。程序设计采用 C51语言编写。 开机时,液晶面板显示湖南工学院及作者个人 信息。其后,选择菜单栏中的计算器,进入计算器模式,本实验的计算器可以实 现十六位无符号数字的加、减、乘、除运算,并显示结果后的三位小数。当计算 方式出错时候,显示 error! ,并提示操作者清零后,并再次输入,同时计算器 还可以实现十进制、 十六进制转换运算, 三角函数运算及平方和开方运算。 满足 要求之外, 本课程设计

14、还可以实现对数的运算, 同时在运算结果中保留三位小数方案设计框图如图 1 所示:LCD显示部分时钟电路和复位电路51系类单片机4*4 矩阵式键盘图 1 系统设计框图课题硬件系统设计单片机各模块电路简介单片机最小系统单片机最小系统包括电源电路、时钟电路、复位电路、液晶显示电路。只有 当单片机有了这些电路才会工作。 电源电路给单片机供电, 时钟电路给单片机提 供计数时间, 复位电路可以实现单片机的复位。 而液晶显示模块显示单片机计算 的各种状态。通过一系列的连接构成完整的单片机系统。矩阵式键盘电路单片机的 P1 口用作键盘 I/O 口,键盘的列线接到 P1 口的低 4 位,键盘的 行线接到P1 口

15、的高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这

16、”一行没有键闭 合;否则就是有键闭合。 由此得到闭合键的行值和列值, 然后可采用计算法或查 表法将闭合键的行值和列值转换成所定义的键值。 为了保证按键每闭合一次 CPU 仅作一次处理,必须去除键释放时的抖动。液晶显示电路带中文字库的 128X64 是一种具有 4 位/8 位并行、2 线或 3 线串行多种接口 方式,内部含有国标一级、 二级简体中文字库的点阵图形液晶显示模块; 其显示 分辨率为 12864, 内置 8192 个 16*16 点汉字,和 128 个 16*8 点 ASCII 字符集 . 利用该模块灵活的接口方式和简单、方便的操作指令 。DB三态数据口线连接到 P0 口,而 RW连接

17、到 P3.1,RS接到 P3.0。而 PSB 和 K连接 VCC直流电源,液晶的 RESTE脚通过电阻接地。 同时 1 脚和 2脚分别接 地和接 VCC。下载口电路下载口的 1 脚接 P1.5 口, 2 脚悬空, 3 脚接单片机的复位口, 4 脚接 P1.6 口,5 脚接 P1.7 口,6 脚接地, 7、8、8、10脚接地。硬件测试板子做好后通过老师给的测试程序测得各模块的功能均正常。 单片机最小系 统正常工作,液晶显示正常,矩阵式键盘正常工作,复位电路正常。课题软件系统设计单片机系统软件的总体设计在利用编程语言当中,汇编语言比较接近底层,编程效率高; C 语言则语言 灵活,在编写算法中会比较

18、方便。虽然我们在单片机技术中是学习的汇编语言, 但相对而言我还是对于单片机的 C语言编程更加熟悉, 而且 C 语言在计算器中涉 及到的大量计算中会比较简便。软件各模块简要介绍液晶显示程序液晶的显示函数显示,将相应数据送至液晶指定的地址,读取 ASCII 码后, 读取存储于液晶中的汉字代码, 之后再于液晶屏幕上显示。 实现显示需要的字符 信息。键处理和键扫描程序键处理函数主要是将从 P1 口取值送往单片机进行取反处理。键扫描函数主 要是判断是否真的有键按下, 即度过前沿抖动之后再判断是否有键按下, 如果确 实有键按下再判断是否释放, 同样也要度过后沿抖动。 最终将处理完的键值作为 返回值返回。延

19、时 5ms 程序此函数要在矩阵式键盘中函数中用到, 由于时间比较短, 就采用纯软件的方 法延时。计算程序设计选择进入计算模式,在进入计算函数后,然后进入键盘扫描程序的死循环, 当没有键按下 , 循环一直执行,当有键按下时,通过延迟技术来进行按键去抖, 判断按键是否松开, 如松开则将得到的键值进行判断是哪一个键。 同时利用液晶 的写入指令, 让按键值显示与液晶板上, 之后不断的将按下的键值存入缓冲的变 量中,将原来的数值乘十加上刚键入的键值的数则是变量的值, 当输入出现小数 时,小数点的标志位打开, 之后键入的数值则通过不断乘以 0.1 存入小数点后几 位,当写入功能运算符时,开启运算符标志位,

20、并将得到的数值保存,同时将缓 冲单元清零,等待输入运算数据。 之后不断的重复将数值输入并与液晶面板上显 示,同时计算器也可以实现其他动能的运算, SHIFT按键可以进行按键的切换, 分别实现三角函数的运算, 十六进制十进制的转换, 求对数, 平方和开根号的 运算。当按下等号时,根据记录的运算符标志,判断运算类型,执行运算并将结 果乘以 1000,在进行显示时候则将结果依次除以 1000 取余数放入结果显示缓冲 区,利用编写的显示函数,依次循环执行主函数主函数是程序的入口, 在主函数中一直调用液晶显示函数和键扫描函数, 当没有键按下时一直显示菜单,当有选择的按键按下后,则进入计算模式。3.2.6

21、 程序主流程图图 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 键。心得体会本次 C 语言计算器编程给我很多帮助,其实暑假时候已经编好了,但是精 确度不够, 不能进行带小数点的运算, 于是我决

22、定在这次课程设计中再次选择计 算器,在期末考试接近的情况下, 我最终将计算器搞定, 虽然计算器运行处理数 据及显示存在小小的误差, 但是最终我知道了误差原因, 这些计算误差是来自本 身函数调用的误差,这点确实无法改正。这个实验给我的感觉, 硬件和软件上都不是很难。 在期末的时候我原本是要 用到汇编语言编的计算器, 但是一直存在问题, 无法运用, 最后我决定先编好自 己的 C 语言,通过不断的实验和改正,我最终完成了这个计算器,当然在过程 中让我对 C 语言编程有了更好的了解,在这次实验上,感觉收获良多。遗憾的 是,我的汇编语言版本的计算器存在问题,没有上交老师。同时在实验中,我居然发现单片机的

23、 RAM 不够,出现这些问题主要原因是 我把计算器的计算精度调的太高,而且 C51 中无法定义位变量,这些都是造成 问题的主要原因。 但是通过我不断调低精确度, 最终还是解决了问题。 当然遗憾 就是我没有实现网络上的定义结构体位变量, 和将 RAM 中的低位字节移到高位 RAM 中的方法。结束语将本设计的程序下载到单片机中,通过测试,完美的完成了任务书的要求, 但是遗憾的是计算的精确度有一定的误差,因为在调用计算程序是调用的库函 数,所以多次取值后存在误差, 当然对于高精度的计算器, 本设计的精度还是不 够的,还需要进一步的改进,甚至可以精度提高到小数点后六位。而且 51 单片 机的 RAM

24、不够, ROM 也不够,这些也是造成误差的原因。致谢本次计算器课题在进行过程中得到了王韧老师的悉心指导和同学们的热心 帮助。在这里特意感谢在课程设计中帮助过我的老师和同学。 在暑假的时候由于 王老师的悉心指导才让我能够完成本次的计算器的课程设计, 再多华丽的言语也 显苍白。在此,谨向王老师致以诚挚的谢意和崇高的敬意。在设计过程中, 我通过查阅大量有关资料, 与同学交流经验和自学, 并向老 师请教等方式,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。 在整个设计中我懂得了许多东西, 也培养了我独立工作的能力, 树立了对自己能 力的信心, 相信会对今后的学习工作生活有非常重要的影响。 使

25、我充分体会到了 在创造过程中探索的艰难和成功时的喜悦。感谢暑假和我一起培训的同学, 在本次课程设计中给予我很多帮助。 感谢班 上同学的积极支持和鼓励,让我能够在困难中最终完成了计算器。参考文献李广弟.单片机技术基础M.第三版.北京:北京航空航天大学出版社, 2007马忠梅.单片机的 C语言应用程序设计 M. 第四版.北京航空航天大学出版 社, 2007李光飞.单片机课程设计实例指导 M. 北京:北京航空航天大学出版社, 2004键扫描函数流程图电路原理图如图 B1C语言程序清单:/* 项目名称 : 计算器 */* 设 计 者: 詹志敏 */* 时间:2011 年 12月 1日 */* 项目功能

26、 : 设计一个具有特定功能的计算器。 该计算器上电或按键复位后 能自动显示系统提示符“ P. ”,进入准备工作状态,其中计算器能实现(1)基本的加、减、乘、除、平方、开方;(2)三角函数运算;(3)十进制、十六进制转换运算;(4)其他功能。/* 标题:计算器*日期: 2011-8-11* 作者:詹志敏*版本: 4.0*/#include#define JING_GLOBALS#define uchar unsigned char#define uint unsigned intextern void js(void);/=extern rs ; extern rw ; extern en ;/

27、= sbit psb = P21; sbit ret = P23; uchar data0,count; uchar v;主程序void main(void)lcd_clear();lcd_int();lcdset();display0();delay3s();while(1)display1(); v=keyscan();switch(v)case 0 x00:break;case 0 x11:lcd_clear();年历界面break;case 0 x21:lcd_clear();阵屏界面break;case 0 x41:lcd_clear();率计界面break;case 0 x81:l

28、cd_clear();码锁界面break;case 0 x12:lcd_clear();号源界面break;case 0 x22:lcd_clear();压表界面break;case 0 x42:lcd_clear(); 度计界面/ 按下 0 键,进入万/ 按下 1 键,进入点/ 按下 2 键,进入频/ 按下 3 键,进入密/ 按下 4 键,进入信/ 按下 5 键,进入电/ 按下 6 键,进入温/ 按下 7 键,进入计break;case 0 x82:lcd_clear();算器界面js();LCD初始化void lcd_int(void)ret=0; delay(10);ret=1;_nop

29、_();psb=1;_nop_();清屏程序void lcd_clear()writecommand(0 x01);writecommand(0 x30); /*延时程序 */void delay(uint m) while(-m);/*void delay3s(void)/精确延时 3s*/误差 0usunsigned char a,b,c; for(c=189;c0;c-) for(b=230;b0;b-)for(a=33;a0;a-);显示程序 */void display0(void)湖南工学院 );电气与信息工程系);display(1,2, display(2,1, delay(1

30、0000); delay(10000); delay(10000); display(3,2, display(4,3,电子零九零一 ); 詹志敏 );/*目录*/void display1()display(1,1, writecommand(0 x90);一万年历二点阵屏);writedata(0 xc8); writedata(0 xfd); display(2,2, display(3,1, display(4,1,#include #define uchar unsigned char #define uint unsigned int sbit rs = P30; sbit rw

31、= P31; sbit en = P35;频率计四密码锁 ); 五信号源六电压表 七计算器八温度计););uchar command,com0;uchar data1 ,data2; / 数据高位和地位 uchar lcd_bufh,lcd_bufl;/ 缓冲区uchar ks;/* 液晶 */ /=判= 忙 = void checkbusy()rs=0;rw=1;P0=0 xff;while(1)en = 1;if(P0 0 x80)break;/P0的最高位为忙标志为, H:忙,L: 空闲en = 0;en=0;/=液晶写指令 = void writecommand(uchar comma

32、nd)checkbusy();rs=0;rw=0;en=1;P0=command; / 液晶数据线 P0en=0;/=液晶写数据 = void writedata(uchar date)checkbusy();rs=1;rw=0;en=1;P0=date;en=0;/=液晶设置 =void lcdset(void) writecommand(0 x30); / writecommand(0 x01); / writecommand(0 x02); / writecommand(0 x0c); /基本指令集清屏, DDRAM的地址归零 地址归位 显示开,光标关,反白关writecommand(0

33、 x06); /DDRAM 地址加 1 /=字符显示 = void display(uchar y, uchar x, uchar *p) switch (y) case 1:writecommand(0 x7f+x); break; / 液晶第一行case 2:writecommand(0 x8f+x); break; /0 x90+(x-1)case 3:writecommand(0 x87+x);break;case 4:writecommand(0 x97+x);break; default:break;while(*p) writedata(*p+);#includeunsigned

34、 char keyscan(void);void delay1(unsigned int m)while(-m);/ 键扫子程序unsigned char keyscan(void)unsigned char scan,tmp;P1=0 xf0;if(P1&0 xf0)!=0 xf0) /delay1(1000); / if(P1&0 xf0)!=0 xf0) /scan=0 xfe; while(scan&0 x10)!=0) / P1=scan; / if(P1&0 xf0)!=0 xf0) /tmp=(P1&0 xf0)|0 x0f; while(P1&0 xf0)!=0 xf0); /

35、 return (scan)|(tmp);/ 还回键值else scan=(scan1)|0 x01;移一位/ 发全行 0 扫描码若有键按下延时去抖延时再判键是否还按下逐行扫描输出行扫描码本行有键按下设定为上升沿有效/ 行扫描码左return (0); / 无键按下 , 还回 0 */* Module Name : jing_51.H */* File Name : jing_51.H */* Function : 用于管理头文件*/ 编译控制#ifndef JING_51_H#define JING_51_Htypedef unsigned int uint ; / 枚举体typedef u

36、nsigned char uchar ;typedef unsigned long unlong ; #include #include #include #include#define NULL 0#define PI 3.14125#define PAGE_LIMIT 4/=/ 在此声明全局函数 用 extern 修饰否则会出现函数多重声明的错误/ 在其它 C 文件中定义函数即可 无须再次声明(不同的编译器可能会报错 和警告)/=extern void checkbusy();extern void writecommand(uchar command);extern void write

37、data(uchar date);extern void lcdset(void);extern void display(uchar y, uchar x, uchar *p);extern void display0();extern void lcd_int(void);extern void lcd_clear();extern void delay(uint m);extern void delay3s(void);extern void display1();extern void delay0(uint i);/extern uchar keyscan();/extern voi

38、d fre();/ 全局变量宏定义 避免在每个 C 文件中启用 extern/=/#ifdef JING_GLOBALS#define JING_EXT #else#define JING_EXT extern#endif/= =/ 在此处声明全局变量,但是要在最前面加上 字符 JING_EXT 切忌只能 是声明不能是定义(初始化)/ 并且要在主函数 #include 之前 定义宏 #define JING_EXT 不 能有 CODE后者 const 修饰的常量全局/* 默 认 data*/存取类 型只 能 直接 寻址片内 低 128 个 单元/*idata间 址 寻 址 能 访 问 片 内

39、256 个 单 元*/ 这里/ 页 码 标/JING_EXT uchar idata list = 0; 既有声明又有定义 会出错(只能是声明) JING_EXT uchar idata pageflag ;志/#endif /end of JING_51_H /= /no more/= #include long int h, c,N;uchar k, i;int m;float x,u,j,bj,o;uchar flag8,shuzi8,a8,shuzi18,flag18;bit g,t,q ,p;bit xuan,qie, jia,jian,chen,chu,sixteen,ten,si

40、nhan,coshan,tanhan,loghan,kaifang,pin gfang;uchar ge,shi,bai,qian,wan,sw,bw,qw;code yuanma=0,1,2,3,4,5,6,7,8,9,A,B,C,D,E ,F; /数值 19的 ASCII 码void js() / 定义计算器 函数while(1)display(1,1, 进入计算器? e/f); / 选择进入计算器模式 e 进入, f 退出函数switch(keyscan()case 0 x48:lcd_clear(); display(1,1,请输入 :);display(4,6, 返回 D);writ

41、ecommand(0 x90); / 从第二行开始显 示while(1)start: switch(keyscan()case 0 x11: if(sixteen=1)shuzi10=0;flag11=1; / 数字 0 键else flag0=1;shuzi0=0; /flag 数组的作用 作为标志位,起检查那一个键按下的作用 writedata(0 x30);break;/ shuzi 数组的作用就是保存按下的每一位,case 0 x21:if(sixteen=1)shuzi11=1;flag11=1; / 数字 1 键else flag1=1;shuzi1=1; writedata(0

42、x31);break;case 0 x41:if(sixteen=1)shuzi12=2;flag12=1; / 数字 2 键 else shuzi2=2;flag2=1; writedata(0 x32);break;case 0 x81:if(sixteen=1)shuzi13=3;flag13=1; / 数字 3 键 else shuzi3=3;flag3=1; writedata(0 x33);break;case 0 x12:if(sixteen=1)shuzi14=4;flag14=1; / 数字 4 键 else shuzi4=4;flag4=1; writedata(0 x34

43、);break;case 0 x22:if(sixteen=1)shuzi15=5;flag15=1; / 数字 5 键 else shuzi5=5;flag5=1; writedata(0 x35);break;case 0 x42:if(sixteen=1)shuzi16=6;flag16=1; / 数字 6 键 else shuzi6=6;flag6=1; writedata(0 x36);break;case 0 x82:if(sixteen=1)shuzi17=7;flag17=1; / 数字 7 键 else shuzi7=7;flag7=1; writedata(0 x37);b

44、reak;case 0 x14:if(sixteen=1)shuzi18=8;flag18=1; / 数字 8 键 else shuzi8=8;flag8=1; writedata(0 x38);break;case0 x24:if(sixteen=1)shuzi19=9;flag19=1; / 数字 9 键else shuzi9=9;flag9=1;writedata(0 x39);break;case0 x44:writedata(0 x5e);pingfang=1;j=x;x=0;break; /显示 键开方case0 x84:writedata(0 x7e);kaifang=1;j=x

45、;x=0;break; /显示 键平方case 0 x18: m=4000;doswitch(keyscan()/ 按键进入 shift 换挡/+ 键case 0 x11:jia=1;k=0;j=1.00*(1.0*x+u);x=0;u=0;q=0;/ 将按下键值的整数部分与小数部分相加writedata(0 x2b);break;case 0 x21:jian=1;k=0; /- 键 j=1.00*(1.0*x+u);x=0;u=0;q=0; writedata(0 x2d);break;case 0 x41:chen=1;k=0; /* 键 j=1.00*(1.0*x+u);x=0;u=0

46、;q=0; writedata(0 x2a);break;case 0 x81:chu=1;k=0; /chu 键j=1.00*(1.0*x+u);x=0;u=0;q=0;writedata(0 x2f);break;case0 x12:lcd_clear();display(1,1, sin:);display(1,6,shift);display(4,6, );sinhan=1;j=0;x=0;break;/ 液晶显示 sincase0 x22:lcd_clear();display(1,1, cos:);display(1,6,shift);display(4,6, );coshan=1

47、;j=0;x=0;break;/ 液晶显示 coscase0 x42:lcd_clear();display(1,1,tan:);display(1,6,shift);display(4,6,);tanhan=1;j=0;x=0;break;/ 液晶显示 tan求返 回 D);display(2,1,求返 回 D);display(2,1,求返 回 D);display(2,1,case0 x82:lcd_clear();display(1,1, 求log10:);display(1,6,shift);display(4,6,返回D);display(2,1,);loghan=1;j=0;x=

48、0;break;/ 液晶显示 cotcase0 x14:writedata(0 x18);lcd_clear();display(1,1,转 16 进制 :);display(1,6,shift);display(4,6,返回D);display(2,1,);ten=1;j=x;x=0;break; /显示十转十六键case0 x24:writedata(0 x19);lcd_clear();display(1,1,转10 进制 :);display(1,6,shift);display(4,6,返回D);display(2,1,);sixteen=1;j=x;x=0;break; /显示十六

49、转十键case0 x44:if(sixteen=1)shuzi110=10;flag110=1;writedata(0 x41);break; / 字母 A 键case0 x84:if(sixteen=1)shuzi111=11;flag111=1;writedata(0 x42);break;/ 字母 B 键case 0 x18:writedata(0 x43);flag112=1;shuzi112=12;break; /显示 C 键case 0 x28:writedata(0 x44);flag113=1;shuzi113=13;break; / 显示 D 键 case 0 x48:wri

50、tedata(0 x45);flag114=1;shuzi114=14;break; /显示 E 键case 0 x88:writedata(0 x46);flag115=1;shuzi115=15;break;/ 显示 F 键while(m-); break;case 0 x28:writedata(0 x2e);q=1;break; /写入小数点/ 按键 E 清屏,按键 D 返回主页面case 0 x48:m=4000; do switch(keyscan() case 0 x48:u=0;i=0;k=0;u=0;o=0;t=0;c=0;h=0;g=0;q=0;bj=0;x=0;j=0;N

51、=0;xuan=0;qie=0;jia=0;jian=0;chen=0;chu=0;sixteen=0;ten =0;sinhan=0;coshan=0;tanhan=0;loghan=0;kaifang=0;pingfang=0; lcd_clear();display(1,1, 请 输 入 :);display(4,6, 返 回 D);display(2,1, );goto start; / 返回主页面键case 0 x28:u=0;i=0;k=0;u=0;o=0;t=0;c=0;h=0;g=0;q=0; bj=0;x=0;j=0;N=0;xuan=0;qie=0;jia=0;jian=0

52、;chen=0;chu=0;sixteen=0;ten =0;sinhan=0;coshan=0;tanhan=0;loghan=0;kaifang=0;pingfang=0;goto loop00; while(m-);break;case 0 x88: bj=1.00*(1.00*x+u);x=0;u=0;q=0;/bj 作用为再次写入的数,if(jia=1) / 加法运算结果 g=1; / 开启小数点功能jia=0;c=(1000*(1.00*(j+bj);if(jian=1) / 减法运算结果 if(bjj)jian=0;c=(1000*(1.00*(bj-j);t=1;g=1;els

53、ejian=0;c=(1000*(1.00*(j-bj);g=1;if(chen=1) / 乘法运算结果 g=1; / 开启小数点功能 chen=0; c=(1000*j*bj);if(chu=1) / 除 法 运 算 结 果 if(bj!=0)chu=0;c=(1000*j*1.0/(1.0*bj);g=1;elsedisplay(1,1,error!back); if(sinhan=1) 算结果sinhan=0;N=(int)1000*sin(h*PI/180);xuan=1;x=0;h=0; if(coshan=1) 数结果coshan=0;N=(int)1000*cos(h*PI/18

54、0);xuan=1;x=0;h=0; if(tanhan=1) 数结果tanhan=1;N=(int)1000*tan(h*PI/180);qie=1;x=0;h=0; if(loghan=1) 数结果/ 正弦函数运/ 进入余弦函/ 进入 正切函/ 进入余切函loghan=0;/ 正弦余弦函数标N=(int)1000*log10(h);qie=1;x=0;h=0;if(xuan=1)志位确认ge=N%10;shi=N/10%10;bai=N/100%10;writedata(0 x3d);/ 等号delay(1000);writecommand(0 x89);writedata(0 x30);

55、writedata(0 x2e);writedata(yuanmabai);if(shi!=0|bai!=0)writedata(yuanmashi);writedata(yuanmage);xuan=0;N=0;ge=0;shi=0;bai=0;if(pingfang=1) / 进入平方函数确认N=1000*pow(o+h,2);pingfang=0;h=0;o=0;qie=1;x=0;k=0; if(kaifang=1) / 进入开方函数确认N=1000*pow(h+o,0.5);kaifang=0;x=0;h=0;qie=1;o=0;k=0; if(qie=1) ge=N%10; / 正

56、切余切函数标志位 确认shi=N/10%10; bai=N/100%10;qian=N/1000%10; wan=N/10000%10; sw=N/ 100000%10; bw=N/ 1000000%10; qw=N/ 10000000%10;writedata(0 x3d);/ 等号 delay(1000); writecommand(0 x89);if(qw!=0) writedata(yuanmaqw); if(qw!=0|bw!=0) writedata(yuanmabw); if(qw!=0|bw!=0|sw!=0) writedata(yuanmasw); if(qw!=0|bw!=0|sw!=0|wan!=0) writedata(yuanmawan);if(qw!=0|bw!=0|sw!=0|wan!=0|qian!=0) writedata(yuanmaqian); elsewritedata(0 x30);writedata(0 x2e);if(qw!=

温馨提示

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

评论

0/150

提交评论