资源简介
基于51单片机的计算器(C51编写,有protues仿真电路)。
代码片段和文件信息
/*******************************************************************************
************ LABCENTER ELECTRONICS ************
************ Proteus VSM Sample Design Code ************
************ Integer Calculator ( 2K Code Limit) ************
*******************************************************************************/
#include
#include
#include “calc.h“
//Variables
static data LONG lvalue;
static data LONG rvalue;
static data CHAR currtoken;
static data CHAR lasttoken;
static data CHAR lastpress;
static xdata CHAR outputbuffer[MAX_DISPLAY_CHAR];
VOID main (VOID)
//Initialise our variables and call the
//Assembly routine to initialise the LCD display.
{ lvalue = 0;
rvalue = 0;
currtoken = ‘=‘;
lasttoken = ‘0‘;
initialise(); // Initialize the LCD
calc_output(OK);
calc_evaluate();
}
VOID calc_evaluate()
{ CHAR data key;
INT data i;
CHAR xdata number[MAX_DISPLAY_CHAR];
CHAR xdata *bufferptr;
// Clear the buffer before we start.
for (i = 0; i <= MAX_DISPLAY_CHAR; i++)
{ number[i] = ‘ ‘;
}
bufferptr = number;
for (;;)
{ key = calc_getkey();
if (calc_testkey(key))
// Key test positive for digit so we read it into the
// buffer and then write the buffer to the screen/LCD.
// Size limit the number of digits - allow for termination
// and possible negative results.
{ if (bufferptr != &number[MAX_DISPLAY_CHAR - 2])
{ *bufferptr = key;
calc_display(number);
bufferptr++;
}
}
else
// Key is an operator so pass it to the function handlers.
// If we are just after startup or cancel then assign to lvalue
// otherwise assign to rvalue.
{
//Assign the value.
if (lasttoken == ‘0‘)
{ lvalue = calc_asciidec (number);}
else
{ rvalue = calc_asciidec (number);}
//Clear the number buffer.
bufferptr = number;
for (i = 0;i <= MAX_DISPLAY_CHAR; i++)
{ number[i] = ‘ ‘; }
//Process the Operator.
currtoken = key;
if (currtoken == ‘C‘)
{ calc_opfunctions(currtoken); }
else
{ calc_opfunctions(lasttoken); }
// Clear the outputbuffer for reuse on next operation.
for (i = 0;i <= MAX_DISPLAY_CHAR;i++)
{ outputbuffer[i] = ‘ ‘;}
bufferptr = number;
// Handle the equals operation here for brevity.
// All we need do is preserve the previous operator in
// lasttoken.
if (currtoken != 0x3D) lasttoken = currtoken;
}
lastpress = key;
}
}
VOID calc_opfunctions (CHAR token)
//
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1808 2011-01-07 12:47 C51 Calculator\8051 Calculator.vsmp
文件 6327 2011-01-07 12:47 C51 Calculator\calc
文件 7998 2011-01-07 12:47 C51 Calculator\calc.c
文件 176033 2011-01-07 12:47 C51 Calculator\calc.DSN
文件 1467 2011-01-07 12:47 C51 Calculator\Calc.h
文件 5245 2011-01-07 12:47 C51 Calculator\calc.hex
文件 1185 2013-05-06 20:16 C51 Calculator\CALC.Opt
文件 231 2013-05-06 22:15 C51 Calculator\calc.plg
文件 1038 2013-05-18 18:29 C51 Calculator\calc.PWI
文件 2016 2013-05-06 20:16 C51 Calculator\CALC.Uv2
....... 1016 2011-01-07 12:47 C51 Calculator\CALC_Opt.Bak
....... 1724 2011-01-07 12:47 C51 Calculator\CALC_Uv2.Bak
文件 13748 2011-01-07 12:47 C51 Calculator\Debug\DEBUG.OMF
目录 0 2013-05-05 11:03 C51 Calculator\Debug
文件 2315 2011-01-07 12:47 C51 Calculator\KEYPAD.ASM
文件 7336 2011-01-07 12:47 C51 Calculator\keypad.LST
文件 2107 2011-01-07 12:47 C51 Calculator\LCD.ASM
文件 6566 2011-01-07 12:47 C51 Calculator\lcd.LST
目录 0 2013-05-18 18:29 C51 Calculator
----------- --------- ---------- ----- ----
238160 19
- 上一篇:易语言:满屏爬苍蝇原码
- 下一篇:[scratch]打击新型冠状病毒.sb3
相关资源
- QQ音乐源码
-
电池 SOC 估算 simuli
nk·模型 - 程序员的简历模版
- 东华his表结构
-
自抗扰控制器simuli
nk仿真 - 手把手教你写专利申请书/如何申请专
- 2019最新黑马程序员前端39期全套视频
- ssm框架登录注册demo
- 力软敏捷开发框架V7.0开发文档
- Greenfoot小游戏合辑
- .NET WinForm 和 WPF 的UI界面库,收集整合
- 联想刷bios‘工具
- MFC串口通信
- 涉密计算机清理保密检查工具
- 千锋elasticsearch视频教程带笔记
- 基于labview的变声器
- STM32 电子密码锁设计,LCD12864显示
- RK3399 DEMO官方原厂 PCB 原理图以及周边
- 黎曼几何初步 伍鸿熙
- STM32 LCD12864并口驱动实验
- 简单的ssh框架实现增删改查
- 医院后勤管理系统
- 8086交通灯 Proteus原理图及程序
- 云计算概述PPT128419
- MQTT推送Demo
- 电磁场与电磁波 谢处方
- 完整的雷达系统仿真程序
- st foc 2.0 中文手册
- 学生学籍管理系统web
- QQ盗号源码(可用)
评论
共有 条评论